Khám phá dịch vụ với SiLK

Một phần của tài liệu Bài giảng Kỹ thuật theo dõi, giám sát an toàn mạng: Phần 2 (Trang 44 - 48)

b. Các tùy chọn của luật

3.4.2 Khám phá dịch vụ với SiLK

Rwstats cũng có thể được sử dụng để thực hiện các hoạt động phát hiện các tài sản được bảo vệ trong mạng nội bộ. Ví dụ sau sẽ xác định được một số máy chủ quan trọng thường xuyên giao tiếp với các thiết bị bên ngoài của mạng nội bộ. Quá trình này bắt đầu với việc tạo ra một rwfilter để thu thập tập dữ liệu để từ đó tạo ra số liệu thống kê. Trong một kịch bản lý tưởng, loại truy vấn này được chạy định kỳ và được kiểm tra liên tục. Điều này có thể trợ giúp trong việc bắt máy chủ giả mạo được mở ra tạm thời.

Ở đây, sẽ làm việc với một tệp tin được tạo bởi rwfilter để có thể đơn giản truyền nó qua rwstats. Để thực hiện việc này, có thể sử dụng một bộ lọc như thế để tạo ra một tập dữ liệu dựa trên tất cả các lưu lượng truy cập trong một khoảng thời gian cụ thể và truyền dữ liệu đó vào một tệp tin gọi là sample.rw.

rwfilter --start-date = 2013/08/28:00 --end-date = 2013/08/28:23 --type = all -- protocol = 0- --pass = sample.rw

Với một tập dữ liệu sẵn sàng cho phân tích cú pháp, bây giờ cần phải xác định những số liệu thống kê muốn tạo ra. Sau khi tạo ra số liệu thống kê, có thể viết ra các câu hỏi và "chuyển" nó

vào cú pháp rwstats để đạt được dữ liệu đang cần tìm kiếm. Ví dụ hãy tự hỏi: "Các thiết bị trong mạng nội bộ trao đổi cái gì nhiều nhất tại các cổng phổ biến, 1-1024?"

Câu hỏi này gợi ra nhiều vấn đề. Việc phân định về nhóm cao nhất trong danh sách có thể là yếu tố quyết định cho các kết quả thực sự cần. Nếu cần tra 20 thiết bị trong danh sách nhóm cao nhất với câu hỏi trên, có thể thực hiện lệnh rwstats như sau:

rwfilter sample.rw --type = out,outweb --sport = 1-1024 --pass = stdout | rwstats -- fields = sip,sport --count = 20 --value = dip-distinct

Các kết quả của truy vấn này được thể hiện trong Hình 3.27.

Hình 3.27 Nhóm cao nhất các cổng máy chủ giao tiếp

Kết quả của truy vấn này cho thấy 20 máy tính đầu (--count = 20) theo địa chỉ IP và cổng nguồn (--fields = sip, sport) được xác định bằng cách xem xét số thiết bị bên ngoài các máy tính liên lạc với (--value = dip-distinct). Tập dữ liệu sử dụng cho truy vấn này được giới hạn bằng cách chạy rwfilter trên tập dữ liệu sample.rw đã tạo ra, và chỉ truyền lưu lượng gửi ra ngoài từ các cổng 1-1024 đến rwstats (--type = out, outweb --sport = 1-1024).

Điều này cho chúng ta một số dữ liệu cần thiết, nhưng còn những thông tin khác về lưu lượng truy cập máy chủ mà không liên quan đến thông tin liên lạc từ các host bên ngoài? Nếu bộ thu thập luồng (một bộ cảm biến hoặc một bộ định tuyến) là vị trí thu thập luồng bên trong nội bộ, thì có thể thêm tùy chọn kiểu int2int.

Điều có thể thực hiện để nâng cao chất lượng của dữ liệu và làm tốt hơn cho dữ liệu thống kê sẽ tạo ra sau này, là hạn chế nó chỉ đến nguồn có địa chỉ IP trong phạm vi mạng mà có trách nhiệm bảo vệ. Điều này thường sẽ là các giá trị được định nghĩa trong tệp tin SiLK sensor.conf

như các khối (block) IP nội bộ. Cách tốt nhất để xử lý là tạo ra một tập hợp gồm những khối IP nội bộ. Rwtools SiLK sử dụng thiết lập các tệp tin để tham khảo nhóm các địa chỉ IP. Để tạo ra một tệp tin thiết lập, cách đơn giản là đặt tất cả các địa chỉ IP (bao gồm cả phạm vi CIDR) trong một tệp tin văn bản, và sau đó chuyển đổi nó vào một tệp tin bằng cách sử dụng tập lệnh rwsetbuild:

rwsetbuild local.txt local.set

Ở đây, rwsetbuild mất trong danh sách các khối IP quy định trong tệp tin local.txt, và đầu ra các tệp tin thiết lập tên local.set. Với các tệp tin thiết lập tạo ra, có thể sử dụng lệnh sau để có được các dữ liệu mong muốn:

rwfilter sample.rw --sipset = local.set --type = int2int,out,outweb --sport = 1-1024 -- pass = stdout | rwstats --fields = sip,sport --count = 20 --value = dip-distinct

Chú ý ở đây là các tùy chọn --sipset được sử dụng với các lệnh rwfilter giới hạn dữ liệu một cách thích hợp để nguồn chỉ có địa chỉ IP thuộc phạm vi của mạng có trách nhiệm bảo vệ.

Với những thay đổi tối thiểu các phương pháp đã sử dụng, có thể thu hẹp các lệnh này để phù hợp với môi trường của riêng tổ chức với độ chính xác cao. Ví dụ, trong khi chỉ kiểm tra 20 so sánh với mỗi truy vấn, có thể xác định bất kỳ thiết bị tương tự nào như một máy chủ cần được xem xét trong truy vấn nếu nó liên lạc với ít nhất 10 thiết bị lạ. Để có được một danh sách các thiết bị phù hợp với tiêu chí đó, chỉ cần thay đổi --count = 20 đến --threshold = 10. Có thể thao tác để cho kết quả tốt hơn bằng cách tập trung vào dải cổng hoặc tập trung vào các tập tệp tin mới. Điều quan trọng cần lưu ý ở đây là đang tìm kiếm tập trung vào các dịch vụ, và cụ thể là -- fields = sip,sport, có nghĩa là đang hiển thị nhóm danh sách kết hợp các địa chỉ nguồn và cổng nguồn. Nếu ý tưởng ở đây là xác định các máy chủ giao tiếp bằng tổng số lượng địa chỉ IP đích riêng biệt khác nhau, thì điều quan trọng là phải loại bỏ các trường sport trong rwstats để tổng hợp tổng số các kết nối với mỗi thiết bị cụ thể, như sau:

rwfilter sample.rw --sipset = local.set --type = all --sport = 1-1024 --pass = stdout| rwstats --fields = sip --count = 20 --value = dip-distinct

Lấy kết quả của truy vấn này và thực hiện thêm lệnh rwstats để đi sâu vào các địa chỉ cụ thể (như trong ví dụ trước) sẽ mang lại nhiều thông tin liên quan đến những dịch vụ đang chạy trên các thiết bị xuất hiện trong danh sách đã tạo ra. Ví dụ, nếu muốn đi sâu vào các dịch vụ chạy trên 192.168.1.21, có thể xác định một "dịch vụ" của cổng nguồn cá nhân có ít nhất 10 lưu lượng hướng ngoại lạ. Có thể thu hẹp rwfilter bao gồm địa chỉ này và thay đổi lệnh rwstats để xem xét thông số ngưỡng:

rwfilter sample.rw --saddress = 192.168.1.21 --type = all --pass = stdout| rwstats -- fields = sport --threshold = 10 --value = dip-distinct

Hình 3.28 Đi sâu vào dịch vụ chạy trên một thiết bị cụ thể

Một số ví dụ để có được chi tiết về tổ chức dịch vụ mạng của tổ chức (tham khảo trong bài viết "Network Profiling using Flow" của hai tác giả Whisnant và Faber):

Máy chủ Web

rwfilter sample.rw --type = outweb --sport = 80,443,8080 --protocol = 6 --packets = 4- --ack- flag = 1 --pass = stdout|rwstats --fields = sip --percentage = 1 --bytes --no-titles|cut -f 1 -d “|”|rwsetbuild > web_servers.set ; echo Potential Web Servers:;rwfilter sample.rw -- type = outweb --sport = 80,443,8080 --protocol = 6 --packets = 4- --ack-flag = 1 -- sipset = web_servers.set --pass = stdout|rwuniq --fields = sip,sport --bytes --sort-output

Máy chủ thư điện tử

echo Potential SMTP servers ;rwfilter sample.rw --type = out --

sport = 25,465,110,995,143,993 --protocol = 6 --packets = 4- --ack-flag = 1 -- pass = stdout|rwset --sip-file = smtpservers.set ;rwfilter sample.rw --type = out --

sport = 25,465,110,995,143,993 --sipset = smtpservers.set --protocol = 6 --packets = 4- --ack- flag = 1 --pass = stdout|rwuniq --fields = sip --bytes --sort-output

Máy chủ DNS

echo DNS Servers: ;rwfilter sample.rw --type = out --sport = 53 --protocol = 17 -- pass = stdout|rwstats --fields = sip --percentage = 1 --packets --no-titles|cut -f 1 -d “|”| rwsetbuild > dns_servers.set ;rwsetcat dns_servers.set

Máy chủ VPN

echo Potential VPNs: ;rwfilter sample.rw --type = out --protocol = 47,50,51 --

pass = stdout|rwuniq --fields = sip --no-titles|cut -f 1 -d “|” |rwsetbuild > vpn.set ;rwfilter sample.rw --type = out --sipset = vpn.set --pass = stdout|rwuniq --fields = sip,protocol --bytes --sort-output

Máy chủ FTP

echo -e “FTP Servers”; rwfilter sample.rw --type = out --protocol = 6 --packets = 4- --ack- flag = 1 --sport = 21 --pass = stdout|rwstats --fields = sip --percentage = 1 --bytes --no- titles|cut -f 1 -d “|”|rwsetbuild > ftpservers.set ;rwsetcat ftpservers.set ; echo FTP Servers making active connections: ;rwfilter sample.rw --type = out --sipset = ftpservers.set -- sport = 20 --flags-initial = S/SAFR --pass = stdout|rwuniq --fields = sip

Máy chủ SSH

echo -e “SSH Servers"; rwfilter sample.rw --type = out --protocol = 6 --packets = 4- --ack- flag = 1 --sport = 22 --pass = stdout|rwstats --fields = sip --percentage = 1 --bytes --no- titles|cut -f 1 -d “|"|rwsetbuild > ssh_servers.set ;rwsetcat ssh_servers.set

Máy chủ TELNET

echo -e “Telnet Servers”; rwfilter sample.rw --type = out --protocol = 6 --packets = 4- --ack- flag = 1 --sport = 23 --pass = stdout|rwstats --fields = sip --percentage = 1 --bytes --no- titles|cut -f 1 -d “|”|rwsetbuild > telnet_servers.set ;rwsetcat telnet_servers.set

Máy chủ Leftover

echo Leftover Servers: ;rwfilter sample.rw --type = out --sport = 1-19,24,26-52,54-499,501- 1023 --pass = stdout|rwstats --fields = sport --percentage = 1

Trong kịch bản phát hiện xâm nhập, các lệnh này sẽ được chạy thường xuyên. Kết quả của mỗi lần chạy nên được so sánh với lần chạy trước, và khi một thiết bị mới chạy như một máy chủ bật lên (pops up), nó cần phải được chú ý xem xét.

Một phần của tài liệu Bài giảng Kỹ thuật theo dõi, giám sát an toàn mạng: Phần 2 (Trang 44 - 48)

Tải bản đầy đủ (PDF)

(103 trang)