2 Giờ Sáng. Cảnh Báo Production. Lưu Lượng Mạng Tăng Đột Biến.
Dashboard giám sát của bạn sáng rực. Các kết nối outbound bất thường từ server. Bạn không biết cái gì đang lắng nghe, cái gì đang bị lộ ra ngoài, hay traffic đang đi đâu. Bản năng đầu tiên? Mở Nmap lên.
Tôi đã ở đúng tình huống đó nhiều hơn một lần — vã mồ hôi qua một incident mà con đường nhanh nhất để tìm ra câu trả lời là hiểu chính xác cái gì đang mở, cái gì đang chạy, và cái gì không nên có mặt ở đó. Nmap đã cứu tôi hàng giờ phải đoán mò mỗi lần như vậy.
Hướng dẫn này đi qua Nmap theo cách tôi thực sự dùng nó: dưới áp lực, với các lệnh thực tế, và đủ ngữ cảnh để đưa ra quyết định nhanh.
Vấn Đề Thực Tế: Bạn Không Biết Gì Đang Bị Lộ Ra Ngoài
Hầu hết các security incident đều bắt đầu theo cùng một cách — ai đó hỏi “cổng nào đang mở trên server này?” và không ai có câu trả lời rõ ràng. Có thể server được bàn giao giữa các team. Có thể một developer đã chạy docker run -p 0.0.0.0:5432:5432 trong một lần deploy khuya và quên mất. Có thể một service khởi động lại với config khác.
Không có khả năng quan sát, bạn đang bay mù. Bay mù thì nguy hiểm khi kẻ tấn công đang tích cực quét cùng không gian địa chỉ mà bạn chịu trách nhiệm.
Đây không phải là lỗi kỹ thuật — đây là khoảng trống trong quy trình. Không ai lập bản đồ attack surface. Nmap khắc phục điều đó trong vài phút.
Nmap Thực Sự Làm Gì
Nmap (Network Mapper) gửi các gói tin được chế tác đến mục tiêu và phân tích phản hồi. Từ những phản hồi đó, nó suy ra cổng nào đang mở, dịch vụ nào đang chạy, hệ điều hành nào có thể được cài đặt, và liệu có tồn tại các lỗ hổng đã biết hay không.
Ba kỹ thuật quét xuất hiện trong hầu hết mọi workflow:
- TCP SYN scan (-sS) — gửi một SYN, chờ SYN-ACK. Không bao giờ hoàn thành handshake. Nhanh, ẩn, và là mặc định khi chạy với quyền root.
- TCP Connect scan (-sT) — hoàn thành toàn bộ TCP handshake. Chậm hơn, dễ phát hiện hơn, nhưng hoạt động mà không cần quyền root.
- UDP scan (-sU) — chậm hơn và kém tin cậy hơn, nhưng quan trọng với các dịch vụ như DNS (cổng 53), SNMP (161), và TFTP (69) chỉ chạy qua UDP.
Biết sự khác biệt sẽ định hình mức độ tiếng ồn bạn sẵn sàng tạo ra trên một mạng nhất định.
So Sánh Các Phương Án: Quét Cơ Bản vs. Kiểm Tra Toàn Diện
Phương Án 1: Kiểm Tra Cổng Nhanh (Nhanh, Ít Tiếng Ồn)
Khi bạn chỉ cần xác nhận thứ gì đó đang mở hay đóng:
# Quét top 1000 cổng (mặc định)
nmap 192.168.1.10
# Quét một cổng cụ thể
nmap -p 22 192.168.1.10
# Quét một dải cổng
nmap -p 1-1024 192.168.1.10
# Quét tất cả 65535 cổng
nmap -p- 192.168.1.10
Câu trả lời “nó mở hay đóng” trong dưới 30 giây. Không rườm rà, không có tiếng ồn không cần thiết.
Phương Án 2: Phát Hiện Dịch Vụ và Phiên Bản (Nhiều Ngữ Cảnh Hơn)
Một cổng mở đơn thuần không cho bạn biết gì cả. Điều quan trọng là cái gì đang chạy trên đó và phiên bản nào. Các phiên bản cũ đồng nghĩa với CVE đã được ghi lại — và CVE đã được ghi lại đồng nghĩa với exploit đang hoạt động.
# Phát hiện phiên bản dịch vụ trên các cổng mở
nmap -sV 192.168.1.10
# Kết hợp với phát hiện tích cực (chính xác hơn, nhiều tiếng ồn hơn)
nmap -sV --version-intensity 5 192.168.1.10
Phát hiện phiên bản đã bắt được nhiều vấn đề “tại sao server này hoạt động kỳ lạ” hơn gần như bất cứ thứ gì khác tôi đã dùng. Một Redis bị cấu hình sai không có xác thực đang chạy trên cổng 6379 — chuỗi phiên bản trả về là Redis 4.0.9, lộ ra internet, không có mật khẩu. Đó là một phát hiện critical ngay lập tức.
Phương Án 3: Phát Hiện OS và Fingerprint Đầy Đủ
# Phát hiện OS (yêu cầu root/sudo)
sudo nmap -O 192.168.1.10
# Quét tích cực đầy đủ: phiên bản, OS, script, traceroute
sudo nmap -A 192.168.1.10
-A là tất cả trong một. Phát hiện phiên bản, đoán OS, các NSE script mặc định, traceroute — tất cả cùng một lúc. Ồn ào và kỹ lưỡng. Chính xác là thứ bạn muốn khi kiểm tra một máy bạn sở hữu nhưng chưa ghi chép đầy đủ.
Phương Án 4: Quét Lỗ Hổng với NSE Scripts
Scripting engine của Nmap (NSE) là nơi nó không còn chỉ là một port scanner nữa. Hàng trăm script đi kèm với Nmap, bao gồm mọi thứ từ hết hạn SSL cert đến các lỗ hổng SMB.
# Chạy các script an toàn mặc định
nmap -sC 192.168.1.10
# Chạy riêng các script lỗ hổng
nmap --script vuln 192.168.1.10
# Kiểm tra các lỗ hổng cụ thể (ví dụ: EternalBlue / MS17-010)
nmap --script smb-vuln-ms17-010 192.168.1.10
# Kiểm tra cấu hình SSL/TLS
nmap --script ssl-enum-ciphers -p 443 192.168.1.10
# Kiểm tra các thư mục HTTP mở
nmap --script http-enum 192.168.1.10
Trong incident 2 giờ sáng tôi đã đề cập, chạy --script vuln trên host đáng ngờ đã gắn cờ một dịch vụ SMB chưa được vá với một đường khai thác đã biết. Một lần quét. Lưu lượng mạng tăng đột biến khó hiểu trở thành một báo cáo incident rõ ràng.
Trình Tự Quét Xử Lý Sự Cố
Khi phản ứng với điều bất ngờ, tốc độ và sự rõ ràng của tín hiệu quan trọng hơn sự toàn diện. Đây là trình tự tôi thực sự sử dụng:
Bước 1: Trinh Sát Nhanh (Dưới 60 Giây)
# Quét có ý nghĩa nhanh nhất — top 100 cổng, phát hiện phiên bản
sudo nmap -F -sV 192.168.1.10
100 cổng phổ biến nhất với tên dịch vụ. Đủ để phát hiện bất kỳ điều gì rõ ràng sai trước tách cà phê đầu tiên của incident.
Bước 2: Bản Đồ Cổng Đầy Đủ (2–5 Phút)
# Tất cả cổng, SYN scan (ẩn), lưu kết quả
sudo nmap -sS -p- -oN scan_full.txt 192.168.1.10
Lưu với -oN. Bạn sẽ cần kết quả này cho báo cáo incident dù sao — ghi lại ngay bây giờ trong khi quét đang chạy.
Bước 3: Phân Tích Sâu Các Cổng Mở
# Khi bạn biết cổng nào đang mở, chỉ chạy script trên những cổng đó
sudo nmap -sV -sC --script vuln -p 22,80,443,3306 192.168.1.10
Nhắm mục tiêu vào các cổng cụ thể giúp quét nhanh hơn. Nó cũng giảm false positive từ các script nhắm vào các cổng đóng.
Bước 4: Khám Phá Toàn Subnet (Nếu Cần)
# Ping sweep để tìm tất cả host đang hoạt động trong /24
nmap -sn 192.168.1.0/24
# Quét nhanh tất cả host đang hoạt động (kết hợp với grep để lọc)
nmap -sV -F 192.168.1.0/24 -oG - | grep "open"
Các Định Dạng Đầu Ra Đáng Biết
# Đầu ra văn bản thông thường
nmap -oN results.txt target
# Đầu ra XML (cho các công cụ như Metasploit hoặc parser tùy chỉnh)
nmap -oX results.xml target
# Đầu ra có thể grep (lọc nhanh)
nmap -oG results.gnmap target
# Cả ba cùng một lúc
nmap -oA results target
Giới Hạn Pháp Lý và Đạo Đức
Nmap là công cụ chẩn đoán, nhưng quét mạng mà không có sự cho phép là bất hợp pháp ở hầu hết các quốc gia. Chỉ quét các hệ thống bạn sở hữu hoặc có sự cho phép bằng văn bản rõ ràng để kiểm tra. Trên các mạng production, phối hợp với team của bạn trước — các quét tích cực kích hoạt cảnh báo IDS, có thể làm quá tải các dịch vụ legacy, và gây ra các đợt tăng tải bất ngờ.
Thực hành an toàn trên một lab chuyên dụng. VulnHub hoặc một VM local chạy Metasploitable cung cấp cho bạn các mục tiêu hợp pháp để xây dựng kỹ năng mà không có rủi ro pháp lý.
Đưa Nmap Vào Quy Trình Thường Nhật
Incident thực sự khiến tôi yêu Nmap không phải là incident 2 giờ sáng kịch tính đó. Đó là một cuộc kiểm tra thông thường nơi tôi phát hiện ra một server test bị quên — thông tin xác thực mặc định, có thể truy cập công khai, vẫn đang chạy. Không có gì bị xâm phạm. Nhưng rất dễ để điều đó xảy ra.
Lên lịch quét nhanh cơ sở hạ tầng của bạn mỗi vài tuần. Tích hợp vào CI/CD pipeline nếu có thể. Dù bằng cách nào, bạn bắt đầu phát hiện sự lộ lọt của chính mình trước khi người khác làm.
Nmap trả lời một câu hỏi: cái gì có thể tiếp cận được, và cái gì đang chạy ở đó? Trả lời câu hỏi đó một cách đáng tin cậy, và bạn đã đi trước hầu hết các incident trước khi chúng bắt đầu.

