Penetration Testing Step 1.b – Port Scanning với “hàng nóng” Nmap

Tiếp theo nội dung Penetration Testing Step 1.b – Nâng tầm nghệ thuật DNS Enumeration, kỳ này tôi sẽ chuyển sang một dung cực kỳ quan trọng là Port Scanning (có thể dịch thô bỉ là “quét cổng”, nhưng dùng từ này nghe đuối quá nên thôi tôi sẽ dùng Port Scanning luôn cho sang vậy). Với Port Scanning, bạn có thể có nhiều giải pháp như Netcat, Masscan,…, nhưng có một cái tool đa năng và bá đạo không thể không nhắc đến là Nmap.

Bạn cần lưu ý Port Scanning là loại intrusive nên có khả làm target lăn đùng ra chết. Vì vậy, bạn cần nghiên cứu và tính toán kỹ trước khi thực hiện. Đừng dại dột chơi ngu lấy tiếng, cứ scan thử coi ra sao rồi mới tính là có bữa vỡ mồm.

#1 Nmap làm được gì?

Với việc có mặt trên các dạng OS phổ biến (Linux, WindowsMac OS) cũng như khả năng giết thịt từ 1 con hàng host đơn lẻ đến nguyên cái network to vật vã, Nmap (viết tắt của Network Mapper) là một trong những tool (cho phép xài chùa) phổ biến nhất được sử dụng trong công tác Port Scanning. Tuy nhiên, chức năng của Nmap có thể bao quát luôn cả nội dung network discovery and security auditing (tôi tạm dịch là khám/ phá mạng và kiểm tra bảo mật) nói chung (tôi sẽ demo thêm chức năng khác của Nmap trong kỳ sau, nếu bạn nôn nóng quá thì bơi vào đọc trước các nội dung ở đây – Nmap: the Network Mapper – Free Security Scanner.

Nmap website
Nmap website

Ngoài ra, cũng cần lưu ý, ngoài dạng command-line cổ điển (tôi sẽ demo với dạng này), bạn cũng có thể sử dụng phiên bản GUI của Nmap là Zenmap. Thông tin chi tiết bạn có thể xem thêm ở link Zenmap – Official cross-platform Nmap Security Scanner GUI.

#2 Đọc kỹ hướng dẫn trước khi sử dụng Nmap

Như tôi nói trên, vì là dạng intrusive có khả năng làm sập hệ thống nên bạn cần tránh việc scan vô tội vạ với Nmap. Nếu muốn thử nghiệm, tốt nhất bạn nên dựng một đám target ảo dạng Virtual MachinesVM như tôi giới thiệu trong nội dung Giải ngố Virtualization – Phần 3: Hướng dẫn cài đặt Kali Linux trên VMware Workstation chi tiết nhất Thái Dương hệ.

Sau khi, dựng xong Virtual Machines, bạn cũng cần nắm sơ bộ về việc cấu hình VMware Network và IP Address như tôi đề cập trong các nội dung Giải ngố Virtualization – Phần 5: 3 chế độ VMware Network configuration mà bạn nhất định phải biếtGiải ngố Virtualization – Phần 7: Cấu hình thủ công IP Address trên Kali Linux và đả thông kinh mạch đường mạng.

Để tiết kiệm thời gian (nói màu mè thế thôi chứ thật ra là do tôi lười), ngoài con Kali Linux để chạy Nmap, tôi sẽ chỉ dựng thêm 2 VM:

  • Windows 10 với IP 168.188.135;
  • Windows Servers 2012 với IP 168.188.140.

Ngoài việc dựng các VM làm hình nhân để bắn phá, user bạn sử dụng để chạy Nmap trên Kali Linux cần có khả năng chạy command với sudo (superuser do, kiểu như quyền của đấng tối cao root trên Linux/Unix). Việc chạy command với sudo được sử dụng với các Nmap option cần truy cập raw socket (bình thường nó sẽ dùng standard Berkeley socket API).

Diễn giải chi tiết về raw socket sẽ rất tốn giấy mực và cũng sẽ lạc đề vì kỳ này tôi đang bàn về Port Scanning. Tuy nhiên, để hình dung đơn giản thì raw socket sẽ hoạt động ở Network layer của OSI model cho phép (thực ra là ép buộc) bạn tự thực thi Transport layer protocol (thay vì sử dụng hàng quốc dân TCP/UDP). Như vậy, application với raw socket sẽ có thể tóm luôn tất cả các network packet thuộc các application của các user khác trên hệ thống (do vậy mới có yêu cầu chạy với sudo như tôi nói trên).

#3 Scan bằng chiến thuật “bất chấp tất cả” với Nmap

Sau khi dàn cảnh xong xuôi, tôi sẽ thử scan kiểu bất chấp hậu quả với dạng mặc định (1000 port phổ biến nhất) của Nmap:

nmap 192.168.188.140

Nmap default scan
Nmap default scan

Như bạn thấy ở trên, quá trình scan khá nhanh gọn và Nmap xuất thông tin kết quả các port dạng open (11 port với con VM Windows Servers 2012 tôi đã dựng). Trường hợp muốn scan hết tất cả 65535 port, bạn có thể dùng option -p như sau:

nmap -p 1-65535 192.168.188.140

Nmap port option
Nmap port option

Với phương án này, bạn có thể thu được thêm một số thông tin về các port đang open nhưng thời gian scan sẽ tăng lên đáng kể.

Như vậy, với chiến thuật “bất chấp tất cả” (thật ra, kiểu này là dạng “ai đưa tôi đẩy” chứ có chiến thuận mịa gì đâu), bạn có thể sẽ vướng một số vấn đề:

  • Tốc độ xử lý chậm vì scan mặc định không tinh chỉnh phù hợp theo target;
  • Với phạm vi target lớn như class A hoặc class B, quá trình scan sẽ tạo ra traffic rất lớn trên network. Việc này có thể ảnh hưởng đến hoạt động của target cũng như phơi bày hành vi bẩn bựa của bạn.

Lưu ý: Nếu không nhớ class A/ class B là gì thì bạn bơi vào đây Giải ngố địa chỉ IP (Internet Protocol address) – Phần 1: 3 điều quan trọng nhất cần phải biết)

Vì những lý do đó, bạn sẽ cần nâng cấp tư duy chiến thuật bằng các chiêu trò phổ biến được trình bày trong phần tiếp theo.

#4 Đút túi các kỹ thuật scan của Nmap

#4.1 Stealth/SYN Scan

Stealth/SYN Scan (sẽ cần raw sockets) là dạng TCP Port Scanning chỉ gửi SYN packet đến các port của target mà không hoàn thành TCP handshake. Nếu TCP port open, target sẽ gửi lại SYN-ACKNmap sẽ kệ mịa nó không thèm xác nhận thông qua việc gửi final ACK đến target để hoàn thành three-way handshake (nếu quên TCP handshake là gì thì bạn bơi vào đây Handshaking – Wikipedia).

Vì cơ chế này nên thông tin sẽ không được chuyển lên Application layer từ đó né tránh việc bị ghi vào application log. Đây cũng là phương án nhanh gọn và hiệu quả vì chỉ cần gửi và nhận ít packet hơn so với các phương án khác. Quá trình Stealth/SYN Scan có thể chạy với option -sS.

sudo nmap -sS 192.168.188.140

Nmap Syn scan
Nmap Syn scan

Như bạn thấy đấy, kết quả sẽ tương tự như trước đó nhưng thời gian scan sẽ được rút ngắn.

#4.2 TCP Connect Scan

Đây là dạng mặc định sử dụng khi user không có raw socket privileges (nó sẽ dùng Berkeley socket API). Do phải chờ hoàn thành three-way handshake để API trả về thông tin connection status nên thời gian sẽ lâu hơn so với dạng SYN scan nói trên. Bạn có thể chỉ định dạng scan này với option -sT.

nmap -sT 192.168.188.140

Nmap TCP Connect scan
Nmap TCP Connect scan

#4.3 UDP Scan

Với dạng này (sẽ cần raw socket), Nmap sẽ chơi kiểu giao lưu phối hợp 2 phương pháp:

  • Sử dụng ICMP port unreachable để gửi empty packet đến phần lớn các port;
  • Sử dụng protocol-specific packet cho các port phổ biến (ví dụ SNMP packet cho port 161).

Bạn có thể chỉ định dạng scan này với option -sU.

sudo nmap -sU 192.168.188.140

Nmap UDP scan
Nmap UDP scan

Ngoài ra, bạn cũng có thể dùng UDP scan kết hợp với TCP SYN scan để có thông tin rõ hơn về target như sau.

sudo nmap -sS -sU 192.168.188.140

Nmap TCP - UDP scan
Nmap TCP – UDP scan

#4.4 Network Sweeping

Để scan thăm dò số lượng lớn host với quy mô công nghiệp trước khi tung combo chết người vào các host cụ thể, bạn có thể sử dụng Network Sweeping với option -sn. Với dạng này, ngoài ICMP echo request, Nmap sẽ gửi thêm TCP SYN packet đến port 443, TCP ACK packet đến port 80 và ICMP timestamp request để xác nhận host có “sống” không.

nmap -sn 192.168.188.135-140

Nmap network sweep
Nmap network sweep

Lưu ý: Ở trên tôi đã thay IP address cụ thể bằng dãy IP 192.168.188.135-140 cần thăm dò. Bạn sẽ cần cập nhật tương ứng với thông tin mà bạn đã dàn cảnh.

Với phạm vi scan lớn, bạn có thể dùng option -oG của Nmap để xử lý kết quả.

nmap -v -sn 192.168.188.135-140 -oG ping-sweep.txt

Nmap Network Sweep result
Nmap Network Sweep result

Sau đó dùng grep, pipingcut để đọc IP cho gọn lẹ (phần grep/piping/cut tôi nhai đi nhai lại nhiều lần quá rồi, bạn tự search lại để xem nếu cần nhé).

grep Up ping-sweep.txt | cut -d " " -f 2

Nmap Network Sweep clean result
Nmap Network Sweep clean result

Ngoài kiểu phục vụ với thái độ công nghiệp nói trên, bạn cũng có thể chơi giải pháp tinh tế hơn một tí là chỉ sweep một số port TCPUDP cụ thể tương ứng với các services phổ biến để tìm kiếm các lỗ hổng tiềm tàng. Ví dụ với port 80 như sau.

nmap -p 80 192.168.188.135-140 -oG sweep-p80.txt

Sau đó xử lý kết quả với command.

grep open sweep-p80.txt | cut -d" " -f 2

Nmap Network Sweep with port option
Nmap Network Sweep with port option

Bạn cũng có tùy chọn hốt một đám port phổ biến với –top-ports option. Bạn có thể xem thông tin liên quan trong file /usr/share/nmap/nmap-services (dùng head command xem 50 dòng đầu tiên).

cat /usr/share/nmap/nmap-services | head -50

Nmap services
Nmap services

Bạn có thể dùng kết hợp dò OS version, script scantraceroute với -A option như sau:

nmap -sT -A --top-ports=20 192.168.188.135-140 -oG top-port-sweep.txt

Nmap -A option
Nmap -A option
Nmap -A option (cont)
Nmap -A option (cont)

#4.5 OS Fingerprinting

Để dò thông tin OS bạn cũng có thể scan với với -O option (có yêu cầu raw socket). Chiêu thức này sẽ đoán OS của target dựa trên đặc thù của TCP/IP stack (ví dụ TTL/TCP Window size) từ packet trả về.

sudo nmap -O 192.168.188.140

Nmap OS fingerprinting
Nmap OS fingerprinting

Như bạn thấy ở trên, kết quả có ghi nhận phiên bản Windows Server 2012 tương ứng cái VM mà tôi đã dựng.

#4.6 Banner Grabbing/ Service Enumeration

Bạn cũng có thể chạy Banner Grabbing (xác định service chạy trên các port cụ thể)với option -sV và chạy các script OS/Service Enumeration với option -A.

nmap -sV -sT -A 192.168.188.140

Nmap Banner grabbing
Nmap Banner grabbing

Lưu ý: Kết quả trả về có thể bị ông Admin mông má lại để tung hỏa mù. Bạn có thể cần đối chiếu nhiều nguồn thông tin để xác minh.

#4.7 Nmap Scripting Engine – NSE

Ngoài các option nói trên, bạn cũng có thể chạy user-created scriptnhà làm” để tự động hóa công việc scanning bao gồm enumeration, brute force attack, vulnerability identification. NSE script sẽ được đặt trong /usr/share/nmap/scripts. Ngoài ra, bạn cũng có thể xem chi tiết về script với command (ví dụ với smb-os-discovery):

 nmap --script-help smb-os-discovery

Nmap - NSE help
Nmap – NSE help

Để sử dụng, bạn có thể chạy command như sau:

nmap 192.168.188.140 --script=smb-os-discovery

Nmap - NSE
Nmap – NSE

Đến đây coi như bạn đã nắm tổng thể các chiêu trò Port Scanning với Nmap rồi đấy. Tuy nhiên, để có thể tung ra các combo damage cao và chuẩn xác, bạn sẽ cần đầu tư kha khá thời gian để cày level với chiêu thức tôi đã giới thiệu.

1 thought on “Penetration Testing Step 1.b – Port Scanning với “hàng nóng” Nmap”

Leave a Reply

Your email address will not be published. Required fields are marked *