Sau khi đã xác định được host có đang sống hay không, bước tiếp theo để tấn công 1 hệ thống là kiểm tra xem có cổng nào đang mở bằng kỹ thuật Port Scanning.
Giới thiệu về Port Scanning
Port Scanning là quá trình xác định cổng TCP/IP mở và có sẵn trên một hệ thống. Công cụ Port Scanning cho phép một hacker tìm hiểu về các dịch vụ có sẵn trên một hệ thống nhất định. Mỗi dịch vụ hay ứng dụng máy tính được kết hợp với một số cổng thông dụng. Trong bài viết này, mình sẽ sử dụng 2 công cụ đó là Nmap và Zenmap.
Công cụ Nmap
Nmap là một công cụ bảo mật được phát triển bởi Floydor, ban đầu nó chỉ là một tool *nix nhưng về sau đã phát triển rất mạnh mẽ phù hợp với nhiều nền tảng và phát triển cả giao diện UI. Nmap hỗ trợ quét các kiểu quét sau:
- TCP SYN (half open) scanning
- TCP FIN
- Xmas hay NULL (stealth) scanning
- TCP ftp proxy (bounce attack) scanning,
- SYN/FIN scanning thông qua IP (bypass một số bộ loc)
- TCP ACK và Window scanning
- UDP raw ICMP port unreachable scanning
- ICMP scanning (ping-sweep),
- TCP Ping scanning
- Direct (non portmapper) RPC scanning
- Nhận diện hệ điều hành bằng TCP/IP Fingerprinting
- Reverse-ident scanning
- Vanilla TCP connect() scanning
$ nmap -A web.at10e.org
Starting Nmap 7.12 ( https://nmap.org ) at 2017-02-02 15:02 ICT
Nmap scan report for web.at10e.org (192.168.58.1)
Host is up (0.00044s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 69:26:48:e7:e4:bd:d8:a1:9b:0d:1c:6c:ba:76:8e:6d (RSA)
|_ 256 af:07:08:8d:52:14:24:49:11:53:6f:97:4a:fe:6b:26 (ECDSA)
53/tcp open domain ISC BIND 9.10.3-P4-Ubuntu
| dns-nsid:
|_ bind.version: 9.10.3-P4-Ubuntu
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: ...:: Qu\xE1\xBA\xA3n l\xC3\xBD sinh vi\xC3\xAAn ::...
110/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: AUTH-RESP-CODE TOP UIDL PIPELINING SASL RESP-CODES CAPA
143/tcp open imap Dovecot imapd
|_imap-capabilities: ID IMAP4rev1 listed LOGIN-REFERRALS more have post-login capabilities
ENABLE IDLE LOGINDISABLEDA0001 LITERAL+ Pre-login OK SASL-IR
|_imap-ntlm-info: ERROR: Script execution failed (use -d to debug)
MAC Address: 08:00:27:38:7E:5E (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.4
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT ADDRESS
1 0.44 ms web.at10e.org (192.168.58.1)
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 28.39 seconds
-A là option cho phép Nmap phát hiện OS mà Server đang sử dụng.
Command 2.1: Dùng Nmap để quét cổng trên web.at10e.org
Như đã thấy ở kết quả phía trên, Nmap sẽ quét và phát hiện ra các cổng đang tồn tại trên Server. Nmap cũng sẽ cho biết thêm dịch vụ nào đang được sử dụng và công cụ nào dùng để kết nối trên cổng đó (Danh sách các cổng thông dụng có thể tham khảo thêm tại đây). Ngoài ra, option -A còn cho phép Nmap phát hiện được OS và thiết bị đang được sử dụng của Server như là card mạng Server đang sử dụng là Oracle VirtualBox virtual NIC hay là Server đang chạy trên OS nhân Linux có phiên bản 3.2 - 4.4.
Công cụ Zenmap
Zenmap thật ra chỉ là một phiên bản GUI của công cụ Nmap được phát triển trên cả Windows và Linux nên mình sẽ không đi sâu vào phần này và đi thẳng vào phân tích gói tin.
Phân tích gói tin
Như đã biết ở trên, Nmap sẽ quét các cổng và đưa ra kết quả cho chúng ta biết về số cổng cũng như dịch vụ đang chạy trên cổng đó. Nhưng làm thế nào mà Nmap có thể làm được như vậy, trong phần này mình sẽ đi sâu vào phân tích gói tin cũng như cách hoạt động của Nmap, cách mà Nmap có thể quét các cổng trên Server.
Hình 4.1: TCP Stealth Scan.
Đầu tiên, Nmap sẽ sử dụng kỹ thuật TCP Stealth Scan để xác định các port đang đóng hay mở.
Đối với port đang đóng:
- Bước 1: Nmap sẽ gửi gói tin gồm [SYN + Port] (cụ thể ở gói tin 25 là port 23).
- Bước 2: Sau đó Server sẽ gửi trả lại gói tin gồm [RST, ACK] (gói tin 26).
- Bước 3: Không có.
Cho thấy rằng port 23 đang đóng trên Server, do Server chỉ trả về [RST, ACK]
thay vì [SYN, ACK] nên không thể hoàn tất quá trình bắt tay 3 bước.
Đối với port đang mở:
- Bước 1: Nmap sẽ gửi gói tin gồm [SYN + Port] (cụ thể ở gói tin 33 là port 22).
- Bước 2: Sau đó Server sẽ gửi trả lại gói tin gồm [SYN, ACK] (gói tin 34).
- Bước 3: Client sẽ tiếp tục gửi gói tin gồm [RST] để xác nhận (gói tin 37).
Cho thấy rằng port 22 đang mở trên Server, do Server và Client đã hoàn tất
đầy đủ trong quá trình bắt tay 3 bước.
Nhưng ở Bước 3 khác với quá trình bắt tay 3 bước thông thường là Client chỉ
gửi [RST] thay vì [RST, ACK], đây cũng là đặc điểm của kỹ thuật TCP Stealth
Scan để tránh các cấu hình Firewall thông thường và yếu.
Hình 4.2: Xác định tên dịch vụ
Sau đó Nmap sẽ xác định tên dịch vụ đang sử dụng trên port đó bằng cách tiếp tục thực hiện quá trình bắt tay 3 bước thông thường.
Quá trình bắt tay 3 bước:
- Bước 1: Nmap sẽ gửi gói tin gồm [SYN + Port] (cụ thể ở gói tin 2023 là port 22).
- Bước 2: Sau đó Server sẽ gửi trả lại gói tin gồm [SYN, ACK] (gói tin 2024).
- Bước 3: Client sẽ tiếp tục gửi gói tin gồm [ACK] để kết nối (gói tin 2034).
- Bước 4: Sever sẽ tin cậy và trả lại thông tin là tên và phiên bản của dịch vụ (
gói tin 2044, qua giao thức SSH với SSH-2.0-OpenSSH_7.3p1 Ubuntu-1).
- Bước 5: Tiếp đó là Server và Client sẽ liên tục thực hiện trao đổi các gói tin
gồm [ACK] và [FIN, ACK] (2045-2049) để ngưng các kết nối và đưa ra kết quả.
Có thể thấy rằng quá trình này khác với TCP Stealth Scan là Server đã
tin cậy và trả về các thông tin cần thiết cho Nmap.
Ngoài ra cách mà Nmap có thể phát hiện được hệ điều hành mà Server đang sử dụng, các bạn có thể tham khảo thêm ở link này. Chú ý kĩ ở phần Fingerprinting và nmap-os-db.