Trong hướng dẫn này, chúng ta sẽ cùng nhau tìm hiểu một số công cụ và kỹ thuật mà bạn có thể sử dụng để xác minh các quy tắc tường lửa của mình với Nmap và Tcpdump. Đây là một số công cụ mà những người dùng ác ý cũng có thể sử dụng, vì vậy bạn sẽ có thể thấy được thông tin mà họ có thể tìm thấy khi thực hiện các yêu cầu đến các máy chủ của bạn.
Việc thiết lập một tường lửa cho cơ sở hạ tầng của bạn là một cách tuyệt vời để bảo vệ các dịch vụ của bạn. Sau khi bạn đã phát triển một chính sách mà bạn hài lòng, bước tiếp theo là kiểm tra các quy tắc tường lửa của bạn. Điều quan trọng là phải có một cái nhìn rõ ràng về việc các quy tắc tường lửa của bạn có thực hiện đúng những gì bạn mong đợi hay không và để có ấn tượng về cách cơ sở hạ tầng của bạn xuất hiện với thế giới bên ngoài.
Yêu cầu cần có
Trong hướng dẫn này, chúng tôi giả định rằng bạn đã cấu hình tường lửa trên ít nhất một máy chủ. Bạn có thể bắt đầu xây dựng chính sách tường lửa của mình bằng cách làm theo một hoặc nhiều hướng dẫn sau:
- Iptables
- UFW
- FirewallD
Bạn cũng có thể cấu hình Tường Lửa Đám Mây của DataOnline, chạy như một lớp tường lửa bên ngoài cho các máy chủ trên cơ sở hạ tầng DataOnline. Bằng cách này, bạn không cần phải cài cấu hình tường lửa trực tiếp trên các máy chủ của mình.
Trong hướng dẫn này, chúng tôi sẽ gọi máy chủ chứa các chính sách tường lửa mà bạn muốn kiểm tra là “máy chủ mục tiêu”.
Ngoài máy chủ mục tiêu, bạn cũng cần có quyền truy cập vào một máy chủ khác để kiểm tra từ đó, nằm ngoài mạng mà tường lửa của bạn bảo vệ. Trong hướng dẫn này, bạn sẽ sử dụng một máy chủ Ubuntu 22.04 làm máy kiểm tra.
Cảnh Báo
Bạn chỉ nên thực hiện các hoạt động được mô tả trong hướng dẫn này trên cơ sở hạ tầng mà bạn kiểm soát, với mục đích kiểm tra bảo mật. Các quy định pháp lý xung quanh việc quét cổng (port scanning) còn chưa rõ ràng ở nhiều khu vực. Các nhà cung cấp dịch vụ Internet (ISP) và các nhà cung cấp khác đã được biết đến là cấm các người dùng thực hiện quét cổng.
Các Công Cụ Chúng Ta Sẽ Dùng Để Kiểm Tra Các Chính Sách Tường Lửa
Có khá nhiều công cụ khác nhau mà bạn có thể sử dụng để kiểm tra các chính sách tường lửa của mình. Một số trong số chúng có chức năng chồng chéo. Chúng tôi sẽ không bao quát tất cả các công cụ có thể, mà thay vào đó, chúng tôi sẽ đề cập đến một số công cụ kiểm tra cơ bản và sẽ giải thích các công cụ chúng tôi sử dụng trong hướng dẫn này.
Phân Tích Gói Tin (Packet Analyzers)
Phân tích gói tin có thể được sử dụng để theo dõi tất cả lưu lượng mạng đi qua một giao diện với chi tiết. Hầu hết các công cụ phân tích gói tin đều có tùy chọn hoạt động theo thời gian thực, hiển thị các gói tin khi chúng được gửi hoặc nhận, hoặc ghi thông tin gói tin vào tệp và xử lý sau này. Phân tích gói tin giúp bạn thấy được, ở mức độ chi tiết, loại phản hồi mà máy mục tiêu của bạn gửi về cho các máy chủ trên mạng mở.
Để thực hiện kiểm tra này, chúng tôi sẽ sử dụng công cụ tcpdump. Đây là một lựa chọn tốt vì nó mạnh mẽ, linh hoạt và phổ biến trên các hệ thống Linux. Bạn sẽ sử dụng nó để ghi lại các gói tin thô khi chúng tôi thực hiện các bài kiểm tra để nếu cần, có thể xem lại dữ liệu sau.
Một số lựa chọn phổ biến khác là Wireshark (hoặc tshark, phiên bản dòng lệnh của nó) và tcpflow, công cụ này có thể ghép các cuộc trò chuyện TCP thành một cách có tổ chức.
Quét Cổng (Port Scanners)
Để tạo ra lưu lượng và phản hồi cho công cụ phân tích gói tin của bạn, bạn sẽ sử dụng một công cụ quét cổng. Các công cụ quét cổng có thể được sử dụng để tạo và gửi các loại gói tin khác nhau đến các máy chủ từ xa nhằm phát hiện các loại lưu lượng mà máy chủ đó chấp nhận. Những người dùng ác ý thường sử dụng công cụ quét cổng như một công cụ phát hiện để tìm các dịch vụ dễ bị tấn công (một phần lý do để sử dụng tường lửa ngay từ đầu), vì vậy bạn sẽ sử dụng công cụ này để xem những gì kẻ tấn công có thể phát hiện.
Trong hướng dẫn này, chúng tôi sẽ sử dụng công cụ nmap, một công cụ quét mạng và quét cổng. Bạn có thể sử dụng nmap để gửi các gói tin khác nhau nhằm phát hiện các dịch vụ trên máy mục tiêu và các quy tắc tường lửa bảo vệ máy này.
Cài Đặt Máy Kiểm Tra (Auditing Machine)
Trước khi bắt đầu, bạn cần đảm bảo rằng các công cụ cần thiết đã được cài đặt. Bạn có thể cài đặt tcpdump và nmap từ kho phần mềm của Ubuntu. Chạy lệnh apt update
để cập nhật danh sách gói của bạn, sau đó cài đặt chúng bằng lệnh apt install
:
sudo apt update sudo apt install tcpdump nmap
Tiếp theo, tạo một thư mục để lưu kết quả quét của bạn:
mkdir ~/scan_results
Để đảm bảo rằng bạn nhận được kết quả chính xác, hãy thoát khỏi tất cả các phiên kết nối có thể mở giữa hệ thống kiểm tra và hệ thống mục tiêu. Điều này bao gồm các phiên SSH, bất kỳ kết nối HTTP(S) nào mà bạn có thể đã thiết lập trong trình duyệt web, v.v.
Quét Máy Mục Tiêu Để Phát Hiện Các Cổng TCP Mở
Giờ đây, bạn đã sẵn sàng để quét máy mục tiêu của mình để tìm các cổng TCP mở.
Thực tế, nmap biết cách thực hiện một số kiểu quét TCP khác nhau. Quét tốt nhất để bắt đầu là quét SYN, còn được gọi là “quét nửa mở” vì nó không bao giờ thực hiện một kết nối TCP đầy đủ. Điều này thường được kẻ tấn công sử dụng, vì nó không ghi nhận trên một số hệ thống phát hiện xâm nhập do không hoàn thành đầy đủ quá trình bắt tay (handshake).
Cài Đặt Ghi Lại Gói Tin (Packet Capture)
Trước khi bắt đầu quét, bạn sẽ cài đặt tcpdump để ghi lại lưu lượng mạng phát sinh từ bài kiểm tra. Điều này sẽ giúp bạn phân tích các gói tin đã gửi và nhận chi tiết hơn nếu cần thiết. Tạo một thư mục trong ~/scan_results để bạn có thể lưu trữ các tệp liên quan đến quét SYN của mình:
mkdir ~/scan_results/syn_scan
Bạn có thể bắt đầu ghi lại các gói tin với tcpdump và lưu kết quả vào một tệp trong thư mục ~/scan_results/syn_scan
với lệnh sau:
sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets
Mặc định, tcpdump sẽ chạy ở chế độ nền. Để chạy quét nmap trong cùng một cửa sổ, bạn sẽ cần tạm dừng quá trình tcpdump và sau đó tiếp tục nó ở chế độ nền. Bạn có thể tạm dừng một tiến trình đang chạy bằng cách nhấn CTRL-Z:
Output:
^Z [1]+ Stopped sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets
Bây giờ, bạn có thể khởi động lại tiến trình này ở chế độ nền bằng cách gõ lệnh bg:
bg
Output:
[1]+ sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets &
Lệnh này đang chạy ở chế độ nền và theo dõi các gói tin giữa máy kiểm tra và máy mục tiêu. Giờ bạn có thể chạy quét SYN của mình.
Chạy SYN Scan
Với tcpdump đang ghi lại lưu lượng đến máy mục tiêu, bạn đã sẵn sàng để chạy nmap. Bạn có thể chạy nmap với các tham số sau:
- -sS: Bắt đầu một quét SYN. Đây là loại quét mặc định mà nmap sẽ thực hiện nếu không có loại quét nào được chỉ định, nhưng chúng ta sẽ bao gồm nó ở đây để rõ ràng.
- -Pn: Chỉ định cho nmap bỏ qua bước phát hiện máy chủ, điều này sẽ dừng bài kiểm tra sớm nếu máy chủ không phản hồi với một ping. Vì bạn biết rằng máy chủ mục tiêu đang online, bạn có thể bỏ qua bước này.
- -p-: Mặc định, quét SYN sẽ chỉ kiểm tra 1000 cổng phổ biến nhất. Tham số này yêu cầu nmap kiểm tra mọi cổng có sẵn.
- -T4: Đặt cấu hình thời gian cho nmap, yêu cầu nó tăng tốc bài kiểm tra mặc dù kết quả có thể kém chính xác hơn một chút. 0 là chậm nhất và 5 là nhanh nhất. Vì bạn đang quét tất cả các cổng, bạn có thể sử dụng cấu hình này làm cơ sở và kiểm tra lại các cổng sau này nếu có cổng nào bị báo sai.
- -vv: Tăng mức độ chi tiết của kết quả.
- –reason: Chỉ thị cho nmap cung cấp lý do tại sao trạng thái của cổng được báo cáo theo cách nhất định.
- -oN: Ghi kết quả vào một tệp để bạn có thể sử dụng để phân tích sau.
Lệnh hoàn chỉnh có thể trông như sau:
sudo nmap -sS -Pn -p- -T4 -vv --reason -oN ~/scan_results/syn_scan/nmap.results target_ip_addr
Mặc dù đã đặt cấu hình thời gian ở mức 4, quét này có thể mất một khoảng thời gian khá dài vì nó phải quét qua 65,535 cổng. Kết quả sẽ bắt đầu xuất hiện với dạng như sau:
Output:
Starting Nmap 6.49BETA4 ( https://nmap.org ) at 2022-12-19 16:54 EDT Initiating Parallel DNS resolution of 1 host. at 16:54 Completed Parallel DNS resolution of 1 host. at 16:54, 0.12s elapsed Initiating SYN Stealth Scan at 16:54 Scanning 198.51.100.15 [65535 ports] Discovered open port 22/tcp on 198.51.100.15 Discovered open port 80/tcp on 198.51.100.15 SYN Stealth Scan Timing: About 6.16% done; ETC: 17:02 (0:07:52 remaining) SYN Stealth Scan Timing: About 8.60% done; ETC: 17:06 (0:10:48 remaining) . . .
Dừng Quá Trình Ghi Lại Gói Tin (tcpdump)
Sau khi quét hoàn tất, bạn có thể đưa tiến trình tcpdump về chế độ nền và dừng nó.
Đưa tcpdump ra khỏi nền bằng cách gõ lệnh fg:
fg
Dừng tiến trình đang chạy bằng cách nhấn Ctrl+C.
Phân Tích Kết Quả
Bạn sẽ có hai tệp trong thư mục ~/scan_results/syn_scan
của mình: Một tệp có tên packets, được tạo ra bởi quá trình tcpdump, và một tệp được tạo ra bởi nmap có tên nmap.results. Hãy xem xét tệp nmap.results trước:
less ~/scan_results/syn_scan/nmap.results
Output:
# Nmap 6.49BETA4 scan initiated Mon Dec 19 17:05:13 2022 as: nmap -sS -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/syn_scan/nmap.results 198.51.100.15 Increasing send delay for 198.51.100.15 from 0 to 5 due to 9226 out of 23064 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 5 to 10 due to 14 out of 34 dropped probes since last increase. Nmap scan report for 198.51.100.15 Host is up, received user-set (0.00097s latency). Scanned at 2022-12-19 17:05:13 EDT for 2337s Not shown: 65533 closed ports Reason: 65533 resets PORT STATE SERVICE REASON 22/tcp open ssh syn-ack ttl 63 80/tcp open http syn-ack ttl 63 Read data files from: /usr/local/bin/../share/nmap # Nmap done at Mon Dec 19 17:44:10 2022 -- 1 IP address (1 host up) scanned in 2336.85 seconds
Khu vực được tô sáng trên là kết quả chính của quá trình quét. Bạn có thể suy ra rằng cổng 22 và cổng 80 đã được mở trên máy mục tiêu để cho phép lưu lượng SSH và HTTP.Bạn cũng có thể quan sát rằng 65,533 cổng đã bị đóng. Một kết quả có thể khác là “filtered” (lọc). “Lọc” có nghĩa là những cổng này đã bị chặn bởi một thứ gì đó trên đường mạng. Nó có thể là một tường lửa trên mục tiêu, nhưng cũng có thể là các quy tắc lọc trên bất kỳ máy chủ trung gian nào giữa máy kiểm tra và máy mục tiêu.
Phân Tích Các Kết Quả tcpdump
Để xem lưu lượng gói tin thực tế đã được gửi đi và nhận từ máy mục tiêu, bạn có thể đọc lại tệp packets vào tcpdump, như sau:
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets | less
Tệp này chứa toàn bộ cuộc trò chuyện đã diễn ra giữa hai máy chủ. Bạn có thể lọc nó theo nhiều cách khác nhau.
Ví dụ, để chỉ xem lưu lượng gửi đến máy mục tiêu, bạn có thể nhập:
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'dst target_ip_addr' | less
Tương tự, để chỉ xem lưu lượng phản hồi, bạn có thể thay dst bằng src:
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr' | less
Các cổng mở sẽ phản hồi lại những yêu cầu này với một gói SYN. Bạn có thể tìm kiếm các phản hồi này bằng cách sử dụng bộ lọc như sau:
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr and tcp[tcpflags] & tcp-syn != 0' | less
Điều này sẽ chỉ hiển thị các phản hồi SYN thành công, và chúng sẽ trùng khớp với các cổng mà bạn đã thấy trong kết quả quét nmap.
Output:
reading from file packets, link-type EN10MB (Ethernet) 17:05:13.557597 IP 198.51.100.15.22 > 198.51.100.2.63872: Flags [S.], seq 2144564104, ack 4206039348, win 29200, options [mss 1460], length 0 17:05:13.558085 IP 198.51.100.15.80 > 198.51.100.2.63872: Flags [S.], seq 3550723926, ack 4206039348, win 29200, options [mss 1460], length 0
Bạn có thể thực hiện thêm các phân tích dữ liệu tùy theo nhu cầu. Mọi thông tin đã được ghi lại để xử lý và phân tích không đồng bộ.
Quét Máy Mục Tiêu Để Phát Hiện Các Cổng UDP Mở
Giờ đây bạn đã hiểu cách thực hiện các bài kiểm tra này, bạn có thể thực hiện một quy trình tương tự để quét các cổng UDP mở.
Cài Đặt Ghi Lại Gói Tin
Một lần nữa, hãy tạo một thư mục để chứa kết quả của bạn:
mkdir ~/scan_results/udp_scan
Bắt đầu một lần nữa với tcpdump để ghi lại gói tin. Lần này, hãy lưu tệp vào thư mục ~/scan_results/udp_scan
mới:
sudo tcpdump host target_ip_addr -w ~/scan_results/udp_scan/packets
Tạm dừng tiến trình và đưa nó vào nền bằng cách nhấn Ctrl+Z, sau đó chạy bg:
bg
Chạy Quét UDP
Bây giờ bạn đã sẵn sàng để thực hiện quét UDP. Do tính chất của giao thức UDP, quét này sẽ mất thời gian đáng kể hơn so với quét SYN. Trên thực tế, quét này có thể mất hơn một ngày nếu bạn quét tất cả các cổng của hệ thống. UDP là một giao thức không kết nối, vì vậy nếu không nhận được phản hồi, có thể là cổng của máy mục tiêu bị chặn, hoặc gói tin đã bị mất. Để phân biệt giữa các trường hợp này, nmap phải gửi lại các gói tin bổ sung để cố gắng nhận được phản hồi.
Hầu hết các tham số sẽ giống như bạn đã sử dụng cho quét SYN. Thực tế, tham số mới duy nhất là:
- -sU: Tham số này yêu cầu nmap thực hiện quét UDP.
Tăng Tốc Quá Trình Kiểm Tra UDP
Nếu bạn lo ngại về thời gian mà bài kiểm tra này mất đi, bạn có thể chỉ kiểm tra một phần của các cổng UDP trong lần đầu tiên. Bạn có thể kiểm tra chỉ 1000 cổng phổ biến nhất bằng cách bỏ qua tham số -p-. Điều này sẽ giúp giảm đáng kể thời gian quét. Tuy nhiên, nếu bạn muốn có một bức tranh đầy đủ, bạn sẽ phải quay lại và quét toàn bộ dải cổng của mình sau.
Vì bạn đang quét cơ sở hạ tầng của chính mình, cách tốt nhất để tăng tốc quá trình quét UDP là tạm thời vô hiệu hóa giới hạn tỷ lệ ICMP trên máy mục tiêu. Thông thường, các máy chủ Linux giới hạn phản hồi ICMP xuống còn 1 mỗi giây (điều này thường là một điều tốt, nhưng không phải khi kiểm tra bảo mật), điều này có nghĩa là một quét UDP đầy đủ sẽ mất hơn 18 giờ. Bạn có thể kiểm tra cài đặt này trên máy mục tiêu của mình bằng cách nhập:
sudo sysctl net.ipv4.icmp_ratelimit
Output:
net.ipv4.icmp_ratelimit = 1000
“1000” là số mili giây giữa mỗi phản hồi. Bạn có thể tạm thời vô hiệu hóa giới hạn tỷ lệ này trên hệ thống mục tiêu bằng lệnh:
sudo sysctl -w net.ipv4.icmp_ratelimit=0
Lưu ý: Rất quan trọng là bạn phải khôi phục giá trị này sau khi bài kiểm tra kết thúc.
Chạy Kiểm Tra UDP
Hãy chắc chắn rằng bạn đã ghi kết quả vào thư mục ~/scan_results/udp_scan
. Lệnh hoàn chỉnh sẽ trông như sau:
sudo nmap -sU -Pn -p- -T4 -vv --reason -oN ~/scan_results/udp_scan/nmap.results target_ip_addr
Sau khi quét hoàn tất, bạn sẽ cần khôi phục giới hạn tỷ lệ ICMP (nếu bạn đã thay đổi nó) trên máy mục tiêu:
sudo sysctl -w net.ipv4.icmp_ratelimit=1000
Dừng Quá Trình Ghi Lại Gói Tin (tcpdump)
Hãy đưa tiến trình tcpdump về chế độ nền trên máy kiểm tra của bạn bằng cách chạy fg:
fg
Sau đó, dừng quá trình ghi lại gói tin bằng cách nhấn Ctrl+C.
Phân Tích Kết Quả
Bây giờ, bạn có thể xem các tệp kết quả được tạo ra.
Tệp kết quả nmap.results
sẽ giống như kết quả trước đó:
less ~/scan_results/udp_scan/nmap.results
~/scan_results/udp_scan/nmap.results
# Nmap 6.49BETA4 scan initiated Mon Dec 19 12:42:42 2022 as: nmap -sU -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/udp_scan/nmap.results 198.51.100.15 Increasing send delay for 198.51.100.15 from 0 to 50 due to 10445 out of 26111 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 50 to 100 due to 11 out of 23 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 100 to 200 due to 3427 out of 8567 dropped probes since last increase. Nmap scan report for 198.51.100.15 Host is up, received user-set (0.0010s latency). Scanned at 2022-12-19 12:42:42 EDT for 9956s Not shown: 65532 closed ports Reason: 65532 port-unreaches PORT STATE SERVICE REASON 22/udp open|filtered ssh no-response 80/udp open|filtered http no-response 443/udp open|filtered https no-response Read data files from: /usr/local/bin/../share/nmap # Nmap done at Mon Dec 19 15:28:39 2022 -- 1 IP address (1 host up) scanned in 9956.97 seconds
Một sự khác biệt chính giữa kết quả này và kết quả SYN trước đó có thể là số lượng các cổng được đánh dấu là open|filtered. Điều này có nghĩa là nmap không thể xác định liệu thiếu phản hồi có nghĩa là một dịch vụ chấp nhận lưu lượng hay liệu nó bị chặn bởi một tường lửa hoặc cơ chế lọc nào đó trên đường truyền.
Phân tích kết quả từ tcpdump cũng trở nên khó khăn hơn vì không có tham số kết nối và bạn phải đối chiếu các phản hồi ICMP với các yêu cầu UDP.
Bạn có thể thấy số lượng gói tin mà nmap phải gửi đến các cổng được báo cáo là open|filtered bằng cách yêu cầu xem lưu lượng UDP đến một trong các cổng đã được báo cáo:
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 22'
Output:
reading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet) 14:57:40.801956 IP 198.51.100.2.60181 > 198.51.100.15.22: UDP, length 0 14:57:41.002364 IP 198.51.100.2.60182 > 198.51.100.15.22: UDP, length 0 14:57:41.202702 IP 198.51.100.2.60183 > 198.51.100.15.22: UDP, length 0 14:57:41.403099 IP 198.51.100.2.60184 > 198.51.100.15.22: UDP, length 0 14:57:41.603431 IP 198.51.100.2.60185 > 198.51.100.15.22: UDP, length 0 14:57:41.803885 IP 198.51.100.2.60186 > 198.51.100.15.22: UDP, length 0
So với kết quả từ một trong các cổng đã được quét và được đánh dấu là “closed” (đã đóng):
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 53'
Output:
reading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet) 13:37:24.219270 IP 198.51.100.2.60181 > 198.51.100.15.53: 0 stat [0q] (12)
Phân Tích Dữ Liệu UDP Quá Trình Quét
Bạn có thể thử tái dựng thủ công quá trình mà nmap thực hiện bằng cách đầu tiên tổng hợp danh sách tất cả các cổng mà chúng ta đang gửi gói tin UDP tới bằng cách sử dụng lệnh sau:
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets "udp" | awk '{print $5;}' | awk 'BEGIN { FS = "." } ; { print $5 +0}' | sort -u | tee outgoing
Sau đó, bạn có thể xem các gói tin ICMP mà chúng ta nhận được thông báo rằng cổng không thể truy cập được:
sudo tcpdump -nn -Q in -r ~/scan_results/udp_scan/packets "icmp" | awk '{print $10,$11}' | grep unreachable | awk '{print $1}' | sort -u | tee response
Bạn có thể so sánh hai kết quả này và xem những gói tin UDP nào không nhận được phản hồi ICMP:
comm -3 outgoing response
Kết quả này chủ yếu sẽ khớp với danh sách các cổng mà nmap đã báo cáo (có thể có một số kết quả sai do các gói tin bị mất trong quá trình trả về).
Khám Phá Máy Chủ và Phiên Bản Dịch Vụ
Bạn có thể thực hiện thêm một số bài kiểm tra trên máy mục tiêu để xem liệu nmap có thể xác định hệ điều hành đang chạy hoặc phiên bản dịch vụ nào không. Hãy tạo một thư mục để chứa kết quả phát hiện phiên bản dịch vụ của bạn:
mkdir ~/scan_results/versions
Khám Phá Các Phiên Bản Dịch Vụ Trên Máy Chủ
Bạn có thể thử đoán phiên bản dịch vụ đang chạy trên máy mục tiêu thông qua một quá trình gọi là fingerprinting. Quá trình này giúp bạn thu thập thông tin từ máy chủ và so sánh nó với các phiên bản đã biết trong cơ sở dữ liệu của nmap.
Nếu bạn muốn ghi lại lưu lượng tcpdump trong quá trình này, bạn có thể làm theo phương pháp đã sử dụng ở các bước trước, nhưng thường không cần thiết.
Lệnh nmap bạn cần sử dụng là với tham số -sV. Vì bạn đã thực hiện quét SYN và UDP, bạn có thể chỉ định các cổng cần quét bằng tham số -p. Ở đây, bạn sẽ quét các cổng 22 và 80 (những cổng mà đã được xác định trong kết quả quét SYN trước đó):
sudo nmap -sV -Pn -p 22,80 -vv --reason -oN ~/scan_results/versions/service_versions.nmap target_ip_addr
Khi bạn xem tệp kết quả, bạn có thể nhận được thông tin về dịch vụ đang chạy, tùy thuộc vào mức độ “chi tiết” của phản hồi dịch vụ:
less ~/scan_results/versions/service_versions.nmap
~/scan_results/versions/service_versions.nmap
# Nmap 6.49BETA4 scan initiated Mon Dec 19 15:46:12 2022 as: nmap -sV -Pn -p 22,80 -vv --reason -oN /home/user/scan_results/versions/service_versions.nmap 198.51.100.15 Nmap scan report for 198.51.100.15 Host is up, received user-set (0.0011s latency). Scanned at 2022-12-19 15:46:13 EDT for 8s PORT STATE SERVICE REASON VERSION 22/tcp open ssh syn-ack ttl 63 OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0) 80/tcp open http syn-ack ttl 63 nginx 1.4.6 (Ubuntu) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Read data files from: /usr/local/bin/../share/nmap Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Mon Dec 19 15:46:21 2022 -- 1 IP address (1 host up) scanned in 8.81 seconds
Ở đây, bạn có thể thấy rằng nmap đã xác định được phiên bản OpenSSH và nginx, và nó cũng nhận diện được đây là một bản phân phối Ubuntu.
Khám Phá Hệ Điều Hành Của Máy Chủ
Bạn cũng có thể thử để nmap đoán hệ điều hành của máy chủ mục tiêu dựa trên các đặc điểm phần mềm và phản hồi của nó. Điều này hoạt động theo cách tương tự như việc phát hiện phiên bản dịch vụ. Một lần nữa, chúng tôi sẽ bỏ qua việc chạy tcpdump trong thử nghiệm này, nhưng bạn có thể thực hiện nếu muốn.
Tham số bạn cần sử dụng để phát hiện hệ điều hành là -O (chữ O in hoa). Lệnh đầy đủ có thể trông như thế này:
sudo nmap -O -Pn -vv --reason -oN ~/scan_results/versions/os_version.nmap target_ip_addr
Khi bạn xem tệp kết quả, bạn có thể thấy một số thông tin như sau:
less ~/scan_results/versions/os_version.nmap
~/scan_results/versions/os_versions.nmap
# Nmap 6.49BETA4 scan initiated Mon Dec 19 15:53:54 2022 as: nmap -O -Pn -vv --reason -oN /home/user/scan_results/versions/os_version.nmap 198.51.100.15 Increasing send delay for 198.51.100.15 from 0 to 5 due to 65 out of 215 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 5 to 10 due to 11 out of 36 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 10 to 20 due to 11 out of 35 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 20 to 40 due to 11 out of 29 dropped probes since last increase. Increasing send delay for 198.51.100.15 from 40 to 80 due to 11 out of 31 dropped probes since last increase. Nmap scan report for 198.51.100.15 Host is up, received user-set (0.0012s latency). Scanned at 2022-12-19 15:53:54 EDT for 30s Not shown: 998 closed ports Reason: 998 resets PORT STATE SERVICE REASON 22/tcp open ssh syn-ack ttl 63 80/tcp open http syn-ack ttl 63 No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ). TCP/IP fingerprint: OS:SCAN(V=6.49BETA4%E=4%D=8/27%OT=22%CT=1%CU=40800%PV=N%DS=2%DC=I%G=Y%TM=55 OS:DF6AF0%P=x86_64-unknown-linux-gnu)SEQ(SP=F5%GCD=1%ISR=106%TI=Z%CI=Z%TS=8 OS:)OPS(O1=M5B4ST11NW8%O2=M5B4ST11NW8%O3=M5B4NNT11NW8%O4=M5B4ST11NW8%O5=M5B OS:4ST11NW8%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120 OS:)ECN(R=Y%DF=Y%T=40%W=7210%O=M5B4NNSNW8%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+ OS:%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=) OS:T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A OS:=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPC OS:K=G%RUCK=G%RUD=G)U1(R=N)IE(R=N) Uptime guess: 1.057 days (since Mon Dec 12 14:32:23 2022) Network Distance: 2 hops TCP Sequence Prediction: Difficulty=245 (Good luck!) IP ID Sequence Generation: All zeros Read data files from: /usr/local/bin/../share/nmap OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Mon Dec 12 15:54:24 2022 -- 1 IP address (1 host up) scanned in 30.94 seconds
Thông tin bạn thu thập được từ việc kiểm tra cơ sở hạ tầng của chính mình có thể mở ra một cuộc thảo luận về việc liệu có cần phải xem xét lại bất kỳ quyết định chính sách nào để tăng cường bảo mật hay không. Nó cũng có thể làm sáng tỏ bất kỳ lỗ hổng nào trong bảo mật của bạn, những lỗ hổng có thể đã xuất hiện do thứ tự quy tắc sai hoặc các chính sách thử nghiệm bị quên lãng.
Chúng tôi khuyến nghị bạn nên thử nghiệm các chính sách của mình với cơ sở dữ liệu quét mới nhất thường xuyên để cải thiện, hoặc ít nhất duy trì, mức độ bảo mật hiện tại của mình.
Kết Luận
Kiểm tra tường lửa và xây dựng nhận thức về mạng nội bộ của bạn đối với các cuộc tấn công từ bên ngoài có thể giúp giảm thiểu rủi ro. Thông tin bạn thu thập từ việc quét cơ sở hạ tầng của chính mình có thể mở ra một cuộc thảo luận về việc liệu có cần phải xem xét lại bất kỳ quyết định chính sách nào của bạn để tăng cường bảo mật hay không. Nó cũng có thể làm sáng tỏ những lỗ hổng trong bảo mật của bạn do các quy tắc sai thứ tự hoặc các chính sách thử nghiệm bị quên lãng. Bạn nên thử nghiệm các chính sách của mình với cơ sở dữ liệu quét mới nhất để cải thiện hoặc ít nhất duy trì mức độ bảo mật hiện tại của mình.
Để tìm hiểu các cách cải thiện chính sách tường lửa, hãy tham khảo hướng dẫn: Làm Thế Nào Để Lựa Chọn Một Chính Sách Tường Lửa Hiệu Quả Nhằm Bảo Vệ Máy Chủ