2. 9 Phòng ngừa và ngăn chặn spoofing
3.2.4 Quản lý và tạo luật trong phần mềm Snort
Tập các luật là phần quan trọng bậc nhất của Snort, bởi nó được sử dụng để so khớp với các gói tin bắt được và là cơ sở để kiểm tra xem nó có phải gói tin nguy hiểm không.
Phần mềm Snort có một hệ thống các luật rất phong phú và thường xuyên được cập nhất khi các kỹ thuật tấn công mới xuất hiên. Dưới đây là các file luật của Snort, được đặt trong thư mục /etc/snort và được ánh xạ tới bởi biến $RULE_PATH :
attack-responses.rules local.rules shellcode.rules backdoor.rules misc.rules smtp.rules bad-traffic.rules multimedia.rules snmp.rules chat.rules mysql.rules sql.rules ddos.rules netbios.rules telnet.rules deleted.rules nntp.rules tftp.rules dns.rules oracle.rules virus.rules
dos.rules other-ids.rules web-attacks.rules experimental.rules p2p.rules web-cgi.rules exploit.rules policy.rules web-client.rules
ftp.rules pop3.rules web-frontpage.rules icmp-info.rules porn.rules web-iis.rules
icmp.rules rpc.rules web-misc.rules imap.rules rservices.rules web-php.rules info.rules scan.rules x11.rules
Ngoài ra thì Snort còn cung cấp một cơ chế để có thể tự tạo ra những luật của riêng cho tổ chức của mình.
Xây dựng luật riêng
Luật trong Snort gồm hai phần là phần Header và phần Option, ví dụ :
alert tcp $EXTERNAL_NET any -> $TELNET_SERVERS 23 ( sid: 210; rev: 3; msg: BACKDOOR attempt"; flow: to_server,established; content: "backdoor";
nocase;
classtype: attempted-admin;)
Phần Header:
alert tcp $EXTERNAL_NET any -> $TELNET_SERVERS 23
Luật trong header sẽ là phần đầu của phần luật Snort. Header dùng để định nghĩa cái gì ở trong gói tin. Luật header có thể coi như một miêu tả đặc biệt của liên kết mạng. 4 tham số của nó định nghĩa kết nối mạng bao gồm có : địa chỉ IP nguồn, cổng nguồn, địa chỉ IP đích, và cổng đích. Header của nó cũng gồm có các hướng kết nối của gói tin, được định nghĩa bởi -> hay <>. Ta sẽ đi vào chi tiết cụ thể từng phần của header như sau:
Action: Đưa ra các kiểu phản ứng đối với các dữ liệu nguy hiểm. Các kiểu Action như sau :
alert : Cảnh báo và ghi log gói tin bị phát hiện là dấu hiệu tấn công. log: Chỉ ghi log khi phát hiện gói tin có dấu hiệu tấn công.
pass: Bỏ qua hoặc chặn tất cả các gói tin hoặc giao thông khớp với dấu hiệu tấn công.
Dynamic: Bỏ qua, cho đến khi được bắt đầu kích hoạt luật.
Protocol: Chỉ loại giao thức sử dụng. Ví dụ: tcp, icmp, udp, arp, … Address: Địa chỉ nguồn và đích của gói tin
Phần Option:
(sid: 210; rev: 3; msg: BACKDOOR attempt"; flow: to_server,established; content: "backdoor"; nocase; classtype: attempted-admin;)
Phần này thực tế rất nhiều các option vì thực tế mạng hiện nay có rất nhiều các giao thức, mỗi giao thức lại sinh ra một loạt các trường khác nhau, nên ở đây ta sẽ chỉ nêu ra một số trường cơ bản :
msg: < sample message> : Tên của dấu hiệu tấn công. flags: < flags> : Cờ cho tcp : SYN, ACK, FIN, RST, ...
content: < straight text> : Nội dung trong phần payload, có thể là text hoặc hex. offset: < value>: Chỉ ra điểm hay địa chỉ tương đối trong payload, nơi bắt đầu thực hiện tìm kiếm. Việc điều chỉnh này phải luôn luôn đặt tùy chọn nội dung. ffset mặc định là byte đầu tiên của payload.
depth: < value>: tùy chọn này sẽ giới hạn số byte cần tìm kiếm kể từ byte khởi tạo để tránh việc kiểm tra toàn bộ payload.
Nocase: Không phân biệt chữ hoa chữ thường, kết hợp với trường content.
logto: tùy chọn này để log tới một thư mục đặc biệt nào đó trong thư mục cảnh báo (mặc định là /var/log/snort). Ví dụ dưới đây cho phép đưa cảnh báo về một cố gắng telnet tới /var/log/snort/telnets.
id: dùng khi gói tin bị phân mảnh. Các mảnh của một gói tin sẽ có cùng một id. Ttl: Thời gian gói tin đi trên mạng trước khi phá hủy.
Dsize: kích thước gói tin.
Ack,seq,.. : dùng trong gói tin tcp.
Icode: đây là trường "code" và có địa chỉ offset của định dạng gói tin ICMP. Priority: mức độ nguy hiểm của tấn công.
reference: Đơn vị đưa ra luật.
classtype: Chỉ định loại tấn công nếu gói tin được so khớp với luật
Ví dụ về một luật tự xây dựng:
Luật này sẽ kiểm tra gói tin mang tính chất thăm dò, đó là gói tin icmp request, khi ai đó cố gắng ping đến mạng để kiểm tra kết nối. Nếu có gói tin đó có độ lớn hơn 500Kb sẽ xuất hiện cảnh báo sẽ được đưa ra.
Alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg : “NGUY HIEM QUA”; dsize : >500 ; reference: url,www.votuanhai.com.vn; classtype:bad- unknown)
Sau đây ta sẽ thực thi Snort và thực hiện lệnh ping với gói dữ liêu 600 KB: Ping 192.168.2.2 –s 600
Kết quả cảnh báo :