Trao đổi với tôi

http://www.buidao.com

12/7/09

[Security] Một số tính năng trong Nmap 4.0

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.

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 filter
nmap2.jpg
anh3.jpg
nmap4.jpg
Tạo các kiểu quét khác bằng cách sử dụng các TCP flag trong TCP Header (--scanflags )

Ngoà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ả:

nmap5.jpg

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 )

IP Protocol scan là một kiểu quét mới, cho phép bạn xác định host đích hỗ trợ những giao thức nào(TCP, UDP, ICMP...). Về bản chất đây không phải là kỹ thuật quét cổng, vì giá trị mà bạn cần xác định ở đây là danh sách các giao thức - một trường nằm trong IP Header có tên gọi là Protocol Value. Chúng ta lấy ví dụ:
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.
nmap6.jpg
Tôi dùng Ethereal để bắt các gói tin do Nmap tạo ra. Kết quả cho thấy, các gói tin IP được tạo ra chỉ bao gồm IP Header và có giá trị của trường Protocol thay đổi(được lấy từ file Nmap-protocols). Các gói tin IP này đều chỉ bao gồm IP Header và độ dài của nó là 20 bytes(Total Length = 20bytes). Ngoại trừ 3 giá trị của protocol là: 1(ICMP), 6(TCP) và 17(UDP).Nmap sẽ tạo ra ba gói tin đặc biệt là: ICMP Echo Request(Type=8, code=0), UDP(UDP lengh=8byte) và TCP(SYN = 1). Nếu host đích trả về gói tin tương ứng với protocol nào thì Nmap sẽ hiển thị trạng thái Open đối với Protocol đó. Ví dụ:
anh7.jpg

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)
nmap8.jpg

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
anh9.jpg

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ả:
anh10.jpg

Đầ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:
anh12.jpg

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:
nmap14.jpg

Tham khảo: http://securityfocus.com

http://insecure.org/Nmap
Nguồn: Sercurity Focus