Nmap (Network Mapper) được Gordon Lyon giới thiệu lần đầu vào năm 1997, là một công cụ quét, theo dõi và đánh giá bảo mật hàng đầu, ban đầu nmap chỉ phát triển trên hệ điều hành linux, về sau có cả phiên bản dành cho các hệ điều hành khác như Windows, Mac OS,… đặc biệt nmap có một phiên bản GUI tên là Zenmap.
Cấu trúc lệnh:
Như được hiển thị trong ảnh chụp màn hình đầu tiên, quá trình quét Nmap thông thường sẽ trả về các cổng đang mở trong số 1.000 cổng được sử dụng phổ biến nhất. Theo mặc định, Nmap quét 1.000 cổng phổ biến nhất.
Các cổng được liên kết với các giao thức dịch vụ liên quan. Trong kết quả đầu ra sau, Nmap tìm thấy các cổng mở 21, 514 và 3128.
Người dùng biết cổng 21, 514 và 3128 đang mở. Ví dụ, anh ta biết rằng có một máy chủ FTP ở cổng 21. Nhưng người dùng muốn tìm hiểu phần mềm FTP và tất cả các dịch vụ khác.
Để phát hiện phần mềm và phiên bản, cờ -sV (Phiên bản) có thể được chuyển, như trong ảnh chụp màn hình bên dưới. Trong đó bạn có thể thấy, Vsftpd 3.0.3 và Squid Proxy 4.13 được phát hiện.
Cờ -A cũng trả về các phiên bản dịch vụ cùng với thông tin hệ điều hành.
Trong ví dụ sau, cờ -A tiết lộ mục tiêu là hệ điều hành Linux, có thể là 2.6.18 hoặc 2.6.22:
Phần tiếp theo của hướng dẫn này mô tả các kỹ thuật NSE (Nmap Scripting Engine). Ví dụ thực tế này cho thấy cờ –script nào được triển khai để kết hợp tập lệnh lấy biểu ngữ vào quá trình quét.
Tập lệnh lấy biểu ngữ phân tích các phản hồi của dịch vụ để nhận ra phiên bản phần mềm của họ.
Trong ví dụ sau, tập lệnh banner được thực thi trong cổng nhắm mục tiêu quét 21, tiết lộ máy chủ FTP là ProFTPD.
Để kết thúc phần này và tiếp tục với các kiểu quét lỗ hổng bảo mật, ví dụ thực tế bên dưới cho thấy cách triển khai cờ -O (Hệ điều hành) để đoán hệ điều hành mục tiêu.
Trong trường hợp này, Nmap chắc chắn 93% mục tiêu có Linux với kernel 4.4.
Đây là những kỹ thuật Nmap được biết đến nhiều nhất để phát hiện phiên bản dịch vụ và hệ điều hành.
Phát hiện lỗ hổng bằng NSE (Nmap Scripting Engine)
Phần này mô tả một số kỹ thuật để phát hiện các lỗ hổng thông qua quét Nmap, với sự hỗ trợ của NSE (Nmap Scripting Engine), được giải thích trong hướng dẫn NSE của chúng tôi.
Nmap Scripting Engine là một tập hợp các tập lệnh mà người dùng có thể đưa vào quá trình quét của mình, được thiết kế chủ yếu để phát hiện và khai thác các lỗ hổng. Người dùng cũng có thể viết tập lệnh của mình cho các mục đích tùy chỉnh.
Bước đầu tiên đối với các tập lệnh NSE là cập nhật cơ sở dữ liệu, đảm bảo Nmap được cập nhật các lỗ hổng và kỹ thuật mới nhất.
Để cập nhật NSE, hãy chạy lệnh sau:
Sau khi cập nhật cơ sở dữ liệu, người dùng có thể chạy nhiều tập lệnh khác nhau để tìm lỗ hổng. Các tập lệnh được phân loại theo danh mục mà bạn có thể xem tại https://nmap.org/nsedoc/categories/.
Trong ví dụ sau, cờ –script gọi các tập lệnh từ danh mục vuln, quét khoảng 150 tập lệnh phổ biến những điểm yếu.
Như bạn có thể thấy trong ảnh chụp màn hình sau, Nmap báo cáo một số lỗ hổng bị loại bỏ trong khi các lỗ hổng khác có thể xảy ra:
Tập lệnh http-csrf cho phép người dùng quét các trang web để tìm lỗ hổng csrf (Giả mạo yêu cầu tập lệnh chéo).
Như bạn có thể thấy bên dưới, nếu mức độ chi tiết (-v) được hướng dẫn, Nmap sẽ in kết quả của tất cả các lần kiểm tra mà nó thực hiện đối với trang web.
Người dùng có thể triển khai các ký tự đại diện để hoàn thành tên tập lệnh. Trong ví dụ sau, người dùng thêm tất cả các tập lệnh liên quan đến http hoặc tất cả các tập lệnh có tên bắt đầu bằng “http”, độc lập với cách nó tiếp tục.
Nmap Scripting Engine có thể nhắm mục tiêu toàn bộ mạng để phát hiện các máy tính bị nhiễm phần mềm độc hại. Đây là một kỹ thuật tuyệt vời để quản trị viên tiếp cận các cuộc xâm nhập phần mềm độc hại có thể xảy ra.
Bạn có thể tìm thấy các tập lệnh phần mềm độc hại có sẵn tại https://nmap.org/nsedoc/categories/malware.html.
Phát hiện lỗ hổng bằng Nmap và Vulscan
Vulscan là một tập lệnh bổ sung dành cho NSE, mặc định không có trong Nmap.
Vulscans được giải thích sâu sắc trong hướng dẫn Nmap Vulscan, nhưng phần này cung cấp đánh giá ngắn gọn, cài đặt và hướng dẫn cơ bản.
Vulscan là tập lệnh Nmap Scripting Engine để hỗ trợ các tác vụ phát hiện lỗ hổng,
Để có được nó, hãy sao chép Vulscan bằng lệnh git, như hiển thị bên dưới:
Tạo một liên kết mềm đến thư mục tập lệnh NSE bằng cách thực hiện lệnh sau:
Giờ đây, Vulscan có thể được gọi bằng cờ –script để chạy kiểm tra lỗ hổng bảo mật bổ sung.
Cú pháp như sau:
Trong ví dụ sau, Vulscan được khởi chạy trên linux-console.net.
Khi Vulscan phát hiện một lỗ hổng bảo mật có thể xảy ra, nó sẽ thực thi tất cả các tập lệnh liên quan.
Vulscan là một sự bổ sung tuyệt vời cho người dùng Nmap, đặc biệt là những người đã sử dụng Nmap Scripting Engine. Chúng tôi thực sự khuyên bạn nên tiếp tục đọc hướng dẫn Vulscan được đề cập trong phần giới thiệu phần này.
Kẻ dễ bị tổn thương
Sử dụng lệnh sau để sao chép Nmap-vulners vào thư mục tập lệnh NSE của bạn:
Thực thi Nmap với lỗ hổng bảo mật bằng cú pháp sau:
Giới thiệu về NSE (Công cụ viết tập lệnh Nmap)
NSE (Nmap Scripting Engine) là một trong những tính năng Nmap được yêu cầu nhiều nhất.
Nó là tập hợp các tập lệnh để tự động hóa và tùy chỉnh các tác vụ quét. Các tập lệnh có thể được thực thi trước, trong hoặc sau khi quét.
Mặc dù Nmap cung cấp các danh mục tập lệnh đa dạng nhưng người dùng cũng có thể viết tập lệnh của riêng mình bằng ngôn ngữ Lua.
Ngoài ra, các tập lệnh NSE có thể được sử dụng để khai thác lỗ hổng nhằm phát hiện lỗ hổng và dịch vụ hoặc thậm chí để tấn công vũ phu.
Tập lệnh được chia thành các loại sau: auth, broadcast, mặc định, khám phá, dos, khai thác, phần mềm độc hại, xâm nhập, fuzzer, bên ngoài, safe, version, và vuln, danh mục được sử dụng trong ví dụ sử dụng đầu tiên trên phần NSE.
Các thiết bị ảo có thể khai thác được là một nguồn tài nguyên tuyệt vời để thử nghiệm các khả năng của NSE. Các tập lệnh cũng có thể được đưa vào các đợt quét lớn nhắm mục tiêu vào nhiều mạng.
Các tập lệnh của NSE được phân loại theo tiêu chí cụ thể dựa trên thời điểm thực thi tập lệnh, mục đích tập lệnh và chức năng.
Phân loại đầu tiên dựa trên thời gian thực hiện bao gồm bốn loại tập lệnh:
- Tập lệnh đặt trước: Chúng được thực thi trước bất kỳ giai đoạn quét Nmap nào, ví dụ: tập lệnh được sử dụng để tạo mục tiêu mới.
- Tập lệnh máy chủ: Tập lệnh máy chủ được thực thi trong quá trình quét.
- Tập lệnh dịch vụ: Các tập lệnh này được thực thi sau mỗi đợt quét mục tiêu, như tập lệnh Máy chủ.
- Tập lệnh postrule: Tập lệnh postrule được thực thi sau quá trình quét; những tập lệnh này có thể khai thác các lỗ hổng được phát hiện trong quá trình quét.
Cách phân loại thứ hai dựa trên mức độ an toàn và mục đích của tập lệnh.
Mục đích và sự an toàn xác định danh mục tập lệnh. Các danh mục trước đây đã được liệt kê trong tài liệu này.
Phần 1. Xác định mục tiêu:
Nmap có thể thực hiện quét trên một IP, dải Ip, domain hay là cả một danh sách. Ví dụ: thekalitools.com, thekalitools.com/24, 192.168.0.1; 10.0.0-255.1-254;…
Tùy chọn:
-iR <num hosts>: Chọn mục tiêu ngẫu nhiên.
–exclude <host1[,host2][,host3],…>: Bỏ qua các host.
–excludefile <exclude_file>: Chọn danh sách bỏ qua.
Phần 2. Lọc ra các máy chủ đang hoạt động:
Nếu mục tiêu của các bạn là một dải IP, thì việc này là vô cùng cần thiết. Hãy tưởng tượng, bạn phải scan từng post cho một dải lớp IP/24 khổng lồ có vài ngàn host, mà trong đó có những host không hoạt động mà bạn cũng phải chờ thì đúng là thảm họa. Để lọc ra các host đó, quá trình này ta gọi là Host discovery.
Về nguyên lý, nmap sẽ gửi một gói tin đến một port của mục tiêu, có thể là SYN-ACK ping, RST hay ICMP. Nếu host nhận được phản hồi, thì nmap sẽ cho host đó đang hoạt động và ngược lại.
Tùy chọn:
-sn: Ping Scan – Không scan port sau khi thực hiện.
-Pn: Bỏ qua Host discovery. Scan port trực tiếp.
-PS/PA/PU/PY[portlist]: Sử dụng TCP SYN/ACK, UDP hoặc SCTP tới port chỉ định. VD: PA80 là sử dụng TCP ACK cho port 80 khi discovery.
-PE/PP/PM: Thăm dò ICMP echo, timestamp, và netmask trả về.
-PO[protocol list]: IP Protocol Ping.
-n/-R: Không bao giờ / Luôn luôn thực hiện DNS resolution (mặc định là đôi khi tùy hứng).
–dns-servers <serv1[,serv2],…>: Chỉ định máy chủ DNS để resolver.
–system-dns: Sử dụng kết quả DNS resolution từ hệ thống.
–traceroute: Theo dõi từng máy chủ.
Phần 3. Kỹ thuật scan port:
Nmap có rất nhiều kỹ thuật scan khác nhau cho những yêu cầu khác nhau. Sau đây là một số kỹ thuật phổ biết được sử dụng trong Nmap:
Nhóm 1. TCP SYN/Connect()/ACK/Window/Maimon scan:
• TCP SYN scan -sS: nmap gửi một gói tin TCP-SYN tới 1 port của mục tiêu. Nếu nhận được ACK_SYN thì port đó đang ở trạng thái open, nmap sẽ gửi gói tin RST để đóng kết nối thay vì gửi ACK để hoàn tất quá trình bắt tay 3 bước (vì thế kỹ thuật này còn được gọi là half open scan). Nếu nhận được RST thì port đó ở trạng thái close. Nếu sau 1 số lần gửi mà không nhận được trả lời hoặc nhận được ICMP type 3 (unreachable error) thì port đó ở trạng thái filtered (đã bị firewall chặn).
• TCP connect scan -sT: Kỹ thuật này được dùng khi user không có quyền truy cập raw packet để thực hiện SYN scan (thường thì với quyền root trên linux mới có thể sử dụng SYN scan). TCP connect scan sẽ sử dụng TCP stack của hệ điều hành để tạo ra 1 kết nối bình thường với mục tiêu, do thực hiện 1 kết nối đầy đủ nên kỹ thuật này dễ bị phát hiện bởi hệ thống log của mục tiêu do đó SYN scan thường được sử dụng nhiều hơn để tránh bị phát hiện.
• TCP ACK scan -sA: Khác với hai kỹ thuật trên, kỹ thuật này sẽ gửi đi một gói tin TCP với flag ACK. Nếu nhận phản hồi là RST thì port đó không bị chặn (unfiltered) nếu không nhận được trả lời hoặc ICMP (type 3, code 1, 2, 3, 9, 10, 13) thì port đó bị firewall chặn (filtered).
Cả TCP SYN và TCP connect() điều cho ra một kết quả giống nhau. Thông thường ta dùng TCP SYN là hiệu quả nhất và không để lại log, nhưng nếu bạn không có quyền root thì ta mới phải sử dụng đến kỹ thuật TCP connect. Riêng TCP ACK dùng để kiểm tra firewall.
Nhóm 2. UDP scan:
• UDP scan -sU: nmap gửi gói tin UDP tới 1 port của mục tiêu nếu nhận được gói tin ICMP port unreachable error (type 3, code 3) thì port đó ở trạng thái close. Nếu nhận được ICMP unreachable errors (type 3, codes 1, 2, 9, 10, or 13) thì port đó ở trạng thái filtered. Nếu không nhận được gì thì port ở trạng thái open|filtered. Nếu nhận được gói tin UDP thì port đó ở trạng thái open.
Nhóm 3. TCP Null, FIN, and Xmas scans:
• TCP NULL -sN: Gửi gói tin TCP mà không kèm bất kỳ flag nào.
• TCP FIN -sF: Gửi gói tin TCP với flag FIN.
• TCP Xmas -sX: Gửi gói tin TCP với các flag PSH, URG và FIN.
Các kỹ thuật của nhóm này sẽ cho ra một kết quả giống nhau, tuy nhiên tuỳ theo nhu cầu bạn có thể chọn NULL, FIN hay là Xmas. Khi các gói tin được gửi đi nếu nhận được RST thì port ở trạng thái close, nếu nhận được các loại gói tin ICMP (type 3, code 1, 2, 3, 9, 10, or 13) thì port ở trạng thái filtered, còn nếu không nhận được gói tin trả lời thì port ở trạng thái open.
Phần 4. Lựa chọn port và thứ tự quét:
-p <port ranges>: Xác định các port mà bạn muốn quét (mặc định nmap sẽ quét theo danh sách port phổ biến). Bạn có thể thêm cả giao thức quét cho từng port bằng cách thêm chữ cái đầu của giao thức đó vào trước IP (T: TCP, U: UDP, S: SCTP, P: IP protocol) và ngăn cách bằng dấu phẩy (,). Ví dụ: ta dùng UDP cho port 53, 4000, dùng TCP cho port 1-100, 8000-8010 và port 80, ta gõ lệnh:
root@kali:~# nmap thekalitools.com -p U:53,4000,T:1-100,8000-8010,80
Do chỉ có port 80 được mở trong các port yêu cầu scan nên nmap chỉ trả về 1 kết quả.
-F: Chế độ quét nhanh, giảm số port phổ biến cần quét xuống để rút ngắn thời gian.
-r: Quét theo thứ tự các port (mặc định nmap sẽ quét ngẫu nhiên).
–top-ports <number>: Thực hiện quét X port phổ biến nhất (X=munber).
–port-ratio <ratio>: Quét những port phổ biến hơn X% (X=ratio).
Phần 5. Thăm dò phiên bản dịch vụ:
-sV: Thăm dò và hiển thị phiên bản dịch vụ của từng port. Mặc định nmap chỉ lấy dịch vụ, và bỏ qua phiên bản dịch vụ của các port.
–version-intensity <level>: Chọn cường độ quét từ 0-9.
–version-light: Chọn cường độ là 2.
–version-all: Chọn cường độ quét là 9. Thử mọi cách quét.
Tuỳ theo yêu cầu, các bạn sẽ tăng dần cường độ cho đến khi tìm ra phiên bản dịch vụ mà bạn đang cần.
Phần 6. Thăm dò thông tin về hệ điều hành (OS):
-O: Bật chức năng quét thông tin OS.
–osscan-limit: Giới hạn quét thông tin OS.
–osscan-guess: Dự đoán thông tin OS.
Ngoài ra, bằng trực quan các bạn cũng có thể đoán ra hệ điều hành đang chạy dựa vào các port đang mở hay các phiên bản dịch vụ mà không cần tốn thời gian cho phần này.
Phần 7. Tuỳ chỉnh thời gian:
Tham số <time> trong các tuỳ chọn sau có thể là ms (mili giây), s (giây), m (phút) hay h (giờ).
-T <0-5>: Tốc độ scan tổng quát, tham số từ 0 là chậm đến 5 là nhanh.
–min-hostgroup/max-hostgroup <size>: Kích thước các nhóm scan host.
–min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Xác định thời gian thăm dò vòng.
–max-retries <tries>: Số lần quét thử lại.
–host-timeout <time>: Đặt thời gian timeout cho host discovery. Nếu vượt qua thời gian này, nmap xác định trạng host đang khởi động.
–scan-delay/–max-scan-delay <time>: Đặt thời gian trễ (delay) giữa các lần quét.
–min-rate <number>: Gửi các gói tin với các tốc độ không chậm hơi X gói tin mỗi giây (X=munber).
–max-rate <number>: Gửi các gói tin với tộc độ không nhanh hơi X gói tin mỗi giây (X=number).
Phần 8. Sử dụng các script trên nmap:
Thế mạnh của nmap là ngoài việc sử dụng như một công cụ phổ thông, nmap cho phép mở rộng bằng khả cho phép người dùng sử dụng các đoạn script viết sẵn (dạng .nse).
–script=<Lua scripts>: Chọn script bạn cần. Dùng dấu phẩy (,) để ngăn các phần danh sách thư mục, script file, script-categories.
–script-args=<n1=v1,[n2=v2,…]>: Nhập vào dữ liệu cho script.
–script-args-file=filename: Chọn file dữ liệu cho script.
–script-trace: Hiển thị tất cả những dữ liệu gửi và nhận.
–script-updatedb: Cập nhật database cho script.
–script-help=<Lua scripts>: Hiển thị trợ giúp của script lên cửa sổ lệnh.
Phần 9. Xuất kết quả:
-oN/-oX/-oS/-oG <file>: Xuất kết quả ra định dạng file text, XML, s|<rIpt kIddi3 hoặc Grepable.
Lời kết:
Nmap là một công cụ khá mạnh mẽ với nhiều tuỳ chọn và khả năng chạy các script khá ấn tượng, các bạn có thể xem thêm các tuỳ chọn khác tại trang chủ Nmap. Like và share để cùng chia sẻ kiến thức cho mọi người nhé!!