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

Một phần của tài liệu Xây dựng, quản lý, thực thi và cập nhật các tập luật (Trang 76 - 86)

4. Xây dựng và quản lý các tập luật

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

Phần còn lại của luật là các tùy chọn xác định những phần liên quan trong mạng của gói tin. Nó thường là 1 thông báo chỉ tới các gói tin để Snort tìm kiếm các gía trị và xác định những gói tin được xem là có khả năng gây hại. Những lựa chọn này chỉ có hiệu lực nếu các header có giá trị tương ứng với nội dung của gói tin. Nếu có 1 sự tương ứng, Snort thường tạo ra cảnh báo tới file cảnh báo trong thư mục logging của Snort. Dữ liệu của gói tin cũng được ghi lại. Điều này chắc chắn rằng khi cảnh được xác định, người quản trị hệ thống có thể xem lại.

Ví dụ:

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SCAN SYN FIN";flags:SF; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:1;)

Phần tùy chọn trong luật trên là: (msg:"SCAN SYN FIN";flags:SF; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:1;).

Phần của các tùy chọn phải nằm trong dấu ngoặc đơn “(” “)”. Các tùy chọn cách nhau bởi dấu chấm phẩy “;”. Các tùy chọn có thể bỏ trống, vì vậy luật “alert ip any any -> any any” là một luật hợp lệ. Định dạng của phần tùy chọn nằm trong dấu ngoặc đơn như sau:

• Thông báo (msg) loại tấn công, bao gồm một từ khóa và một giá trị khóa là “msg”. Phần giá trị của khóa được viết trong cặp dấu nháy kép “” và sau dấu hai chấm “:”. Ví dụ msg:”SCAN SYN FIN”. Chuỗi giá trị của thông báo do người quản trị hệ thống quyết định. Vì vậy, các thông báo nên có ý nghĩa, dễ hiểu, mô tả chính xác hành động

tấn công. Nếu không nó có thể làm rối tập luật khi số lượng cảnh báo lớn lên theo thời gian.

• Cờ: Sau phần thông báo là các cờ (flags). Các cờ có thể có hoặc không có trong tập luật và phải phụ thuộc vào loại giao thức (protocol). Chẳng hạn các cờ SYN, ACK, FIN thì phải thuộc giao thức tcp và không thể nằm trong một luật cho giao thức IP. Trong ví dụ trên, luật tìm kiếm trong header TCP các cờ SYN và FIN.

Một vài trường hợp khác có thể dùng những phần nối tiếp sau các cờ. Ví dụ, dấu + xác định cờ đứng sau đứng sau cờ được xác định (nghĩa là độ ưu tiên của các cờ xác định bằng dấu + không bằng cờ được xác định rõ ràng). Kí tự * tương ứng với tất cả các cờ, ngược lại là dấu ! để phủ nhận bất kể loại cờ nào. Ví dụ, trong luật dưới đây, cờ ACK được chọn, nhưng luật này cũng phù hợp với những cờ khác theo sau nó:

alert tcp $HOME_NET 146 -> $EXTERNAL_NET 1024: (msg:"BACKDOOR Infector.1.x"; content: "WHATISIT"; flags: A+; reference:arachnids,315; sid:117; classtype:misc-activity; rev:3;)

Các tùy chọn thường dùng: msg: < sample message>;

Tùy chọn thông báo mô tả hành động tấn công. Đây là nơi cho phép nhà quản trị hệ thống mô tả chi tiết liên quan đến cảnh báo. Ví dụ, thông báo

“BACKDOOR attempt” mô tả loại tấn công.

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

flags: < flags>;

Tùy chọn này xác định các cờ sẽ so sánh với các gói tin: Dưới đây là các cờ của giao thức TCP: A = ACK F = FIN P = PSH R = RST S = SYN U = URG 2 = reserved bit

0 = no flags

Lựa chọn này dùng các kí tự như +, *, và ! . Ví dụ, F+ nghĩa là cờ FIN được dùng nhưng những cờ khác có thể được dùng sau nó. SA* nghĩa là có thể SYN hoặc ACK, hoặc cả 2 và những cờ khác cũng có thể được chọn. Dấu "!" phủ nhận việc sử dụng các cờ. Ví dụ: !RP; không dùng cả cờ RST và PSH, trong việc tìm kiếm trong gói tin sẽ bỏ qua RST và PSH. Nhiều lựa chọn các cờ có thể được sử dùng cho chung 1 mục đích cụ thể.

content: < straight text>; content: < hex data>;

Phần tùy chọn này dùng để xác định một chuỗi text hoặc một chuỗi HEX với data payload. Đây là phương thức để phát hiện tấn công tràn bộ đệm hoặc so sánh những chuỗi nhị phân. Tùy chọn này có phân biệt chữ hoa và chữ thường (case-sensitive), để không phân biệt chữ hoa và chữ thường ta dùng nocase. Dùng ký tự pipe (|) trong trường hợp dữ liệu là HEX. Ta có thể sử dụng nhiều chuỗi trong cùng một luật.

Ví dụ 1:

alert tcp $HTTP_SERVERS $HTTP_PORTS -> $EXTERNAL_NET any ( sid: 495; rev: 6; msg: "ATTACK-RESPONSES command error"; flow:

from_server,established; content: "Bad command or filename"; nocase; classtype: bad-unknown;)

Luật trên sẽ tìm trong phần dữ liệu của các gói tin chuỗi "Bad command or filename"

Ví dụ 2:

alert tcp $HOME_NET 22 -> $EXTERNAL_NET any ( sid: 1810; rev: 3; msg: "ATTACK-RESPONSES successful gobbles ssh exploit (GOBBLE)"; flow: from_server,established; content: "|2a|GOBBLE|2a|"; reference:

bugtraq,5093;classtype: successful-admin;)

Luật trên sẽ tìm chuỗi text nhị phân chứa giá trị đầu tiên là 2A và theo sau là những kí tự "GOBBLE", và cuối cùng kết thúc bởi 1 giá trị hex là 2A khác.

Bốn giá trị (offset, depth, nocase, and regex) được sử dụng để hỗ trợ tùy chọn content:

offset: < value>; (adsbygoogle = window.adsbygoogle || []).push({});

offset định nghĩa vị trí bắt đầu tìm kiếm trong data payload. Offset luôn luôn đi theo sau tùy chọn content. Giá trị mặc định của offset là byte đầu tiên trong data payload của các gói tin.

alert tcp $HOME_NET 902 -> $EXTERNAL_NET any ( sid: 1760; rev: 2; msg: "OTHER- IDS ISS RealSecure 6 event collector connection attempt"; flow: from_server,established; content: "6ISS ECNRA Built-In Provider, Strong

Encryption";offset: 30; depth: 70; nocase; classtype: successful-recon-limited;) Luật trên sẽ tìm chuỗi "6ISS ECRNA Built-In Provider, Strong Encryption" từ vị trí byte thứ 30 trong data payload.

depth: < value>;

Giới hạn chiều dài tìm kiếm từ offset, và sẽ chỉ tìm kiếm trong từ offset đến depth trong toàn bộ payload. Nếu không có lựa chọn này thì mặc định sẽ tìm trong cả chuỗi, từ đầu đến cuối. Ví dụ dưới sẽ giới hạn chiều dài các bytes được kiểm tra từ offset được chọn. Ở đây chiều dài được chọn là 70bytes

Ví dụ:

alert tcp $HOME_NET 2998 -> $EXTERNAL_NET any ( sid: 1761; rev: 2; msg: "OTHER- IDS ISS RealSecure 6 daemon connection attempt"; flow:

from_server,established; content: "6ISS ECNRA Built-In Provider, Strong Encryption"; offset: 30; depth: 70; nocase; classtype: successful-recon-limited;)

Luật trên tìm chuỗi "6ISS ECNRA Built-In Provider, Strong Encryption" từ vị trí offset 30 đến vị trí depth 70.

nocase;

Khi sử dụng tùy chọn này thì nội dung tìm kiếm trong content sẽ không phân biệt chữ hoa và chữ thường.

Ví dụ:

alert tcp $HOME_NET any <> $EXTERNAL_NET 6699 ( sid: 561; rev: 6; msg: "P2P Napster Client Data"; flow: established; content: ".mp3"; nocase; classtype: policy-violation;)

Luật trên tìm file kết thúc với các hậu tố “.mp3” ,”.Mp3”,”.MP3”. Không phân biệt chữ hoa và chữ thường.

regex

Cho phép tìm kiếm nội dung bằng các ký tự thay thế. Ký tự “*” thay thế cho một chuỗi bất kỳ, ký tự “?” thay thế cho một ký tự bất kỳ. Ví dụ,

content:”string*”;regex; tìm chuỗi bắt đầu bằng string, content:”string?”;regex; tìm chuỗi 7 ký tự trong đó 6 ký tự đầu là string, ký tự thứ 7 là một ký tự bất kỳ. regex lấy ý tưởng từ Perl Compatible Regular Expressions.

logto: < file_name>;

Option này sẽ ghi log những dữ liệu cụ thể với 1 tên duy nhất trong

-l . Ví dụ, nếu luật có logto: “ICMP”, mọi gói tin tương ứng với luật này sẽ được lưu trong thư mục /var/log/snort/ICMP. Tùy chọn này thường không được tìm thấy trên tập luật có thể tải về SnortCenter. Nó được định dạng bởi người dùng. Sau đây là một luật cơ bản ghi log mọi kết nối telnet tới 1 dãy các địa chỉ IP 192.168.10.0/24 và lưu trong /var/log/snort/telnets.

log tcp any any -> 192.168.10.0/24 23 (logto:"telnets";)

ttl: < number>;

Tùy chọn kiểm tra time to live của gói tin tới. Trường time to live với giá trị 1 nghĩa là ICMP traceroute.

Ví dụ:

alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 385; rev: 3; msg: "ICMP traceroute"; ttl: 1; itype: 8; reference: arachnids,118; classtype: attempted-recon;)

id: < number>;

Giá trị identification trong IP header. Trong IP header identification là một giá trị 16 bit. Khi một gói tin bị phân mảnh thì các gói tin bị phân mảnh từ 1 gói tin sẽ có cùng giá trị identification.

Ví dụ:

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"DOS Land attack"; id:3868; seq: 3868; flags:S; reference:cve,CVE-1999-0016;

classtype:attempted-dos; sid: 269; rev:3;)dsize: [<|>] < number>; Tùy chọn dsize xác định kích thước của payload. (adsbygoogle = window.adsbygoogle || []).push({});

Các gói tin trên một phiên giao tiếp thông thường sẽ có những giới hạn về kích thước. Ví dụ một gói tin ICMP thường có kích thước không lớn.

Ví dụ:

alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 499; rev: 3; msg: "ICMP Large ICMP Packet"; dsize: >800; reference: arachnids,246;

classtype: bad-unknown;)

Luật trên sẽ tìm các gói tin có kích thước lớn hơn 800 byte.

ack: < number>;

Tùy chọn này kiểm tra số acknowledgment number. Tùy chọn ack có thể được sử dụng để kiểm tra fingerprint của một số công cụ quét mạng (chẳng hạn như Nmap ping).

alert tcp $EXTERNAL_NET any -> $HOME_NET any ( sid: 628; rev: 2; msg: "SCAN nmap TCP"; flags: A,12; ack: 0; reference: arachnids,28; classtype: attempted-recon;)

Luật trên sẽ tìm các gói tin có giá trị acknowledgment number bằng 0.

seq: < hex_value>;

Tùy chọn này kiểm tra số Sequence number của TCP. Một số kiểu tấn công từ chối dịch vụ sử dụng một số sequence number xác định. Dưới đây là một ví dụ backdoor Trojan quét sử dụng TCP sequence number:

alert tcp $EXTERNAL_NET 80 -> $HOME_NET 1054 ( sid: 106; rev: 4; msg: "BACKDOOR ACKcmdC trojan scan"; flags: A,12; seq: 101058054; ack: 101058054; reference: arachnids,445; classtype: misc-activity;)

itype: < number>;

Tùy chọn này dùng để xác định một loại ICMP cụ thể. Trong gói tin ICMP thì loại ICMP có chiều dài 1byte và là byte đầu tiên của gói ICMP. Ví dụ dưới đây tìm ICMP có loại là 0 (echo reply)

alert icmp $EXTERNAL_NET any <> $HOME_NET any ( sid: 1855; rev: 2; msg: "DDOS Stacheldraht agent->handler (skillz)"; content: "skillz"; itype: 0; icmp_id: 6666; reference:

url,staff.washington.edu/dittrich/misc/stacheldraht.analysis; classtype: attempted- dos;)

icode: < number>;

Tùy chọn này thường đi kèm với tùy chọn itype. Tùy chọn này xác định byte thứ 2 trong gói tin ICMP, chính là trường code trong gói tin ICMP. Ví dụ dưới đây tìm những gói ICMP có type = 3, code = 1 (Host unreachable)

alert icmp any any -> any any ( sid: 485; rev: 2; msg: "ICMP Host Unreachable (Communication Administratively Prohibited)"; itype: 3; icode: 1; classtype: misc-activity;)

icmp_id: < number>;

Phần chính tương tự bên cạnh lựa chọn icode áp dụng cho các lựa chọn ID của ICMP. Nó dùng để kết hợp với các requests và response và trả lời các qúa trình Ping.

session: [printable|all];

Dùng lựa chọn sau để chụp toàn bộ dữ liệu của các phiên giao tiếp TCP. Nó hữu ích trong việc theo dõi những người dùng xác định làm gì trên hệ thống hoặc trên mạng. Sử dụng một trong hai giá trị printable hoặc all. Printable sẽ hiển thị tất cả các ký tự bao gồm cả những ký tự ẩn và có thể sử dụng cho việc nghe

lén password. Với giá trị all thì những ký tự nonoprintable sẽ được ghi thành dạng hex.

ipopts: < ip_option>;

IP options không được thường xuyên dùng trong những phiên giao tiếp bình thường của TCP/UDP và ICMP. Tùy chọn IP được sử dụng để ghi các hop (bước đi) mà gói tin đi qua.

Bảng 2.2 : Các giá trị của tùy chọn ipopts

rr Record route

eol End of list

nop No op (adsbygoogle = window.adsbygoogle || []).push({});

ts Timestamp

sec IP security option

lsrr Loose source routing

ssrr Strict source routing

satid Stream identifier

Ví dụ:

alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 475; rev: 1; msg: "ICMP traceroute ipopts"; ipopts: rr; itype: 0; reference: arachnids,238; classtype: attempted-recon;)

fragbits: < flag_settings>;

Tùy chọn fragbits được sử dụng chọ sự phân mảnh các gói tin và các bit không sử dụng trong IP header. Trong IP header có 3 bit dùng cho việc này:

R Reserved bit

D Don't fragment bit

M More fragments bit

Ví dụ dưới đây tìm những gói tin ip có bit reserved được thiết lập:

alert ip $EXTERNAL_NET any -> $HOME_NET any ( sid: 523; rev: 4; msg: "BAD-TRAFFIC ip reserved bit set"; fragbits: R; classtype: misc-activity;)

content_list: < filename>;

Tùy chọn này được dùng với tùy chọn react. Nó cung cấp khả năng tìm

trong 1 tập hợp các chuỗi trong 1 payload của gói tin. Nó hữu ích trong việc tạo ra bộ lọc hoặc tạo 1 danh sách các hành vi không hợp lệ. Một danh sách này có thể bao gồm nhiều từ như: warez, sploits, hackz, pr0n… Trong file này mỗi từ được liệt kê trên 1 dòng.

react: <react_basic_modifier[, react_additional_modifier...]>;

Để sử dụng tùy chọn này, khi biên dịch Snort phải có tùy chọn –flexresp kèm theo lệnh ./configure. Tùy chọn này có thể cần thêm một số thư viện như libnet. Tùy chọn này được sử dụng với tùy chọn content-list. Tùy chọn này cho phép Snort đóng một kết nối và gửi cảnh báo tới người dùng.

Ví dụ:

alert tcp any any <> 192.168.10.0/24 80 ( content-list: " adult"; msg: "Warning, adult content"; react: block, msg;) uricontent: [!] "content string";

Tùy chọn này được sử dụng để tìm một chuỗi (tương tự như tùy chọn content). Tuy nhiên, tùy chọn này chỉ tìm trong nội dung của URI gửi đến server. Luật dưới đây cảnh báo có một lệnh gửi tới server.

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS ( sid: 1328; rev: 4; msg: "WEB-ATTACKS ps command attempt"; flow:

to_server,established; uricontent: "/bin/ps"; nocase; classtype: web-application-

attack;)

ip_proto: [!] < name or number>;

Trong IP header có trường 8 bit protocol. Nó xác định giao thức lớp trên của IP. Tùy chọn này được sử dụng để so sánh trùng khớp với giá trị protocol trong ip header. Giá trị có thể là tên hoặc là số.

Ví dụ, một số lỗi được phát hiện trên hệ điều hành của Cisco router. Các Giao thức 53, 55, 57 và 103 sẽ được sử dụng để chụp những gói tin có thể gây ra lỗi.

alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 53;)

alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 55;) (adsbygoogle = window.adsbygoogle || []).push({});

alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 77;)

alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 103;)

Để biết thêm thông tin về các số, tên của các giao thức xem trong file

/etc/protocols trên các hệ thống Unix hoặc file

c:\WINNT\system32\drivers\etc\protocol trên các hệ thống Window. Dưới đây là

một liên kết tham khảo các tên giao thức và số tương ứng: http://www.iana.org/assignments/protocol-numbers

sameip;

Tùy chọn này dùng để tìm những địa chỉ ip nguồn và địa chỉ ip đích giống nhau.

alert ip any any -> any any ( sid: 527; rev: 4; msg: "BAD-TRAFFIC same SRC/DST"; reference: cve,CVE-1999-0016; reference:

url,www.cert.org/advisories/CA-1997-28.html; classtype: bad-unknown; sameip;)

stateless;

Một số cảnh báo sinh ra từ các phiên giao tiếp TCP dựa trên trạng thái của các gói tin. Như vậy, nó phải chờ cho tới khi quá trình bắt tay 3 bước hoàn thành. Trong trường hợp stateless nó chỉ cần kiểm tra trạng thái của từng gói tin và có thể đưa ra cảnh báo. Luật sau kiểm tra các gói tin tcp có tất cả các cờ được thiết lập và đưa ra cảnh báo ngay mà không cần hoàn tất quá trình bắt tay 3 bước:

alert tcp any any -> any any ( msg: "All TCP flags set"; flags: 12UAPRSF;

stateless;)

sid: < snort rules id>;

SID thường cần hữu ích để những công cụ như SnortCenter phân tích các thông báo. Nó không hiệu quả để nhận ra các dấu hiệu. Vì các cảnh báo chỉ có duy nhất một ID, rất dễ chia mục, lựa chọn này đơn giản chỉ là cung cấp một SID cho các luật bằng những chương trình như ACID và SnortCenter. Bình thường Snort cung cấp một SID cho mỗi cảnh báo. Người dùng không cần thiết phải tự chọn:

alert tcp $EXTERNAL_NET any -> $SQL_SERVERS 1433 ( sid: 704; rev: 5; msg: "MS-SQL xp_sprintf possible buffer overflow"; flow: to_server,established;

Một phần của tài liệu Xây dựng, quản lý, thực thi và cập nhật các tập luật (Trang 76 - 86)