Giới thiệu

Thiết lập tường lửa cho cơ sở hạ tầng của bạn là một cách tuyệt vời để 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 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à có ý tưởng tốt về việc liệu các quy tắc tường lửa của bạn có đang làm những gì bạn nghĩ họ đang làm hay để có ấn tượng về cơ sở hạ tầng của bạn trông như thế nào đối với thế giới bên ngoài.

Trong hướng dẫn này, chúng tôi sẽ giới thiệu 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 quy tắc tường lửa của mình. Đây là một số công cụ tương tự mà người dùng độc hại có thể sử dụng, vì vậy bạn sẽ có thể xem thông tin nào họ có thể tìm thấy bằng cách đưa ra yêu cầu của máy chủ của bạn.

Điều kiện tiên quyết

Trong hướng dẫn này, chúng tôi sẽ giả định rằng bạn có một tường lửa được cấu hình 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 thực hiện theo một hoặc nhiều hướng dẫn sau:

  • Iptables
    • Cách thiết lập tường lửa bằng Iptables trên Ubuntu 14.04
    • Iptables Essentials: Các quy tắc và lệnh tường lửa phổ biến
    • Cách di chuyển từ FirewallD sang Iptables trên CentOS 7
    • Làm thế nào để thực hiện một mẫu tường lửa cơ bản với Iptables trên Ubuntu 14.04
  • UFW
    • Cách thiết lập tường lửa với UFW trên Ubuntu 14.04
    • UFW Essentials: Các quy tắc và lệnh tường lửa phổ biến
  • FirewallD
    • Cách thiết lập tường lửa bằng FirewallD trên CentOS 7

Trong hướng dẫn này, chúng tôi sẽ gọi cho máy chủ chứa các chính sách tường lửa 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 sẽ cần có quyền truy cập vào máy chủ để kiểm tra, nằm bên ngoài mạng mà tường lửa của bạn bảo vệ. Trong hướng dẫn này, chúng tôi sẽ sử dụng máy chủ Ubuntu 14.04 làm máy kiểm tra của chúng tôi.

Khi bạn có một máy chủ để 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.

Warning

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

Các công cụ chúng tôi sẽ 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à chúng tôi có thể sử dụng để kiểm tra các chính sách tường lửa của chúng tôi. Một số người trong số họ có chức năng chồng chéo. Chúng tôi sẽ không bao gồm mọi công cụ có thể. Thay vào đó, chúng tôi sẽ đề cập đến một số danh mục chung về các công cụ kiểm tra và đi qua các công cụ mà chúng tôi sẽ sử dụng trong hướng dẫn này.

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

Các bộ phân tích gói có thể được sử dụng để xem tất cả lưu lượng mạng đi qua một giao diện rất chi tiết. Hầu hết các máy phân tích gói 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 một tệp và xử lý nó sau này. Phân tích gói cho chúng ta khả năng thấy, ở mức độ chi tiết, các kiểu phản ứng mà các máy mục tiêu của chúng ta đang gửi trở lại các máy chủ trên mạng mở.

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

Máy quét cổng

Để tạo lưu lượng truy cập và phản hồi cho bộ phân tích gói của chúng tôi để chụp, chúng tôi sẽ sử dụng máy quét cổng. Máy quét cổng có thể được sử dụng để tạo và gửi các loại gói khác nhau cho các máy chủ từ xa nhằm phát hiện loại lưu lượng truy cập mà máy chủ chấp nhận. Người dùng độc hại thường sử dụng công cụ này để tìm kiế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), vì vậy chúng tôi sẽ sử dụng công cụ này để tìm hiểu xem kẻ tấn công có thể khám phá ra điều gì.

Đối với hướng dẫn này, chúng tôi sẽ sử dụng nmap lập bản đồ mạng và công cụ quét cổng. Chúng ta có thể sử dụng nmap để gửi các gói dữ liệu của các 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 chúng tôi và quy tắc tường lửa nào bảo vệ nó.

Thiết lập máy kiểm tra

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

Cập nhật chỉ mục gói địa phương và cài đặt phần mềm nếu nó chưa có sẵn. Chúng tôi cũng sẽ tẩy nmap từ hệ thống của chúng tôi 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ờ chúng ta có các công cụ biên dịch và thư viện phát triển SSL, chúng ta có thể lấy phiên bản mới nhất của nmap từ trang tải xuống trên trang web chính thức. Mở trang trong trình duyệt web của bạn.

Cuộn xuống phần "Phân phối mã nguồn". Ở dưới cùng, bạn sẽ thấy một liên kết đến mã nguồn cho phiên bản mới nhất của nmap. Tại thời điểm viết bài này, có vẻ như sau:

Nmap latest version

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 thư mục chính và sử dụng wget để tải xuống 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 phiên bản mới nhất bạn đã sao chép từ trang web:

cd ~

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

Giải nén tệp bạn đã tải xuống và di chuyển vào thư mục kết quả bằng cách nhập:

tar xjvf nmap*

cd nmap*

Cấu hình và biên dịch mã nguồn bằng cách gõ:

./configure

make

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

sudo make install

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

nmap -V

Đầu ra phải khớp với phiên bản bạn đã tải xuống từ nmap trang mạng:

OutputNmap 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, chúng tôi sẽ tạo một thư mục nơi chúng tôi có thể lưu trữ kết quả quét của mình:

mkdir ~/scan_results

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

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

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

Thực tế, có một vài lần quét TCP nmap biết cách làm. Điều tốt nhất thường 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 sự thương lượng một 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 bởi vì nó không đăng ký 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 cái bắt tay đầy đủ.

Thiết lập Capture Packet

Trước khi chúng tôi quét, chúng tôi sẽ thiết lập 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 chúng tôi phân tích các gói được gửi và nhận sâu hơn sau này nếu chúng ta cần. Hãy tạo một thư mục bên trong ~/scan_results để chúng tôi có thể giữ các tệp liên quan đến việc quét SYN của chúng tôi cùng nhau:

mkdir ~/scan_results/syn_scan

Chúng ta có thể bắt đầu một tcpdump nắm bắt và ghi kết quả vào một tệp trong ~/scan_results/syn_scan thư mục với lệnh sau:

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

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

Chúng tôi có thể tạm dừng quá trình chạy bằng cách nhấn CTRL-Z:

CTRL-Z

Điều này sẽ tạm dừng quá trình 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 cách nhập bg:

bg

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

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

Lệnh này hiện đang chạy ở chế độ nền, xem xét bất kỳ gói dữ liệu nào giữa các máy kiểm tra và mục tiêu của chúng tôi. Bây giờ chúng tôi có thể chạy quét SYN của chúng tôi.

Chạy quét SYN

Với tcpdump ghi lưu lượng truy cập của chúng tôi vào máy mục tiêu, chúng tôi sẵn sàng chạy nmap. Chúng tôi sẽ sử dụng các cờ sau đây để có được nmap để thực hiện các hành động mà chúng tôi yêu cầu:

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

Note

Một điều cần lưu ý là để kiểm tra IPv6, bạn sẽ cần phải thêm -6 gắn cờ vào các lệnh của bạn. 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, chúng tôi sẽ bỏ qua IPv6 cho hướng dẫn này. Thêm cờ này nếu tường lửa của bạn chấp nhận lưu lượng truy cập 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 ở mức 4, quá trình quét có thể mất khá nhiều thời gian khi nó chạy qua 65.535 cổng (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 in giống như thế này:

OutputStarting 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)

. . .

Ngừng tcpdump Packet Capture

Khi quá trình quét hoàn tất, chúng tôi có thể mang tcpdump xử lý trở lại nền trước và dừng nó lại.

Đưa nó ra khỏi nền bằng cách gõ:

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ả

Bây giờ bạn sẽ có hai tệp trong ~/scan_results/syn_scan danh mục. Một được gọi là packets, được tạo bởi tcpdump chạy và được tạo bởi nmap gọi là nmap.results.

Hãy nhìn vào nmap.results tập tin đầu tiên:

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. Chúng ta có thể thấy rằng cổng 22 và cổng 80 được mở trên máy chủ được quét để cho phép lưu lượng SSH và HTTP. Chúng 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". Được lọc có nghĩa là các cổng này đã được xác định là bị dừng bởi một thứ gì đó dọc theo đường dẫn mạng. Nó có thể là một tường lửa trên mục tiêu, nhưng nó cũng có thể lọc các quy tắc trên bất kỳ máy chủ trung gian nào giữa các máy kiểm tra và máy đích.

Nếu chúng ta muốn xem lưu lượng gói dữ liệu thực tế được gửi đến và nhận được từ mục tiêu, chúng ta có thể đọc packets tập tin trở lại vào tcpdump, như thế này:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets | less

Tệp này chứa toàn bộ cuộc hội thoại diễn ra giữa hai máy chủ. Bạn có thể lọc theo một số cách.

Ví dụ: để chỉ xem lưu lượng truy cập gởi với 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 đổ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ẽ trả lời các yêu cầu này bằng gói SYN. Chúng tôi có thể tìm kiếm trực tiếp các 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 câu trả lời SYN thành công và phải khớp với các cổng mà bạn đã thấy trong nmap chạy:

Outputreading 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 nhiều dữ liệu hơn khi bạn 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 để mở các cổng UDP

Bây giờ bạn đã có một xử lý tốt về cách chạy các kiểm tra này, chúng ta có thể hoàn thành một quá trình tương tự để quét các cổng UDP mở.

Thiết lập Capture Packet

Một lần nữa, hãy tạo một thư mục để giữ kết quả của chúng tôi:

mkdir ~/scan_results/udp_scan

Bắt đầu một tcpdump chụp lại. Lần này, ghi tệp mới ~/scan_results/udp_scan danh mục:

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

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

CTRL-Z

bg

Chạy quét UDP

Bây giờ, chúng tôi đã 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 sẽ mất đáng kể dài hơn quét SYN. Trong thực tế, nó có thể mất hơn một ngày nếu bạn đang quét tất cả các cổng trên hệ thống. UDP là một giao thức không kết nối, do đó không nhận được phản hồi có thể có nghĩa là cổng của mục tiêu bị chặn, rằng nó đã được chấp nhận, hoặc gói tin bị mất. Để cố phân biệt giữa chúng, 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ư chúng tôi sử dụng cho quét SYN. Trên thực tế, lá cờ mới duy nhất là:

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

Đẩy nhanh kiểm tra UDP

Nếu bạn lo lắng về số lượng thời gian thử nghiệm này có, bạn chỉ có thể muốn kiểm tra một tập hợp con của các cổng UDP của bạn lúc đầu. Bạn chỉ có thể kiểm tra 1000 cổng phổ biến nhất bằng cách loại bỏ -p- cờ. Điều này có thể rút ngắn thời gian quét của bạn đáng kể. 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 riêng bạn, 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 máy chủ Linux giới hạn các phản hồi ICMP đế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 cho kiểm toán của chúng tôi), có nghĩa là quá trình 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

Outputnet.ipv4.icmp_ratelimit = 1000

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

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 thử nghiệm của bạn.

Chạy thử nghiệm

Đảm bảo viết kết quả cho ~/scan_results/udp_scan danh mục. Tất cả cùng nhau, lệnh sẽ giống như thế này:

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 tỷ lệ ICMP giới hạn trên mục tiêu, quá trình quét này mất khoảng 2 giờ và 45 phút trong khi chạy thử nghiệm của chúng tôi. 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 mình (nếu bạn đã sửa đổi nó) trên máy đích:

sudo sysctl -w net.ipv4.icmp_ratelimit=1000

Ngừng tcpdump Packet Capture

Mang theo tcpdump xử lý trở lại nền trước trên máy kiểm tra của bạn bằng cách gõ:

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ờ, chúng ta có thể xem các tập tin được tạo ra.

Kết quả nmap.results tệp trông khá giống với tệp chúng 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ể là số lượng cổng được đánh dấu open|filtered. Điều này có nghĩa rằng nmap không thể xác định liệu việc thiếu phản hồi có nghĩa là một dịch vụ đã chấp nhận lưu lượng truy cập hay liệu nó đã bị bỏ qua bởi một số tường lửa hoặc cơ chế lọc dọc theo đường dẫn phân phối.

Phân tích tcpdump đầu ra cũng khó hơn nhiều vì không có cờ kết nối và vì chúng ta phải khớp các đáp ứng ICMP với các yêu cầu UDP.

Chúng ta có thể thấy cách nmap đã phải gửi nhiều 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 truy cập 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 như thế này:

Outputreading 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ả chúng ta thấy từ một trong các cổng được quét đã được đánh dấu là "đã đóng":

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 53'

Outputreading 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)

Chúng tôi có thể cố gắng tự tái tạo lại quy trình nmap đi qua bằng cách đầu tiên biên soạn một danh sách tất cả các cổng mà chúng tôi đang gửi các gói UDP để sử dụng một cái gì đó như thế này:

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 đó, chúng ta có thể thấy các gói ICMP nào mà chúng tôi nhận được trở lại nói 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

Sau đó chúng ta có thể xem hai phản hồi này và xem các gói UDP nào chưa bao giờ nhận được phản hồi ICMP bằng cách gõ:

comm -3 outgoing response

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

Khám phá máy chủ và dịch vụ

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

Hãy tạo một thư mục để giữ kết quả phiên bản của chúng tôi:

mkdir ~/scan_results/versions

Khám phá các phiên bản dịch vụ trên máy chủ

Chúng tôi có thể thử đoán các phiên bản dịch vụ đang chạy trên đích thông qua quá trình được gọi là vân tay. Chúng tôi lấy 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 chúng tôi.

A tcpdump sẽ không quá hữu ích trong kịch bản này, vì vậy chúng tôi có thể bỏ qua nó. Nếu bạn muốn ghi lại nó, hãy làm theo quy trình chúng tôi đã sử dụng lần trước.

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

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

Nếu bạn xem tệp kết quả, bạn có thể nhận thông tin về dịch vụ đang chạy, tùy thuộc vào cách "trò chuyện" hoặc thậm chí mức độ phản hồi của dịch vụ duy nhất là:

less ~/scan_results/versions/service_versions.nmap

~/scan_results/versions/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

Ở đây, bạn có thể thấy rằng bài kiểm tra có thể xác định phiên bản máy chủ SSH và bản phân phối Linux đã đóng gói nó cũng như phiên bản giao thức SSH được chấp nhận. Nó cũng nhận ra phiên bản Nginx và một lần nữa xác định nó là phù hợp với gói Ubuntu.

Khám phá hệ điều hành máy chủ

Chúng ta có thể cố gắng có nmap đoán hệ điều hành máy chủ dựa trên đặc điểm của phần mềm và phản hồi của nó. Điều này hoạt động nhiều theo cùng cách với phiên bản dịch vụ. Một lần nữa, chúng tôi sẽ bỏ qua tcpdump chạy từ thử nghiệm này, nhưng bạn có thể thực hiện nó nếu bạn muốn.

Cờ chúng 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"). 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 tập tin đầu ra, bạn có thể thấy một cái gì đó trông như thế này:

less ~/scan_results/versions/os_version.nmap

~/scan_results/versions/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

Chúng ta có thể thấy rằng trong trường hợp này, nmap không có dự đ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 chữ ký của máy mục tiêu khớp với chữ ký hệ điều hành trong cơ sở dữ liệu của nó như thế nào. Bạn có thể thấy chữ ký vân tay nmap nhận được từ mục tiêu bên dưới TCP/IP fingerprint: hàng.

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

Phần kết luận

Kiểm tra tường lửa 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 với kẻ tấn công bên ngoài có thể giúp giảm thiểu rủi ro của bạn. Thông tin bạn tìm thấy từ việc thăm dò cơ sở hạ tầng của riêng bạn có thể mở ra một cuộc trò chuyện về việc liệu bất kỳ quyết định chính sách nào của bạn cần phải được xem xét lại để tăng cường bảo mật. Nó cũng có thể chiếu sáng bất kỳ khoảng trống nào trong an ninh của bạn có thể xảy ra do quy tắc đặt hàng không chính xác hoặc chính sách kiểm tra bị quên. Chúng tôi khuyên bạn nên kiểm tra các chính sách của mình bằng tính chính xác của cơ sở dữ liệu 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 chính sách cho tường lửa của bạn, hãy xem hướng dẫn này.