NỘI DUNG
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, Windows và Mac 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.
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 Machines – VM 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ết và Giả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
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
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-ACK và Nmap 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
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
#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
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
#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
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
Sau đó dùng grep, piping và cut để đọ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
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 TCP và UDP 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
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
Bạn có thể dùng kết hợp dò OS version, script scan và traceroute với -A option như sau:
nmap -sT -A --top-ports=20 192.168.188.135-140 -oG top-port-sweep.txt
#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
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
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 script “nhà 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
Để sử dụng, bạn có thể chạy command như sau:
nmap 192.168.188.140 --script=smb-os-discovery
Đế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”