Tải bản đầy đủ (.docx) (34 trang)

Tìm hiểu về kiến trúc SONRT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.42 MB, 34 trang )

Mục Lục

I. TỔNG QUAN VỀ SONRT
1. Giới thiệu về Snort
Snort là một NIDS được Martin Roesh phát triển dưới mô hình mã nguồn
mở. Tuy Snort miễn phí nhưng nó lại có rất nhiều tính năng tuyệt vời mà không
phải sản phẩm thương mại nào cũng có thể có được. Với kiến trúc thiết kế theo
kiểu module, người dùng có thể tự tăng cường tính năng cho hệ thống Snort của
mình bằng việc cài đặt hay viết thêm mới các module. Cơ sở dữ liệu luật của
Snort đã lên tới 2930 luật và được cập nhật thường xuyên bởi một cộng đồng
người sử dụng. Snort có thể chạy trên nhiều hệ thống nền như Windows, Linux,
OpenBSD, FreeBSD, NetBSD, Solaris, HP-UX, AIX, IRIX, MacOS.
Bên cạnh việc có thể hoạt động như một ứng dụng thu bắt gói tin thông
thường, Snort còn có thể được cấu hình để chạy như một NIDS. Snort hỗ trợ
khả năng hoạt động trên các giao thức sau: Ethernet, 802.11,Token Ring, FDDI,
Cisco HDLC, SLIP, PPP, và PF của OpenBSD.
2. Kiến trúc của Snort
Snort bao gồm nhiều thành phần, với mỗi phần có một chức năng riêng.
Các phần chính đó là:
• Môđun giải mã gói tin (Packet Decoder)
• Môđun tiền xử lý (Preprocessors)
• Môđun phát hiện (Detection Engine)


• Môđun log và cảnh báo (Logging and Alerting System)
• Môđun kết xuất thông tin (Output Module)
• Kiến trúc của Snort được mô tả trong hình sau:
Hình 1 : Mô hình kiến trúc hệ thống Snort

Khi Snort hoạt động nó sẽ thực hiện việc lắng nghe và thu bắt tất cả các gói
tin nào di chuyển qua nó. Các gói tin sau khi bị bắt được đưa vào Môđun Giải


mã gói tin. Tiếp theo gói tin sẽ được đưa vào môđun Tiền xử lý, rồi môđun Phát
hiện. Tại đây tùy theo việc có phát hiện được xâm nhập hay không mà gói tin có
thể được bỏ qua để lưu thông tiếp hoặc được đưa vào môđun Log và cảnh báo
để xử lý. Khi các cảnh báo được xác định môđun Kết xuất thông tin sẽ thực hiện
việc đưa cảnh báo ra theo đúng định dạng mong muốn. Sau đây ta sẽ đi sâu vào
chi tiết hơn về cơ chế hoạt động và chức năng của từng thành phần.
2.1 Modun giải mã gói tin
Snort sử dụng thư viện pcap để bắt mọi gói tin trên mạng lưu thông qua
hệ thống. Hình sau mô tả việc một gói tin Ethernet sẽ được giải mã thế nào:
Hình 2: Xử lý một gói tin Ethernet


2.2 Môđun tiền xử lý(Preprocessors)
Module này rất quan trọng đối với bất kỳ hệ thống nào để có thể chuẩn bị gói dữ liệu đưa
vào cho Module phát hiện phân tích. 3 nhiệm vụ chính:

• Kết hợp lại các gói tin: Khi một dữ liệu lớn được gửi đi, thông tin sẽ không đóng gói
toàn bộ vào một gói tin mà thực hiện phân mảnh, chia thành nhiều gói tin rồi mới gửi
đi. Khi Snort nhận được các gói tin này, nó phải thực hiện kết nối lại để có gói tin
ban đầu. Module tiền xử lý giúp Snort có thể hiểu được các phiên làm việc khác
nhau.

• Giải mã và chuẩn hóa giao thức (decode/normalize): công việc phát hiện xâm nhập
dựa trên dấu hiệu nhận dạng nhiều khi thất bại khi kiểm tra các giao thức có dữ liệu
có thể được biểu diễn dưới nhiều dạng khác nhau. Ví dụ: một Web server có thể nhận
nhiều dạng URL: URL viết dưới dạng hexa/unicode hay URL chấp nhận dấu / hay \.
Nếu Snort chỉ thực hiện đơn thuần việc so sánh dữ liệu với dấu hiệu nhận dạng sẽ
xảy ra tình trạng bỏ sót hành vi xâm nhập. Do vậy, 1 số Module tiền xử lý của Snort
phải có nhiệm vụ giải mã và chỉnh sửa, sắp xếp lại các thông tin đầu vào.



• Phát hiện các xâm nhập bất thường (nonrule/anormal): các plugin dạng này thường
để xử lý với các xâm nhập không thể hoặc rất khó phát hiện bằng các luật thông
thường. Phiển bản hiện tại của Snort có đi kèm 2 plugin giúp phát hiện xâm nhập bất
thường đó là portscan và bo (backoffice). Portscan dùng để đưa ra cảnh báo khi kẻ
tấn công thực hiện quét cổng để tìm lỗ hổng. Bo dùng để đưa ra cảnh báo khi hệ
thống nhiễm trojan backoffice.
2.3 Môđun phát hiện (Detection Engine):
Đây là module quan trọng nhất của Snort. Nó chịu trách nhiệm phát hiện các dấu hiệu
xâm nhập. Module phát hiện sử dụng các luật được định nghĩa trước để so sánh với dữ
liệu thu thập được, từ đó xác định xem có xâm nhập xảy ra hay không.
Một vấn đề quan trọng đối với module phát hiện và vấn đề thời gian xử lý gói tin: một
IDS thường nhận rất nhiều gói tin và bản thân nó cũng có rất nhiều luật xử lý. Khi lưu
lượng mạng quá lớn có thể xảy ra việc bỏ sót hoặc không phản hồi đúng lúc. Khả năng
xử lý của module phát hiện phụ thuộc vào nhiều yếu tố: số lượng các luật, tốc độ hệ
thống, băng thông mạng.
Một module phát hiện có khả năng tách các phần của gói tin ra và áp dụng luật lên từng
phần của gói tin:






IP header

Header ở tầng transport: TCP, UDP
Header ở tầng application: DNS, HTTP, FTP …
Phần tải của gói tin


Do các luật trong Snort được đánh số thứ tự ưu tiên nên 1 gói tin khi bị phát hiện bởi
nhiều luật khác nhau, cảnh báo được đưa ra theo luật có mức ưu tiên cao nhất.

2.4 Môđun log và cảnh báo (Logging and Alerting System)
Tùy thuộc vào module phát hiện có nhận dạng được xâm nhập hay không mà gói tin có
thể bị ghi log hay đưa ra cảnh báo. Các file log là các file dữ liệu có thể ghi dưới nhiều
định dạng khác nhau như tcpdump.


2.5 Môđun kết xuất thông tin (Output Module)
Module này thực hiện các thao tác khác nhau tùy thuộc vào việc cấu hình lưu kết quả
xuất ra như thế nào.








Ghi log file
Ghi syslog
Ghi cảnh báo vào cơ sở dữ liệu
Tạo file log XML
Cấu hình lại Router, firewall
Gửi các cảnh báo được gói trong gói tin sử dụng giao thức SNMP

Vì là một NIDS nên nó cũng có những ưu nhược điểm tương đồng như hệ thống này.
• Ưu điểm
 Quản lí được một phân đoạn mạng(Network segment)

 Trong suốt với những người sử dụng và kẻ tấn công.
 Cài đặt , bảo trì đơn giản không làm ảnh hưởng đến mạng
 Tránh được việc bị tấn công từ chối dịch vụ DoS đến một host cụ thể
 Có khả năng xác định được lỗi ở tầng network
 Độc lập với hệ điều hành
• Nhược điểm
 Có thể xảy ra trường hợp báo động giả , tức là không có dấu hiệu bất
thường mà IDS vẫn báo (False positive)
 Không thể phân tích được lưu lượng đã được mã hóa như SSH,IPSec,
SSL,v,v,v.
 NIDS đòi hỏi phải luôn được cập nhật các dấu hiệu tấn công mới nhất để
được thực sự hiệu quả.
 Không thể cho biết việc mạng bị tấn công có thành công hay không ,để
người quản trị có thể tiến hành bảo trì hệ thống
 Một trong những hạn chế là giới hạn băng thông. Những bọ thu nhập dữ
liệu phải thu nhập tất cả các lưu lượng mạng, sắp xếp lại và phân tích
chúng. Khi tốc độ mạng tăng lên thì khả năng của bộ thu nhập thông tin
cũng vậy.Khi tốc độ mạng tăng lên thì khả năng của bộ thu thập thông tin
cũng vậy. Một giải pháp là phải đảm bảo cho mạng được thiết kế chính xác.
Ngoài ra còn có một số ưu điểm như sau:

 Snort là mã nguồn mở
 Chạy trên nhiều nền tảng khác nhau trên các hệ điều hành nguồn mở
như GNU/Lunix mà Snort còn có thể chạy được trên các nền tảng
thương mại như Microsoft Windows, Solaris, HP-UX.


 Snort thường xuyên được cập nhật : các luật của Snort thường xuyên
được bổ xung và cập nhật các hình thức xâm nhập mới. Người sử dụng
có thể dễ dang tải về từ .

 Có khả năng phát hiện một số lượng lớn các kiểu thăm dò , xâm nhập
khác nhau như: buffer overflow, CGI-Atack,Scan,ICMP.Virus.
 Snort theo dõi 24/7 với thời gian thật. giúp phát hiện liên tục các xâm
nhập vào hệ thống.
 Có một cộng đồng của người sử dụng và các nhà phát triển
 Có rất nhiều add-on mà không phải là thành phần của Snort, nhưng
cung cấp thêm các tính năng và dễ dàng sử dụng.
 Snort không cần phải thay thế bất kỳ cơ sở hạ tầng an ninh hiện có.
3. Bộ luật của Snort
3.1.Giới thiệu
Cũng giống như virus, hầu hết các hoạt động tấn công hay xâm nhập đều có các dấu hiệu
riêng. Các thông tin về các dấu hiệu này sẽ được sử dụng để tạo nên các luật cho Snort.
Thông thường, các bẫy (honey pots) được tạo ra để tìm hiểu xem các kẻ tấn công làm gì
cũng như các thông tin về công cụ và công nghệ chúng sử dụng. Và ngược lại, cũng có
các cơ sở dữ liệu về các lỗ hổng bảo mật mà những kẻ tấn công muốn khai thác. Các
dạng tấn công đã biết này được dùng như các dấu hiệu để phát hiện tấn công xâm nhập.
Các dấu hiệu đó có thể xuất hiện trong phần header của các gói tin hoặc nằm trong phần
nội dung của chúng. Hệ thống phát hiện của Snort hoạt động dựa trên các luật (rules) và
các luật này lại được dựa trên các dấu hiệu nhận dạng tấn công. Các luật có thể được áp
dụng cho tất cả các phần khác nhau của một gói tin dữ liệu . Một luật có thể được sử
dụng để tạo nên một thông điệp cảnh báo, log một thông điệp hay có thể bỏ qua một gói
tin.
3.2 Cấu trúc luật của Snort
Hãy xem xét một ví dụ đơn giản : alert tcp 192.168.2.0/24 23 -> any any
(content:”confidential”; msg: “Detected confidential”). Ta thấy cấu trúc của một luật có
dạng như sau:
Rule Header
Rule Option
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.

4. Rule Header
Dưới đây là cấu trúc chung của phần Header của một luật Snort:
Action

Protocol

Address

Port

Direction

Address

Port

• 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.

• Protocol: là phần qui định việc áp dụng luật cho các packet chỉ thuộc một giao thức cụ
thể nào đó. Ví dụ như IP, TCP, UDP …
• 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 và địa chỉ nào thuộc loại nào sẽ do phần Direction “->” qui
định.
• 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.
• Direction: phần này sẽ chỉ ra đâu là địa chỉ nguồn, đâu là địa chỉ đích.
Ví dụ: lert icmp any any -> any any (msg: “Ping with TTL=100”;ttl: 100;)

• alert icmp any any -> any any : phần Header của luật
• (msg: “Ping with TTL=100”;ttl: 100;) : phần Option của luật
Rule action (Phần thực thi của luật): trong luật này, kiểu thực thi của luật là “alert”,
nghĩa là một cảnh báo sẽ được tạo ra khi trùng với một dấu hiệu xác nhận. Nhớ rằng gói tin
sẽ được ghi log một cách mặc định khi cảnh báo được tạo ra. Phụ thuộc vào phần action,
phần option của luật có thể chứa các tiêu chuẩn thêm vào trong luật.
Protocol (Giao thức) : trong luật này, giao thức là ICMP, nghĩa là luật này chỉ được áp
dụng trên các gói tin ICMP. Trong bộ phận phát hiện của Snort, nếu giao thức của một
gói tin không phải là ICMP, phần còn lại của gói tin sẽ không được quan tâm để tiết kiệm


thời gian CPU. Phần protocol đóng một vai trò qian trọng khi bạn muốn áp dụng luật
Snort chỉ trên những gói tin với những kiểu cụ thể.
Địa chỉ nguồn và cổng nguồn : trong ví dụ này, cả hai phần này đều là “any”, nghĩa là
luật được áp dụng cho tất cả các gói tin đến từ một nguồn bất kì. Dĩ nhiên số cổng không
liên quan gì đến gói tin ICMP. Số cổng chỉ liên quan khi giao thức được sử dụng là TCP
hoặc UDP.
Direction : Trong trường hợp này direction được thiết lập là từ trái qua phải sử dụng kí
hiệu ->. Điều này chỉ ra rằng số địa chỉ và cổng ở phía bên trái là nguồn và ở phía bên
phải là của đích. Nó cũng có nghĩa là luật này sẽ được áp dụng trên các gói tin di chuyển

từ nguồn tới đích. Bạn cũng có thể sử dụng kí hiệu <- để đảo lại ý nghĩa của nguồn và
đích. Lưu ý rằng kí hiệu <> cũng có thể được sử dụng để áp dụng luật trên cả hai hướng.
Địa chỉ đích và cổng đích : trong ví dụ này, cả hai phần này đều là “any”, nghĩa là luật
được áp dụng cho tất cả các gói tin đến từ một đích bất kì. Phần direction trong luật này
không đóng một vai trò gì cả vì luật được áp dụng trên tất cả các gói tin ICMP di chuyển
theo bất kì hướng nào, vì từ khóa “any” ở cả phần nguồn và đích.
4.1 Ngăn chặn địa chỉ hay loại trừ địa chỉ
Snort cung cấp cho ta kĩ thuật để loại trừ địa chỉ bằng cách sử dụng dấu phủ định (dấu !).
Dấu phủ định này đứng trước địa chỉ sẽ chỉ cho Snort không kiểm tra các gói tin đến từ
hay đi tới địa chỉ đó. Ví dụ, luật sau sẽ áp dụng cho tất cả các gói tin ngoại trừ các gói có
nguồn xuất phát từ mạng lớp C 192.168.2.0.
alert icmp ![192.168.2.0/24] any -> any any (msg: “Ping with TTL=100”; ttl: 100;)
Danh sách địa chỉ

Ta có thể định rõ ra danh sách các địa chỉ trong một luật của Snort. Ví dụ nếu bạn muốn
áp dụng luật cho tất cả các gói tin trừ các gói xuất phát từ hai mạng lớp C 192.168.2.0 và
192.168.8.0 thì luật được viết như sau:
alert icmp ![192.168.2.0/24, 192.168.8.0/24] any -> any any (msg: “Ping
with TTL=100”; ttl: 100;)
Hai dấu [] chỉ cần dùng khi có dấu ! đứng trước.
Cổng (Port Number)

Số hiệu cổng dùng để áp dụng luật cho các gói tin đến từ hoặc đi đến một cổng hay một


phạm vi cổng cụ thể nào đó. Ví dụ ta có thể sử dụng số cổng nguồn là 23 để áp dụng luật
cho tất cả các gói tin đến từ một server Telnet. Từ any cũng được dùng để đại diện cho tất
cả các cổng. Chú ý là số hiệu cổng chỉ có ý nghĩa trong các giao thức TCP và UDP thôi.
Nếu protocol của luật là IP hay ICMP thì số hiệu cổng không đóng vai trò gì cả.
Ví dụ :

alert tcp 192.168.2.0/24 23 -> any any (content: “confidential”; msg: ”Detected
confidential”;)
Số hiệu cổng chỉ hữu dụng khi ta muốn áp dụng một luật chỉ cho một loại gói tin dữ liệu
cụ thể nào đó. Ví dụ như là một luật để chống hack cho web thì ta chỉ cần sử dụng cổng
80 để phát hiện tấn công.
Dãy cổng hay phạm vi cổng:

Ta có thể áp dụng luật cho dãy các cổng thay vì chỉ cho một cổng nào đó.
Cổng bắt đầu và cổng kết thúc phân cách nhau bởi dấu hai chấm “:”.
Ví dụ :
alert udp any 1024:2048 -> any any (msg: “UDP ports”;)
Ta cũng có thể dùn cổng theo kiểu cận trên và cận dưới, tức là chỉ sử dụng cổng bắt đầu
hoặc cổng kết thúc mà thôi. Ví dụ như là “1024:” hoặc là “:2048”
Dấu phủ định cũng được áp dụng trong việc sử dụng cổng. Ví dụ sau sẽ log tất cả các gói
tin ngoại trừ các gói tin xuất phát từ cổng 53.
log udp any !53 -> any any log udp
Sau đây là một số cổng thông dụng hay là các cổng của các dịch vụ thông
dụng nhất:
• 20 FTP data
• 21 FTP
• 22 SSH
• 23 Telnet
• 24 SMTP
• 53 DNS Server
• 80 HTTP
• 110 POP3
• 161 SNMP
• 443 HTTPS
• 3360 MySQL
Hướng – Direction

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.


5.Các tùy chọn

Rule option theo sau rule header và được đóng gói trong dấu ngoặc đơn. Có thể có
một hoặc nhiều option, được cách nhau bởi dấu phẩy. Nếu bạn sử dụng nhiều
option, những option hình thành phép logic AND. Một action trong rule header chỉ
được thực hiện khi tất cả các option đều đúng. Tất cả các option được định nghĩa
bằng các từ khóa. Một vài option cũng chứa các tham số. Thông thường, một
option có thể có 2 phần : từ khóa và đối số. Các đối số được phân biệt với từ khóa
bằng dấu hai chấm. Ví dụ:
msg: "Detected confidential";
Trong option này thì msg là từ khóa và "Detected confidential" là đối số của từ
khóa. Phần tiếp theo là các từ khóa được sử dụng trong phần option của luật Snort.
ack
ack: < number>;
TCP header chứa một trường Acknowledgement Number dài 32 bit. Trường này chỉ ra
rằng sequence number kế tiếp của người gửi được mong đợi. Trường này chỉ có ý nghĩa
khi cờ flag trong trường TCP được thiết lập.
classtype
config classification: name,description,priority

• name : tên được sử dụng cho việc phân loại. Tên được sử dụng với từ khóa
classtype trong luật Snort
• description : mô tả ngắn về kiểu phân loại
• priority : thứ tự ưu tiên mặc định cho sự phân loại, có thể được chỉnh sửa bằng từ
khóa priority. Priority càng thấp thì độ ưu tiên càng cao.
content

content: <straight text>; content: <hex data>;
Một đặc tính quan trọng của Snort là khả năng tìm thấy một mẫu dữ liệu trong một gói
tin. Mẫu đó có thể tồn tại dưới dạng một chuỗi ASCII hoặc là các kí tự thập lục phân.
Giống như virut, những kẻ xâm nhập cũng có các dấu hiệu và từ khóa content để có thể
tìm ra các dấu hiệu trong các gói tin. Vì Snort phiên bản 1.x không hỗ trợ các giao thức ở
lớp ứng dụng nên từ khóa này, cùng với từ khóa offset, cũng có thể được sử dụng để xem
xét header của lớp ứng dụng.
offset
offset: < value>;
Từ khóa offset được sử dụng kết hợp với từ khóa content. Sử dụng từ khóa này, bạn 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.


depth
depth: < value>;
Từ khóa depth cũng được sử dụng kết hợp với từ khóa content để xác định giới hạn trên
của việc so sánh mẫu. Sử dụng từ khóa này, bạn 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 bạn dùng cả hai từ
khóa offset và depth thì bạn có thể xác định một khoảng dữ liệu thực hiện việc so sánh
mẫu
nocase
nocase;
Từ khóa nocase đượ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 trong trường hợp vô tình.
content-list
content_list: < filename>;
Từ khóa content-list được sử dụng với tên của một file như là đối số của từ khóa này. File
này sẽ chứa một danh sách các chuỗi sẽ được tìm kiếm trong một gói tin. Mỗi chuỗi được
đặt trên các dòng khác nhau của file.

dsize
dsize: [<|>] < number>;
Từ khóa dsize đượ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 các gói tin có kích thước lớn. Sử
dụng từ khóa này, bạn có thể tìm thấy các gói tin có chiều dài dữ liệu lớn hoặc nhỏ hơn
một số xác định.
flags
flags: < flags>;
Từ khóa flags được sử dụng để tìm ra bit flag nào được thiết lập trong header TCP của
gói tin. Mỗi flag có thể được sử dụng như một đối số của từ khóa flags trong luật Snort.
Những bit flag này được sử dụng bởi nhiều các công cụ bảo mật với nhiều mục đích
trong đó có việc quét các cổng như nmap ().
Hình 3: Bảng kí tự tham số dùng trong luật của Snort


fragbits
fragbits: < flag_settings>;
Sử dụng từ khóa này, bạn có thể tìm ra những bit RB (Reserved Bit), DF(Don't Fragment
Bit), MF(More Fragments Bit) trong header IP có được bật lên hay không.
icmp_id
icmp_id: < number>;
Option icmp_id được sử dụng để phát hiện một ID cụ thể được sử dụng với một gói tin
ICMP.
icmp_seq
icmp_seq: < hex_value>;
Option icmp_seq giống như từ khóa icmp_id.
itype
itype: < number>;
Header ICMP nằm sau header IP và chứa trường type. Từ khóa itype được sử dụng để
phát hiện các cách tấn công sử dụng trường type trong header ICMP của gói tin.

icode
icode: < number>;
Trong gói tin ICMP, header ICMP đi sau header IP. Nó chứa một trường code. Từ khóa


icode được sử dụng để phát hiện trường code trong header gói tin ICMP.
id
id: < number>;
Từ khóa id được sử dụng để đối chiếu trường fragment 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 sử dụng một số ID cố định.
ipopts
ipopts: < ip_option>;
Header IPv4cơ bản dài 20 byte. Bạn có thể thêm các tùy chọn vào header này ở cuối.
Chiều dài của phần tùy chọn này có thể lên đến 40 byte. Các tùy chọn được sử dụng cho
các mục đích khác nhau, bao gồm:
• Record Route (rr)
• Time Stamps (ts)
• Loose Source Routing (lsrr)
• Strict Source Routing (ssrr)
ip_proto
ip_proto: [!] < name or number>;
Từ khóa ip_proto sử dụng plug-in IP Proto để xác định số giao thức trong header IP. Từ
khóa này cần một con số giao thức là đối số. Bạn cũng có thể sử dụng tên giao thức nếu
nó có thể phân giải bằng file /etc/protocols.
logto
logto: < file_name>;
Từ khóa logto được sử dụng để ghi log các gói tin vào một file đặc biệt.
msg
msg: < sample message>;
Từ khóa msg được sử dụng để thêm một chuỗi kí tự vào việc ghi log và cảnh báo. Bạn có

thể thêm một thông điệp trong hai dấu ngoặc kép sau từ khóa này.
priority
priority: < priority integer>;
Từ khóa priority gán độ ưu tiên cho một luật.
react
react: <react_basic_modifier[, react_additional_modifier...]>;


Từ khóa react được sử dụng với một luật để kết thúc một phiên, khóa một vài vị trí hoặc
dịch vụ. Không phải tất cả các option với từ khóa này hoạt động. Để sử dụng từ khóa
react, bạn nên biên dịch Snort với lệnh --enable-flexresp trong script cấu hình.
reference
reference : <id system>,<id>;
Từ khóa reference có thể thêm một sự tham khảo đến thông tin tồn tại trên các hệ thống
khác trên mạng. Nó không đóng một vai trò nào trong cơ chế phát hiện. Có nhiều hệ
thống để tham khảo như CVE và Bugtraq. Những hệ thống này giữ các thông tin thêm về
các kiểu tấn công đã được biết. Bằng việc sử dụng từ khóa này, bạn có thể kết nối đến các
thông tin thêm trong thông điệp cảnh báo.
resp
Từ khóa resp là một từ khóa cực kì quan trọng. Nó có thể được sử dụng để đánh bại các
hành vi của hacker bằng cách gửi các gói tin trả lời cho một host mà tạo ra một gói tin
thỏa luật. Từ khóa này cũng được biết như là Flexible Response (FlexResp) và được dựa
trên FlexResp plug-in. Plug-in nên được biên dịch vào Snort, sử dụng lệnh (--withflexresp)trong script cấu hình.
rev
rev: < revision integer>;
Từ khóa rev được thêm vào option của luật Snort để chỉ ra số revision của luật. Nếu bạn
cập nhật luật, bạn có thể sử dụng từ khóa này để phân biệt giữa các phiên bản. Các
module output cũng có thể sử dụng con số này để nhận dạng số revision.
rpc
rpc: < Số ứng dụng, Số thủ tục, Số phiên bản>

Từ khóa rpc được sử dụng để phát hiện các yêu cầu RPC cơ bản. \
sameip
sameip;
Từ khóa sameip được sử dụng để kiểm tra địa chỉ nguồn và đích có giống nhau hay
không. Nó không có đối số.
seq
seq: <hex_value>;
Từ khóa seq trong luật Snort có thể được sử dụng để kiểm tra số thứ tự sequence của gói
tin TCP.
flow
Từ khóa flow được sử dụng để áp dụng một luật lên các gói tin di chuyển theo một hướng
cụ thể. Bạn có thể sử dụng các option với từ khóa để xác định hướng. Các option sau đây
có thể được sử dụng với từ khóa này :


• to_client
• to_server
• from_client
• from_server
session
session: [printable|all];
Từ khóa có thể được sử dụng để gạt bỏ tất cả dữ liệu từ một phiên TCP.
sid
sid: < snort rules id>;
Sử dụng SID, các công cụ như ACID có thể biểu diễn luật thật sự tạo ra một cảnh báo cụ
thể.
tag
tag: <type>, <count>, <metric>[, direction]
Từ khóa tag là một từ khóa rất quan trọng khác có thể được sử dụng để ghi log các dữ
liệu thêm vào từ ( hoặc đến) một host xâm nhập khi một luật được kích hoạt. Dữ liệu

thêm vào có thể được phân tích sau này một cách chi tiết hơn.
tos
tos: < number>;
Từ khóa tos được sử dụng để phát hiện một giá trị cụ thể trong trường TOS (Type of
Service) của header IP.
ttl
ttl: < number>;
Từ khóa ttl được sử dụng để phát hiện giá trị Time to Live trong header IP của gói tin. Từ
khóa này có thể được sử dụng với tất cả các kiểu giao thức được xây dựng trên IP như
ICMP, UCP và TCP. Sử dụng từ khóa ttl, bạn có thể tìm ra nếu có một người cố gắng
traceroute mạng của bạn. Vấn đề duy nhất là từ khóa cần một giá trị TTL chính xác.
uricontent
uricontent: [!] "content string";
Từ khóa uricontent giống với từ khóa content ngoại trừ việc nó được sử dụng để tìm một
chuỗi chỉ trong phần URI của gói tin.


6. Chế độ ngăn chặn của Snort : Snort – Inline
6.1 Tích hợp khả năng ngăn chặn vào Snort

Snort-inline là một nhánh phát triển của Snort do William Metcalf khởi
xướng và lãnh đạo. Đến phiên bản 2.3.0 RC1 của Snort, inline-mode đã được tích
hợp vào bản chính thức do snort.org phát hành. Sự kiện này đã biến Snort từ một
IDS thuần túy trở thành một hệ thống có các khả năng của một IPS, mặc dù chế độ
này vẫn chỉ là tùy chọn chứ không phải mặc định.
Ý tưởng chính của inline-mode là kết hợp khả năng ngăn chặn của iptables vào bên
trong snort. Điều này được thực hiện bằng cách thay đổi môđun phát hiện và
môđun xử lý cho phép snort tương tác với iptables. Cụ thể, việc chặn bắt các gói
tin trong Snort được thực hiện thông qua Netfilter và thư viện libpcap sẽ được thay
thế bằng việc sử dụng ipqueue và thư viện libipq. Hành động ngăn chặn của snortinline sẽ được thực hiện bằng devel-mode của iptables.

6.2 Những bổ sung cho cấu trúc luật của Snort hỗ trợ Inline mode

Để hỗ trợ tính năng ngăn chặn của Snort-inline, một số thay đổi và bổ sung đã
được đưa vào bộ luật Snort. Đó là đưa thêm 3 hành động DROP, SDROP, INJECT
và thay đổi trình tự ưu tiên của các luật trong Snort. DROP Hành động DROP yêu
cầu iptables loại bỏ gói tin và ghi lại thông tin như hành động LOG.
SDROP
Hành động SDROP cũng tương tự như hành động DROP, điều khác biệt là ở chỗ
Snort sẽ không ghi lại thông tin như hành động LOG.
REJECT
Hành động REJECT yêu cầu iptables từ chối gói tin, có nghĩa là iptables sẽ loại bỏ
và gửi lại một thông báo cho nguồn gửi gói tin đó. Hành động REJECT không ghi
lại bất cử thông tin gì.
Trình tự ưu tiên của các luật
Trong các phiên bản gốc, trình tự ưu tiên của các hành động trong Snort là :
activation->dynamic-> alert->pass->log
Trong inline-mode, trình tự ưu tiên này được thay đổi như sau :
activation->dynamic->pass->drop->sdrop->reject->alert->log

II. CÀI ĐẶT SNORT TRÊN WINDOWNS
1. Dowload Snort trên snort.org


2. Vào Get Started để dowload Snort

3. Vào Rules để tải snortrules


4. Cài đặt Snort từ file dowload về(chọn Yes để cài đặt), không có thì bỏ qua.


5. Chọn agree để tiếp tục


6. Chọn Next

7. Chọn đường dẫn, tiếp tục next


8. Nhấn Close

9.Thông báo hoàn thành


10. Tải gói hỗ trợ Rules ( yêu cầu đăng ký tài khoản)


11.Sau khi đăng nhập thành công chọn snortrules-snapshot-2983.tar.gz để tài ( tùy
theo bản cập nhật)

12.Tiến hành giải nén file vừa tải


13. Thư mục sau khi đã cài đặt và giải nén, tiến hành Copy tất cả thư mục trong
Snortrules


14. Paste vào Snort( Có thông báo trùng tến, tiến hành ghi đè ta được như hình sau)


15. Cấu hình file Snort.conf

File cấu hình của Snort (snort.conf) nằm trong thư mục \Snort\etc/ (ví dụ:
c:\Snort\etc\snort.conf.).


×