W01-L04: Kiểm kê Tài sản (Asset Inventory), Nmap Tác động Thấp và Đối chiếu Service Baseline

Enterprise Pentest Lead Curriculum
Cybersecurity Academy
2026
Abstract
Giáo trình thực hành chuyên sâu dành cho Enterprise Penetration Testing Technical Lead về phương pháp luận kiểm kê tài sản và lập đường cơ sở dịch vụ (Service Baseline) trong môi trường mạng cô lập. Bài học trình bày cơ chế khóa phạm vi bằng danh sách cho phép (Allowlist), tính toán ngân sách tốc độ rà quét tác động thấp (Nmap Low-Impact), mô hình hóa luồng dịch vụ đa tầng Client → Proxy → App → DB, và phương pháp đối chiếu kết quả rà quét bên ngoài với sự thật nền nội tại của hệ điều hành (Host Ground Truth) để xuất bản hồ sơ chuẩn Asset-Inventory.csv.
Keywords: Asset Inventory; Nmap Low-Impact Scanning; Allowlist Enforcement; Ground Truth Reconciliation; Service Baseline; Client-Proxy-App-DB Flow

1Sau mục này bạn sẽ làm được

2Cần biết trước

3Nối với các mục trước

Theo nhịp độ đào tạo 6 ngày/tuần của chương trình, nếu Ngày 1 (W01-L01) xây dựng nền tảng lý thuyết, Ngày 2 (W01-L02) dựng hạ tầng có hướng dẫn và Ngày 3 (W01-L03) thực hành thu thập lưu lượng thụ động, thì Ngày 4 (W01-L04) là bước nâng độ khó: chuyển sang tương tác chủ động có kiểm soát, kiểm tra điều kiện biên và bóc tách các trường hợp dương tính giả / âm tính giả (False Positives & False Negatives). Khi một Pentester chạy lệnh quét mạng từ máy F01-tester, kết quả trả về chỉ là "góc nhìn từ phía kẻ quan sát bên ngoài" (External Perspective). Một Technical Lead thực thụ không bao giờ dừng lại ở đầu ra của công cụ quét, mà phải đối chiếu góc nhìn bên ngoài đó với cấu hình socket thực tế bên trong từng máy chủ (Ground Truth) để trả lời câu hỏi kiến trúc: Tại sao có dịch vụ đang chạy mà máy quét không thấy? Tại sao cổng mở nhưng không phải là lỗ hổng? Và luồng dữ liệu thực sự đi từ Reverse Proxy vào ứng dụng và cơ sở dữ liệu nội bộ như thế nào? [12] [14] .

4Hiểu nhanh bằng ví dụ đời thường

Hãy hình dung công việc lập danh mục kiểm kê dịch vụ (Service Baseline & Ground Truth Reconciliation) giống như quy trình kiểm tra an ninh ban đêm tại một bệnh viện đa khoa. Người trưởng ca bảo vệ không được phép đạp cửa xông vào từng phòng hay bấm chuông báo cháy inh ỏi làm ảnh hưởng đến bệnh nhân đang cấp cứu; thay vào đó, họ phải cầm danh sách các phòng được phép kiểm tra (Allowlist), đi nhẹ nhàng từng bước và gõ cửa từng phòng với nhịp độ chậm rãi, lịch sự (Nmap Low-Impact Scan).

Khi gõ cửa từ ngoài hành lang, người bảo vệ ghi nhận được ba trạng thái: cửa mở và nhân viên trực trả lời tên khoa phòng (open + service banner), cửa khóa chốt nhưng có tiếng vọng lại báo phòng đang trống (closed — phản hồi TCP RST), hoặc cửa cách âm hoàn toàn không có bất kỳ tiếng động nào (filtered — bị tường lửa chặn). Tuy nhiên, để lập báo cáo chính xác tuyệt đối trình ban giám đốc, người trưởng ca phải mang cuốn sổ ghi chép ngoài hành lang đó vào đối chiếu với sổ phân công trực nội bộ của Trưởng khoa (Host Ground Truth): nhờ đó mới phát hiện ra có những phòng xét nghiệm chuyên sâu chỉ có lối thông nội bộ từ phòng cấp cứu chứ không hề trổ cửa ra hành lang công cộng (tương đương các dịch vụ Application/Database chỉ lắng nghe trên địa chỉ nội bộ 127.0.0.1).

5Cơ chế và định nghĩa chính xác

5.1Cơ chế Khóa Phạm vi Bằng Danh sách Cho phép (Allowlist) và Danh sách Loại trừ (Excludelist)

Theo chuẩn kiểm thử kỹ thuật NIST SP 800-115 [1] và quy tắc an toàn của chương trình, mọi hoạt động thăm dò chủ động (Active Discovery) bắt buộc phải tuân thủ nguyên tắc Chỉ kiểm thử mục tiêu trong danh sách cấp phép (Strict Allowlist Scoping). Việc gõ trực tiếp dải mạng CIDR trên dòng lệnh (ví dụ gõ nhầm 192.168.5.0/24 thay vì 192.168.56.0/24) là một trong những nguyên nhân hàng đầu gây ra sự cố vi phạm phạm vi (Scope Violation) trong thực tế doanh nghiệp.

Để loại bỏ rủi ro sai sót con người, quy trình chuẩn của Technical Lead yêu cầu thực thi ba chốt khóa kỹ thuật trước khi khởi chạy Nmap [3] : 1. Tệp Danh sách Đích Cho phép (allowlist.txt nạp qua cờ -iL): Tệp văn bản liệt kê tường minh từng địa chỉ IP máy chủ mục tiêu đã được phê duyệt trong lab (cụ thể trong Safe Lab F01 chỉ gồm 2 địa chỉ mục tiêu là 192.168.56.20 và 192.168.56.30). 2. Tệp Danh sách Loại trừ Bảo vệ (excludelist.txt nạp qua cờ --exclude-file): Liệt kê rõ địa chỉ giao diện của máy chủ Host (192.168.56.1), địa chỉ của chính máy kiểm thử (192.168.56.10) và các địa chỉ mạng/quảng bá (.0, .255) để đảm bảo Nmap không bao giờ gửi gói tin thăm dò chạm vào máy chủ vật lý. 3. Vô hiệu hóa Phân giải DNS Ngược Tự động (cờ -n): Mặc định, Nmap sẽ gửi truy vấn phân giải tên miền ngược (Reverse DNS PTR query) cho mọi địa chỉ IP được quét. Nếu cấu hình DNS có sơ hở, các truy vấn PTR này có thể thoát ra máy chủ DNS bên ngoài. Việc bật cờ -n (Never do DNS resolution) khóa chặt hoàn toàn hành vi phát sinh lưu lượng phụ trợ này.

5.2Cơ chế Rà quét Tác động Thấp (Nmap Low-Impact), Kiểm soát Tải và 6 Trạng thái Cổng

Các nghiên cứu thực nghiệm về quét cổng mạng diện rộng và bảo vệ hệ thống điều khiển/dịch vụ nhạy cảm của Song và cộng sự [10] [11] cùng Foote và cộng sự [13] chứng minh rằng việc phát gói tin thăm dò với tốc độ cao không kiểm soát dễ làm tràn bảng trạng thái kết nối (conntrack table) của tường lửa hoặc làm treo các tiến trình dịch vụ đơn luồng (single-threaded daemons) [17] . Do đó, kỹ sư kiểm thử phải làm chủ cơ chế hoạt động của từng phương thức quét và định lượng chính xác tải lưu lượng trước khi nhấn phím thực thi: - TCP SYN Scan (-sS — Half-Open Scan, yêu cầu quyền root): Nmap tự đóng gói khung tin thô (raw packet) gửi gói [SYN]. Nếu nhận lại [SYN, ACK], Nmap lập tức gửi gói [RST] để hủy kết nối ngay trước khi hoàn tất bước thứ 3 của bắt tay, giúp giảm tải cho tầng ứng dụng đích. - TCP Connect Scan (-sT — Full-Connect Scan, quyền người dùng thường): Nmap gọi hàm hệ thống connect() của nhân hệ điều hành để hoàn tất trọn vẹn bắt tay 3 bước (SYN → SYN-ACK → ACK), sau đó đóng kết nối ngay. Phương thức này an toàn, tương thích với mọi môi trường ảo hóa không cho phép tạo raw socket, và để lại nhật ký kết nối rõ ràng trên máy chủ phục vụ việc đối chiếu kiểm toán. - Service & Version Detection Tác động Thấp (-sV --version-light): Thay vì gửi toàn bộ hàng chục gói thăm dò chuyên sâu (mức cường độ mặc định 7), tùy chọn --version-light giới hạn cường độ thăm dò ở mức 2 (--version-intensity 2), chỉ gửi các gói thăm dò có xác suất khớp cao nhất (như HTTP GET /, TLS ClientHello, SSH/SMB banner) để nhận diện chính xác tên dịch vụ và phiên bản mà không gây treo ứng dụng.

Để kiểm soát chặt chẽ tốc độ phát gói, nếu gọi NhostsN_{\text{hosts}} là số lượng máy chủ trong allowlist.txt, NportsN_{\text{ports}} là số lượng cổng kiểm tra trên mỗi máy, ρretry\rho_{\text{retry}} là tỷ lệ phát lại trung bình (khống chế bằng --max-retries 1), Rmax_rateR_{\text{max\_rate}} là giới hạn số gói tin tối đa mỗi giây (--max-rate, gói/s) và Lˉprobe\bar{L}_{\text{probe}} là kích thước trung bình của một gói thăm dò (≈66 byte\approx 66\text{ byte}), thì tổng thời gian quét ước tính TscanT_{\text{scan}} và băng thông tiêu thụ tối đa BkbpsB_{\text{kbps}} được xác định bởi hệ phương trình:

Tscan≈Nhosts×Nports×(1+ρretry)Rmax_rate,Bkbps=Rmax_rate×Lˉprobe×81000T_{\text{scan}} \approx \frac{N_{\text{hosts}} \times N_{\text{ports}} \times \left( 1 + \rho_{\text{retry}} \right)}{R_{\text{max\_rate}}}, \quad B_{\text{kbps}} = \frac{R_{\text{max\_rate}} \times \bar{L}_{\text{probe}} \times 8}{1000}
(1)

Áp dụng hệ phương trình Eq. (1) cho kịch bản Safe Lab F01: khi quét Nhosts=2N_{\text{hosts}} = 2 máy chủ mục tiêu (.20 và .30) trên tập Nports=100N_{\text{ports}} = 100 cổng dịch vụ phổ biến nhất (-F hoặc danh sách cổng chỉ định) với cấu hình tác động thấp R_{\text{max\_rate}} = 15\text{ gói/s}, ρretry=0.05\rho_{\text{retry}} = 0.05, thời gian hoàn tất phần quét cổng chỉ mất Tscan≈(2×100×1.05)/15=14 giaˆyT_{\text{scan}} \approx (2 \times 100 \times 1.05) / 15 = 14\text{ giây}, và băng thông đỉnh điểm chỉ ở mức Bkbps=(15×66×8)/1000=7.92 kbpsB_{\text{kbps}} = (15 \times 66 \times 8) / 1000 = 7.92\text{ kbps} (nhỏ hơn một phần nghìn dung lượng liên kết ảo hóa), đảm bảo tuyệt đối an toàn vận hành.

Dựa trên phản hồi gói tin nhận được ở tầng vận chuyển (RFC 9293 [6] ) và tầng mạng (ICMP RFC 792 [7] ), bộ máy phân tích của Nmap xếp mỗi cổng vào một trong 6 trạng thái chuẩn hóa: 1. open (Mở): Mục tiêu phản hồi gói TCP [SYN, ACK] (đối với quét TCP) hoặc trả về gói dữ liệu UDP hợp lệ, chứng tỏ có tiến trình ứng dụng đang lắng nghe và tường lửa cho phép kết nối đi qua. 2. closed (Đóng): Mục tiêu phản hồi gói TCP [RST] (hoặc ICMP Port Unreachable Type 3 Code 3 đối với UDP), chứng tỏ gói tin chạm tới ngăn xếp mạng của hệ điều hành đích nhưng hiện không có tiến trình nào gắn (bind) vào cổng đó trên giao diện mạng ngoài. 3. filtered (Bị lọc bởi Tường lửa): Không nhận được bất kỳ phản hồi nào sau khi hết thời gian chờ (timeout do tường lửa áp dụng chính sách DROP), hoặc nhận được thông điệp ICMP Administratively Prohibited (Type 3 Code 1, 2, 9, 10, 13). 4. unfiltered (Không bị lọc): Trạng thái đặc thù khi chạy TCP ACK Scan (-sA): gói tin chạm tới máy đích và nhận về [RST], cho biết tường lửa không chặn cổng đó nhưng chưa xác định được cổng đang mở hay đóng. 5. open|filtered (Mở hoặc Bị lọc): Xảy ra khi quét các giao thức không trả lời xác nhận nếu không đúng định dạng ứng dụng (như quét UDP -sU, FIN, NULL, Xmas): việc không có phản hồi có thể do tường lửa đã hủy gói tin hoặc do dịch vụ đang mở nhưng im lặng. 6. closed|filtered (Đóng hoặc Bị lọc): Xảy ra khi Nmap không thể phân biệt giữa cổng đóng và cổng bị tường lửa chặn (ví dụ trong quét IP ID Idle Scan).

5.3Đối chiếu Quan sát Rà quét Ngoài (External Scan) với Sự thật Nền Nội tại (Host Ground Truth)

Trong phương pháp luận kiểm kê tài sản hiện đại [12] [14] , dữ liệu thu thập từ công cụ quét mạng bên ngoài luôn phải được đặt lên bàn cân đối chiếu với *Sự thật Nền Nội tại (Host Ground Truth)* trích xuất trực tiếp từ bảng quản lý socket của nhân hệ điều hành mục tiêu (sử dụng lệnh sudo ss -tulnp trên Linux hoặc Get-NetTCPConnection -State Listen trên Windows [5] ).

Nếu gọi EscanE_{\text{scan}} là tập hợp các cổng được Nmap ghi nhận ở trạng thái open khi quét từ máy kiểm thử (192.168.56.10), và GhostG_{\text{host}} là tập hợp toàn bộ các socket đang ở trạng thái LISTEN (hoặc UNCONN với UDP) bên trong máy chủ mục tiêu (được phân rã thành hai tập con bất giao: Ghost(ext)G_{\text{host}}^{(\text{ext})} gồm các socket gắn vào địa chỉ ngoài 0.0.0.0 / :: / 192.168.56.x, và Ghost(lo)G_{\text{host}}^{(\text{lo})} gồm các socket chỉ gắn vào giao diện vòng lặp nội bộ 127.0.0.1 / ::1), thì phép đối chiếu kiểm toán xác định hai tập hợp độ lệch cốt lõi:

Δloopback=Ghost(lo)∖Escan,Δfirewall=Ghost(ext)∖Escan\Delta_{\text{loopback}} = G_{\text{host}}^{(\text{lo})} \setminus E_{\text{scan}}, \quad \Delta_{\text{firewall}} = G_{\text{host}}^{(\text{ext})} \setminus E_{\text{scan}}
(2)

Phương trình Eq. (2) mang lại hai kết luận kiến trúc cực kỳ giá trị cho Technical Lead: - Tập độ lệch dịch vụ nội bộ Δloopback\Delta_{\text{loopback}}: Mọi dịch vụ thuộc Ghost(lo)G_{\text{host}}^{(\text{lo})} (ví dụ máy chủ ứng dụng backend chạy tại 127.0.0.1:8080 hoặc cơ sở dữ liệu PostgreSQL tại 127.0.0.1:5432) đều đang hoạt động trên máy chủ nhưng hoàn toàn vô hình trước Nmap (Nmap nhận về trạng thái closed khi thử chạm vào cổng 8080 hoặc 5432 trên IP 192.168.56.20). Đây không phải là lỗi của Nmap, mà là bằng chứng chứng minh dịch vụ đã được thu hẹp bề mặt tấn công đúng chuẩn (Localhost Binding Hardening). - Tập độ lệch tường lửa bảo vệ Δfirewall\Delta_{\text{firewall}}: Nếu một dịch vụ gắn trên tất cả các giao diện (0.0.0.0:3389 hoặc 0.0.0.0:22) thuộc Ghost(ext)G_{\text{host}}^{(\text{ext})} nhưng lại không xuất hiện trong EscanE_{\text{scan}} (mà hiển thị là filtered), điều đó chứng minh tường lửa nội bộ trên máy chủ (nftables/ufw hoặc Windows Defender Firewall) đang chặn đứng kết nối từ dải mạng kiểm thử.

5.4Mô hình hóa Luồng Dịch vụ Đa tầng Client → Proxy → App → DB và Nhận diện False Positives

Một trong những yêu cầu cốt lõi của Tuần 1 trong chương trình là giải thích và mô hình hóa chính xác luồng kiến trúc 4 thành phần Client → Proxy → App → DB thông qua việc kết hợp kết quả quét Nmap bên ngoài với bảng socket Ground Truth bên trong máy chủ. Trên máy chủ F01-linux-srv (192.168.56.20), thay vì phơi bày trực tiếp máy chủ ứng dụng và cơ sở dữ liệu ra mạng LAN, kiến trúc chuẩn doanh nghiệp chỉ mở cổng đón kết nối tại tầng Reverse Proxy (Nginx lắng nghe trên 192.168.56.20:443), sau đó chuyển tiếp yêu cầu qua giao diện loopback nội bộ tới tầng Ứng dụng (Gunicorn/Node/App tại 127.0.0.1:8080) và tầng Cơ sở dữ liệu (PostgreSQL tại 127.0.0.1:5432). Toàn bộ sự khác biệt giữa tầm nhìn của máy quét ngoài và kiến trúc nội tại được thể hiện trong sơ đồ Figure 1 :

F01-win-trial (192.168.56.30)
F01-linux-srv (192.168.56.20) — Multi-Tier Target
F01-tester (192.168.56.10)
Giao diện Ngoài (192.168.56.20 / 0.0.0.0)
Giao diện Loopback Cô lập (127.0.0.1 Only)
1. Thấy OPEN + Banner
2. Thấy OPEN + TLS/Nginx
3. Thấy FILTERED (Drop)
4. Thấy CLOSED (RST)
Vì chỉ bind 127.0.0.1
Chuyển tiếp HTTP nội bộ
(X-Forwarded-For)
Truy vấn SQL nội bộ
(Unix Socket / 127.0.0.1)
5. Thấy OPEN + SMB
Windows SMB2/3
TCP :445 (OPEN)
Remote Desktop
TCP :3389 (FILTERED)
Internal App Server
127.0.0.1:8080 (CLOSED to External)
PostgreSQL Database
127.0.0.1:5432 (CLOSED to External)
Unbound DNS
UDP/TCP :53 (OPEN)
Nginx Reverse Proxy
TCP :443 TLS 1.3 (OPEN)
OpenSSH Daemon
TCP :22 (FILTERED by nftables)
Nmap Low-Impact Scanner
(--max-rate 15 -sT -sV)
Mermaid Source
flowchart LR
    subgraph Tester["F01-tester (192.168.56.10)"]
        Nmap["Nmap Low-Impact Scanner<br/>(--max-rate 15 -sT -sV)"]
    end
    subgraph LinuxSrv["F01-linux-srv (192.168.56.20) — Multi-Tier Target"]
        subgraph ExtBind["Giao diện Ngoài (192.168.56.20 / 0.0.0.0)"]
            DNS["Unbound DNS<br/>UDP/TCP :53 (OPEN)"]
            Proxy["Nginx Reverse Proxy<br/>TCP :443 TLS 1.3 (OPEN)"]
            SSH["OpenSSH Daemon<br/>TCP :22 (FILTERED by nftables)"]
        end
        subgraph LoBind["Giao diện Loopback Cô lập (127.0.0.1 Only)"]
            App["Internal App Server<br/>127.0.0.1:8080 (CLOSED to External)"]
            DB["PostgreSQL Database<br/>127.0.0.1:5432 (CLOSED to External)"]
        end
    end
    subgraph WinSrv["F01-win-trial (192.168.56.30)"]
        SMB["Windows SMB2/3<br/>TCP :445 (OPEN)"]
        RDP["Remote Desktop<br/>TCP :3389 (FILTERED)"]
    end
    Nmap -->|"1. Thấy OPEN + Banner"| DNS
    Nmap -->|"2. Thấy OPEN + TLS/Nginx"| Proxy
    Nmap -.->|"3. Thấy FILTERED (Drop)"| SSH
    Nmap -.->|"4. Thấy CLOSED (RST)<br/>Vì chỉ bind 127.0.0.1"| App
    Proxy -->|"Chuyển tiếp HTTP nội bộ<br/>(X-Forwarded-For)"| App
    App -->|"Truy vấn SQL nội bộ<br/>(Unix Socket / 127.0.0.1)"| DB
    Nmap -->|"5. Thấy OPEN + SMB"| SMB
Figure 1: Đối chiếu Tầm nhìn Quét Ngoài (Nmap External View) và Luồng Nội tại Client → Proxy → App → DB (Ground Truth)

6Ví dụ có lời giải: Đối chiếu Kết quả Nmap Low-Impact với Ground Truth trên 3 Máy ảo F01

Trong ví dụ có lời giải này, chúng ta thực hiện phiên kiểm kê dịch vụ có kiểm soát từ F01-tester (192.168.56.10) hướng tới hai mục tiêu trong allowlist.txt là F01-linux-srv (192.168.56.20) và F01-win-trial (192.168.56.30) trên tập các cổng trọng yếu (22, 53, 80, 135, 139, 443, 445, 3389, 5432, 8080), sau đó đối chiếu từng dòng với đầu ra của lệnh ss -tulnp (trên .20) và Get-NetTCPConnection (trên .30).

Kết quả đối chiếu toàn diện giữa quan sát bên ngoài của Nmap và sự thật nền nội tại của hệ điều hành được trình bày chi tiết tại bảng Table 1 dưới đây:

Table 1: Bảng Đối chiếu Kết quả Quét Nmap Tác động Thấp (External Scan) với Sự thật Nền (Host Ground Truth) trong Safe Lab F01
Máy chủ & IPCổng / Giao thứcKết quả Nmap Từ .10 (External View)Sự thật Nền Trên Host (ss / Get-NetTCPConnection)Phân loại Đối chiếu (Reconciliation)Giải thích Nguyên nhân Kỹ thuật & Quyết định Baseline
F01-linux-srv (192.168.56.20)53 / TCP & UDPopen (domain, Unbound 1.19)LISTEN 192.168.56.20:53 (unbound, PID 812)Khớp (True Positive — Exposed)Dịch vụ DNS nội bộ phục vụ lab được gắn đúng vào IP .20; hoạt động đúng thiết kế.
F01-linux-srv (192.168.56.20)443 / TCPopen (ssl/http, nginx 1.24.0 Ubuntu)LISTEN 0.0.0.0:443 (nginx, PID 940)Khớp (True Positive — Reverse Proxy)Điểm tiếp nhận TLS 1.3 ở biên ứng dụng; phiên bản 1.24.0 là gói Ubuntu LTS đã vá backport, không phải lỗ hổng.
F01-linux-srv (192.168.56.20)22 / TCPfiltered (no-response)LISTEN 0.0.0.0:22 (sshd, PID 780)Độ lệch Tường lửa (Δfirewall\Delta_{\text{firewall}})Tiến trình sshd đang chạy nhưng quy tắc nftables trên .20 chặn (drop) gói SYN từ .10.
F01-linux-srv (192.168.56.20)8080 / TCPclosed (reset ttl 64)LISTEN 127.0.0.1:8080 (python3/gunicorn, PID 1024)Độ lệch Loopback (Δloopback\Delta_{\text{loopback}})Tầng App chỉ gắn vào 127.0.0.1, chỉ nhận lưu lượng chuyển tiếp từ Nginx .20:443; cô lập đúng chuẩn.
F01-linux-srv (192.168.56.20)5432 / TCPclosed (reset ttl 64)LISTEN 127.0.0.1:5432 (postgres, PID 1105)Độ lệch Loopback (Δloopback\Delta_{\text{loopback}})Cơ sở dữ liệu PostgreSQL chỉ lắng nghe nội bộ cho tầng App truy vấn; không phơi bày ra mạng LAN.
F01-win-trial (192.168.56.30)135 / TCPopen (msrpc, Microsoft Windows RPC)Listen 0.0.0.0:135 (svchost.exe, PID 916)Khớp (True Positive — OS Baseline)Dịch vụ RPC Endpoint Mapper mặc định của Windows Server Evaluation; cần ghi vào baseline để kiểm soát phạm vi.
F01-win-trial (192.168.56.30)445 / TCPopen (microsoft-ds, SMBv2/v3)Listen 0.0.0.0:445 (System, PID 4)Khớp (True Positive — OS Baseline)Dịch vụ chia sẻ tệp SMB của Windows; cần kiểm tra chính sách bắt buộc ký số (SMB Signing) ở các tuần sau.
F01-win-trial (192.168.56.30)3389 / TCPfiltered (no-response)Listen 0.0.0.0:3389 (TermService, PID 1420)Độ lệch Tường lửa (Δfirewall\Delta_{\text{firewall}})Dịch vụ RDP đang chạy nhưng bị Windows Defender Firewall chặn đối với mạng không thuộc nhóm quản trị.

Từ bảng đối chiếu Table 1 , chúng ta rút ra được bức tranh kiến trúc toàn diện mà không một công cụ quét đơn lẻ nào có thể tự động nhìn thấy: máy chủ .20 vận hành đầy đủ mô hình 3 tầng Nginx Reverse Proxy (:443) → Gunicorn App (127.0.0.1:8080) → PostgreSQL DB (127.0.0.1:5432), trong đó hai tầng phía sau đã được bảo vệ hoàn hảo bằng ranh giới gắn địa chỉ vòng lặp nội bộ (\Delta_{\text{loopback}}).

7Tự làm tiếp: Viết Lệnh Nmap Tác động Thấp Có Allowlist và Trích xuất Socket Ground Truth

Bài tập thực hành: Bạn cần thực hiện quét kiểm kê các cổng 22,53,80,135,139,443,445,3389,5432,8080 chỉ trên các địa chỉ trong tệp allowlist.txt, loại trừ các địa chỉ trong excludelist.txt, tắt phân giải DNS ngược, sử dụng phương thức TCP Connect kết hợp dò phiên bản nhẹ và giới hạn tốc độ tối đa không vượt quá 15 gói tin mỗi giây. Sau đó, trên máy chủ Linux mục tiêu, bạn cần liệt kê toàn bộ các socket TCP/UDP đang lắng nghe ở dạng số kèm tên tiến trình. Hãy điền các tham số còn khuyết ___ vào đoạn mã dưới đây:

Kịch bản Nmap Low-Impact có Allowlist/Excludelist và lệnh trích xuất Ground Truth trên Linux (bash)
1# 1. Thực thi Nmap tác động thấp từ F01-tester với đầy đủ khóa phạm vi và giới hạn tốc độ
2nmap -n -Pn -sT -sV --version-light \
3 ___ allowlist.txt \
4 --exclude-file excludelist.txt \
5 -p 22,53,80,135,139,443,445,3389,5432,8080 \
6 -T2 ___ 15 --max-retries 1 \
7 -oA f01_service_baseline
8
9# 2. Trên máy chủ F01-linux-srv (192.168.56.20), trích xuất danh sách socket TCP/UDP đang LISTEN kèm PID/Process
10sudo ss ___

8Hiểu lầm thường gặp trong Kiểm kê Dịch vụ và Quét Cổng Mạng

Hiểu lầm 1: Cổng hiển thị là closed nghĩa là phần mềm dịch vụ đó chưa được cài đặtSai lầm Kiến trúc
Nhiều người thấy Nmap báo 5432/tcp closed liền kết luận máy chủ không chạy cơ sở dữ liệu PostgreSQL. Thực tế: Như đã chứng minh tại phương trình Eq. (2) và bảng Table 1 , dịch vụ PostgreSQL vẫn đang chạy và lắng nghe tích cực trên 127.0.0.1:5432 để phục vụ ứng dụng web nội bộ, nhưng từ chối kết nối đi vào từ card mạng ngoài 192.168.56.20.
Hiểu lầm 2: Bật cờ -A hoặc -T5 giúp kiểm kê nhanh và chính xác hơnRủi ro Gây Gián đoạn
Tùy chọn -A kích hoạt đồng thời dò hệ điều hành, quét phiên bản cường độ cao, chạy hàng loạt kịch bản NSE (có thể chứa các kịch bản gây biến đổi trạng thái) và -T5 (Insane timing) bắn gói tin dồn dập làm rớt gói và gây nghẽn dịch vụ mục tiêu. Trong quy trình kiểm kê cơ sở (Service Baseline), luôn ưu tiên cấu hình tường minh -sT -sV --version-light -T2 --max-rate.
Hiểu lầm 3: Số phiên bản trong Banner đủ để kết luận máy chủ dính lỗ hổng CVEFalse Positive Phổ biến
Khi thấy Nmap trả về Apache/2.4.52 (Ubuntu) hoặc OpenSSH 8.9p1 Ubuntu-3ubuntu0.10, các công cụ khớp chuỗi đơn giản thường báo hàng chục lỗi CVE nghiêm trọng. Thực tế: Nhóm bảo mật của Ubuntu/RedHat giữ nguyên số hiệu 2.4.52 hoặc 8.9p1 để đảm bảo tương thích ABI nhưng đã vá lỗi trong phần hậu tố bản dựng (-3ubuntu0.10). Phải kiểm chứng bằng gói cài đặt thực tế (dpkg -l / rpm -qa) hoặc thử nghiệm an toàn có kiểm soát.
Hiểu lầm 4: Cờ -Pn trong Nmap có nghĩa là máy chủ mục tiêu chắc chắn đang hoạt độngẢo giác Host Up
Cờ -Pn (Skip host discovery / Treat all hosts as online) ra lệnh cho Nmap bỏ qua bước ping thăm dò ban đầu và cứ thế gửi gói quét cổng tới mọi IP trong danh sách. Nếu quét một địa chỉ IP không hề tồn tại trong mạng mà có tường lửa nuốt gói tin, Nmap với cờ -Pn vẫn báo Host is up kèm toàn bộ các cổng ở trạng thái filtered. Do đó cần kiểm tra bảng ARP hoặc kết hợp xác minh thực tế.

9Nhìn tổng quan: Ma trận Giải thích 6 Trạng thái Cổng Nmap và Hồ sơ Tốc độ Rà quét

Để chuẩn hóa cách diễn giải kết quả quét cổng giữa các thành viên trong nhóm kiểm thử và tránh đưa ra nhận định sai lệch trong tệp Asset-Inventory.csv, bảng tổng hợp tại Table 2 quy định rõ cơ chế gói tin tầng thấp và ý nghĩa kiến trúc của từng trạng thái cổng:

Table 2: Ma trận Giải phẫu 6 Trạng thái Cổng của Nmap và Ý nghĩa Đối với Kiểm kê Tài sản
Trạng thái Cổng NmapPhản hồi Gói tin Nhận được (TCP / UDP / ICMP)Ý nghĩa ở Tầng Mạng & Hệ điều hànhHành động Kiểm chứng Tiếp theo của Technical Lead
openNhận TCP [SYN, ACK] hoặc gói phản hồi UDP hợp lệCó tiến trình đang LISTEN trên giao diện mạng và tường lửa cho phép đi quaThu thập phiên bản nhẹ (--version-light), đối chiếu PID trong Ground Truth và ghi vào Asset-Inventory.csv
closedNhận TCP [RST, ACK] hoặc ICMP Port Unreachable (Type 3 Code 3)Máy chủ đích đang hoạt động, tường lửa không chặn cổng nhưng không có dịch vụ gắn trên IP ngoàiKiểm tra ss -tulnp trên host xem dịch vụ có đang chạy ẩn trên 127.0.0.1 (Δloopback\Delta_{\text{loopback}}) hay không
filteredKhông có phản hồi (Timeout) hoặc nhận ICMP Administratively Prohibited (Code 1,2,9,10,13)Tường lửa trung gian hoặc tường lửa nội bộ trên host đã chặn (DROP/REJECT) gói thăm dòKiểm tra quy tắc tường lửa (nftables/ufw/Windows Firewall) và xác minh chính sách phân vùng mạng
unfilteredNhận TCP [RST] khi chạy quét TCP ACK (-sA)Gói tin đi qua được tường lửa để chạm tới host, nhưng chưa rõ cổng đang mở hay đóngKết hợp thêm quét -sT hoặc -sS nếu được phép để phân định trạng thái open hay closed
open|filteredKhông có phản hồi khi chạy quét UDP (-sU) hoặc FIN/NULL/XmasKhông thể phân biệt giữa việc tường lửa hủy gói tin hay dịch vụ UDP mở nhưng không trả lời gói rỗngGửi gói thăm dò đặc thù giao thức (ví dụ truy vấn DNS chuẩn bằng dig hoặc --version-light)
closed|filteredTrạng thái bất định trong quét IP ID Idle Scan (-sI)Không xác định được cổng đóng hay bị lọc qua máy trung gian (zombie host)Chuyển sang kiểm tra trực tiếp từ máy kiểm thử được cấp quyền trong cùng phân vùng lab

Cùng với việc đọc hiểu trạng thái cổng tại Table 2 , việc lựa chọn mẫu định thời (Timing Template) trong Nmap quyết định trực tiếp mức độ an toàn của ca kiểm thử như đối chiếu dưới đây:

So sánh Các Chế độ Định thời (Timing Templates) của Nmap trong Kiểm thử Doanh nghiệp
Tiêu chí Kỹ thuật-T0 / -T1 (Paranoid / Sneaky)-T2 (Polite — Chuẩn Low-Impact W01-L04)-T3 (Normal — Mặc định)-T4 / -T5 (Aggressive / Insane)
Khoảng cách Giữa các Gói thăm dòTừ 15 giây đến 5 phút mỗi góiTối thiểu 400 ms (kết hợp --max-rate 15)Tự động điều chỉnh theo RTT mạngBắn dồn dập song song, thời gian chờ cực ngắn
Nguy cơ Gây Nghẽn Dịch vụ ĐíchBằng 0 (Nhưng quá chậm cho kiểm kê thông thường)Rất thấp (An toàn cho cả hệ thống cũ và máy ảo tài nguyên thấp)Trung bình (Có thể gây tăng tải đột biến trên mạng LAN nhanh)Rất cao (Dễ làm rớt gói tin, sai lệch kết quả và làm treo dịch vụ yếu)
Khuyến nghị Sử dụng trong Chương trìnhChỉ dùng khi nghiên cứu cơ chế né tránh IDS chuyên biệtKhuyến nghị bắt buộc cho kiểm kê Service Baseline có kiểm soátDùng trong lab tốc độ cao khi đã được phépKhông sử dụng trong quy trình kiểm kê chuẩn để tránh âm tính giả do rớt gói

10Bài tập thực hành — Safe Lab F01: Kiểm kê Dịch vụ Nmap Tác động Thấp và Xuất bản Asset-Inventory.csv

Trong bài thực hành Safe Lab F01 này, học viên đóng vai trò là Enterprise Pentest Technical Lead trực tiếp thiết lập khóa phạm vi bằng allowlist.txt / excludelist.txt, thực thi Nmap ở chế độ tác động thấp (--max-rate 15 -T2 --version-light) theo phương trình ngân sách tốc độ Eq. (1) , thu thập bảng socket Ground Truth trên cả máy chủ Linux (.20) và Windows (.30), đối chiếu độ lệch theo phương trình Eq. (2) và xuất bản bộ hồ sơ chuẩn Asset-Inventory.csv kèm Asset-Inventory.audit.md và SHA256SUMS [1] [3] .

Quy trình 7 bước Thực thi Safe Lab F01 và Đối chiếu Service Baseline
1
Khởi tạo hồ sơ kiểm toán và kiểm chứng cô lập trước khi quét (Preflight)
Ghi nhận đầy đủ các trường lab_record_schema (lab_id=F01, environment_build_id, image_service_version, initial_snapshot_id=F01-start, test_accounts, reviewer, date_checked_utc). Xác minh máy kiểm thử F01-tester (192.168.56.10) đang ở chế độ Host-Only hoàn toàn cô lập, không có default gateway ra ngoài mạng sản xuất.
2
Khóa phạm vi bằng Allowlist và Excludelist
Tạo tệp allowlist.txt chỉ chứa đúng 2 địa chỉ IP mục tiêu trong lab (192.168.56.20 và 192.168.56.30) và tệp excludelist.txt bảo vệ địa chỉ Host (192.168.56.1), Tester (192.168.56.10) và Broadcast (192.168.56.255). Kiểm tra xác nhận bằng kịch bản bash trước khi gọi Nmap.
3
Thực thi Nmap Low-Impact Discovery
Chạy lệnh Nmap với cờ -n -Pn -sT -sV --version-light -T2 --max-rate 15 --max-retries 1 --reason -iL allowlist.txt --exclude-file excludelist.txt trên danh sách cổng kiểm toán, đồng thời ghi nhận nhãn thời gian UTC bắt đầu/kết thúc [13] . Tuyệt đối không chạy kịch bản NSE xâm lấn, không brute-force, không vượt trần 15 gói/giây.
4
Thu thập Sự thật Nền (Host Ground Truth) trên Linux và Windows
Trên F01-linux-srv (192.168.56.20), trích xuất bảng socket nhân hệ điều hành bằng sudo ss -tulnp. Trên F01-win-trial (192.168.56.30), trích xuất danh sách cổng lắng nghe kèm PID và tên dịch vụ bằng PowerShell Get-NetTCPConnection -State Listen [5] .
5
Đối chiếu Expected/Actual và Mô hình hóa Luồng Client → Proxy → App → DB
Đặt kết quả Nmap cạnh bảng Ground Truth (như tại bảng Table 1 và sơ đồ Figure 1 ) để phân loại các cổng khớp (True Positive), các dịch vụ nội bộ chỉ gắn vào 127.0.0.1 (Δloopback\Delta_{\text{loopback}}: Gunicorn :8080, PostgreSQL :5432) và các cổng bị tường lửa chặn (Δfirewall\Delta_{\text{firewall}}: SSH :22, RDP :3389) [12] .
6
Biên soạn Asset-Inventory.csv và Hồ sơ Kiểm toán Asset-Inventory.audit.md
Xuất tệp Asset-Inventory.csv chứa đầy đủ 16 trường bắt buộc của lab_record_schema kèm bảng chi tiết từng host/port, và tệp Asset-Inventory.audit.md đáp ứng đủ 6 nội dung tối thiểu (minimum_contents), sau đó ký băm SHA256SUMS.
7
Dọn dẹp và Tuân thủ Quy tắc Dừng Khẩn cấp (Stop Rule & Cleanup)
Kiểm tra nhật ký lưu lượng đảm bảo không có gói tin nào chạm ra ngoài .20 và .30, xóa mọi thông tin nhạy cảm thử nghiệm, lưu trữ bằng chứng đã che mờ (redacted) và sẵn sàng khôi phục snapshot F01-start.
Bước 1–3: Khóa Allowlist/Excludelist, Thực thi Nmap Low-Impact từ F01-tester (.10) và Thu thập Ground Truth trên Linux (.20)bash
set -euo pipefail
readonly LAB_ID="F01"
readonly BUILD_ID="F01-20261102-BUILD04"
readonly IMAGE_VERSION="ubuntu-24.04.1-lts-srv / win-srv-2022-eval-20348"
readonly SNAPSHOT_ID="F01-start"
readonly TEST_ACCOUNTS="lab_auditor (local non-privileged), win_lab_reader (local read-only)"
readonly REVIEWER="TechLead-SecOps-01"
readonly DATE_CHECKED_UTC="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
readonly EVIDENCE_DIR="evidence-f01"
readonly OUT_DIR="artifacts-f01"
mkdir -p "$EVIDENCE_DIR" "$OUT_DIR"
# 1. Xác minh cô lập mạng (không có default route ra Internet)
if ip route show default 2>/dev/null | grep -q 'default'; then
echo "[HOLD] Phát hiện default route ngoài phạm vi lab! Dừng thực thi ngay lập tức." >&2
exit 1
fi
# 2. Khởi tạo allowlist.txt và excludelist.txt khóa phạm vi
cat > "$EVIDENCE_DIR/allowlist.txt" <<'EOF'
192.168.56.20
192.168.56.30
EOF
cat > "$EVIDENCE_DIR/excludelist.txt" <<'EOF'
192.168.56.0
192.168.56.1
192.168.56.10
192.168.56.255
EOF
# Kiểm tra chặt: chỉ cho phép đúng 2 IP mục tiêu trong allowlist.txt
while IFS= read -r target; do
case "$target" in
192.168.56.20|192.168.56.30) ;;
*) echo "[HOLD] Mục tiêu không nằm trong allowlist F01: $target" >&2; exit 1 ;;
esac
done < "$EVIDENCE_DIR/allowlist.txt"
# 3. Thực thi Nmap Low-Impact (--max-rate 15, -T2, --version-light)
START_UTC="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
nmap -n -Pn -sT -sV --version-light --reason \
-T2 --max-rate 15 --max-retries 1 \
-p 22,53,80,135,139,443,445,3389,5432,8080 \
-iL "$EVIDENCE_DIR/allowlist.txt" \
--exclude-file "$EVIDENCE_DIR/excludelist.txt" \
-oA "$EVIDENCE_DIR/f01-nmap-baseline"
END_UTC="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
printf 'start_utc=%s\nend_utc=%s\nmax_rate=15pps\ntiming=T2\n' "$START_UTC" "$END_UTC" \
> "$EVIDENCE_DIR/scan-window.utc"
# 4. Thu thập Ground Truth trên máy chủ Linux F01-linux-srv (192.168.56.20)
# (Chạy trực tiếp trên .20 rồi chuyển tệp đã redact về thư mục evidence-f01)
sudo ss -tulnp > "$EVIDENCE_DIR/ground-truth-linux-20.txt"
Bước 4b: Thu thập Ground Truth Socket và Tiến trình trên Windows Target F01-win-trial (192.168.56.30)powershell
$stampUtc = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, State, OwningProcess,
@{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}},
@{Name="TimestampUtc";Expression={$stampUtc}} |
Sort-Object LocalPort |
Export-Csv -NoTypeInformation -Encoding UTF8 .\ground-truth-win-30.csv
Get-FileHash .\ground-truth-win-30.csv -Algorithm SHA256 |
Format-List | Out-File -Encoding UTF8 .\ground-truth-win-30.sha256
Bước 5–6: Xuất bản Asset-Inventory.csv (Đủ 16 Trường Schema + Chi tiết Đối chiếu) và Asset-Inventory.audit.md (Đủ 6 Nội dung Tối thiểu)bash
set -euo pipefail
OUT_DIR="artifacts-f01"
mkdir -p "$OUT_DIR"
# Tạo tệp Asset-Inventory.csv chuẩn 16 trường lab_record_schema kết hợp thông tin đối chiếu từng host/service
cat > "$OUT_DIR/Asset-Inventory.csv" <<'CSV'
lab_id,objective,environment_build_id,image_service_version,network_scope_cidr,initial_snapshot_id,test_accounts,maximum_permitted_impact,task,evidence_artifacts,expected_result,actual_result,cleanup,duration_hours,reviewer,date_checked_utc
F01,"Đối chiếu host/port lab với ground truth (192.168.56.20:53/tcp+udp DNS & 443/tcp Nginx Proxy)","F01-20261102-BUILD04","ubuntu-24.04.1-lts / unbound-1.19 / nginx-1.24.0-2ubuntu7.1","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","lab_auditor (redacted non-priv)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Kiểm tra chỉ IP lab .20 cổng 53 và 443; đối chiếu ss -tulnp","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-linux-20.txt","53/tcp+udp và 443/tcp OPEN khớp với LISTEN trên 192.168.56.20/0.0.0.0","MATCH (True Positive): 53/tcp+udp (Unbound PID 812) và 443/tcp (Nginx PID 940 TLS 1.3) đều OPEN; Nginx 1.24.0 là gói Ubuntu LTS đã vá backport (không phải CVE dương tính giả)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
F01,"Đối chiếu host/port lab với ground truth (192.168.56.20:22/tcp SSH, 8080/tcp App, 5432/tcp DB)","F01-20261102-BUILD04","ubuntu-24.04.1-lts / openssh-9.6p1 / gunicorn-21.2 / postgresql-16.4","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","lab_auditor (redacted non-priv)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Giải thích độ lệch giữa Nmap ngoài và luồng nội tại Client -> Proxy -> App -> DB","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-linux-20.txt","22/tcp bị lọc bởi tường lửa host; 8080/tcp và 5432/tcp chỉ bind loopback 127.0.0.1","RECONCILED: 22/tcp FILTERED (sshd PID 780 LISTEN 0.0.0.0:22 nhưng bị nftables drop = Delta_firewall); 8080/tcp và 5432/tcp CLOSED từ ngoài (Gunicorn PID 1024 và Postgres PID 1105 chỉ LISTEN trên 127.0.0.1 = Delta_loopback, chỉ nhận kết nối từ Nginx Proxy :443)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
F01,"Đối chiếu host/port lab với ground truth (192.168.56.30:135/tcp RPC, 445/tcp SMB, 3389/tcp RDP)","F01-20261102-BUILD04","win-srv-2022-eval-20348","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","win_lab_reader (redacted read-only)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Kiểm tra chỉ IP lab .30; đối chiếu Get-NetTCPConnection trên Windows","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-win-30.csv","135/tcp và 445/tcp OPEN theo baseline OS; 3389/tcp FILTERED bởi Windows Firewall","RECONCILED: 135/tcp (RPC PID 916) và 445/tcp (SMB2/3 PID 4) OPEN khớp Ground Truth; 3389/tcp FILTERED từ .10 dù TermService PID 1420 đang Listen 0.0.0.0:3389 (Delta_firewall do Windows Defender Firewall)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
CSV
# Tạo tệp Asset-Inventory.audit.md đáp ứng đầy đủ 6 phần minimum_contents
cat > "$OUT_DIR/Asset-Inventory.audit.md" <<'MD'
# Hồ sơ Kiểm toán Kiểm kê Dịch vụ — Safe Lab F01 (`Asset-Inventory.audit.md`)
## 1. Scope và lab ID
- **Lab ID:** `F01` (Tuần 1 — Ngày 4: `W01-L04`).
- **Mạng cô lập (Network Scope CIDR):** `192.168.56.0/24` (Host-Only cô lập hoàn toàn, không có đường định tuyến ra Internet hay mạng sản xuất).
- **Danh sách đích được phép (`allowlist.txt`):** Chỉ gồm `192.168.56.20` (`F01-linux-srv`) và `192.168.56.30` (`F01-win-trial`).
- **Danh sách loại trừ (`excludelist.txt`):** `192.168.56.0`, `192.168.56.1` (Host), `192.168.56.10` (Tester), `192.168.56.255`.
## 2. Preconditions và phương pháp
- **Điều kiện tiên quyết (Preconditions):** Đã xác minh cô lập mạng trên `F01-tester`, kiểm tra mốc snapshot sạch `F01-start`, thiết lập tài khoản kiểm toán phi đặc quyền (`lab_auditor`, `win_lab_reader`) và thống nhất quy tắc dừng khẩn cấp (*Stop Rule*).
- **Phương pháp rà quét bên ngoài (External Low-Impact Scan):** Sử dụng `nmap -n -Pn -sT -sV --version-light --reason -T2 --max-rate 15 --max-retries 1 -iL allowlist.txt --exclude-file excludelist.txt` trên danh sách cổng kiểm toán. Tốc độ giới hạn ở 15 gói/giây ($\approx 7.92\text{ kbps}$).
- **Phương pháp thu thập Sự thật Nền (Host Ground Truth):** Chạy `sudo ss -tulnp` trên `192.168.56.20` và `Get-NetTCPConnection -State Listen` trên `192.168.56.30`.
## 3. UTC timestamp, expected/actual và evidence redacted
- **Khung thời gian thực thi (UTC Timestamp):** `2026-11-02T10:12:00Z` đến `2026-11-02T10:12:28Z` (kiểm toán hoàn tất lúc `2026-11-02T10:30:00Z`).
- **Đối chiếu Expected vs. Actual:**
- `192.168.56.20:53` (DNS Unbound) & `192.168.56.20:443` (Nginx TLS 1.3): **Expected = OPEN** / **Actual = OPEN** (Khớp hoàn toàn với Ground Truth).
- `192.168.56.20:22` (OpenSSH): **Expected = Bảo vệ bởi tường lửa** / **Actual = FILTERED** trên Nmap nhưng `LISTEN 0.0.0.0:22` trong `ss -tulnp` ($\Delta_{\text{firewall}}$ do quy tắc `nftables`).
- `192.168.56.20:8080` (Gunicorn App) & `192.168.56.20:5432` (PostgreSQL DB): **Expected = Cô lập nội bộ** / **Actual = CLOSED** trên Nmap nhưng `LISTEN 127.0.0.1:8080` và `127.0.0.1:5432` trong `ss -tulnp` ($\Delta_{\text{loopback}}$). Chứng minh rõ luồng `Client (.10) -> Nginx Proxy (.20:443) -> App (127.0.0.1:8080) -> DB (127.0.0.1:5432)`.
- `192.168.56.30:135` (MSRPC) & `192.168.56.30:445` (SMB): **Expected = OPEN theo OS baseline** / **Actual = OPEN**.
- `192.168.56.30:3389` (RDP): **Expected = Bảo vệ bởi tường lửa** / **Actual = FILTERED** trên Nmap dù `TermService` đang `Listen 0.0.0.0:3389` ($\Delta_{\text{firewall}}$).
- **Evidence Redacted:** Toàn bộ đầu ra `f01-nmap-baseline.nmap`, `ground-truth-linux-20.txt` và `ground-truth-win-30.csv` đã được lọc bỏ mọi chuỗi khóa phiên hoặc thông tin định danh cá nhân trước khi đóng gói.
## 4. False positive và giới hạn
- **Nhận diện False Positive từ Banner:** Nmap ghi nhận banner `nginx 1.24.0 (Ubuntu)` trên cổng `443/tcp` và `OpenSSH 9.6p1` trên máy chủ `.20`. Kiểm tra Ground Truth (`dpkg -l`) xác nhận đây là các gói Ubuntu 24.04 LTS đã được tích hợp bản vá bảo mật backport (`1.24.0-2ubuntu7.1`), do đó không được phép kết luận lỗi CVE chỉ dựa trên số hiệu phiên bản trong banner.
- **Giới hạn của phép đo:** Quét TCP từ bên ngoài không nhìn thấy các dịch vụ chỉ gắn vào `127.0.0.1` ($\Delta_{\text{loopback}}$) hoặc các dịch vụ chỉ mở cho IP quản trị qua tường lửa ($\Delta_{\text{firewall}}$). Đồng thời, cờ `--version-light` ưu tiên an toàn vận hành nên có thể không nhận diện được các dịch vụ tùy chỉnh dùng giao thức độc quyền trên cổng phi tiêu chuẩn.
## 5. Remediation hoặc bước tiếp theo
- **Trên `F01-linux-srv` (`192.168.56.20`):** Duy trì cấu hình gắn `127.0.0.1` cho tầng App (`:8080`) và DB (`:5432`); bổ sung chỉ thị `server_tokens off;` trong cấu hình Nginx để giảm rò rỉ thông tin phiên bản không cần thiết trên cổng `:443`.
- **Trên `F01-win-trial` (`192.168.56.30`):** Đưa cổng `445/tcp` (SMB) và `135/tcp` (RPC) vào danh sách kiểm tra cấu hình xác thực và chính sách bắt buộc ký số (*SMB Signing Required*) trong bài học đánh giá bề mặt Windows tiếp theo; hạn chế phạm vi IP được phép kết nối tới cổng `135/tcp` trên Windows Firewall nếu không có nhu cầu RPC liên máy.
## 6. Reviewer và ngày kiểm tra
- **Reviewer:** `TechLead-SecOps-01`
- **Ngày kiểm tra (Date Checked UTC):** `2026-11-02T10:30:00Z`
- **Trạng thái phê duyệt:** `APPROVED — Baseline Reconciled`
MD
Bước 7: Kiểm chứng Tự động 16 Trường Schema, 6 Mục Audit và Ký Băm SHA256SUMS (bash)
1set -euo pipefail
2CSV="artifacts-f01/Asset-Inventory.csv"
3AUDIT="artifacts-f01/Asset-Inventory.audit.md"
4SUMS="artifacts-f01/SHA256SUMS"
5
6# 1. Kiểm tra dòng tiêu đề 16 trường bắt buộc của lab_record_schema trong Asset-Inventory.csv
7EXPECTED_HEADER="lab_id,objective,environment_build_id,image_service_version,network_scope_cidr,initial_snapshot_id,test_accounts,maximum_permitted_impact,task,evidence_artifacts,expected_result,actual_result,cleanup,duration_hours,reviewer,date_checked_utc"
8test "$(head -n 1 "$CSV")" = "$EXPECTED_HEADER"
9test "$(wc -l < "$CSV")" -ge 4
10
11# 2. Kiểm tra đủ 6 mục minimum_contents trong Asset-Inventory.audit.md
12for section in \
13 "## 1. Scope và lab ID" \
14 "## 2. Preconditions và phương pháp" \
15 "## 3. UTC timestamp, expected/actual và evidence redacted" \
16 "## 4. False positive và giới hạn" \
17 "## 5. Remediation hoặc bước tiếp theo" \
18 "## 6. Reviewer và ngày kiểm tra"; do
19 grep -Fqx "$section" "$AUDIT"
20done
21
22# 3. Xuất mã băm toàn vẹn SHA-256 cho cả hai tệp bàn giao
23sha256sum "$CSV" "$AUDIT" | tee "$SUMS"
24sha256sum -c "$SUMS"
Danh mục Kiểm tra Bàn giao Artifact W01-L04Deliverable Checklist
Safe Lab F01 · Bắt buộc
Hồ sơ bàn giao của học viên chỉ được công nhận hợp lệ khi bao gồm đủ 3 tệp trong thư mục artifacts-f01/: (1) Asset-Inventory.csv có đúng 16 cột chuẩn lab_record_schema và tối thiểu 3 bản ghi đối chiếu chi tiết cho .20 và .30; (2) Asset-Inventory.audit.md trình bày rõ 6 mục nội dung tối thiểu kèm phân tích độ lệch Δloopback\Delta_{\text{loopback}} và Δfirewall\Delta_{\text{firewall}}; và (3) SHA256SUMS khớp toàn vẹn khi kiểm tra bằng sha256sum -c.

11Kiểm tra Truy hồi Kiến thức (Spaced Retrieval), Thang đo Hành vi và Cổng Chặn An toàn

Phần đánh giá của bài W01-L04 kết hợp phương pháp *Truy hồi Ngắt quãng (Spaced Retrieval)* nhằm buộc học viên liên kết chuỗi kiến thức xuyên suốt từ W01-L01 (số học TCP/IP, mô hình luồng dịch vụ và ranh giới tin cậy), W01-L02 (xác minh cô lập hạ tầng và snapshot), W01-L03 (thu thập gói tin và chuỗi bảo toàn bằng chứng SHA-256) vào bài toán kiểm kê dịch vụ và đối chiếu Ground Truth hiện tại. Hồ sơ nộp của học viên được chấm điểm theo Thang đo Hành vi tại bảng Table 3 .

Quiz 1: Bài Kiểm tra Truy hồi Tổng hợp W01-L04 (Kết nối Chuỗi Kiến thức W01-L01..L04)Score: 0 / 4
1. Khi chuẩn bị thực thi kiểm kê dịch vụ chủ động trong Safe Lab F01, quy trình khóa phạm vi nào dưới đây tuân thủ đúng chuẩn an toàn của Technical Lead?
Explanation: Theo chuẩn NIST SP 800-115 [1] và nguyên tắc kiểm soát phạm vi trong chương trình, việc lọc bỏ kết quả sau khi đã quét nhầm mục tiêu (post-scan filtering) vẫn là vi phạm phạm vi nghiêm trọng. Phải khóa chặt mục tiêu đầu vào bằng allowlist.txt kết hợp excludelist.txt và tắt truy vấn DNS ngoài ý muốn bằng -n.
2. Dựa trên phương trình ngân sách tốc độ quét và cơ chế tầng vận chuyển TCP (W01-L01), tại sao tổ hợp -sT -sV --version-light -T2 --max-rate 15 --max-retries 1 được chọn làm cấu hình chuẩn cho lần lập baseline đầu tiên?
Explanation: Như đã chứng minh tại phương trình Eq. (1) và nghiên cứu về quét mạng an toàn [13] , giới hạn --max-rate 15 và -T2 giữ cho tốc độ phát gói hoàn toàn nằm trong ngưỡng chịu tải của cả các hệ thống nhạy cảm và bảng trạng thái tường lửa, trong khi -sT chỉ thực hiện bắt tay TCP chuẩn mà không gây tác động khai thác.
3. Khi đối chiếu kết quả Nmap quét từ 192.168.56.10 với đầu ra ss -tulnp trên máy chủ 192.168.56.20, bạn thấy cổng 5432/tcp được Nmap báo là closed, nhưng ss -tulnp lại hiển thị LISTEN 127.0.0.1:5432 (postgres). Kết luận kiến trúc nào là chính xác nhất?
Explanation: Theo RFC 9293 [6] và phương trình đối chiếu Eq. (2) (xem thêm bảng Table 1 và sơ đồ Figure 1 ), nếu tường lửa DROP gói tin thì trạng thái phải là filtered. Việc Nmap nhận được phản hồi [RST] (closed) chứng tỏ gói tin chạm tới hệ điều hành nhưng không có socket nào lắng nghe trên địa chỉ ngoài 192.168.56.20:5432 vì PostgreSQL chỉ gắn chặt vào 127.0.0.1:5432.
4. (Truy hồi liên kết W01-L01..L03) Khi nhìn thấy Nmap báo cổng 443/tcp open kèm banner nginx 1.24.0 (Ubuntu) trên máy chủ .20, quy trình xác minh nào kết nối đúng toàn bộ kiến thức từ đầu tuần đến nay?
Explanation: Phản xạ của Technical Lead là kết hợp phân tích luồng kiến trúc (W01-L01), giữ vững ranh giới cô lập (W01-L02), niêm phong bằng chứng có mã băm và nhãn thời gian UTC (W01-L03), và loại trừ cảnh báo giả từ bản vá backport thông qua đối chiếu Ground Truth (W01-L04) [15] .
Answer Key (Quiz 1):
Q1: A — Nạp danh sách IP được phê duyệt qua tệp allowlist.txt (-iL), nạp danh sách bảo vệ Host/Tester qua excludelist.txt (--exclude-file), bật cờ -n tắt phân giải DNS ngược và lưu bằng chứng kiểm tra phạm vi trước khi phát gói tin đầu tiên (Theo chuẩn NIST SP 800-115 [1] và nguyên tắc kiểm soát phạm vi trong chương trình, việc lọc bỏ kết quả sau khi đã quét nhầm mục tiêu (post-scan filtering) vẫn là vi phạm phạm vi nghiêm trọng. Phải khóa chặt mục tiêu đầu vào bằng allowlist.txt kết hợp excludelist.txt và tắt truy vấn DNS ngoài ý muốn bằng -n.)
Q2: A — Vì -T2 kết hợp --max-rate 15 khống chế lưu lượng thăm dò ở mức ~8 kbps, --max-retries 1 ngăn bão phát lại khi gặp cổng bị lọc, và --version-light chỉ gửi các gói thăm dò xác suất cao nhất mà không làm treo tiến trình dịch vụ (Như đã chứng minh tại phương trình Eq. (1) và nghiên cứu về quét mạng an toàn [13] , giới hạn --max-rate 15 và -T2 giữ cho tốc độ phát gói hoàn toàn nằm trong ngưỡng chịu tải của cả các hệ thống nhạy cảm và bảng trạng thái tường lửa, trong khi -sT chỉ thực hiện bắt tay TCP chuẩn mà không gây tác động khai thác.)
Q3: A — Dịch vụ PostgreSQL thuộc tập độ lệch vòng lặp nội bộ (Δloopback\Delta_{\text{loopback}}): dịch vụ đang hoạt động để phục vụ tầng App nội bộ nhưng chỉ gắn vào 127.0.0.1, nên ngăn xếp TCP trên giao diện .20 trả về gói [RST] cho máy quét bên ngoài (Theo RFC 9293 [6] và phương trình đối chiếu Eq. (2) (xem thêm bảng Table 1 và sơ đồ Figure 1 ), nếu tường lửa DROP gói tin thì trạng thái phải là filtered. Việc Nmap nhận được phản hồi [RST] (closed) chứng tỏ gói tin chạm tới hệ điều hành nhưng không có socket nào lắng nghe trên địa chỉ ngoài 192.168.56.20:5432 vì PostgreSQL chỉ gắn chặt vào 127.0.0.1:5432.)
Q4: A — Không kết luận ngay là lỗ hổng từ banner; kiểm tra gói cài đặt/bản vá backport trên host Ground Truth, đối chiếu luồng dữ liệu từ Nginx sang App :8080, và bảo toàn toàn bộ tệp bằng chứng kèm mã băm SHA256SUMS (Phản xạ của Technical Lead là kết hợp phân tích luồng kiến trúc (W01-L01), giữ vững ranh giới cô lập (W01-L02), niêm phong bằng chứng có mã băm và nhãn thời gian UTC (W01-L03), và loại trừ cảnh báo giả từ bản vá backport thông qua đối chiếu Ground Truth (W01-L04) [15] .)
Table 3: Thang đo Hành vi Đánh giá Năng lực (Behavior Scale Rubric 0–100) cho Bài học W01-L04
Mức điểmHành vi Quan sát được của Học viênBằng chứng Tối thiểu Bắt buộc trong Hồ sơ Asset-Inventory.csv & Audit
0Không có bằng chứng kiểm chứng phạm vi, chạy quét không kiểm soát hoặc làm giả dữ liệu đầu raTệp Asset-Inventory.csv bị thiếu, rỗng, sai cấu trúc hoặc không xác định được mục tiêu thực tế trong lab
25Thuật lại được lý thuyết về allowlist, Nmap và Ground Truth nhưng chưa vận dụng nhất quán vào ca thực hànhCó tệp kết quả Nmap rời rạc nhưng thiếu đối chiếu với ss / Get-NetTCPConnection và thiếu các trường bắt buộc trong lab_record_schema
50Thực hiện được lệnh quét và trích xuất socket khi có hướng dẫn từng bước, nhưng hồ sơ bằng chứng chưa trọn vẹnCó Asset-Inventory.csv với một phần kết quả Expected/Actual nhưng giải thích chưa rõ Δloopback\Delta_{\text{loopback}} / Δfirewall\Delta_{\text{firewall}} hoặc thiếu phân tích giới hạn và cảnh báo giả
75Tự thực hiện trọn vẹn quy trình kiểm kê trên các máy ảo lab, đối chiếu chính xác với Ground Truth và đề xuất bước tiếp theo hợp lýNộp đủ Asset-Inventory.csv (16 trường schema), Asset-Inventory.audit.md (6 mục tối thiểu) và SHA256SUMS; có nhãn thời gian UTC, bằng chứng đã redact, phân tích rõ luồng Client → Proxy → App → DB và ký duyệt của Reviewer
100Đạt chuẩn mức 75, đồng thời phân tích sâu các trường hợp dương tính giả từ banner, giới hạn của phép đo, quy trình hoàn nguyên và đánh đổi kỹ thuậtHồ sơ hoàn chỉnh, tái lập độc lập 100%; giải thích định lượng ngân sách tốc độ quét, chứng minh cơ chế bản vá backport trên Ubuntu/Windows, nêu rõ quy trình rollback F01-start và kế hoạch kiểm tra cấu hình dịch vụ ở bước tiếp theo

12Tự đánh giá và Phản tư của Technical Lead

13Đọc thêm

Tài liệu Tham khảo Tiêu chuẩn và Học thuật Quốc tế

  1. [1]
    K. Scarfone, M. Souppaya, A. Cody, A. Orebaugh. Technical Guide to Information Security Testing and Assessment. NIST Special Publication 800-115, National Institute of Standards and Technology (DOI: 10.6028/NIST.SP.800-115), 2008.
  2. [2]
    S. Rose, O. Borchert, S. Mitchell, S. Connelly. Zero Trust Architecture. NIST Special Publication 800-207, National Institute of Standards and Technology (DOI: 10.6028/NIST.SP.800-207), 2020.
  3. [3]
    G. F. Lyon. Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning. Insecure.Com LLC (Nmap Project, https://nmap.org/book/), 2009.
  4. [4]
    U. Lamping, R. Sharpe, E. Warnicke. Wireshark User's Guide and Reference Manual (dumpcap / tshark Network Analysis). Wireshark Foundation (https://www.wireshark.org/docs/), 2024.
  5. [5]
    Microsoft Corporation. Get-NetTCPConnection (NetTCPIP PowerShell Module) and Windows Server Security Documentation. Microsoft Learn, 2024.
  6. [6]
    W. Eddy (Ed.). Transmission Control Protocol (TCP) Specification. RFC 9293 (Internet Standard STD 7), Internet Engineering Task Force (IETF, DOI: 10.17487/RFC9293), 2022.
  7. [7]
    J. Postel. Internet Control Message Protocol. RFC 792 (Internet Standard STD 5), Internet Engineering Task Force (IETF, DOI: 10.17487/RFC0792), 1981.
  8. [8]
    M. Cotton, L. Eggert, J. Touch, M. Westerlund, S. Cheshire. Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry. RFC 6335 (BCP 165), Internet Engineering Task Force (IETF, DOI: 10.17487/RFC6335), 2011.
  9. [9]
    Y. Rekhter, B. Moskowitz, D. Karrenberg, G. J. de Groot, E. Lear. Address Allocation for Private Internets. RFC 1918 (BCP 5), Internet Engineering Task Force (IETF, DOI: 10.17487/RFC1918), 1996.
  10. [10]
    G. Song, L. He, T. Chen, J. Lin, L. Fan, K. Wen, Z. Wang, J. Yang. PMap: Reinforcement Learning-Based Internet-Wide Port Scanning. IEEE/ACM Transactions on Networking (Vol. 32, Issue 6, pp. 4812-4827, DOI: 10.1109/TNET.2024.3446645), 2024.
  11. [11]
    G. Song, L. He, T. Zhao, Y. Luo, Y. Wu, L. Fan, C. Li, Z. Wang, J. Yang. Which Doors Are Open: Reinforcement Learning-based Internet-wide Port Scanning. 2023 IEEE/ACM 31st International Symposium on Quality of Service (IWQoS, IEEE, Document 10188692, DOI: 10.1109/IWQoS57198.2023.10188692), 2023.
  12. [12]
    X. Zhou, M. Zhang, J. Wei. A Novel Feature Clustering Approach for Comprehensive Network Asset Discovery: Methods, Implementation, and Validation. Proceedings of the International Conference on Network and Information Systems (Springer Nature, DOI: 10.1007/978-3-031-97352-9_20), 2025.
  13. [13]
    R. Foote, N. Sugunaraj, P. Ranganathan. Low Cost ICS Network Scanning for Vulnerability Prevention. Science and Technologies for Smart Cities (Springer Nature, DOI: 10.1007/978-3-031-06371-8_22), 2022.
  14. [14]
    B. Wu, S. Zhang, Z. Yang. A Survey of Network Asset Detection Technology. Network Simulation and Evaluation (Communications in Computer and Information Science, Springer Nature, DOI: 10.1007/978-981-97-4522-7_1), 2024.
  15. [15]
    K. A. Cochran. Comprehensive Vulnerability Management. CompTIA CySA+ Certification Companion (Apress / Springer Nature, pp. 45-78, DOI: 10.1007/979-8-8688-1495-2_3), 2025.
  16. [16]
    K. A. Cochran. Securing Strength: A Comprehensive Guide to Vulnerability Assessment. Cybersecurity Essentials (Apress / Springer Nature, pp. 89-118, DOI: 10.1007/979-8-8688-0432-8_5), 2024.
  17. [17]
    K. Coffey, L. A. Maglaras, A. Yousaf. Vulnerability Assessment of Cyber Security for SCADA Systems. Guide to Vulnerability Analysis for Computer Networks and Systems (Springer Nature, pp. 59-80, DOI: 10.1007/978-3-319-92624-7_3), 2018.