Như vậy là sau hai năm phát triển kể từ lúc phát hành phiên bản 3.50, Nmap 4.0 đã ra lò. Theo thông tin từ Insecure.org, trong phiên bản này Nmap có khoảng 230 cải tiến (http://www.insecure.org/Nmap/changelog.html). Một số tính năng nổi bật là Port scan engine được viết lại hoàn toàn, quá trình quét diễn ra nhanh hơn và tốn ít bộ nhớ. Nmap mới bổ sung thêm rất nhiều tùy chọn, linh hoạt hơn với người dùng. Bên cạnh đó hệ thống tài liệu hướng dẫn sử dụng được viết lại hoàn toàn, tổ chức tốt hơn, phong phú, chi tiết, dễ sử dụng hơn. Trong phạm vi bài viết này, tôi sẽ phân tích một số tính năng mới của Nmap cũng như so sánh với phiên bản cũ.
Chức năng quan trọng, nổi bật nhất của Nmap đó là quét cổng và nhận diện các dịch vụ. Trong phiên bản mới này, Nmap có thểm một số phương pháp mới, đồng thời mở hết các TCP flag cho phép người dùng tùy biến tự tạo kiểu quét cho riêng mình. Chúng ta sẽ điểm qua một số kỹ thuật quét cổng của Nmap.
ACK scan
Nmap –sA –p22 203.162.168.143
Gửi đi các gói tin TCP chỉ bật cờ ACK, chờ phản hồi từ server
Tùy vào ứng xử của các loại hệ điều hành:
Ví dụ:
- Hệ điều hành Solaris, Linux không trả gói tin về.
- Hệ điều hành Windows trả về các gói tin TCP với cờ RST được bật :
Window Size Scan
Nmap –sW –p22 203.162.168.143
Gửi các gói tin TCP chỉ bật cờ ACK, chờ thông tin phản hồi và phán đoán trạng thái của cổng dựa vào giá trị Window Size của gói tin trả về. Ở một số hệ thống, gói tin trả về từ các cổng mở thì Window Size sẽ có giá trị dương( > 0), còn các cổng đóng thì Window Size có giá trị bằng 0. Vì vậy, Nmap sẽ dựa vào giá trị của Window Size của gói tin trả về (nếu có) để phán đoán tình trạng hiện tại của cổng. Tuy nhiên, bạn không nên tin tưởng tuyệt đối vào kỹ thuật này. Chúng ta thử vài ví dụ:
Scan www.vietnamnet.vn. Hệ điều hành: Sun Solaris.
Kết quả: Không nhận được gói tin phản hồi nào, Nmap kết luận filterNgoài các phương pháp scan có sẵn, Nmap 4.x còn có thêm khả năng cho phép người dùng tùy biến một cách linh hoạt 8 bit TCP flag. Các phương pháp quét có sẵn của Nmap đều có những dấu vết nhất định và từ đây người quản trị hệ thống hình thành nên các bộ luật cho hệ thống phát hiện xâm nhập. Chính vì lý do này mà các nhà phát triển Nmap đưa thêm tùy chọn –scanflags cho phép bạn có thể sáng tạo ra những phương pháp quét cổng mới cho mình.
Giá trị của TCP flag có thể là số dạng thập phân hoặc danh sách tên(viết liền nhau, có thể không theo thứ tự) của các bit cờ. Ví dụ: Để gửi đi các gói tin TCP có bật đồng thời 3 bit cờ ACK, PSH và FIN tới sample.com ta có thể dùng:
Nmap –scanflags 25 sample.com
hoặc:
Nmap –scanflags ACKPSHFIN sample.com
(Trong đó 25 là giá trị thập phân ứng với chuỗi 6 bit: 011001)
Kết quả:
Nếu như bạn không chỉ định dùng tùy chọn nào khi scan thì mặc định Nmap sẽ sử dụng kiểu -sS tức là SYN scan.
Nhận diện các giao thức (-sO Protocol Scan )
Nmap -sO 203.162.1.169
Do option -sO được chỉ định, Nmap sẽ sử dụng 1 danh sách Protocol Value - Protocol Name được lưu trong file Nmap-protocols nằm trong cùng thư mục với file Nmap.exe.
Trong trường hợp này, máy tôi nhận được gói tin TCP với cờ RST được bật nên trạng thái của TCP(6) sẽ là open.Do nhận được các gói tin ICMP với type=3(Destination Unreachable), code=3(Port Unreachable) kèm theo "xác" của gói tin UDP đã gửi đi cho nên Nmap hiện trạng thái của UDP(17) là filtered. Do có ICMP(Echo reply: type=0, code=0) và ICMP(type=3, code=3) nên trạng thái của ICMP(1) là open(xem kết quả ở hình trên)
Nhận diện các dịch vụ đang chạy và phiên bản tương ứng trên hệ thống
Sau khi sử dụng Nmap để quét các cổng đang mở trên host đích, Nmap có thể dựa cơ sở dữ liệu về các dịch vụ Nmap-services để phán đoán xem cổng đang mở tương ứng với dịch vụ nào. Các bạn có thể tìm thấy file Nmap-services (trong cùng thư mục với file Nmap.exe) với dấu hiệu nhận dạng của 2200 loại dịch vụ. Kết quả nhận diện tên dịch vụ thường là chính xác ví dụ port mail server (SMTP) dùng port 25, web server (HTTP) dùng port 80, name server (DNS) port 53. Tuy nhiên, kết quả này cũng không thể tin tưởng tuyệt đối vì các nhà quản trị có thể dùng cổng khác thay vì cổng mặc định của một dịch vụ nào đó. Tuy nhiên việc phát hiện ra dịch vụ nào đang chạy trên hệ thống đích cũng chưa cung cấp cho ta được nhiều thông tin, cái mà chúng ta quan tâm hơn là phiên bản hiện tại của mail server, web server, DNS server... là gì. Nếu ta biết được chính xác phiên bản nào thì sử dụng các mã khai thác sẽ dễ dàng hơn. Đây là chức năng nhận diện phiên bản của Nmap (Version Detection). Theo Fyodor bước tiến lớn nhất của Nmap ở chức năng nhận diện phiên bản là số lượng các dấu hiệu nhận dạng. Hiện nay Nmap có 3,153 dấu hiệu nhận dạng trên tổng số 381 giao thức. Bên cạnh đó, tốc độ và độ chính xác trong dự đoán của Nmap cũng được cải thiện rất nhiều.
Quá trình nhận diện phiên bản của Nmap diễn ra như sau: Đầu tiên là quét cổng và nhận diện tên dịch vụ. Sau đó Nmap sẽ kết nối tới các cổng đang mở, dựa vào các thông tin trả về (nếu có) ví dụ như banner của dịch vụ Nmap sẽ tiến hành so trùng các thông tin này với cơ sở dữ liệu Nmap-service-probes và đưa ra kết luận. Đây là một ví dụ về "dấu hiệu nhận dạng" dịch vụ trong CSDL Nmap-service-probes
Các bạn có thể xem thêm tại đây:
http://www.insecure.org/Nmap/vscan/vscan-fileformat.html
Ví dụ: Tôi dùng Nmap để thăm dò các dịch vụ đang chạy trên server 203.162.1.169, đồng thời tôi cũng muốn biết phiên bản hiện tại của các phần mềm tương ứng trên server này:
Nmap -sSV -T4 -F -d --version-trace 203.162.1.169
Kết quả:
Đầu tiên, Nmap sẽ tiến hành nhận diện các cổng đang mở và dịch vụ tương ứng. Danh sách các dịch vụ cũng là một dấu hiệu để Nmap phân biệt các hệ điều hành. Quan sát cho thấy, Nmap vẫn gặp khó khăn trong việc phân biệt các hệ điều hành của Microsoft. Trong ví dụ trên, Nmap dự đoán 95% server này chạy hệ điều hành Microsoft Windows 2003 server, tuy nhiên nó vẫn không phân biệt được là Windows 2003 Server SP1 hay SP2. Đó là do các gói tin trả về từ các hệ điều hành này đều có đặc điểm tương đồng nhau, không có dấu hiệu khác biệt để Nmap có thể khẳng định chính xác là phiên bản nào.
Đánh lừa IDS
Một số người cho rằng chức năng đánh lừa IDS không nên đưa vào Nmap bởi vì nó có thể bị attacker lợi dụng để làm việc xấu. Tuy nhiên, theo lập luận của các nhà phát triển Nmap thì đó là một thách thức cho những người bảo vệ hệ thống. Một khi họ đã biết là attacker sẽ sử dụng các thủ thuật để đánh lừa IDS của mình thì họ sẽ phải phòng thủ cẩn thận, có những bộ luật chặt chẽ hơn.
Chức năng đánh lừa IDS của Nmap hỗ trợ khá nhiều tùy chọn.
Ví dụ: Nmap –e eth0 –P0 –S 203.162.0.181–g 1234 –ttl 123 –badsum 203.162.1.169
–e eth0: dùng interface có tên là eth0
-P0: không cần gửi các gói tin ICMP echo request để thăm dò host 203.162.1.169
–S 203.162.0.181: giả mạo địa chỉ IP nguồn là 203.162.0.181
-g : giả mạo địa chỉ cổng nguồn là 1234
--ttl 123: ấn định giá trị TTL trong IP Header là 123
-- badsum: làm sai lệch giá trị của TCP Checksum tức là làm mất tính toàn vẹn của gói tin TCP
Dưới đây là hình ảnh gói tin do Nmap gửi ra:
Việc gửi các gói tin đi với mục đích qua mặt giúp attacker có thể kiểm tra được cách thức hành xử của IDS với các gói tin này thông qua đó có thể hình dung ra được được bộ luật mà IDS sử dụng.
Hiện tại, phiên bản mới nhất của Nmap là 4.01, đây là một bước tiến lớn của Nmap và cộng đồng phát triển nó. Trả lời phỏng vấn của SecurityFocus, Fyodor cũng cho biết đã có rất nhiều thành viên của cộng đồng sử dụng Nmap đã tham gia tư vấn và phát triển công cụ này. Vì vậy, các bạn có thể thấy phiên bản mới này đã được trang bị thêm rất nhiều tính năng mới, thân thiện, cho phép người sử dụng có thể tùy biến linh hoạt hơn. Một điều không thể không nhắc tới là tốc độ và hiệu năng của Nmap cũng đã được cải thiện rất nhiều. Dưới đây là một bảng thống kê so sánh tốc độ và bộ nhớ sử dụng của Nmap:
Tham khảo: http://securityfocus.com
http://insecure.org/Nmap