Pentest (Penetration Testing)
Đây là bài viết đầu tiên trong chuỗi bài về PenTest (Penetration Testing) mà mình sẽ chia sẻ trên blog. Mình sẽ đi sâu vào các khái niệm cơ bản, quy trình thực hiện và các tiêu chuẩn chuyên sâu trong lĩnh vực này. Hi vọng những kiến thức này sẽ giúp bạn có cái nhìn tổng quan và chi tiết hơn về thế giới của kiểm thử xâm nhập.
Pentest (Penetration Testing) là gì?
- Pentest (Kiểm thử xâm nhập) là quá trình tìm kiếm, đánh giá và khai thác các lỗ hổng bảo mật trong ứng dụng hoặc hệ thống của khách hàng.
- Việc truy cập và khai thác lỗ hổng trong pentest là một công việc mang tính thiết thực, đòi hỏi người thực hiện (pentester) phải tuân thủ nghiêm ngặt các nguyên tắc đạo đức nghề nghiệp.
- Mục đích cốt lõi của pentest là kiểm tra và phân tích độ hiệu quả của các biện pháp an ninh, từ đó bảo vệ dữ liệu của tổ chức. Pentester sẽ sử dụng các công cụ, kỹ thuật và tư duy tương tự như một hacker thực thụ để mô phỏng lại các kịch bản tấn công thực tế.
Vấn đề đạo đức trong PenTest
- Trong thế giới an toàn thông tin, hacker được phân thành 3 loại chính dựa trên lăng kính đạo đức và mục đích hoạt động:
- Hacker mũ trắng (White hat): Những chuyên gia bảo mật được coi là “người tốt”. Họ hoạt động hợp pháp, được cấp phép và sử dụng kỹ năng của mình để tìm ra lỗ hổng nhằm vá lỗi, bảo vệ hệ thống cho các tổ chức.
- Hacker mũ xám (Grey hat): Những cá nhân hoạt động ở ranh giới giữa trắng và đen. Họ thường xâm nhập hệ thống để tìm lỗi (đôi khi không có sự cho phép trước), sau đó thông báo cho chủ sở hữu để khắc phục, nhưng thỉnh thoảng có thể vi phạm các chuẩn mực pháp lý.
- Hacker mũ đen (Black hat): Những tội phạm mạng. Họ xâm nhập trái phép nhằm mục đích phá hoại, đánh cắp dữ liệu hoặc trục lợi tài chính gây thiệt hại cho các tổ chức và cá nhân.
- ROE (Rules Of Engagement - Quy tắc tham gia): Là văn bản thỏa thuận bắt buộc phải có trước khi pentester tiến hành đánh giá hệ thống. Tài liệu này định hình ranh giới của cuộc tấn công, bao gồm:
- Permission (Quyền): Sự cho phép chính thức bằng văn bản từ chủ sở hữu hệ thống.
- Test Scope (Phạm vi thử nghiệm): Xác định rõ các mục tiêu (IP, Domain, hệ thống nào) được phép và không được phép tấn công.
- Rules (Quy tắc): Quy định các kỹ thuật, công cụ được phép sử dụng và thời gian tiến hành để tránh gây gián đoạn dịch vụ (Downtime).
Black-box, White-box, Grey-box trong PenTest
Chúng ta có 3 phương pháp tiếp cận chính trong quá trình kiểm thử xâm nhập:
- Kiểm tra Black-box (Hộp đen): + Pentester đóng vai một kẻ tấn công từ bên ngoài, không được cung cấp bất kỳ thông tin nào về kiến trúc mạng, mã nguồn (source code) hay hoạt động bên trong của hệ thống.
- Quá trình này chủ yếu tập trung vào việc đánh giá các bề mặt tấn công công khai, kiểm tra các chức năng và cách thức tương tác của ứng dụng với người dùng.
- Kiểm tra Grey-box (Hộp xám):
- Đây là phương pháp phổ biến nhất, kết hợp giữa Black-box và White-box. Pentester được cung cấp một phần thông tin về hệ thống (ví dụ: tài khoản user thông thường, sơ đồ kiến trúc cơ bản).
- Mục đích là để đẩy nhanh quá trình tìm kiếm lỗ hổng trong các luồng xử lý nghiệp vụ, kiểm tra xem một người dùng có quyền hạn thấp có thể khai thác hệ thống sâu đến đâu.
- Kiểm tra White-box (Hộp trắng): + Pentester được cung cấp toàn quyền truy cập vào thông tin hệ thống, bao gồm cả mã nguồn, cấu hình máy chủ và sơ đồ mạng chi tiết.
- Đòi hỏi việc kiểm tra toàn diện từ cấu trúc code đến logic bên trong nhằm phát hiện các lỗ hổng ẩn sâu mà phương pháp Black-box khó tiếp cận được.
Quy trình Pentest cơ bản
Performing reconnaissance (Thu thập thông tin)
Pentester trong vai một người dùng ngoài mạng bình thường có mục tiêu là thu thập càng nhiều thông tin về server mục tiêu càng tốt thông qua OSINT hoặc các công cụ như nmap, dirsearch, gobuster, v.v. Nhằm trả lời các câu hỏi:
- IP của server mục tiêu là bao nhiêu? Máy có đang online không?
- Server đang chạy hệ điều hành (OS) nào?
- Có bao nhiêu port đang mở, port nào đang bị tường lửa chặn (filtered)?
- Các dịch vụ đang chạy trên server là gì và version của chúng là bao nhiêu?
- Nếu server chạy website:
- Tên nền tảng (CMS) và version là gì?
- Front-end code có chứa thông tin nhạy cảm (API keys, comments) không?
- Có tìm được file
robots.txt, thư mục ẩn hay trang đăng nhập quản trị không?
- Nếu server chạy SMB/FTP:
- Có Share nào đang mở không? Tính năng đăng nhập
Anonymouscó được bật không? - Có thể đọc hoặc tải về các file lưu trữ bên trong không?
- Có Share nào đang mở không? Tính năng đăng nhập
Identifying vulnerabilities (Xác định lỗ hổng tiềm năng)
Từ những thông tin đã thu thập ở bước 1, pentester sẽ phân tích, mô hình hóa rủi ro và xác định các vector tấn công khả thi nhất, ví dụ:
- Lỗi cấu hình: Mật khẩu mặc định (Default login), hở port nguy hiểm.
- Lỗ hổng ứng dụng web: SQL Injection, Local File Inclusion (LFI), XSS.
- Lỗ hổng hệ thống: Command Injection, các mã lỗi CVE đã được công bố cho version dịch vụ đang dùng.
- Tấn công Brute-force / Dictionary attack vào các trang đăng nhập.
Exploiting vulnerabilities (Tiến hành khai thác)
Tiến hành tấn công vào các lỗ hổng đã xác định. Tùy thuộc vào mức độ nghiêm trọng của lỗi, pentester có thể lấy được quyền thực thi mã từ xa (RCE) để mở giao diện dòng lệnh (Reverse Shell) điều khiển máy nạn nhân, hoặc ít nhất là xâm nhập được vào Admin Dashboard của nền tảng ứng dụng.
Privileges escalation (Leo thang đặc quyền)
Sau khi xâm nhập thành công, pentester thường chỉ có được quyền của một user tiêu chuẩn (ví dụ: www-data). Nhiệm vụ tiếp theo là khai thác các lỗ hổng trong hệ điều hành hoặc cấu hình sai (misconfiguration) để leo thang lên quyền quản trị cao nhất (root trên Linux hoặc SYSTEM/Administrator trên Windows).
Gathering information (Thu thập thông tin nội mạng)
Khi đã nắm quyền root, nếu phạm vi (Scope) cho phép đánh giá cả mạng nội bộ, pentester sẽ sử dụng server vừa chiếm được làm bàn đạp. Quá trình thu thập thông tin được lặp lại nhưng với góc nhìn từ bên trong mạng lưới (Internal Network).
Creating Pivot point (Tạo hệ thống tấn công nội mạng)
Pentester thiết lập các kỹ thuật Pivoting (ví dụ: SSH Tunneling, Proxychains) để định tuyến các công cụ tấn công từ máy tính cá nhân xuyên qua server đã bị xâm nhập, nhằm tấn công các máy chủ khác nằm sâu bên trong mạng nội bộ mà internet bên ngoài không thể truy cập trực tiếp.
Cleaning up (Dọn dẹp dấu vết)
Sau khi hoàn thành đợt kiểm thử, pentester bắt buộc phải gỡ bỏ toàn bộ các công cụ, mã độc, backdoor đã cài đặt, xóa các tài khoản đã tạo thêm và khôi phục hệ thống về trạng thái ban đầu.
Reporting (Báo cáo)
Lập báo cáo chi tiết mô tả quá trình pentest. Báo cáo cần nêu rõ cách thức tái tạo (PoC) lỗ hổng, đánh giá mức độ rủi ro đối với tổ chức và đề xuất các giải pháp khắc phục (patch/mitigation) cụ thể.
Các tiêu chuẩn Pentest chuyên sâu
1. Tiêu chuẩn thực thi kiểm thử xâm nhập (PTES)
PTES (Penetration Testing Execution Standard) cung cấp một khung làm việc toàn diện, đảm bảo tính nhất quán và chuyên nghiệp cho mọi đợt đánh giá bảo mật.
- Pre-engagement Interactions (Tương tác trước khi thực hiện): Ký kết NDA (Thỏa thuận bảo mật), xác định rõ Scope, thời gian thực hiện và phương pháp tiếp cận (Black/White/Grey-box).
- Intelligence Gathering (Thu thập thông tin): Tìm kiếm OSINT, thu thập IP, DNS, email nhân viên.
- Threat Modeling (Mô hình hóa mối đe dọa): Xác định tài sản giá trị nhất của tổ chức và lên kịch bản các hướng mà kẻ tấn công có thể nhắm tới.
- Vulnerability Analysis (Phân tích lỗ hổng): Kết hợp các công cụ quét tự động (Nessus) và kiểm tra thủ công để xác thực điểm yếu.
- Exploitation (Khai thác): Xuyên thủng các lớp phòng ngự (Bypass WAF/IDS) để lấy quyền truy cập hệ thống.
- Post-Exploitation (Hậu khai thác): Đánh giá mức độ ảnh hưởng bằng cách duy trì quyền truy cập (Persistence), trích xuất dữ liệu nhạy cảm hoặc đánh cắp hash mật khẩu.
- Reporting (Báo cáo): Cung cấp báo cáo rủi ro cho cấp quản lý và báo cáo kỹ thuật chi tiết để vá lỗi.
2. Quy trình kiểm thử ứng dụng Web theo OWASP WSTG v4.2
OWASP WSTG là bộ tài liệu cho việc pentest ứng dụng web, phân loại chi tiết từng thành phần cần kiểm tra:
- Information Gathering: Xác định kiến trúc web, Server, Framework và luồng hoạt động.
- Configuration & Deployment Management Testing: Kiểm tra file cấu hình (như
.env,.git), lỗi cấu hình CORS, thiết lập TLS/SSL. - Identity Management Testing: Đánh giá tính an toàn trong logic cấp phát tài khoản và quản lý danh tính (Role).
- Authentication Testing: Kiểm tra cơ chế đăng nhập, brute-force, tính năng khôi phục mật khẩu.
- Authorization Testing: Đánh giá phân quyền, tìm kiếm các lỗi như Directory Traversal hoặc IDOR.
- Session Management Testing: Kiểm tra tính an toàn của Cookie (cờ HttpOnly, Secure) và cơ chế quản lý Token (JWT).
- Input Validation Testing: Kiểm thử các vector chèn ép dữ liệu (SQLi, XSS, Command Injection).
- Error Handling Testing: Kiểm tra xem ứng dụng có trả về lỗi chứa thông tin nhạy cảm hay không.
- Business Logic Testing: Tìm kiếm lỗ hổng trong luồng xử lý nghiệp vụ, phá vỡ logic thông thường của hệ thống.
3. Phân tích chuyên sâu về Reconnaissance (Thu thập thông tin)
3.1. Passive Reconnaissance (Trinh sát Thụ động)
- Bản chất: Pentester đóng vai một người dùng internet bình thường, chỉ thu thập thông tin từ các nguồn dữ liệu công cộng. Mục tiêu sẽ không nhận thấy bất kỳ dấu vết tương tác nào từ phía bạn.
- Ví dụ thực tế: * Truy vấn cơ sở dữ liệu
WHOISđể lấy thông tin đăng ký domain.- Phân tích hồ sơ LinkedIn của nhân viên để suy đoán nền tảng công nghệ nội bộ.
- Dùng Wayback Machine (
archive.org) để lùng sục các endpoint, mã nguồn cũ chưa bị xóa hẳn.
- Công cụ thực hành (Kali Linux):
- whois / dig: Truy vấn DNS (
dig target.com ANY). - theHarvester: Thu thập email, subdomain từ các Search Engine lớn.
- Shodan: Công cụ tìm kiếm thiết bị IoT/Server bị hở port trên toàn cầu.
- whois / dig: Truy vấn DNS (
3.2. Active Reconnaissance (Trinh sát Chủ động)
- Bản chất: Tương tác trực tiếp với máy chủ mục tiêu. Bạn gửi các gói tin (TCP, UDP) đến hệ thống để phân tích phản hồi. Quá trình này mang lại thông tin cực kỳ chính xác nhưng sẽ để lại dấu vết trên hệ thống log, tường lửa (Firewall) hoặc IDS/IPS của nạn nhân.
- Ví dụ thực tế: * Quét toàn bộ 65.535 cổng mạng để lập bản đồ các dịch vụ đang mở.
- Dùng Wordlist để Brute-force dò tìm các thư mục ẩn trên Web Server (như
/admin_panel,/backup).
- Dùng Wordlist để Brute-force dò tìm các thư mục ẩn trên Web Server (như
- Công cụ thực hành (Kali Linux):
- Nmap: Trình quét mạng mạnh mẽ nhất.
- Ví dụ:
nmap -sC -sV -p- target.com(Quét toàn bộ port, tự động lấy version dịch vụ).
- Ví dụ:
- ffuf / Gobuster: Công cụ Fuzzing siêu tốc độ để dò thư mục ẩn.
- Ví dụ:
ffuf -w wordlist.txt -u http://target.com/FUZZ
- Ví dụ:
- Wappalyzer: EXT giúp phân tích nhanh các công nghệ đang chạy trên một trang web.
- Nmap: Trình quét mạng mạnh mẽ nhất.





