Mạng là một chủ đề rộng lớn đối với nhiều người mới tìm hiểu. Có các lớp và giao thức khác nhau, và nhiều công cụ tiện ích mà phải nắm rõ để có thể sử dụng hiệu quả
Bài viết này sẽ hướng dẫn cho bạn hiểu rõ khái niệm về port (cổng) và sẽ chứng minh làm thế nào nmap có thể được sử dụng để lấy được thông tin từ các port
Lưu ý: Bài viết này sẽ hướng dẫn bạn sử dụng Nmap để quét Ipv4, tuy nhiên vẫn quét được Ipv6 nếu có thêm tùy chọn cho Nmap
Port Là gì
Có rất nhiều lớp trong mô hình mạng nói chung, lớp vận chuyển đóng vai trò cung cấp các thông tin liên lạc giữa các ứng dụng hệ thống với nhau, và lớp này thì được kết nối với Port.
Một số điều lưu ý mà bạn cần biết về port
- Port là một số hiệu ID cho 1 ứng dụng nào đó.
- Mỗi ứng dụng chỉ có thể chạy trên một hoặc nhiều port và mang tính độc quyền, không có ứng dụng khác được "chạy ké".
- Chính vì tính độc quyền nên các ứng dụng có thể chỉnh sửa để cho phép chạy với một port khác. Ví dụ IIS/Apache làm web server có thể dùng 80 là default nhưng có thể đổi thành 81 82 83 v.v... tùy ý.
- Port cũng có phân chia làm Internal và External .
- Số hiệu từ 1->65535.
Một số thuật ngữ mà bạn cần nắm rõ
- Port: Là một địa chỉ mạng thực hiện bên trong hệ điều hành giúp phân biệt các traffic khác nhau của từng ứng dụng riêng lẻ
- Internet Sockets: Là một tập tin xác định địa chỉ IP gắn kết với port, nhằm để xử lý dữ liệu như các giao thức.
- Binding: Là quá trình mà một ứng dụng hoặc dịch vụ (service) sử dụng Internet Sockets để xử lý nhập và xuất các dữ liệu
- Listen: Ám chỉ việc "lắng nghe" đợi chờ khi bạn thực hiện Binding đến một port / giao thức / IP nào đó. Hiểu nôm na là chờ đời dữ liệu gửi về từ phía bên máy chủ
- Port Scanning: Port Scanning là quá trình cố gắng để kết nối với một port để có thể thu thập thông tin về các port đang mở và những dịch vụ, ứng dụng, hệ điều hành phía sau nó
Cổng thì được xác định từ số 1 đến số thứ 65535. Trong đó
- Những cổng từ 1->1024 được kết hợp với các dịch vụ của hệ điều hành Linux và Unix, những cổng này bạn cần phải có quyền Root để có thể khởi chạy dịch vụ
- Những cổng từ 1024 -> 49151 là những cổng bạn có thể 'đăng kí' đến IANA, việc đăng kí không mấy khó khăn, bạn có thể thoải mái sử dụng những cổng này khi đăng kí hoàn tất
- Những cổng từ 49152 -> 65535 là những cổng không thể 'đăng kí', và những cổng này chỉ sử dụng cho mục đích cá nhân mà thôi, không thể kết nối thành mạng lưới được
Một số Port (cổng) thông dụng trong internet:
- Cổng 80: Khi một người sử dụng địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80 theo mặc định cho những trang Web.
- Cổng 81: Khi một người sử dụng nhập địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80. Nếu Cổng thì bị tắc nghẽn, Cổng 81 được sử dụng như một Cổng xen kẽ cho một website hosting nào đó.
- Cổng 20: Dùng để vận chuyển dữ liệu FPT
- Cổng 21: Khi người nào đó thử nối tới dịch vụ FTP của các bạn, khách hàng FTP sẽ cố gắng kết nối trên Cổng 21 theo mặc định. Thì cổng 21 mở cho những khách FTP đăng nhập và nối tới server của các bạn
- Cổng 22: Nếu bạn chạy một SSH Secure Shell, cổng này được yêu cầu cho Khách hàng SSH để nối tới người phục vụ của các bạn.
- Cổng 23 :Nếu bạn Telnet, cổng này được yêu cầu cho Khách hàng Telnet đến server. Telnet có thể được sử dụng cho những cổng khác để kiểm tra những công tác dịch vụ, nhưng để sử dụng telnet cho admin và đăng nhập từ xa thì cổng 23 phải mở.
- Cổng 25: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ đi tới server của bạn trên Cổng 25. Đây là tiêu chuẩn SMTP (thủ tục vận chuyển Thư từ)
- Cổng 2525: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ để đi vào tới server của các bạn trên Cổng 25. Cổng 2525 xen kẽ được dùng bởi TZO cho những công tác lưu trữ và truyền lại. Đây là một cổng không tiêu chuẩn, nhưng sẻ hữu ích nếu SMTP (thủ tục vận chuyển Thư từ) bị tắc nghẽn
- Cổng 43: Dùng để Whois tên miền
- Cổng 53: Dùng để DNS
- Cổng 67: Cổng của DHCP server
- Cổng 68: Cổng của DHCP client
- Cổng 110: Khi bạn chạy một máy tính, những người sử dụng sẽ vào theo đường POP3 (Nghi thức cơ quan bưu điện) hay IMAP4 (giao thức truy nhập Thông báo Internet) khôi phục thư từ của họ. POP3 là nghi thức tốt nhất để truy nhập những hòm thư
- Cổng 113: Dùng cho các mạng IRC
- Cổng 119: Khi bạn chạy một server Tin tức, điển hình những khách hàng Tin tức muốn nối tới người phục vụ. Tin tức của các bạn sẽ nối trên cổng 119. Cái này chuyển những nhu cầu để mở để chạy server tin tức.
- Cổng 143 : IMAP4 hay giao thức truy nhập Thông báo Internet đang trở nên phổ biến hơn và được sử dụng để khôi phục Thư Internet từ một server từ xa. Từ đó tất cả các thông báo đều được cất giữ trên server, Nó dùng để sử dụng trực tuyến, ngoại tuyến và offline
- Cổng 161: SNMP
- Cổng 194: IRC
- Cổng 389 : LDAP hay giao thức truy nhập Thư mục Lightweight đang trở nên phổ biến cho sự Truy nhập Thư mục
- Cổng 587: Cũng là cổng SMTP
- Cổng 631: Cổng CUPS printing daemon
- Cổng 666: Cổng riêng và duy nhất của game DOOM
- Cổng 443 : Cổng được dùng để kết nối các dịch vụ an toàn HTTPS
- Cổng 1503 & 1720 :MS NetMeeting và VOIP cho phép bạn kết nối tới host Internet nhằm phục vụ các cuộc họp trực tuyến. NetMeeting là một sản phẩm tự do mà bạn có thể tìm thấy trên Website Microsoft Tại địa chỉ http://www.microsoft.com/
- Cổng 3389: Cổng 3389 được sử dụng cho Windows. Nếu bạn muốn từ xa kết nối tới máy tính của bạn để điều khiển từ xa, thì yêu cầu cổng 3389 phải mở.
- Cổng 5590: Khi bạn chạy một Server VNC từ xa để kiểm soát PC của các bạn, nó sẽ sử dụng cổng 5900.
- Cổng 5631: Cổng này cũng được dùng để remote các máy tính từ xa
Ngoài ra còn có 1 số port như :
Warcraft 3 là 6112
Age of Empire 2 : 2300-2400, 47624
Võ lâm truyền kỳ : 5622 , 6xxx
AOL Messenger : 5190
ICQ 2000 : 5190
MSN Messenger : 1863
Port 37: Time
Bạn có thể xem các cổng của các ứng dụng bằng cách xem tài liệu hướng dẫn của ứng dụng đó. Ngoài ra, để xem chi tiết về các cổng, bạn gõ lệnh sau để xem
less /etc/services
Các port thông dụng trong Linux
. . .
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/udp sink null
discard 9/tcp sink null
systat 11/tcp users
qotd 17/tcp quote
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
. . .
msp 18/tcp # message send protocol
Để kiểm tra xem máy tính của bạn đang mở những port nào thì dùng lệnh sau
netstat -plunt
Đây là kết quả
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd
tcp6 0 0 :::22 :::* LISTEN 785/sshd
Nmap là gì ?
- Nmap (Network Mapper) là một công cụ quét, theo dõi và đánh giá bảo mật một hệ thống mạng được phát triển bởi Gordon Lyon (hay còn được biết đến với tên gọi Fyodor Vaskovich).
- Nmap được công bố lần đầu tiên vào tháng 9 năm 1997.
- Nmap là phần mềm mã nguồn mở miễn phí, ban đầu chỉ được phát triển trên nền tảng Linux sau đó được phát triển trên nhiều nền tảng khác nhau như Windows, Solari, Mac OS… và phát triển thêm phiên bản giao diện người dùng (zenmap).
Các chức năng của nmap:
- Phát hiện host trong mạng.
- Liệt kê các port đang mở trên một host.
- Xác định các dịch vụ chạy trên các port đang mở cùng với phần mềm và phiên bản đang dùng.
- Xác đinh hệ điều hành của thiết bị.
- Chạy các script đặc biệt.
Cài đặt Nmap
Bạn sử dụng 2 lệnh sau
apt-get update
apt-get install nmap
Hướng dẫn Scan port với NMap
Sử dụng nmap
+ Xác định mục tiêu
Việc đầu tiên khi sử dụng nmap là xác định mục tiêu cần quét, mục tiêu có thể là 1 domain, 1 IP, 1 dải địa chỉ IP, 1 danh sách (file) các IP và domain. Ví dụ:
Quét 1 IP | nmap 192.168.1.1 |
Quét 1 dải IP | nmap 192.168.1.1/24 |
Quét 1 domain | nmap google.com |
Quét 1 danh sách các mục tiêu từ 1 file với tùy chọn -iL | nmap -iL list.txt |
+ Phát hiện các host trong mạng (host discovery)
Tại sao cần host discovery, đối với 1 mục tiêu xác định thì có vẻ không cần thiết nhưng đối với mục tiêu là 1 dải mạng với hàng nghìn host, việc quét hàng nghìn port trên mỗi host sẽ tốn rất nhiều thời gian vì vậy việc xác định các host đang chạy sẽ rút ngắn thời gian trong quá trình quét. nmap sử dụng một số kĩ thuật sau để thực hiện host discovery:
- TCP SYN Ping:–PS
- TCP ACK Ping: –PA
- UDP Ping: –PU
- ARP Ping (sử dụng trong mạng LAN): -PR
- ICMP type 8 (echo request): -PE
- ICMP type 13 (timestamp request): -PP
- ICMP type 17(Address mask request): -PA
Khi gửi các gói tin trên tới 1 port của mục tiêu nếu nmap nhận được phản hồi (có thể là SYN-ACK, RST, các gói tin ICMP) thì nmap sẽ coi host đó tồn tại trong mạng, không quan tâm đến trạng thái của port. Nếu không nhận được gói tin phản hồi thì nmap sẽ coi là host không tồn tại. Mặc đinh nmap sử dụng gói tin ICMP echo request, ICMP timespam request, TCP SYN to port 443, TCP ACK to port 80, tương đương với
–PE –PP –PS443 –PA80
Sử dụng tùy chọn –sn (No port scan) để thực hiện quá trình host discovery (nmap sẽ dừng lại sau khi xác định các host đang chạy và không thực hiện việc quét port). Tùy chon –Pn để bỏ qua host discovery nmap sẽ chuyển qua quá trình quét port.
*Bạn có thể thực hành Nmap tới server của Nmap tại địa chỉ scanme.nmap.org
*Việc scan port rất tốn thời gian, do đó bạn cần phải kiên nhẫn chờ đợi
Các lệnh phổ biến trong Nmap
1, Quét hệ điều hành của Server
nmap -O remote_host
Nếu server báo down , thì bạn sử dụng lệnh sau
nmap -PN remote_host
Sử dụng "-" hoặc "/24" để quét nhiều host / server cùng lúc
nmap -PN xxx.xxx.xxx.xxx-yyy
2, Quét một mạng rộng hơn
nmap -sP network_address_range
3, Quét mà không tra cứu DNS (Điều này sẽ giúp bạn quét nhanh hơn)
nmap -n remote_host
4, Quét một port cụ thể thay vì quét chung các port thông dụng
nmap -p port_number remote_host
5, Quét kết nối TCP, Nmap sẽ thực hiện việc quét bắt tay 3 bước
nmap -sT remote_host
6, Quét kết nối UDP
nmap -sU remote_host
7, Quét TCP và UDP từng port (Khá lâu để hoàn tất)
nmap -n -PN -sT -sU -p- remote_host
8, Quét TCP SYN scan (-sS):
nmap -sS remote_host
9, Quét vời các cờ -sN, -sF, -sX
nmap -PN -p port_number -sN remote_host
10, Quét xác định phiên bản của dịch vụ đang chạy trên host
nmap -PN -p port_number -sV remote_host
Chi tiết về các kĩ thuật quét
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 cho kết quả tương tự như TCP SYN scan, nếu nhận được ACK-SYN nmap sẽ gửi gói tin ACK để hoàn tất quá trình bắt tay 3 bước. TCP connect scan đượ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.
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
TCP NULL, FIN, and Xmas scans (-sN, -sF, -sX): đây là kỹ thuật sư dụng các gói tin TCP với không có cờ nào được bật cờ FIN được bật cờ FIN, PSH và URG được bật 3 kỹ thuật này được gộp chung vào 1 nhóm vì chúng cho kết quả giống nhau. Khi 3 loại gói tin này đượ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|filtered
Ngoài ra nmap còn có 1 số tùy chọn với các kỹ thuật khác nâng cao (-sY,-sM, -sO, -sZ, -sI) có thể tham khảo thêm tại http://nmap.org/book/man-port-scanning-techniques.html
+ Lựa chọn port và thứ tự quét. Mặc định nmap sẽ quét 1000 port phổ biến nhất (xem tại file nmap-service) với thứ tụ ngẫu nhiên.
Tùy chọn –p : lựa chọn chính xác các port cần quét, nếu quét đồng thời nhiều giao thức thì thêm các chữ cái đứng trước số port
T: TCP, U: UDP, S: SCTP, or P: IP Protocol.
Ví dụ:
Trong trường hợp này nmap sẽ quét các port UDP 53 và 4000, quét các port TCP 444, từ 1 đến 100, từ 8000 đến 8010 bằng kỹ thuật SYN scan.
Tùy chon –F (Fast scan): nmap quét 100 port phổ biến nhất thay vì mặc định 1000 port.
Tùy chọn –top-ports : quét n port phổ biến nhất.
Tùy chọn –r: thứ tự quét các port từ thấp lên cao thay vì mặc định là ngẫu nhiên.
+ Xác đinh dịch vụ, phiên bản, hệ điều hành. Mặc định sau khi quét các port, nmap sẽ xác định dịch vụ đang chạy trên các port dựa vào file nmap-services (các port mặc định của từng service) tuy nhiên một số server cấu hình các dịch vụ không chạy trên các cổng mặc định. Để xác định rõ port nào chạy dịch vụ nào nmap sử dụng tùy chọn –sV. Với tùy chọn này nmap sẽ xác định được dịch vụ và phiên bản phần mềm chạy trên từng port dựa vào banner khi kết nối với port đó
Các port và dịch vụ tương ứng nmap xác định dựa trên port mặc định.
Các port và dịch vụ, phiên bản phần mềm nmap xác định khi có tùy chọn –sV
Ở trên nmap xác định port 444 chạy https thay vì mặc định snpp. Nmap hỗ trợ việc xác định hệ điều hành bằng tùy chọn –O. Nmap xác định hệ điều hành dựa trên TCP/IP stack fingerprint của mục tiêu (ví dụ như Sequence Number, window size, các Options và thứ tự của chúng trong TCP header, Identification number trong IP header, …). Có thể tham khảo thêm tại http://nmap.org/book/man-os-detection.html
+ Nmap hỗ trợ chạy các script đặc biệt:
Nmap Scripting Engine (NSE) là một trong những chức năng linh hoạt và mạnh mẽ nhất của Nmap. Nó cho phép người dùng viêt và chia sẻ những đoạn script đơn giản để thực hiện những công việc khác nhau trong lĩnh vực networking một cách tự động. Những đoạn script có thể sử dụng để phát hiện các lỗ hổng, thậm chí khai thác các lỗ hổng. Các script (.nse file) nằm trong thư mục script khi cài đặt nmap, người dùng có thể tùy biến chỉnh sửa, thêm các scirpt khác. Để thực hiện chức năng này của nmap sử dụng tùy chọn
–script |||[,…]
Đọc thêm tại http://nmap.org/book/nse-usage.html#nse-categories
Script trace route theo geoIP
Script phát hiện lỗ hổng MS08-067 trên port 445 của windows XP
+ Lưu lại kết quả quét
Cuối cùng Nmap cho phép người dùng có thể lưu lại kết quả quét của mình dưới dạng text hoặc xml (có thể dùng kết quả làm đầu vào cho một số công cụ khác) với các tùy chọn:
-oN (normal output)
-oX (xml output)
Hướng dẫn sử dụng Nmap để scan Port
4/
5
Oleh
Unknown