Rule Header

Một phần của tài liệu [Khóa luận tốt nghiệp] - Tìm hiểu và triển khai SnortSnortSam (Trang 56)

3. Nội dung thuyết minh và tính toán

4.1.Rule Header

Rule Header

Hình 4.1: Cấu trúc luật trong Snort.

4.1.1. Rule Action

Phần Header sẽ chứa các thông tin xác định ai, ở đâu, cái gì của một gói tin, cũng như phải làm gì nếu tất cả các thuộc tính trong luật được hiện lên. Mục đầu tiên trong một luật đó chính là phần rule action, rule action sẽ nói cho Snort biết phải làm gì khi thấy các gói tin phù hợp với các luật đã được quy định sẵn. Có 5 hành động mặc định trong Snort đó là: alert (cảnh báo), log (ghi lại log), pass (cho qua), active (kích hoạt), dynamic. Ngoài ra nếu chạy Snort ở chế độ inline còn có thêm các tùy chọn bổ sung như drop, reject và sdrop.

alert - tạo ra cảnh báo sử dụng phương pháp đã lựa chọn trước và sau đó

ghi log lại các gói tin.  log - ghi log lại các gói tin.

pass - bỏ qua gói tin đó.

active - cảnh báo và sau đó bật một dynamic rule khác để kiểm tra thêm

điều kiện của gói tin.

dynamic - duy trì trạng thái “nhàn rỗi” cho đến khi được kích hoạt bởi

một active rule sau đó hành động như một log rule

Rule

Action Protocol Src/Des Port Rule Option

44  drop - chặn gói tin đó và ghi log lại.

reject - chặn gói tin, ghi log lại và gửi trả về một thông điệp.

sdrop - chặn gói tin nhưng không ghi log lại.

hành động do user tự định nghĩa. 4.1.2. Protocol

Trường tiếp theo trong luật đó là protocol. Có 4 giao thức mà Snort hiện đang phân tích các hành vi bất thường đó là TCP, UDP, ICMP và IP.

4.1.3. IP Address

Mục tiếp theo của phần header đó là địa chỉ IP. Các địa chỉ này dùng để kiểm tra nơi đi và nơi đến của một gói tin. Địa chỉ ip đó có thể là địa chỉ của một máy đơn hoặc cũng có thể là địa chỉ của một lớp mạng. Từ khóa “any” được sử dụng để định nghĩa một địa chỉ bất kỳ.

Một địa chỉ ip sẽ được viết dưới dạng ip_address/netmask. Điều này có nghĩa là nếu netmask là /24 thì lớp mạng đó là lớp mạng C, /16 là lớp mạng B hoặc /32 là chỉ một máy đơn. Ví dụ: địa chỉ 192.168.1.0/24 có nghĩa là một dải máy có địa chỉ IP từ 192.168.1.1-192.168.1.255.

Trong hai địa chỉ IP trong một luật Snort thì sẽ có một địa chỉ IP nguồn và một địa chỉ IP đích. Việc xác định đâu là địa chỉ nguồn, đâu là địa chỉ đích phụ thuộc vào

“→”.

Ngoài ra toán tử phủ định có thể được áp dụng cho việc định địa chỉ IP. Có nghĩa là khi sử dụng toán tử này thì Snort sẽ bỏ qua việc kiểm tra địa chỉ của gói tin đó. Toán tử đó là “!”. Ngoài ra ta có thể định nghĩa một danh sách các địa chỉ IP bằng

cách viết liên tiếp chúng cách nhau bởi một dấu “,”.

Ví dụ:

alert tcp any any → ![192.168.1.0/24, 172.16.0.0/16] 80 (msg:\ “Cho phep truy cap”)

45

Port có thể được định nghĩa bằng nhiều cách. Với từ khóa “any” giống như địa chỉ IP để chỉ có thể sử dụng bất kỳ port nào. Gán một port cố định ví dụ như gán kiểm tra ở port 80 http hoặc port 22 ssh. Ngoài ra ta cũng có thể sử dụng toán tử phủ định để bỏ qua một port nào đó hoặc liệt kê một dải các port.

Ví dụ:

log udp any any → 192.168.1.0/24 1:1024 - port bất kỳ tới dãy port từ 1 (adsbygoogle = window.adsbygoogle || []).push({});

- 1024.

log udp any any → 192.168.1.0/24 :6000 - port bất kỳ tới dãy port nhỏ

hơn 6000.

log udp any any → 192.168.1.0/24 500: - port bất kỳ tới dãy port lớn

hơn 500.

log udp any any → 192.168.1.0/24 !6000:6010 - port bất kỳ tới bất kỳ

port nào, bỏ qua dãy port từ 6000 – 6010.

4.1.5. Điều hướng

Toán tử hướng “→” chỉ ra đâu là hướng nguồn, đâu là hướng đích. Phần địa chỉ IP và port ở phía bên trái của toán tử được coi như là địa chỉ nguồn và port nguồn, phần bên phải được coi như địa chỉ đích và port đích. Ngoài ra còn có toán tử “<>” Snort sẽ xem cặp địa chỉ/port nguồn và đích là như nhau. Nghĩa là nó sẽ ghi/phân tích ở cả hai phía của cuộc hội thoại.

Ví dụ:

log tcp !192.168.1.0/24 any <> 192.168.1.0/24 23

4.1.6. Activate/Dynamic rule

Cặp luật này cung cấp cho Snort một khả năng rất mạnh mẽ. Active rule giống như alert rule nhưng khác một điểm là nó có thêm trường: activates. Dynamic rule giống như log rule nhưng nó có thế trường: activated_bycount.

46

activate tcp !$HOME_NET any → $Home_Net 143 (flags:PA; content: “|E8C0FFFFFF|/bin”; activates:1; msg:”IMAP buffer overflow!”;)

dynamic tcp !$HOME_NET any → $HOME_NET 143 (activated_by:1; count:50;)

4.2. Rule Options

Rule options chính là trung tâm của việc phát hiện xâm nhập. Nội dung chứa các dấu hiệu để xác định một cuộc xâm nhập. Nó nằm ngay sau phần Rule Header và được bọc bởi dấu ngoặc đơn “()”. Tất cả các rule options sẽ được phân cách nhau bởi dấu chấm phẩy “;”, phần đối số sẽ được tách ra bởi dấy hai chấm “:”.

Có 4 loại rule options chính bao gồm:

- General: Tùy chọn này cung cấp thông tin về luật đó nhưng không có bất cứ ảnh hưởng nào trong quá trình phát hiện.

- Payload: Tùy chọn liên quan đến phần tải trong một gói tin.

- Non-payload: Bao gồm các tùy chọn không liên quan đến phần tải của gói

tin (header).

- Post-detection : Các tùy chọn này sẽ gây ra những quy tắc cụ thể sau khi một luật đã được kích hoạt.

4.2.1. General a. msg

msg là một từ khóa phổ biến và hữu ích được sử dụng khi muốn gán thêm một chuỗi văn bản vào log và cảnh báo. Chuỗi văn bản đó sẽ được bọc trong dấu ngoặc kép “”. Nếu muốn thể hiện ký tự đặc biệt thì thêm dấu \ đằng trước.

Ví dụ:

msg: “Chuỗi văn bản được đặt ở đây.”

b. reference

reference là một từ khóa được sử dụng khi muốn tham chiếu thông tin từ một hệ thống khác trên Internet. (adsbygoogle = window.adsbygoogle || []).push({});

47

System URL Prefix

bugtraq http://www.securityfocus.com/bid cve http://cve.mitre.org/cgi-

bin/cevname.cgi?name=

nessus http://cgi.nessus.org/plugins/dump.php3?id= arachnids http://www.whitehats.com/info/IDS (down)

mcafee http://vil.nai.com/vil/content/v_ osvdb http://osvdb.org/show/osvdb

url http://

Hình 4.2: Bảng reference. Cấu trúc:

reference:<id system>, <id>; [reference:<id system>, <id>;]

Ví dụ:

alert tcp any any -> any 7070 (msg:"IDS411/dos-realaudio"; flags:AP;content:"|fff4 fffd 06|";\

reference:arachnids,IDS411;)

alert tcp any any -> any 21 (msg:"IDS287/ftp-wuftp260-

venglin-linux"; flags:AP; content:"|31c031db 31c9b046 cd80 31c031db|"; reference:arachnids,IDS287;

reference:bugtraq,1387; reference:cve,CAN-2000-1574;)

c. sid

Từ khóa sid được sử dụng để xác định duy nhất một luật trong Snort. Tùy c họn này cho phép output plug-in có thể định danh các luật một cách dễ dàng. Tùy chọn này nên được sử dụng với từ khóa rev.

 <100, sẽ được sử dụng trong tương lai.

48  >= 1000, 000 sử dụng cho các luật cục bộ.

d. rev

Từ khóa rev được sử dụng để định danh c ác sửa đổi trong luật của Snort. Từ khóa này thường được sử dụng để phân biệt các phiên bản luật khác nhau.

e. classtype

Từ khóa classtype dùng để phân loại các hình thức tấn công kèm theo độ ưu tiên của loại tấn công đó. Các hình thức đó được định nghĩa trong tập tin

classification.config.

config classification: <name>, <description>, <priority>

config classification: web-application-attack,Web Application Attack,1

config classification: network-scan, Detection of a Network Scan,3

config classification: misc-activity,Misc activity,3

f. priority

Được sử dụng để gán mức độ nghiêm trọng của một quy tắc. Trường classtype gán giá trị ưu tiên mặc định của một loại tấn công tuy nhiên ta có thể ghi đè độ ưu tiên với từ khóa này. (adsbygoogle = window.adsbygoogle || []).push({});

Cấu trúc:

priority:<priority integer>;

Ví dụ:

alert tcp any any -> any 80 (msg:"WEB-MISC phf attempt";\ flags:A+; content:"/cgi-bin/phf"; priority:10;)

4.2.2. Payload a. content

Từ khóa content cho phép người sử dụng thiết lập các luật cho phép tìm kiếm các chuỗi cụ thể trong phần tải của gói tin và kích hoạt các cảnh báo dựa trên các dữ

49

liệu đó. Nội dung có thể ở dạng ASCII, mã nhị phân hoặc sự kết hợp của cả hai. Dữ liệu nhị phân phải được bọc trong ký tự “| |” (đường ống) và được biểu diễn ở dạng số thập lục phân.

Ví dụ:

alert tcp any any -> any 139 (content:"|5c 00|P|00|I|00|P|00|E|00 5c|";)

alert tcp any any -> any 80 (content:!"GET";)

b. nocase

Sử dụng kết hợp với từ khóa content để tìm kiếm các nội dung mà không phân biệt chữ hoa chữ thường.

c. rawbyte

Từ khóa rawbytes cho phép các luật xem xét các gói dữ liệu thô chưa được giải mã. Ví dụ:

alert tcp any any -> any 21 (msg:"Telnet NOP"; content:"|FF \ F1|"; rawbytes;)

d. depth

Từ khóa depth được sử dụng để xác định khoảng cách bao xa mà luật đó sẽ tìm kiếm tới. Tối thiểu là 1 và tối đa là 65535. Được sử dụng kết hợp với từ khóa

content để giới hạn nội dung tìm kiếm, kết hợp với từ khóa offset thì ta sẽ xác định được một khoảng dữ liệu để so sánh với mẫu trong content.

e. offset

Từ khóa offset được sử dụng để xác định điểm bắt đầu tìm kiếm “mẫu” trong một gói tin. Từ khóa này cho phép giá trị từ -65535 tới 65535. Từ khóa offset được sử dụng kết hợp với từ khóa content để giới hạn khoảng không gian tìm kiếm.

Ví dụ:

alert tcp 192.168.1.0/24 any -> any any (content: \"HTTP"; offset: 4; depth: 40; msg: "HTTP matched";)

50 Có một sự thú vị ở hai luật sau:

content:"GET"; offset:0; content:"downloads"; offset:13; content:"GET"; content:"downloads";

f. distance

Từ khóa distance được sử dụng trong trường hợp muốn bỏ qua bao nhiêu byte từ nội dung tìm kiếm trước đó.

Ví dụ:

content:"GET"; depth:3; content:"downloads"; distance:10;

Luật trên có ý nghĩa là sau khi tìm được chuỗi “GET” trong 3 byte đầu tiên của trường dữ liệu, luật sẽ di chuyển thêm 10 byte so với vị trí cuối cùng của “GET” và sau đó mới tìm kiếm “download”. (adsbygoogle = window.adsbygoogle || []).push({});

g. within

Từ khóa within được sử dụng để đảm bảo rằng có nhiều nhất N byte giữa các mẫu nội dung tìm kiếm. Nó gần giống với từ khóa depth nhưng nó không bắt đầu từ đầu của gói tin như depth mà bắt đầu từ “mẫu” trước đó.

Ví dụ:

content:"GET"; depth:3 content:"download"; distance:10 \ within:9;

Luật này tương tự như luật trên, tìm “GET” trong 3 byte đầu tiên của trường dữ liệu, di chuyển thêm 10 byte bắt đầu từ “GET” và tìm khớp “download”. Tuy nhiên, “download” phải xuất hiện trong 9 byte tiếp theo.

h. uricontent

Tương tự như từ khóa content ngoại trừ việc nó được sử dụng để tìm kiếm chuỗi trong trường URI.

Ví dụ:

log tcp any any -> any 80 (content: "Logging PHF"; \ uricontent:"/cgibin/phf";)

51

i. pcre (http://www.pcre.org/)

PCRE là từ viết tắt của Perl Compatible Regular Expressions có thể dịch là biểu thức chính quy tương thích với Perl. Perl là một ngôn ngữ kết xuất và báo cáo thực dụng dùng để xử lí và thao tác trên các chuỗi ký tự.

Ví dụ:

alert tcp any any -> any 80 (content:"/foo.php?id="; \ pcre:"/\/foo.php?id=[0-9]{1,10}/iU";)

Luật trên thực hiện một tìm kiếm trong HTTP URI mà không phân hoa thường phần phía sau của chuỗi foo.php?id=<some numbers>.

Một phần của tài liệu [Khóa luận tốt nghiệp] - Tìm hiểu và triển khai SnortSnortSam (Trang 56)