Snort đợc chia thành nhiều thành phần. Những thành phần này làm việc với nhau để phát hiện các cách tấn công cụ thể và tạo ra output theo một định
dạng đợc đòi hỏi. Một IDS dựa trên Snort bao gồm các thành phần chính sau đây:
-Packet Decoder.
-Preprocessor.
-Dectection Engine.
-Logging và Alerting System.
-Output Modules.
Hình 3-: Biểu đồ khối Snort
Packet Decoder
Trớc khi packet đợc đa vào bộ Decoder của Snort, nó phải đợc capture bởi Packet Capture nh Winpcap. Mặc dù Packet Capture không phải là một bộ phận của Snort nhng phải đợc sử dụng đi kèm để hỗ trợ cho Snort.
Packet Decoder lấy các gói từ các giao diện mạng khác nhau và chuẩn bị cho việc gói tin đợc xử lí trớc hoặc đợc gửi cho bộ phận phát hiện. Bộ phận này sẽ đọc packet, nhận biết các trờng trong packet
Hình 3-: Packet Decoder
Khi Decoder nhận đợc các gói dữ liệu (data blob) nó sẽ khởi tạo các con trỏ để chỉ rõ vị trí của từng loại dữ liệu. Ví dụ nh đâu là Ethernet header, Ip header, TCP header, payload…
Hình 3-: Cầu trúc của packet sau khi đợc decoded
Preprocessors
Preprocessors là những thành phần đợc sử dụng với Snort để sắp xếp hoặc chỉnh sửa gói dữ liệu trớc khi bộ phận phát hiện làm một vài xử lý để tìm ra gói tin có đợc sử dụng bởi kẻ xâm nhập hay không. Một vài bộ phận xử lý trớc cũng thực thi việc phát hiện bằng cách tìm các dấu hiệu bất thờng trong header của gói tin và tạo ra các cảnh báo. Bộ phận xử lí trớc là rất quan trọng trong bất kì IDS nào, chúng chuẩn bị cho các gói dữ liệu đợc phân tích dựa trên các luật trong bộ phận phát hiện. Kẻ tấn công sử dụng nhiều kĩ thuật khác nhau để lừa IDS theo nhiều cách. Bộ phận xử lí trớc cũng đợc sử dụng để tái hợp các gói tin. Trên IDS, trớc khi áp dụng bất kì luật nào, bạn phải tái hợp các gói tin lại để tìm ra các dấu hiệu. Bộ phận xử lí trớc trong Snort có thể tái hợp các gói tin, giải mã HTTP URI, ráp lại các dòng TCP, v.v... Nói tóm lại, chức năng của Preprocessors là để sắp xếp hoặc modify lại packet trớc khi đi vào detection
engine. Một số module này có khả năng phát hiện các packet dị thờng trong header và sinh ra alert. Ngoài ra, nó có thể tái định dạng gói tin (defragment), sắp xếp lại chuỗi.
Những chức năng này rất quan trọng trong hệ thống phát hiện xâm nhập. Có nhiều Preprocessor khác nhau trong không cấu trúc của Snort. Khi có một packet xuất hiện, các Preprocessors này đợc tải theo trình tự đợc cấu hình trong Snort.conf
Hình 3-: Order of preprocessors that packet is processed
Các gói tin sẽ đợc kiểm tra qua tất cả các Preprocessor. Dới đây là các Preprocessors cơ bản: -Frag2 -Stream4 -HTTP Inspect RPC_Decode -Telnet- ARPSpoof -ASN1_Decode- Flow -SfPortscan- Performance
Đây là mô hình ví dụ về cơ chế hoạt động của một loại preprocessor: Multimedia clasification preprocessor:
Hình 3-: Gói tin đợc xử lý thông qua multimedia classification preprocessor
Detection Engine:
Đây là phần quan trọng nhất của Snort. Trách nhiệm của nó là phát hiện có sự xâm nhập tồn tại trong gói tin hay không. Bộ phận phát hiện sử dụng các luật của Snort cho mục đích này.Nếu một gói tin giống với bất kì lậut nào, một hành động tơng ứng sẽ đợc thực hiện
Detection Engine sử dụng một link list hai chiều để so sánh các gói tin. Khi một packet đợc đa vào Detection Engine, dựa vào giao thức, nó sẽ đợc gửi đến các rule tree phù hợp rồi so sánh với mỗi Rule Tree Node từ trái qua phải, nếu phù hợp nó lại tiếp tục so sánh với Option Tree Node. Link List là một ma trận bao gồm hai hai cấu trúc: Rule Tree Node (RTN) và Option Tree Node (OTN).
RTN dùng để kiểm tra header của gói tin với header trong tập luật, còn OTN dùng để so sánh phần option của tập luật (mỗi tập luật gồm hai phần chính là header và option). Dới đây là quy trình của gói tin khi đi qua RTN và OTN
Hình 3-: Compare header of packet happening in RTN
Sau khi các rule đã đợc phân tích cú pháp, nó đợc lu trữ trong RTN và OTN để thuận tiện cho các quy trình tiếp theo.
Hình 3-: Rules after comparing are kept stored in RTN và OTN
Rule List là một con trỏ dùng để trỏ tới danh sách liên kết RuleListNode, mỗi node này lại co một ListHead lu trữ các loại rule khác nhau nh Alert, Dynamic, Log, Pass, Activattion. Trong mỗi ListHead sẽ bao gồm thông tin về bốn loại giao thức: TCP, UDP, IP và ICMP.
Detection Engine là bộ phận then chốt về thời gian thực thi của Snort. Dựa vào bộ máy của bạn mạnh nh thế nào và bao nhiêu luật bạn định nghĩa mà nó có thể tốn những khoảng thời gian khác nhau đối với các gói tin khác nhau. Nếu lu lợng trên mạng là quá lớn khi Snort đang hoạt động trong chế độ NIDS, bạn có thể mất một vài gói tin và có thể thời gian đáp ứng không chính xác. Lu lợng trên bộ phận phát hiện phụ thuộc vào các yếu tố sau:
-Số lợng các luật.
-Sức mạnh của bộ máy mà Snort đang chạy.
-Lu lợng trên mạng.
Bộ phận phát hiện hoạt động theo những cách khác nhau ở các phiên bản khác nhau của Snort. Trong tất cả phiên bản 1.x của Snort, bộ phận phát hiện dừng việc xử lí gói tin khi phù hợp với một luật. Dựa vào luật, bộ phận phát hiện sẽ có các hành động tơng ứng. Điều này có nghĩa là nếu một gói tin phù hợp với nhiều luật, chỉ có luật đầu tiên đợc áp dụng mà không xem xét đến các luật còn lại. Điều này làm nảy sinh một vấn đề. Một luật có độ u tiên thấp sẽ tạo ra một cảnh báo có độ u tiên thấp, nếu một luật có độ u tiên cao bị xếp sau trong chuỗi luật. Vấn đề này đợc giải quyết trong Snort phiên bản 2, khi mà tất cả các luật đ- ợc so sánh trên một gói tin trớc khi tạo ra một cảnh báo. Sau khi so sánh tất cả các luật, luật có độ u tiên cao nhất sẽ đợc chọn để tạo cảnh báo. Vì bộ phận phát hiện trong phiên bản 2 đã đợc viết lại hoàn toàn nên nó nhanh hơn rất nhiều so với các phiên bản trớc đây.
Output Plugin:
Module này cho phép định dạng các thông báo (alert, logs) cho ngời sử dụng bằng nhiều cách khác nhau (console, extern files, database ). …
-Các output plug-ins cơ bản:-Alert_fast – khởi tạo cảnh báo vào cái file một dòng, sử dụng khi muốn hệ thông hoạt động nhanh.
-Alert_full – tạo một th mục cho mỗi địa chỉ IP và khởi tạo cảnh báo cũng nhue các dữ liệu vào th mục.
-Alert_smb – gửi SMB messages tới máy chủ.
-Alert_unixsock – Thiết lập một establishes a UNIX domain socket và gửi cảnh báo tới đó.
-Log_tcpdump – truy cập các gói bằng định dạng file tcpdump file format.
-CSV – outputs to a comma delimited file, for easy import to spreadsheet or database applications.- XML – có thể truy cập tới SNML (Simple Network Markup Language).
-Database – truy cập trực tiếp tới các dữ liệu có liên quan (hỗ trợ MySQL, PostgreSQL, Oracle, UNIXODBC).