Thứ hai, 24/08/2015 | 00:00 GMT+7

Cách kiểm tra cấu hình firewall của bạn với Nmap và Tcpdump

Cài đặt firewall cho cơ sở hạ tầng của bạn là một cách tốt để cung cấp một số bảo mật cơ bản cho các dịch vụ của bạn. Khi bạn đã phát triển một policy mà bạn hài lòng, bước tiếp theo là kiểm tra các luật firewall của bạn. Điều quan trọng là phải biết rõ liệu các luật firewall của bạn có đang thực hiện những gì bạn nghĩ rằng họ đang làm hay không và để có ấn tượng về cơ sở hạ tầng của bạn trông như thế nào với thế giới bên ngoài.

Trong hướng dẫn này, ta sẽ giới thiệu cho các bạn một số công cụ và kỹ thuật đơn giản mà bạn có thể sử dụng để xác thực các luật firewall của bạn . Đây là một số công cụ tương tự mà user độc hại có thể sử dụng, vì vậy bạn có thể xem họ có thể tìm thấy thông tin gì bằng cách đưa ra yêu cầu từ server của bạn.

Yêu cầu

Trong hướng dẫn này, ta sẽ giả định bạn đã cấu hình firewall trên ít nhất một server . Bạn có thể bắt đầu xây dựng policy firewall của bạn theo một hoặc nhiều hướng dẫn sau:

Trong hướng dẫn này, ta sẽ gọi server chứa các policy firewall mà bạn muốn kiểm tra mục tiêu . Ngoài mục tiêu của bạn, bạn cũng cần có quyền truy cập vào một server để kiểm tra, nằm bên ngoài mạng mà firewall của bạn bảo vệ. Trong hướng dẫn này, ta sẽ sử dụng server Ubuntu 14.04 làm máy kiểm tra của ta .

Sau khi bạn có một server để kiểm tra và các mục tiêu bạn muốn đánh giá, bạn có thể tiếp tục với hướng dẫn này.

Cảnh báo
Bạn chỉ nên thực hiện các hoạt động được nêu trong hướng dẫn này trên cơ sở hạ tầng mà bạn kiểm soát, nhằm mục đích kiểm tra bảo mật. Các-luật xung quanh việc quét cổng không chắc chắn ở nhiều khu vực pháp lý. ISP và các nhà cung cấp khác đã được biết là cấm user bị phát hiện quét cổng.

Các công cụ ta sẽ sử dụng để kiểm tra policy firewall

Có khá nhiều công cụ khác nhau mà ta có thể sử dụng để kiểm tra các policy firewall của bạn . Một số trong số chúng có chức năng chồng chéo. Ta sẽ không đề cập đến mọi công cụ có thể. Thay vào đó, ta sẽ đề cập đến một số danh mục chung của các công cụ kiểm toán và xem xét các công cụ ta sẽ sử dụng trong hướng dẫn này.

Máy phân tích gói

Bộ phân tích gói được dùng để xem tất cả lưu lượng mạng đi qua một giao diện một cách chi tiết. Hầu hết các bộ phân tích gói đều có tùy chọn hoạt động trong thời gian thực, hiển thị các gói khi chúng được gửi hoặc nhận, hoặc ghi thông tin gói vào file và xử lý sau đó. Phân tích gói cung cấp cho ta khả năng xem ở cấp độ chi tiết, loại phản hồi nào mà máy mục tiêu của ta đang gửi lại cho các server trên mạng mở.

Theo mục đích của hướng dẫn, ta 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à khá phổ biến trên các hệ thống Linux. Ta sẽ sử dụng nó để nắm bắt các gói dữ liệu thô khi ta chạy các bài kiểm tra của bạn trong trường hợp ta cần bản ghi để phân tích sau này. Một số tùy chọn phổ biến khác là Wireshark (hoặc tshark , người anh em dòng lệnh của nó) và tcpflow có thể ghép toàn bộ cuộc hội thoại TCP lại với nhau theo cách có tổ chức.

Máy quét cổng

Để tạo ra lưu lượng và phản hồi cho trình phân tích gói của ta để thu thập, ta sẽ sử dụng một máy quét cổng. Máy quét cổng được dùng để tạo và gửi các loại gói tin khác nhau đến các server từ xa nhằm phát hiện ra loại lưu lượng mà server chấp nhận. User độc hại thường sử dụng công cụ này như một công cụ khám phá để cố gắng tìm các dịch vụ dễ bị tấn công để khai thác (một phần lý do để sử dụng firewall ngay từ đầu), vì vậy ta sẽ sử dụng công cụ này để thử xem kẻ tấn công có thể phát hiện ra điều gì.

Đối với hướng dẫn này, ta sẽ sử dụng công cụ lập bản đồ mạng nmap và quét cổng. Ta có thể sử dụng nmap để gửi các gói có nhiều loại khác nhau để cố gắng tìm ra dịch vụ nào trên máy mục tiêu của ta và những luật firewall nào bảo vệ nó.

Cài đặt máy kiểm toán

Trước khi bắt đầu, ta nên đảm bảo ta có các công cụ được thảo luận ở trên. Ta có thể lấy tcpdump từ kho của Ubuntu. Ta cũng có thể lấy nmap bằng phương pháp này, nhưng version repository có thể đã lỗi thời. Thay vào đó, ta sẽ cài đặt một số gói để hỗ trợ ta biên dịch phần mềm và sau đó tự xây dựng nó từ nguồn.

Cập nhật index gói local và cài đặt phần mềm nếu nó chưa có sẵn. Ta cũng sẽ xóa nmap khỏi hệ thống của bạn nếu nó đã được cài đặt để tránh xung đột:

  • sudo apt-get update
  • sudo apt-get purge nmap
  • sudo apt-get install tcpdump build-essential libssl-dev

Bây giờ ta đã có các công cụ biên dịch và thư viện phát triển SSL, ta có thể download version nmap mới nhất từ trang download trên trang web chính thức . Mở trang trong trình duyệt web .

Cuộn xuống phần “Phân phối mã nguồn”. Ở dưới cùng, bạn sẽ thấy liên kết đến mã nguồn của version nmap mới nhất. Tại thời điểm viết bài này, nó trông như thế này:

Nmap version  mới nhất

Nhấp chuột phải vào liên kết và sao chép địa chỉ liên kết.

Quay lại máy kiểm tra của bạn, chuyển vào folder chính của bạn và sử dụng wget để download liên kết bạn đã dán. Đảm bảo cập nhật liên kết bên dưới để phản ánh version mới nhất mà bạn đã sao chép từ trang web:

  • cd ~
  • wget https://nmap.org/dist/nmap-6.49BETA4.tar.bz2

Extract file bạn đã download và chuyển vào folder kết quả bằng lệnh :

  • tar xjvf nmap*
  • cd nmap*

Cấu hình và biên dịch mã nguồn bằng lệnh :

  • ./configure
  • make

Khi quá trình biên dịch hoàn tất, bạn có thể cài đặt các file thực thi và file hỗ trợ kết quả trên hệ thống của bạn bằng lệnh :

  • sudo make install

Xác nhận cài đặt của bạn bằng lệnh :

  • nmap -V

Đầu ra phải trùng với version bạn đã download từ trang web nmap :

Output
Nmap version 6.49BETA4 ( https://nmap.org ) Platform: x86_64-unknown-linux-gnu Compiled with: nmap-liblua-5.2.3 openssl-1.0.1f nmap-libpcre-7.6 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6 Compiled without: Available nsock engines: epoll poll select

Tiếp theo, ta sẽ tạo một folder nơi ta có thể lưu trữ kết quả quét của bạn :

  • mkdir ~/scan_results

Để đảm bảo bạn nhận được kết quả rõ ràng, hãy thoát ra khỏi bất kỳ phiên nào bạn có thể đã mở giữa hệ thống kiểm toán và hệ thống đích. Điều này bao gồm các phiên SSH, mọi kết nối HTTP (S) mà bạn có thể đã cài đặt trong trình duyệt web, v.v.

Quét mục tiêu của bạn để mở cổng TCP

Bây giờ ta đã có server và file của bạn , ta sẽ bắt đầu bằng cách quét server đích của ta để tìm các cổng TCP đang mở.

Thực tế có một số quét TCP mà nmap biết cách thực hiện. Cách tốt nhất thường bắt đầu là quét SYN, còn gọi là “quét nửa mở” vì nó không bao giờ thực sự thương lượng kết nối TCP đầy đủ. Điều này thường được sử dụng bởi những kẻ tấn công vì nó không đăng ký được trên một số hệ thống phát hiện xâm nhập vì nó không bao giờ hoàn thành một quá trình bắt tay đầy đủ.

Cài đặt chụp gói

Trước khi quét, ta sẽ cài đặt tcpdump để nắm bắt lưu lượng truy cập được tạo ra bởi thử nghiệm. Điều này sẽ giúp ta phân tích sâu hơn các gói được gửi và nhận sau này nếu ta cần. Hãy tạo một folder trong ~/scan_results để ta có thể giữ các file liên quan đến việc quét SYN của ta cùng nhau:

  • mkdir ~/scan_results/syn_scan

Ta có thể bắt đầu chụp tcpdump và ghi kết quả vào một file trong folder ~/scan_results/syn_scan của ta bằng lệnh sau:

  • sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Theo mặc định, tcpdump sẽ chạy ở chế độ nền trước. Để chạy quét nmap của ta trong cùng một cửa sổ, ta cần tạm dừng quá trình tcpdump và sau đó khởi động lại nó trong nền.

Ta có thể tạm dừng quá trình đang chạy bằng cách nhấn CTRL-Z :

CTRL-Z 

Điều này sẽ tạm dừng quá trình đang chạy:

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 công việc ở chế độ nền bằng lệnh bg :

  • bg

Bạn sẽ thấy một dòng kết quả tương tự, lần này không có nhãn “Đã dừng” và có dấu và ở cuối để cho biết rằng quá trình sẽ được chạy trong nền:

Output
[1]+ sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets &

Lệnh hiện đang chạy trong nền, theo dõi bất kỳ gói nào đi giữa máy kiểm toán và máy mục tiêu của ta . Bây giờ ta có thể chạy quét SYN của bạn .

Chạy SYN Scan

Với tcpdump ghi lại lưu lượng truy cập của ta đến máy mục tiêu, ta đã sẵn sàng chạy nmap . Ta sẽ sử dụng các cờ sau để lấy nmap thực hiện các việc ta yêu cầu:

  • -sS : Thao tác này bắt đầu quét SYN. Về mặt kỹ thuật, đây là cách quét mặc định mà nmap sẽ thực hiện nếu không có loại quét nào được đưa ra, nhưng ta sẽ đưa nó vào đây để rõ ràng.
  • -Pn : Điều này yêu cầu nmap bỏ qua bước khám phá server , bước này sẽ hủy bỏ quá trình kiểm tra sớm nếu server không phản hồi với một ping. Vì ta biết rằng mục tiêu là trực tuyến, ta có thể bỏ qua điều này.
  • -p- : Theo mặc định, quét SYN sẽ chỉ thử 1000 cổng thông dụng nhất. Điều này yêu cầu nmap kiểm tra mọi cổng có sẵn.
  • -T4 : Điều này cài đặt cấu hình thời gian cho nmap , yêu cầu nó tăng tốc độ thử nghiệm với nguy cơ kết quả 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ì ta đang quét mọi cổng, ta có thể sử dụng điều này làm đường cơ sở và kiểm tra lại bất kỳ cổng nào sau này có thể đã được báo cáo không chính xác.
  • -vv : Điều này làm tăng độ chi tiết của kết quả .
  • --reason : Điều này cho nmap biết lý do mà trạng thái của một cổng được báo cáo theo một cách nhất định.
  • -oN : Điều này ghi kết quả vào một file mà ta có thể sử dụng để phân tích sau này.

Ghi chú
Một điều cần lưu ý là để kiểm tra IPv6, bạn cần thêm cờ -6 vào các lệnh của bạn . Bởi vì hầu hết các hướng dẫn tiên quyết không chấp nhận lưu lượng IPv6, ta sẽ bỏ qua IPv6 cho hướng dẫn này. Thêm cờ này nếu firewall của bạn chấp nhận lưu lượng IPv6.

Cùng với nhau, lệnh sẽ giống như sau:

  • sudo nmap -sS -Pn -p- -T4 -vv --reason -oN ~/scan_results/syn_scan/nmap.results target_ip_addr

Ngay cả với mẫu thời gian được đặt ở 4, quá trình quét có thể sẽ mất khá nhiều thời gian vì nó chạy qua 65.535 cổng (quá trình chạy thử nghiệm của tôi kéo dài khoảng bốn mươi phút). Bạn sẽ thấy kết quả bắt đầu được in ra trông giống như sau:

Output
Starting Nmap 6.49BETA4 ( https://nmap.org ) at 2015-08-26 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 chụp gói tcpdump

Khi quá trình quét hoàn tất, ta có thể đưa quá trình tcpdump trở lại nền trước và dừng nó lại.

Đưa nó ra khỏi nền bằng lệnh :

  • fg

Dừng quá trình bằng cách giữ phím điều khiển và nhấn “c”:

CTRL-C 

Phân tích kết quả

Đến đây bạn sẽ có hai file trong folder ~/scan_results/syn_scan . Một được gọi là các packets , được tạo bởi chạy tcpdump và một được tạo bởi nmap được gọi là nmap.results .

Trước tiên, hãy xem file nmap.results :

  • less ~/scan_results/syn_scan/nmap.results
~ / scan_results / syn_scan / nmap.results
# Nmap 6.49BETA4 scan initiated Wed Aug 26 17:05:13 2015 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 2015-08-26 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 Wed Aug 26 17:44:10 2015 -- 1 IP address (1 host up) scanned in 2336.85 seconds 

Khu vực được đánh dấu ở trên chứa các kết quả chính của quá trình quét. Ta có thể thấy rằng cổng 22 và cổng 80 đang mở trên server được quét để cho phép lưu lượng SSH và HTTP. Ta cũng có thể thấy rằng 65.533 cổng đã bị đóng. Một kết quả có thể khác sẽ được “lọc”. Đã lọc nghĩa là các cổng này được xác định là bị chặn bởi một thứ gì đó dọc theo đường dẫn mạng. Nó có thể là một firewall trên máy đích, nhưng nó cũng có thể là các luật lọc trên bất kỳ server trung gian nào giữa máy kiểm toán và máy đích.

Nếu ta muốn xem lưu lượng gói thực tế đã được gửi đến và nhận từ đích, ta có thể đọc lại file 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 server . Bạn có thể lọc theo một số cách.

Ví dụ: để chỉ xem lưu lượng được gửi đến đích, có thể chạy lệnh:

  • sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'dst target_ip_addr' | less

Tương tự như vậy, để chỉ xem lưu lượng phản hồi, bạn có thể thay đổi “dst” thành “src”:

  • sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr' | less

Các cổng TCP mở sẽ đáp ứng các yêu cầu này bằng gói SYN. Ta có thể trực tiếp tìm kiếm câu trả lời cho loại này bằ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ị cho bạn các phản hồi SYN thành công và phải trùng với các cổng mà bạn đã thấy trong lần chạy 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ể phân tích thêm dữ liệu khi thấy phù hợp. Tất cả đã được thu thập để xử lý và phân tích không đồng bộ.

Quét mục tiêu của bạn để tìm các cổng UDP đang mở

Đến đây bạn đã nắm rõ cách chạy các bài kiểm tra này, ta có thể hoàn tất quy trình tương tự để quét các cổng UDP đang mở.

Cài đặt chụp gói

, hãy tạo một folder để lưu giữ kết quả của ta :

  • mkdir ~/scan_results/udp_scan

Bắt đầu chụp lại tcpdump . Lần này, ghi file vào folder ~/scan_results/udp_scan :

  • sudo tcpdump host target_ip_addr -w ~/scan_results/udp_scan/packets

Tạm dừng quá trình và đưa nó vào nền:

CTRL-Z 
  • bg

Chạy quét UDP

Bây giờ, ta đã sẵn sàng để chạy quét UDP. Do bản chất của giao thức UDP, quá trình quét này thường mất nhiều thời gian hơn so với quét SYN. Trên thực tế, có thể mất hơn một ngày nếu bạn đang quét mọi cổng trên hệ thống. UDP là một giao thức không kết nối, vì vậy không nhận được phản hồi có thể nghĩa là cổng của mục tiêu bị chặn, nó được chấp nhận hoặc gói tin đã bị mất. Để cố gắng phân biệt giữa những thứ này, nmap phải truyền lại các gói bổ sung để cố gắng nhận phản hồi.

Hầu hết các cờ sẽ giống như ta đã sử dụng để quét SYN. Trên thực tế, lá cờ mới duy nhất là:

  • -sU : Điều này cho nmap thực hiện quét UDP.

Tăng tốc độ kiểm tra UDP

Nếu bạn lo lắng về lượng thời gian mà bài kiểm tra này mất, ban đầu bạn có thể chỉ muốn kiểm tra một tập hợp con các cổng UDP của bạn . Bạn chỉ có thể kiểm tra 1000 cổng phổ biến nhất bằng cách bỏ cờ -p- . Điều này có thể rút ngắn đáng kể thời gian quét của bạn. Tuy nhiên, nếu bạn muốn có một bức tranh hoàn chỉnh, bạn sẽ phải quay lại sau và quét toàn bộ phạm vi cổng của bạn .

Vì bạn đang quét cơ sở hạ tầng của chính mình, có lẽ tùy chọn tốt nhất để tăng tốc độ quét UDP là tạm thời vô hiệu hóa giới hạn tốc độ ICMP trên hệ thống đích. Thông thường, các server Linux giới hạn phản hồi ICMP ở mức 1 mỗi giây (đây thường là một điều tốt, nhưng không tốt cho việc kiểm tra của ta ), nghĩa là quá trình quét toàn bộ UDP 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 bạn bằng lệnh :

  • sudo sysctl net.ipv4.icmp_ratelimit
Output
net.ipv4.icmp_ratelimit = 1000

“1000” là số mili giây giữa các phản hồi. Ta có thể tạm thời vô hiệu hóa giới hạn tỷ lệ này trên hệ thống đích bằng lệnh :

  • sudo sysctl -w net.ipv4.icmp_ratelimit=0

Điều rất quan trọng là phải hoàn nguyên giá trị này sau khi kiểm tra.

Chạy thử nghiệm

Đảm bảo ghi kết quả vào folder ~/scan_results/udp_scan . Tất cả cùng nhau, lệnh sẽ giống như sau:

  • sudo nmap -sU -Pn -p- -T4 -vv --reason -oN ~/scan_results/udp_scan/nmap.results target_ip_addr

Ngay cả khi vô hiệu hóa giới hạn tỷ lệ ICMP trên mục tiêu, quá trình quét này mất khoảng 2 giờ 45 phút trong quá trình chạy thử nghiệm của ta . Sau khi quá trình quét hoàn tất, bạn nên hoàn nguyên giới hạn tốc độ ICMP của bạn (nếu bạn đã sửa đổi nó) trên máy mục tiêu:

  • sudo sysctl -w net.ipv4.icmp_ratelimit=1000

Dừng chụp gói tcpdump

Đưa quy trình tcpdump trở lại nền trước trên máy kiểm tra của bạn bằng lệnh :

  • fg

Dừng chụp gói bằng cách giữ điều khiển và nhấn “c”:

CTRL-c 

Phân tích kết quả

Bây giờ, ta có thể xem các file đã tạo.

nmap.results kết quả sẽ trông khá giống với file ta đã thấy trước đây:

  • less ~/scan_results/udp_scan/nmap.results
~ / scan_results / udp_scan / nmap.results
# Nmap 6.49BETA4 scan initiated Thu Aug 27 12:42:42 2015 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 2015-08-27 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 Thu Aug 27 15:28:39 2015 -- 1 IP address (1 host up) scanned in 9956.97 seconds 

Sự khác biệt chính giữa kết quả này và kết quả SYN trước đó có thể sẽ là số lượng cổng được đánh dấu là open|filtered . Điều này nghĩa là nmap không thể xác định xem việc thiếu phản hồi nghĩa là một dịch vụ đã chấp nhận lưu lượng truy cập hay nó bị firewall hoặc cơ chế lọc nào đó bỏ qua đường dẫn phân phối.

Việc phân tích kết quả tcpdump cũng khó hơn đáng kể vì không có cờ kết nối và vì ta phải khớp các phản hồi ICMP với các yêu cầu UDP.

Ta có thể thấy cách nmap phải gửi nhiều gói tin đế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'

Bạn có thể sẽ thấy một cái gì đó trông giống như sau:

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 sánh điều này với kết quả ta thấy từ một trong các cổng đã quét được đánh dấu là "đã đó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)

Ta có thể cố gắng tạo lại thủ công quy trình mà nmap trải qua bằng cách trước tiên biên dịch danh sách tất cả các cổng mà ta đang gửi gói UDP đến bằng cách sử dụng thông tin 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 đó, ta có thể xem những gói ICMP nào mà ta đã nhận lại cho biết 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

Sau đó, ta có thể xem lấy hai phản hồi này và xem gói UDP nào chưa bao giờ nhận lại phản hồi ICMP bằng lệnh :

  • comm -3 outgoing response

Điều này hầu hết phải trùng với danh sách các cổng mà nmap đã báo cáo (nó có thể chứa một số kết quả dương tính giả từ các gói trả về bị mất).

Server và Khám phá Dịch vụ

Ta có thể chạy một số thử nghiệm bổ sung trên mục tiêu của bạn để xem liệu nmap thể xác định hệ điều hành đang chạy hoặc bất kỳ version dịch vụ nào hay không.

Hãy tạo một folder để chứa kết quả lập version của ta :

  • mkdir ~/scan_results/versions

Khám phá các version dịch vụ trên server

Ta có thể cố gắng đoán các version dịch vụ đang chạy trên mục tiêu thông qua một quá trình được gọi là lấy dấu fingerprint . Ta lấy thông tin từ server và so sánh nó với các version đã biết trong database của ta .

Một tcpdump sẽ không quá hữu ích trong trường hợp này, vì vậy ta có thể bỏ qua nó. Nếu bạn muốn nắm bắt nó, hãy làm theo quy trình ta đã sử dụng lần trước.

Quét nmap mà ta cần sử dụng được kích hoạt bởi cờ -sV . Vì ta đã thực hiện quét SYN và UDP, ta có thể chuyển vào các cổng chính xác mà ta muốn xem bằng cờ -p . Ở đây, ta sẽ xem xét 22 và 80 (các cổng được hiển thị trong quá trình quét SYN của ta ):

  • sudo nmap -sV -Pn -p 22,80 -vv --reason -oN ~/scan_results/versions/service_versions.nmap target_ip_addr

Nếu bạn xem file 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 độ "chatty" hoặc thậm chí mức độ độc đáo của phản hồi của dịch vụ:

  • less ~/scan_results/versions/service_versions.nmap
~ / scan_results / version / service_versions.nmap
# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:46:12 2015 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 2015-08-27 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 Thu Aug 27 15:46:21 2015 -- 1 IP address (1 host up) scanned in 8.81 seconds 

Tại đây, bạn có thể thấy rằng thử nghiệm có thể xác định version server SSH và bản phân phối Linux đã đóng gói nó cũng như version giao thức SSH được chấp nhận. Nó cũng nhận ra version của Nginx và xác định nó phù hợp với gói Ubuntu.

Khám phá Hệ điều hành Server

Ta có thể cố gắng để nmap đoán hệ điều hành server dựa trên các đặc điểm của phần mềm và phản hồi của nó. Điều này hoạt động giống như cách tạo version dịch vụ. , ta sẽ bỏ qua lần chạy tcpdump khỏi thử nghiệm này, nhưng bạn có thể thực hiện nó nếu muốn.

Cờ ta cần để thực hiện phát hiện hệ điều hành là -O (chữ cái viết hoa “O”). Một lệnh đầy đủ có thể trông giống như sau:

  • sudo nmap -O -Pn -vv --reason -oN ~/scan_results/versions/os_version.nmap target_ip_addr

Nếu bạn xem file kết quả , bạn có thể thấy một cái gì đó giống như sau:

  • less ~/scan_results/versions/os_version.nmap
~ / scan_results / version / os_versions.nmap
# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:53:54 2015 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 2015-08-27 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 Wed Aug 26 14:32:23 2015) 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 Thu Aug 27 15:54:24 2015 -- 1 IP address (1 host up) scanned in 30.94 seconds 

Ta có thể thấy rằng trong trường hợp này, nmap không có phỏng đoán cho hệ điều hành dựa trên chữ ký mà nó nhìn thấy. Nếu nó nhận được nhiều thông tin hơn, nó có thể sẽ hiển thị các tỷ lệ phần trăm khác nhau cho biết cách chữ ký của máy mục tiêu trùng với chữ ký hệ điều hành trong database của nó. Bạn có thể thấy chữ ký fingerprint mà nmap nhận được từ mục tiêu bên dưới dòng TCP/IP fingerprint: .

Nhận dạng hệ điều hành có thể giúp kẻ tấn công xác định cách khai thác nào có thể hữu ích trên hệ thống. Cấu hình firewall của bạn để trả lời ít yêu cầu hơn có thể giúp cản trở độ chính xác của một số phương pháp phát hiện này.

Kết luận

Kiểm tra firewall của bạn và xây dựng nhận thức về mạng nội bộ của bạn trông như thế nào đối với kẻ tấn công bên ngoài có thể giúp giảm thiểu rủi ro cho bạn. Thông tin bạn tìm thấy từ việc thăm dò cơ sở hạ tầng của chính bạn có thể mở ra một cuộc trò chuyện về việc liệu bất kỳ quyết định policy nào của bạn cần được xem xét lại để tăng cường bảo mật. 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 có thể đã xảy ra do đặt hàng luật không chính xác hoặc policy kiểm tra bị quên. Bạn nên kiểm tra các policy của bạn với tính thường xuyên của database quét mới nhất để cải thiện hoặc ít nhất là duy trì mức độ bảo mật hiện tại của bạn.

Để có ý tưởng về một số cải tiến policy cho firewall của bạn, hãy xem hướng dẫn này .


Tags:

Các tin liên quan