2.3.1 Khái niệm cơ sở
Snort dùng một ngôn ngữ mô tả các luật sáng sủa và đơn giản, nó cũng linh động và tƣơng đối mạnh. Hầu hết các luật Snort đƣợc viết trên một dòng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trong các phiên bản trƣớc 1.8 thì điều này là bắt buộc. Trong các bản hiện nay, các luật có thể đƣợc viết trên nhiều dòng bằng việc thêm dấu “/” vào cuối mỗi dòng. Nếu xét về mặt logic thì các luật Snort đƣợc chia làm 2 phần, phần header và phần các tuỳ chọn. Phần header gồm có các thông tin về các giao thức, action, các địa chỉ nguồn, đích và mặt nạ mạng địa chỉ cổng nguồn, đích.
Phần tuỳ chọn chứa các thông điệp cảnh báo và các thông tin cho biết phần nào của gói tin sẽ đƣợc phân tích để xác định action đƣợc thực hiện.
Ví dụ minh họa một luật Snort đơn giản:
alert tcp any ->192.168.1.0/24 111{content:”/00 01 86 a5/”: msg: “mounld avvess”:}
Từ đầu dòng đến dấu ngoặc đơn đầu tiên là phần header và phần nằm trong cặp nguồn là phần tuỳ chọn. Các từ nằm trong cặp dấu “//” là từ khoá tuỳ chọn. Lƣu ý là phần tuỳ chọn là không đƣợc luật nào yêu cầu cụ thể, chúng chỉ để dùng với mục đích xác định rõ gói tin để tập hợp và cảnh báo (hoặc huỷ). Tất cả các thành phần cấu thành luật phải đúng để các action đƣợc thực hiện. Khi đƣợc đặt cùng nhau, các thành phần có thể đƣợc xem nhƣ hình thành nên một câu lệnh AND về mặt logic và các luật trong file thƣ viện có thể đƣợc xem nhƣ tạo nên một câu lệnh OR. [5]
2.3.1.1 Includes
Từ khoá include cho phép các file luật khác đƣợc nằm trong file luật mà dòng lệnh Snort chỉ ra. Nó làm việc giống nhƣ # include trong ngôn ngữ lập trinh C, đọc các content của file đƣợc chỉ ra và đặt chúng vào trong file nơi include xuất hiện.
Định dạng:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Lƣu ý không có dấu: ở cuối mỗi dòng. Các file include sẽ thay các biến đƣợc định nghĩa trƣớc vào trong các biến tham chiếu của nó.
2.3.1.2 Các biến
Các biến có thể đƣợc định nghĩa trong Snort. Đây là các biến thay thế đơn giản đƣợc đặt cùng với từ khoá var:
Định dạng:
var: <name> <value>
var: MY_NET [192.168.1.0/24, 10.1.1.0/24]
alert tcp any any -> S MY_NET any (flag: S; msg: “ SYN packet”;) Có một số các định nghĩa tên biến, có thể định nghĩa biến meta dùng toán tử S và các toán tử bổ xung, ? và -
* S var-định nghĩa biến meta, *(S var)- thay bằng giá trị của biến var, * S (var: - default) – thay bằng giá trị của biến var hoặc giá trị default nếu var không đƣợc định nghĩa. * S var:? message) – thay bằng giá trị của biến var hoặc in ra thông báo lỗi và thoát.
Xem về các bổ sung của những luật này trong action: var MY_NET 192.168.1.0/24
2.3.1.3 Config
Rất nhiều cấu hình và các tuỳ chọn của dòng lệnh Snort có thể đƣợc định nghĩa trong file cấu hình
Định dạng: config <directive> [“<value>] Directives:
order: Thay đổi trật tự thi hành của luật (Snort -0)
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
clasification Xây dựng các phân lớp ƣu tiên cho các luật decode_arp Bật chức năng giải mã arp (Snort –a)
dum_chars _only Bạt các kết xuất ký tự (Snort –C)
dump_payload Kết xuất dữ liệu lớp ứng dụng (Snort – d)
decode_data _lik Giải mã phần header của lớp data link (Snort –e) bpf_file Quy định các bộ lọc BPF (Snort –F)
Ví dụ: config bpf_file: filename.bpf
set_gid Chuyến đến GID này (Snort – g) Ví dụ: config set_gid: Snort_group
daemon Chạy nhƣ một daemon (Snort –D) reference_net Thiết đặt home network (Snort –h) interface Thiết đặt giao tiếp mạng (Snort –i)
alert_with _interface_name Thêm tên giao tiếp mạng vào cảnh báo (Snort –I)
logdir Đặt thƣ mục log (Snort -1). Ví dụ: config logdir:/var/log/Snort umask Che mặt nạ khi đang chạy (Snort –m). Ví dụ: config umask: 022
pkt_count Thoát sau N gói tin (Snort-n). Ví dụ: cấu hình pkt_count:13
nolog Không cho phép log. Lƣu ý là vấn có các cảnh báo. (Snort –N)
obfucate Làm rối các địa chỉ IP (Snort –O)
no_prromisc Không cho phép kiểu hỗn hợp (Snort –p)
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
checksum_mode Kiểu của các gói tin để tính toán kiểm tra tổng. Các giá trị nine, noip, noicmp, noudp, all
utc Dùng TTC thay cho thời gian nội tại đối với các nhãn thời gian (Snort –U)
verbose Dùng Verbose logging đến stdout (Snort- p)
dump_payload_verbose Kết xuất các gói tin thô bắt đầu tại lớp liên kết (Snort-X)
show_year Chỉ rõ năm trong các nhãn thời gian (Snort –U)
stateful Đặt mode bảo đảm cho strream4 (est).
min_ttl Đặt ttl nhỏ nhất để bỏ qua tất cả các lƣu lƣợng.
disable_decode_alerts Tắt các cảnh báo dinh ra trong lúc giải mã Snort
disable_tcpot_experimental_alerts Tắt các cảnh báo sinh ra bởi các tuỳ chọn tcp thực nghiệm.
disable_tcpopt_ttcp_alerts Tắt các cảnh báo sinh ra bởi các tùy chọn T/TCP
disable_ipopt_alerts Không cho phép các cảnh báo sự hợp lệ của độ dài các tuỳ chọn TCP
disable_ipopt_alerts Không cho phép các cảnh báo sự hợp lệ của độ dài các tuỳ chọn IP
detection Cấu hình detection engine (Ví dụ: search –method lowmem)
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.3.2 Phần header của luật
2.3.2.1 Các Action
Phần header của luật chứa thông tin xác định gói tin của ai, từ đâu và loại gì cũng nhƣ hành động gì nếu tất cả thuộc tính của gói tin phù hợp với luật, rule action cho Snort biết phải làm gì, có 5 action mặc định trong Snort là alert, log, pass, active và dynamic
1. alert – tạo ra một cảnh báo dùng phƣơng thức cảnh báo đƣợc lựa chọn sau đó log gói tin.
2. log – log gói tin
3. pass – bỏ qua gói tin
4. activate – cảnh báo và sau đó kích hoạt một luật động khác
5. dynamic – tiếp tục rỗi cho đến khi đƣợc kích hoạt bởi một luật active, sau đó thi hành nhƣ một luật log.
Ngƣời dùng có thể định nghĩa luật của chính mình và kết hợp với một hoặc nhiều plugin. Sau đó có thể dùng các rule type nhƣ là các action trong luật Snort.
Ví dụ sau đây sẽ tạo ra một kiểu luật sẽ chỉ log đến tcpdump: ruletype suspicious
{
type log output
log_tcpdump: suspicious,log
}
Ví dụ sau sẽ tạo ra một kiểu luật chỉ log đến syslog và một cơ sở dữ liệu MySQL:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
{
typealert output
alert_syslog: LOG_AUTH LOG_ ALERT
output database: log, mysql, uer=snort dbname=snort host=loca1host
}
2.3.2.2 Các giao thức
Có 4 giao thức mà hiện nay Snort phân tích để tìm ra các hoạt động bất thƣờng là: tcp, udp, icmp và ip. Trong tƣơng lai có thể có thêm nhiều hơn nhƣ ARP, IGRP, GRE, OSPE, RIP, IPX,...
2.3.2.3 Các địa chỉ IP
Snort không có một cơ chế cung cấp tên host tìm cho các trƣờng địa chỉ IP trong các luật của file. Các địa chỉ đƣợc hình thành trực tiếp bằng một địa chỉ IP và một CIDR. CIDR chỉ ra mặt nạ mạng đƣợc áp dụng vào địa chỉ của luật này và bất cứ gói tin nào đến đƣợc kiểm tra theo luật.
Có một toán tử cũng đƣợc áp dụng cho các địa chỉ IP là toán tử phủ định. Toán tử này cho Snort biết phải thực hiện các địa chỉ IP trừ đi IP đƣợc viết.
Ví dụ về luật phủ định địa chỉ IP
alert tcp! 192.168.1.0/24 any -> 192.168.1.0/24/ 111/
{content: “/00 01 86 a5/”: msg: “ external mountd access”;}
Các địa chỉ IP của luật này cho biết bất kỳ gói tin tệp nào với địa chỉ nguồn IP không xuất hiện phát từ mạng trong đến một địa chỉ ở mạng trong
Cũng có thể quy định danh sách các địa chỉ IP. Một danh sách địa chỉ IP đƣợc quy định bằng cách thêm vào dấu phẩy để phân cách các địa chỉ IP và các CIDR block trong cặp “[]”.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
alert tcp! [192.168.1.0/24.10.1.1.0/24] any-> /
{192.168.1.0/24,10.1.1.0/24} 111 (content: “/00 01 85 a5/”/
2.3.2.4 Các số hiệu cổng Port
Các số hiệu cổng có thể đƣợc quy định theo vài cách, gồm có any ports, các định nghĩa cổng tĩnh, các phạm vi và phủ định. Các cổng tĩnh đƣợc chỉ ra bởi một số hiệu cổng duy nhất. Phạm vi cổng đƣợc chỉ ra bằng toán tử phạm vi „:‟. Toán tử phạm vi có thể dùng đƣợc theo vài cách (với các ý nghĩa khác nhau), ví dụ:
log tcp any -> 192.168.1.0/24 : 6000
Log các lƣu lƣợng từ cổng bất kỳ đến các cổng có số hiệu nhỏ hơn hoặc bằng 6000.
log tcp any : 1024 -> 192.168.1.0/24 : 500
Log các lƣu lƣợng tcp từ các cổng ƣu tiên nhỏ hơn hoặc bằng 1024 đến các cổng lớn hơn hoặc bằng 500.
Ví dụ về phạm vi cổng:
Toán tử! đƣợc dùng để lấy tất cả các cổng ngoại trừ cổng đƣợc viết trong luật. Ví dụ nếu muốn log tất cả trừ các cổng X Windows, thử dòng sau:
log tcp any -> 192.168.1.0/24! 6000: 6010
2.3.2.5 Các luật Active/Dynamic
Cặp luật Active/Dynamic cho phép Snortcó một khả năng mạnh mẽ. Dùng một luật để kích hoạt luật khác khi nó là action đƣợc thực hiện cho một số gói tin. Các luật activate hoạt động nhƣ luật alert, trừ khi chúng có một trƣờng tuỳ chọn * required*: activates. Các luật dynamic hoạt động nhƣ luật log, nhƣng có một trƣờng tuỳ chọn khác: activated_by. Các luật dynamic
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
giống nhƣ các luật log trừ việc chúng đƣợc cho phép một cách linh động khi luật activate thoát.
Các luật Active và Dynamic đang dần bỏ để thay thế bằng tagging. Đặt chúng cùng nhau và xem ví dụ sau:
activate tcp! SHOME_NET any -> SHOME_NET 143 (flag: PA:/ content: “/EBCOFFFFFF/ bin” : activates: 1; /
dynamic tcp! SHOME_ NET any -> SHOME_NET 143 (activated_by: 1 ; count: 50)
Các luật này báo cho Snort biết để cảnh báo khi nó phát hiện tràn bộ đệm IMAP và lấy 50 gói tin tiếp theo đến cổng 143 từ bên ngoài SHOME_NET đến sẽ nằm ở 50 gói tin tiếp đến cùng cổng dịch vụ trên mạng, do đó việc lấy các gói tin đó để phân tích sau là cần thiết.
2.3.3 Các tuỳ chọn luật
Các tuỳ chọn luật là trái tim của hệ thống phát hiện xâm nhập Snort. Tất cả các tuỳ chọn Snort đƣợc tách biệt nhau bởi ký tự dấu „:‟. Từ khoá tuỳ chọn luật tách biệt với các đối số của nó bằng dấi „:‟
Các từ khoá:
msg – In một thông điệp ở các alert và các log gói tin
logt – Log gói tin tới một tên file ngƣời dùng muốn thay cho file output chuẩn
ttl – Kiểm tra giá trị trƣờng TTL của IP header
tos – Kiểm tra giá trị TOS của IP header.
id – Kiểm tra giá trị trƣờng ID phân mảnh của IP header theo giá trị cụ thể.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
fragbits – Kiểm tra bit phân mảnh của IP header.
dsize – Kiểm tra kích thƣớc tải tin của gói tin theo một giá trị.
flags – Kiểm tra các cờ TCP theo một giá trị cho trƣớc
seq – Kiểm tra trƣờng TCP sequence number theo một giá trị cho trƣớc
ack – Kiểm tra trƣờng TCP acknowlegement theo một giá trị cụ thể
window – Kiểm tra trƣờng TCP window theo giá trị cụ thể
itype – Kiểm tra trƣờng ICMP type theo một giá trị cụ thể
icode – Kiểm tra trƣờng ICMP code theo một giá trị
icmp_id – Kiểm tra trƣờng ICMP ECHO ID theo một giá trị
icmp_seq – Kiểm tra số hiệu ICMP ECHO sequence theo một giá trị
content – Tìm một mẫu trong tải tin của gói tin
content – lost – Tìm một tập các mẫu trong tải tin của gói tin
offset – Là một bổ sung cho tuỳ chọn content, đặt độ sâu tìm kiếm đối với một mẫu.
nocase – Tìm chuỗi content cho trƣớc không phân biệt chữ hoa chữ thƣờng.
sesion – Kết xuất thông tin lớp ứng dụng đối với một phiên cho trƣớc
rpc – Theo dõi các dịch vụ RPC đối với gọi thủ tục/ ứng dụng cụ thể.
resp – ứng phó chủ động ( ví dụ nhƣ khoá các kết nối)
react – ứng phó chủ động ( khoá websites)
reference – Các nhận dạng tấn công từ bên ngoài
sid – Số hiệu duyệt Snort
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
clastype – Xác địng phân lớp luật
priority – Xác định mức nghiêm ngặt của luật
uricontent – Tìm kiếm một mẫu trong phần URI của một gói tin
tag – Các actionlog cải tiến cho các luật
ip_proto – Giá trị theo thức của IP header
samip – Xác định nguồn và đích IP có giống nhau không
stateles – Hợp lệ không xem xét đến trạng thái luồng
regex – Tìm kiếm mẫu đại diện
byte_test – Kiểm tra mẫu là số
distance – Buộc so sánh mẫu tƣơng đối nhảy khoảng trống
within – buộc so sánh mẫu tƣơng đối nằm trong một số đếm
byte_jump – Kiểm tra mẫu số và điều chỉnh khoảng
2.3.3.1 Msg
Tuỳ chọn msg đƣa ra thông điệp cho phần cảnh báo và phần log để in cùng với một kế xuất gói tin đến cảnh báo. Nó là mỗi chuỗi văn bản đơn giản dùng “/” nhƣ là một ký tự trống để chỉ ra ký tự rời rạc nếu không có thể làm cho việc phân tích cú pháp Snort khó khăn.
Đinh dạng: msg: “ < message text>”
2.3.3.2 Logto
Tuỳ chọn logto yêu cầu Snort log tất cả các gói tin mà luật này tác động tới một file đầu ra đặc biệt. Điều này đặc biệt thuận tiện cho việc kết hợp dữ liệu từ những hoạt động nhƣ NMAP, quét HTTP CGI,... Nên lƣu ý rằng tuỳ chọn này không làm việc khi Snort đang ở trong log kiểu nhị phân.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.3.3.3 TTL
Tuỳ chọn này dùng để thiết lập một giá trị time-to-live cụ thể cho việc kiểm tra. Kiểm tra Snort thực hiện chỉ thành công khi có một mẫu đƣợc tìm chính xác. Từ khoá tuỳ chọn này đƣợc dành cho việc dùng trong việc phát hiện các cuộc tấn công traceroute
Định dạng: ttl: <number>’
2.3.3.4 TOS
Từ khoá tos cho phép kiểm tra trƣờng TOS phần mào đầu của gói tin IP theo một giá thị cụ thể. Kiểm tra Snort thực hiện chỉ thành công khi có một mẫu đƣợc tìm chính xác.
Định dạng: tos: < number >
2.3.3.5 ID
Từ khoá tuỳ chọn này đƣợc dùng để kiểm tra một mẫu chính xác trong trƣờng fragment ID của phần mào đầu IP. Một số công cụ hacking thiết đặc trƣờng này một cách đặc biệt cho các mục đích khác nhau, ví dụ, giá trị 31337 rất quen thuộc đối với nhiều hacker. Tuỳ chọn này có thể chống lại các hackers bằng việc đặt một luật đơn giản để kiểm tra.
Đinh dạng: id: <number>
2.3.3.6 Ipoption
Nếu các tuỳ chọn IP có mặt trong một gói tin, tuỳ chọn này sẽ tìm một tuỳ chọn cụ thể thực tế, ví dụ nhƣ định tuyến nguồn. Các đối số cho tuỳ chọn này là:
rr- Ghi lại đƣờng đi
eol – Kết thúc danh sách
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
ts – Time Stamp
sec – Tuỳ chọn bản mật IP
lsrr – Nới lỏng định tuyến nguồn
ssrr – Thắt chặn định tuyến nguồn
satid – Nhận dạng luồng
Định dạng: ipopts: option;
2.3.3.7 Fragbits
Luật này kiểm tra các bít phân mảnh và bit dành riêng trong IP header. Ba bit đó là Reserved Bit (RB), More Fragments (MF) và Don‟t Fragment (DF). Những bit này đƣợc kiểm tra theo các kết hợp khác nhau. Dùng cá giá trị sau cho mỗi bit cụ thể: * R – Reserved Bit, *D – DF bit, * M – MF bit.