CHI TIẾT BÀI VIẾT

Scanning Network - Giới thiệu & hướng dẫn sử dụng Nmap

08/03/2022 4:17:52 PM | Xem: lần

Phần 1. Giới thiệu & hướng dẫn sử dụng Nmap

Phần 2. Hướng dẫn cài đặt Zenmap/Nmap trên Windows 10

Phần 3. Hướng dẫn cài đặt Angry IP Scanner

Phần 4. Thực hiện Host Discovery sử dụng Zenmap/Nmap và Angry IP Scanner 

Phần 5. Thực hiện quét Port và Service bằng MegaPing

-------------------------------------------------------------------------------------------------------------------------


PHẦN 1. GIỚI THIỆU & HƯỚNG DẪN SỬ DỤNG NMAP


Nmap là gì?

Nmap (Network Mapper) là một công cụ bảo mật được phát triển bởi Gordon Lyon (hay gọi với tên Floydor Vaskovitch). Công cụ Nmap là mã nguồn mở, miễn phí, được dùng để quét cổng và các lỗ hổng bảo mật bằng cách gửi các gói tin (packets) và phân tích các phản hồi (analyzing responses).

Mục đích sử dụng Nmap là để xác định xem thiết bị nào đang chạy trên hệ thống mục tiêu, cũng như tìm kiếm ra các máy chủ có sẵn và các dịch vụ mà các máy chủ cung cấp, đồng thời dò tìm các cổng mở và phát hiện các nguy cơ bảo mật.


Cách hoạt động của Nmap

Khi scanning port với Nmap, chúng ta có 3 loại scan cơ bản thường được sử dụng:

  1. TCP Connect Scans (flag -sT)

  2. SYN "Half-open” Scans (flag -sS)

  3. UDP Scans (flag -sU)

Một vài các kiểu scans khác ít phổ biến hơn nhưng vẫn có một số trường hợp phải sử dụng:

  1. TCP Null Scans (flag -sN)

  2. TCP FIN Scans (flag -sF)

  3. TCP Xmas Scans (flag -sX)


Tiếp theo chúng ta sẽ đi sâu vào từng kiểu scan:


1. TCP Connect Scans

Để hiểu được TCP Connect Scans, điều quan trọng nhất là bạn phải hiểu rõ về TCP Three-way Handshake process.


TCP (viết tắt từ Transmission Control Protocol) là một giao thức connection-based (hướng kết nối), điều này có nghĩa là trước khi bạn gửi bất kỳ dữ liệu nào qua TCP, bạn phải hình thành kết nối ổn định giữa 2 máy tính với nhau. Tiến trình hình thành kết nối này gọi là TCP Three-way Handshake, có nghĩa là thủ tục bắt tay 3 bước.

Ví dụ về 2 máy Client và máy Server. Trước khi truyền dữ liệu, máy Client sẽ gửi một gói tin request SYN bit (viết tắt là synchronise) đến máy Server (Điều này cũng giống như lúc bạn mới chuyển đến một khu nhà trọ mới, bạn muốn làm quen với một cô gái hàng xóm ở cạnh mình thì điều đầu tiên là mình phải qua chào hỏi cô ấy trước đúng không?). Tiếp theo máy Server sẽ gửi phản hồi một gói tin xác nhận chứa SYN bit, cũng như là một Acknowledge bit - viết tắt là ACK về cho Client (Sau khi bạn chào hỏi cô gái hàng xóm đấy thì cô gái ấy cũng nở một nụ cười chào lại bạn). Cuối cùng là máy Client sẽ gửi lại cho máy Server một gói ACK để xác nhận rằng kết nối đã được thiết lập thành công (Lúc này bạn và cô gái đã trở thành bạn của nhau). Sau khi hoàn tất việc bắt tay 3 bước, lúc này giữa 2 máy tính đã có thể truyền dữ liệu với nhau một cách đáng tin cậy.


Note: Bất kỳ dữ liệu nào bị hỏng hoặc bị mất trong quá trình truyền sẽ được truyền lại, do đó kết nối dường như không bị mất dữ liệu. Hãy xem hình bên dưới để hiểu rõ hơn.



Thế thì việc hiểu rõ về TCP Three-way Handshake (thủ tục bắt tay 3 bước) này có liên quan gì đến công cụ Nmap hay không?

  => Câu trả lời là có.


Quá trình TCP Connect Scans hoạt động bằng cách thực hiện thủ tục bắt tay 3 bước với từng port của mục tiêu. Hay nói cách khác, Nmap cố gắng kết nối đến từng port TCP được chỉ định và xác định xem dịch vụ có được mở trên port đấy hay không bằng phản hồi mà nó nhận được.

Ví dụ, theo RFC793

"... If the connection does not exist (CLOSED) then a reset is sent in response to any incoming segment except another reset. In particular, SYNs addressed to a non-existent connection are rejected by this means."

Nói một cách dễ hiểu, nếu Nmap gửi một gói request TCP với cờ SYN đến một port đã đóng của máy Server (có thể là không có dịch vụ hoặc bị firewall chặn, vấn đề này mình sẽ nói sau), máy Server sẽ phản hồi lại một gói tin TCP với cờ RST (reset), lúc này Nmap sẽ biết rằng port này trên máy Server đã được đóng. Hãy xem hình bên dưới để hiểu rõ hơn.



Ngược lại, nếu Nmap gửi một gói request TCP với cờ SYN đến một port được mở (Có chạy dịch vụ trên port này) trên máy Server thì máy Server sẽ phản hồi lại một gói TCP với cờ SYN/ACK, lúc này Nmap sẽ đánh dấu port này là port đang mở. Và cuối cùng, máy Server sẽ gửi phản hồi lại một gói TCP với cờ ACK (Nói thẳng ra là nó xác định port bằng thủ tục bắt tay 3 bước luôn).

Dưới đây mình sẽ ví dụ sử dụng TCP scans để cho có bạn dễ hình dung:



Như bạn thấy mình scan thử facebook.com thì kết quả cho ra có 2 port open, 1 port đã đóng và 997 TCP ports bị lọc (không phản hồi)


Đến đây bạn đã biết cách hoạt động của Nmap với loại scan là TCP Connect Scans rồi đúng không? Tuy nhiên, ngoài 2 trường hợp trên thì vẫn còn một trường hợp nữa mà mình đã đề cập ở trên. Đó là điều gì sẽ xảy ra nếu port đang mở nhưng bị ẩn sau firewall (tường lửa)?


Nhiều hệ thống firewall được cấu hình đơn giản để drop các gói tin đi vào. Khi Nmap gửi request TCP SYN đến, firewall sẽ drop gói tin và không phản hồi lại một gói tin nào. Điều này chỉ ra rằng port đang được tường lửa bảo vệ và do đó cổng được Nmap coi là đã được lọc (filtered).

Việc cấu hình firewall để chặn các gói tin scan là rất dễ dàng. Bạn có thể thử tạo một máy Linux và cài đặt một dịch vụ bất kỳ. Sau đó sử dụng iptables trong Linux để cấu hình việc drop hay phản hồi các gói tin. Ví dụ:

iptables -I INPUT -p tcp --dport -j REJECT --reject-with tcp-reset

Như bạn thấy chỉ một dòng đơn giản thôi thì bạn đã có thể gây khó khăn cho Hacker hay những kẻ xấu muốn thu thập thông tin về dịch vụ của bạn trong hệ thống.


2. SYN Scans

SYN scans cũng giống với TCP scans, SYN scans (flag -sS) được sử dụng để quét port-range của một target hoặc nhiều target. Nhưng cách hoạt động của SYN scans có đôi chút khác biệt so với TCP scans. SYN scans còn được gọi là "Half-open” scans hoặc là "Stealth” scans, như tên gọi thì chắc bạn cũng đã đoán ra được rằng kiểu scan này rồi đúng không? Đúng như tên gọi của nó, kiểu scan này có khả năng ẩn danh, lén lút hơn kiểu TCP scans.

Bạn hãy xem hình ở dưới đây, việc gửi gói tin cũng giống như TCP scan ở 2 gói đầu tiên, nhưng khác biệt ở gói thứ 3 thay vì gửi tới Target gói ACK thì SYN scans sẽ gửi gói RST tới target.



Kiểu scan này rất có lợi đối với hacker hay kẻ tấn công bởi vì:

  • Nó có thể được sử dụng để bypass (vượt qua) các hệ thống IDS (Intrusion Detection Systems) đã cũ.

  • Việc SYN scans sẽ không ghi lại nhật ký bởi các ứng dụng đang listen trên các port dịch vụ

  • SYN scans quét cổng nhanh hơn so với TCP Connect Scans.

Tuy nhiên SYN Scans cũng có mặt bất lợi bởi:

  • Khi sử dụng SYN Scans cần phải sử dụng user root hoặc sudo trên Linux, bởi vì SYN Scan yêu cầu khả năng tạo các gói tin thô (Raw packet, trái ngược với thủ tục bắt tay 3 bước). Đây là một đặc quyền mà chỉ có user root mới có.

Mình sẽ demo thử SYN Scans ở dưới đây để các bạn dễ hình dung:



Như bạn thấy mình scan thử facebook.com thì kết quả cho ra có 2 port open, 2 port đã đóng và 996 TCP ports bị lọc (không phản hồi).

Note: Để nghiên cứu nhiều hơn về Nmap, bạn có thể sử dụng nmap --help hoặc nmap -h để xem thêm các flag hoặc options.



3. UDP Scans

Không giống với TCP là kết nối connection-based (hướng kết nối), UDP là kiểu kết nối stateless (Không trạng thái) hay còn gọi là connectionless. Có nghĩa là thay vì bắt đầu kết nối bằng cách làm thủ tục bắt tay 3 bước (Three-way Handshake) TCP, thì UDP sẽ kết nối trực tiếp mà không cần "rườm rà” như TCP.

Điều này rất có lợi cho các kết nối dựa vào tốc độ hơn chất lượng (Ví dụ như Videos, Voice) nhưng việc này sẽ khiến cho dữ liệu dễ bị thất thoát, mất hoặc hư hỏng và thiếu tin cậy hơn TCP vì nó bỏ qua quá trình kiểm tra lỗi. Hơn nữa việc quét UDP sẽ khó khăn hơn và chậm hơn nhiều trong Nmap. Flag để quét trong Nmap là -sU.

Khi một gói tin được gửi đến port UDP mở, bạn sẽ không nhận được phản hồi. Khi điều này xảy ra, Nmap sẽ đánh dấu port này là open|filtered. Nói cách khác, Nmap nghi ngờ rằng cổng đang mở hoặc cũng có thể là bị tường lửa chặn. Nhưng vẫn sẽ có trường hợp UDP sẽ phản hồi lại (điều này rất bất thường).

Ngược lại khi một gói tin được gửi đến port UDP đóng, mục tiêu sẽ phản hồi lại gói ICMP (ping) chứa tin nhắn là port is unreachable.

Note: Do việc quét UDP rất khó khăn (do tốc độ quét chậm, mình quét 1000 port UDP đầu phải mất hơn 20 phút mặc dù mạng nhà mình tương đối là mạnh). Vì vậy, khi quét port UDP bạn nên kết hợp sử dụng thêm option là --top-port . Ví dụ: nmap -sU --top-ports 20 , Nmap sẽ quét 20 cổng đầu phổ biến nhất, vì vậy sẽ nhanh hơn rất nhiều so với việc scan 1000 port.

Ví dụ:



Như hình các bạn thấy các port UDP Nmap đều để STATE là open|filtered (Nghi ngờ port đang mở hoặc do có tường lửa chặn)

Qua bài viết này các bạn đã biết cách sử dụng Nmap với các kiểu quét port cơ bản rồi chứ? Vẫn còn nhiều kiểu scan khác mình sẽ có những bài viết khác nhau, mời các bạn đón xem nhé!

                                                                                                                                                                                       Viết bởi: Tất Trấn Hào