Tất cả các Luật của Snort về logic đều gồm 2 phần: Phần header và phần Option.
Phần Header chứa thông tin về hành động mà luật đó sẽthực hiện khi phát hiện ra có xâm nhập nằm trong gói tin và nó cũng chứa các tiêu chuẩn đểáp dụng luật với gói tin đó.
Phần Option chứa một thông điệp cảnh báo và các thông tin về các phần của gói tin dùng đểtạo nên cảnh báo. Phần Option chứa các tiêu chuẩn phụ thêm để đối sánh luật với gói tin. Một luật có thể phát hiện được một hay
nhiều hoạt động thăm dò hay tấn công. Các luật thông minh có khả năng áp dụng cho nhiều dấu hiệu xâm nhập.
Hình 10: Cấu trúc phần header
Action: là phần qui định loại hành động nào được thực thi khi các dấu hiệu của gói tin được nhận dạng chính xác bằng luật đó. Thông thường, các hành động tạo ra một cảnh báo hoặc log thông điệp hoặc kích hoạt một luật khác. Thông số đầu tiên quy định Snort sẽ làm gì khi các gói tin phù hợp với rule.Có 5 lựa chọn :
Alert: Cảnh báo và ghi lại packet. Log: ghi lại packet.
Pass: bỏqua packet.
Active: Cảnh báo và thực hiện gọi một rule khác.
Dynamic: Ở trạng thái đợi cho đến khi một rule khác được kích hoạt.
Ngoài ra khi chạy Snort ởchế độinline, có thêm các tùy chọn là :
drop: cho phép iptables bỏ qua packet này và log lại packet vừa bỏ qua.
reject: cho phép iptables bỏ qua packet này, log lại packet, đồng thời gửi thông báo từchối đến máy nguồn.
sdrop: cho phép iptables bỏ qua packet này nhưng không log lại packet, cũng không thông báo đến máy nguồn.
Protocol: Là phần thứhai của một luật có chức năng chỉra loại gói tin mà luật sẽ được áp dụng. Hiện tại Snort hiểu được các protocol sau :
IP
ICMP
TCP
Nếu là IP thì Snort sẽkiểm tra header của lớp liên kết để xác định loại gói tin. Nếu bất kì giao thức nào khác được sử dụng thì Snort sửdụng header IP để xác định loại protocol. Protocol chỉ đóng vai trò trong việc chỉ rõ tiêu chuẩn trong phần header của luật. Phần option của luật có thể có các điều kiện không liên quan gìđến protocol.
Address: là phần địa chỉ nguồn và địa chỉ đích. Các địa chỉ có thể là một máy đơn, nhiều máy hoặc của một mạng nào đó. Trong hai phần địa chỉ trên thì một sẽ là địa chỉ nguồn, một sẽ là địa chỉ đích. Địa chỉ được viết ngay theo sau một dấu gạch chéo và sốbít trong subnet mask.
Port: xác định các cổng nguồn và đích của một gói tin mà trên đó luật được áp dụng. Chú ý: sốhiệu cổng chỉcó ý nghĩa trong các giao thức TCP và UDP. Nếu protocol của luật là IP hay ICMP thì số hiệu cổng không đóng vai trò gì cả. • 20 FTP data • 21 FTP • 22 SSH • 23 Telnet • 24 SMTP • 53 DNS Server • 80 HTTP • 110 POP3 • 161 SNMP • 443 HTTPS • 3360 MySQL
Direction: phần này sẽchỉ ra đâu là địa chỉnguồn, đâu là địa chỉ đích.Chỉ ra đâu là nguồn đâu là đích, có thểlà -> hay <- hoặc <>. Trường hợp <> là khi ta muốn kiểm tra cảClient và Server.
Ví dụ:
Phần đứng trước dấu mởngoặc là phần Header của luật còn phần còn lại là phần Option. Chi tiết của phần Header như sau:
Hành động của luật ở đây là “alert” : một cảnh báo sẽ được tạo ra nếu như các điều kiện của gói tin là phù hợp với luật(gói tin luôn được log lại mỗi khi cảnh báo được tạo ra).
Protocol của luật ở đây là ICMP tức là luật chỉáp dụng cho các gói tin thuộc loại ICMP. Bởi vậy, nếu như một gói tin không thuộc loại ICMP thì phần còn lại của luật sẽkhông cần đối chiếu.
Địa chỉnguồn ở đây là “any”: tức là luật sẽáp dụng cho tất cả các gói tin đến từmọi nguồn còn cổng thì cũng là “any” vì đối với loại gói tin ICMP thì cổng không có ý nghĩa. Số hiệu cổng chỉcó ý nghĩa với các gói tin thuộc loại TCP hoặc UDP thôi.
Còn phần Option trong dấu đóng ngoặc chỉ ra một cảnh báo chứa dòng “Ping with TTL=100” sẽ được tạo khi tìm thấy điều kiện TTL=100. TTL là Time To Live là một trường trong Header IP.
Phần Rule Option
Rule Option chính là phần dấu hiệu nhận biết ( signature ) và được quy định ưu tiên. Phần Rule Option nằm ngay sau phần Rule Header và được bao bọc trong dấu ngoặc đơn. Nếu có nhiều option thì các option sẽ được phân cách với nhau bằng dấu chấm phẩy ”,”.Nếu nhiều option được sửdụng thì các option này phải đồng thời được thoã mãn tức là theo logic các option này liên kết với nhau bằng AND. Những từ khóa lựa chọn này dùng đểxây dựng nên dấu hiệu nhận biết cho lưu thông mạng mà ta muốn Snort giám sát. Có 4 loại rule options chính: General, Payload, Non-Payload, Post- detections.
a. General options msg:
Cung cấp thông tin về rule nhưng không gây ra bất kỳ ảnh hưởng nào đến quá trình phát hiện packet. Được sửdụng để thêm một chuỗi kí tự vào việc ghi log hoặc đưa ra cảnh báo. Thêm vào thông điệp sau dấu ngoặc kép.
Định dạng:
Ví dụ:
alert tcp 192.168.1.0/24 any → any any (msg: “<HTTP matched>”; content: “HTTP”, offset: 4)
reference:
Là từ khóa cho phép tham chiếu đến các hệ thống phát hiện các kiểu tấn công ở bên ngoài. Nó không đóng một vai trò quan trọng nào trong cơ chế phát hiện. Có nhiều hệ thống tham khảo như CVE và Brugtraq những hệ thống này giữthông tin vềcác kiểu tấn công đã được biết.
Định dạng:
reference: <id system>, <id>;
gid:
Là từ khóa dùng để xác định bộ phận nào của snort sẽ tạo ra sựkiện khi thực thi, nó giúp cho quá trình giải mã của preprocessor. Nếu không được định nghĩa trong rule nó sẽ lấy giá trị là 1. Để tránh xung đột với các rule mặc định của snort, khuyến cáo lấy giá trị lớn hơn 1.000.000. Từ khóa gid được sử dụng với từkhóa sid.
Định dạng:
gid: <generator id>;
Ví dụ:
alert tcp any any -> any 80 (content:"BOB"; gid:1000001; sid:1; rev:1;)
sid:
Là từ khóa duy nhất để xác định snort rule, nó cho phép các thành phần output xác định các rule dễ dàng hơn. Option này nên dùng với từ khóa dev.
Định dạng:
sid: <snort rules id>;
+ id <100: Dựtrữ cho tương lai.
+ 100<id<1.000.000: Xác định rule đi kèm theo bảng phân phối. + id>1.000.000: Do người viết rule tự định nghĩa.
rev:
Từ khóa đểchỉra sốrevision của rule. Nếu rule được cập nhật, thì từkhóa này được sửdụng để phân biệt giữa các phiên bản. Các module output cũng có thểsửdụng từ khóa này đểnhận dạng sốrevision. Option này nên dùng với từ khóa dev.
Định dạng :
rev: <revison integer>;
classtype:
Classtype là từ khóa sử dụng để phân loại rule phát hiện tấn công khác nhau.
Định dạng:
classtype: <class name>;
Ví dụ:
alert tcp any any -> any 80 (msg:"EXPLOIT ntpdx overflow"; dsize: >128; classtype:attempted-admin; priority:10 );
priority
Đây là từkhóa chỉ độ ưu tiên cho rule, từ khóa classtype chỉ ra độ ưu tiên mặc định. Tuy nhiên nếu ta thiết lập thêm giá trịnày nó có thể ghi đè lên giá trị mặc định đó.
Định dạng:
priority: <priority interger>;
b. Payload Detection Rule Options
Tìm kiếm thông tin trong phần payload của packet. Phần này gồm các từ khóa như: content, nocase, rawbytes, depth, offset, distance, within, httpclientbody, http cookie, http header, http method, http uri, fast pattern, uricontent, urilent, isdataat, pcre, byte test, byte jump, ftpbuonce, asn1, cvs.
content
Content là từ khóa điểm quan trọng trong Snort, nó cho phép người dùng thiết lập các rule nhằm tìm ra nội dung đặc biệt trong gói tin. Việc lựa chọn dữ liệu cho gói content tương đối phứt tạp, nó có thểchứa dữliệu ởdạng văn bản hoặc ởdạng nhịphân
Định dạng:
content : [!] “ <content string>”;
Ví dụ:
alert tcp any any -> any 139(content:"|5c00|P|00|I|00|P|00|E|00 5c|";)
Hoặc phủ định:
alert tcp any any -> any 80 (content:!"GET";)
nocase
Là từ khóa được sửdụng kết hợp với từ khóa content. Nó không có đối số, mục đích của nó là thực hiện việc tìm kiếm mẫu cụ thể không phân biệt kí tự hoa hoặc thường.
Định dạng
No case;
Ví dụ:
alert tcp any any -> any 21 (msg:"FTP ROOT"; content:"USER root"; nocase;)
offset
offset là từkhóa sửdụng kết hợp với từ khóa content. Sửdụng khóa này, có thể bắt đầu tìm kiếm từ một vị trí xác định so với vị trí bắt đầu của gói tin. Sửdụng một con số như là đối sốcủa từkhóa này.
Định dạng:
Offset: <number>;
depth
depth là từ khóa được sử dụng kết hợp với từ khóa content để xác định giới hạn của việc so sánh mẫu. Sửdụng từkhóa này, có thể xác định một vị trí so với vị trí bắt đầu. Dữ liệu sau vị trí này sẽ không được tìm kiếm để so mẫu. Nếu dùng cả từ khóa offset và depth thì có thể xác định một khoảng dữ liệu thực hiện việc so sánh mẫu.
Định dạng:
Ví dụ:
alert tcp any any -> any 80 (content: "cgi-bin/phf"; offset:4; depth:20;)
distance
Từ khóa distance cũng tương tự như offset, điểm khác biệt là offset cho biết vị trí tìm kiếm tính từ đầu payload, trong khi distance sẽ tính từ vị trí của mẫu trước đó. Từ khóa này được dùng kết hợp với từkhóa content.
Định dạng:
distance: <byte count>;
Ví dụ:
alert tcp any any -> any any (content:"ABC"; content: "DEF"; distance:1;)
c. Non-Payload Detection Rule Options
Tìm kiếm thông tin trong phần non-payload của packet, bao gồm các từkhóa: frag, offset, ttl, tos, id, ipopts, fragbits, dsize, flags, flow, flowbits, seq, ack, window, itype, icode, icmp id, icmp seq, rpc, ip proto, sameip, stream size.
ttl
Là từ khóa được sửdụng đểkiểm tratrường TTL(time to live) trong phần header ip của gói tin. Từ khóa này có thể sử dụng với tất cả các giao thức xây dựng trên IP như ICMP, UDP và TCP. Sửdụng từ khóa ttl đểkiểm tra ai đó đang cốgắng traceroute hệthống mạng.
tos
Đây là từ khóa được sửdụng để phát hiện một giá trịcụthểtrong trường TOS (Type of service) của IP Header.
Định dạng:
tos: [!] <number>;
id
id là từ khóa được sử dụng để kiểm tra trường ID của header gói tin IP. Mục đích của nó là phát hiện các cách tấn công một sốID cố định.
Định dạng:
id: <number>;
dsize
dsize là từ khóa được sử dụng đểtìm chiều dài một phần dữ liệu của gói tin. Nhiều cách tấn công sửdụng lỗ hổng tràn bộ đệm bằng cách gửi gói tin có kích thước lớn. Sửdụng từ khóa này đểtìm thấy gói tin có chiều dài dữliệu lớn hoặc nhỏ hơn một số xác định.
Định dạng:
dsize : [<>] <number> [<><number>];
flags
flags là từ khóa được sửdụngđể tìm ra bit flag nào được thiết lập trong header TCP của gói tin. Các bit sau có thể được kiểm tra:
F- FIN S-SYN R-RST P-PSH A-ACK U-URG 1- Reserved bit 1 2- Reserved bit 2 0- No TCP flags set Định dạng: flags:[!|*|+]<FSRPAU120>[,<FSRPAU120>]; Ví dụ:
alert tcp any any -> any any (flags:SF,12;)
d. Post-Detection Rule Options
Xảy ra khi một rule được kích hoạt, gồm các từ khóa: logto, session, resp, react, tag, activated by, count.