4.1. Giới thiệu về Snort
4.1.1. Các thành phần cơ bản của Snort
− Packet Decoder: Chuẩn bị gói cho việc xử lý
− Preprocessor hay Input Plugin: Dùng để bình thường hóa tiêu đề giao thức, phát hiện sự bất thường, tái hợp gói và tái hợp luồng TCP
− Detection Engine: Áp dụng rules lên gói
− Logging and Alerting System: Sinh thông điệp cảnh báo và ghi log file
− Output Modules: Xử lý cảnh báo, ghi và sinh kết quả cuối cùng
Hình 3.1. Mô hình các thành phần của Snort a) Packet Decoder
Packet Decoder là một thiết bị (có thể là phần cứng hoặc là phần mềm) được gắn vào trong hệ thống mạng, có chức năng lắng nghe tất cả các dữ liệu được trao đổi trên hệ thống mạng, phân tích gói dữ liệu thô bắt được trên mạng và phục hồi thành gói dữ liệu hoàn chỉnh ở lớp application, làm input cho hệ thống dectection engine.
Vấn đề quan trọng đặt ra cho hệ thống này đó là tốc độ xử lý gói dữ liệu, nếu tốc độ xử lý chậm sẽ làm cho hiệu năng của SNORT giảm sút do “nghe sót”
Hình 3.2. Packet Decoder b) Preprocessors
Preprocessors là những thành phần hay những plug-in được sử dụng cùng với IDS để sắp xếp và thay đổi những gói dữ liệu trước khi detection engine thực hiện công việc tìm kiếm nếu gói dữ liệu đó là nguy hiểm. Một vài preprocessor còn có thể thực hiện tìm ra những dấu hiệu bất thường trong tiêu đề gói và sinh ra cảnh báo. Preprocessor rất là quan trọng đối với IDS nhằm chuẩn bị những gói dữ liệu để phân tích cho việc thiết lập rule trong detection engine.
Hình 3.3. Preprocessor c) Detection Engine
Detection engine là thành phần quan trọng nhất trong hệ thống IDS. Nó chịu trách nhiệm phát hiện nếu có hành vi xâm nhập trong một gói. Trong mô hình hệ thống sử dụng Snort Detection Engine tận dụng những rule của Snort để làm việc này. Những rule được đọc trong cấu trúc dữ liệu bên trong hay buộc chặt chúng vào nơi mà chúng sẽ so khớp với tất cả các gói. Nếu một gói nào đó khớp với rule, hành động thích hợp sẽ sinh ra, chẳng hạn gói đó sẽ bị hủy. Những hành động đó có thể là ghi gói hay sinh cảnh báo.
Detection Engine là một phần tiêu chuẩn thời gian (time-critical) của Snort. Phụ thuộc vào sức khỏe của hệ thống bạn và có bao nhiêu rule được định nghĩa, nó có thể tiêu tốn bao nhiêu thời gian cho công việc đáp ứng các gói này. Nếu lưu lượng trên hệ thống mạng của bạn là khá cao khi Snort làm việc trong chế độ NIDS, bạn có thể hủy những gói. Sự vận hành của Detection engine phụ thuộc vào các yêu tố sau:
− Số rule trên đó.
− Sức khỏe của hệ thống trên đó có Snort đang chạy.
− Thông lượng bên trong đó.
− Sức vận hành trên mạng.
Khi thiết kế một NIDS, bạn phải giữ tất cả hồ sơ kỹ thuật trong đó. Nên nhớ rằng hệ thống phát hiện có thể khảo sát tỉ mỉ và áp dụng rule trên nhiều phần của gói dữ liệu. Những phần này có thể là:
− IP header của gói.
− Header lớp transport. Header gồm: TCP, UDP, và những header lớp transport khác.
Nó cũng có thể làm việc trên ICMP header.
− Header lớp application. Nó gồm có: DNS header, FTP header, SNMP header, SMTP header. Bạn có thể phải sử dụng nhiều phương pháp trực tiếp tại header lớp application, chẳng hạn như tìm kiếm offset của dữ liệu.
− Payload của dữ liệu. Điều này giúp bạn tạo ra một rule dùng cho detection engine để tìm một chuỗi bên trong dữ liệu.
Detection Engine làm việc khác nhau trong mỗi phiên bản Snort khác nhau. Trong tất cả phiên bản Snort 1.x, detection engine ngừng xử lý trên gói đó khi một rule được so khớp trên gói đó. Phụ thuộc vào rule, detection engine thực hiện những hành động thích hợp như ghi log file hay sinh một cảnh báo. Điều này có nghĩa là nếu một gói khớp với tiêu chuần được định nghĩa trong nhiều rule, chỉ rule đầu tiên được áp dụng vào gói đó mà không tìm kiếm sự so khớp khác. Đây là một vấn đề. Một rule thiếu trọn vẹn sẽ sinh ra một cảnh báo không trọn vẹn, thâm chí nếu một rule khá đầy đủ (tương ứng với một cảnh báo tốt) có thể nằm sau rule trước nó. Vấn đề này đã được sửa trong Snort phiên bản 2, tất cả các rule đều được so khớp vào một gói trước khi sinh một cảnh báo. Sau khi so khớp tất cả các rule, rule nào trọn vẹn nhất sẽ được chọn để sinh cảnh báo.
Detection engine trong Snort 2.0 đã được làm lại một cách hoàn chỉnh để nó so sánh tốt hơn, phát hiện sớm hơn so với các phiên bản trước.
Hình 3.4. Detection engine
d) Logging và Alerting System
Hệ thống Logging & Alerting dùng để thông báo cho quản trị mạng và ghi nhận lại các hành động xâm nhập hệ thống. Hiện tại có 3 dạng logging và 5 kiểu alerting. Các dạng logging, được chọn khi chạy SNORT gồm:
− Dạng Decoded: dạng log thô nhất, cho phép thực hiện nhanh, thích hợp với dân Pro.
− Dạng nhị phân tcpdump: theo dạng tương tự như tcpdump và ghi vào đĩa nhanh chóng, thích hợp với những hệ thống đòi hỏi performance cao.
− Dạng cây thư mục IP: Sắp sếp hệ thống log theo cấu trúc cây thư mục IP, dễ hiểu đối với người dùng.
Các dạng alerting:
− Ghi alert vào syslog
− Ghi alert vào trong file text
− Gửi thông điệp Winpopup dùng chương trình smbclient
− Full alert: ghi lại thông điệp alert cùng với nội dung gói dữ liệu.
− Fast alert: chỉ ghi nhận lại header của gói dữ liệu.Cách này thường dùng trong các hệ thống cần performance cao.
Mặc định tất cả những log file được lưu trong snort/log. Bạn có thể sử dụng dòng lệnh
“–l” để thay đổi vị trí sinh log file hay cảnh báo. Có nhiều lựa chọn dòng lệnh sẽ được thảo luận trong phần sau và chi tiết thông tin về cách ghi log file hay cảnh báo.
Hình 3.5. Logging and Alerting System
e) Output Modul
Output modules hay plug-in thực hiện những hoạt động khác nhau phụ thuộc bạn muốn lưu kết quả sinh ra bởi logging và cảnh báo thế nào. Về cơ bản, những modules này điều khiển loại kết quả sinh ra bởi hệ thống logging và cảnh báo. Phụ thuộc vào sự cấu hình, Output modules có thể làm những việc sau:
− Ghi vào file /log hay những file khác
− Gửi SNMP traps
− Gửi thông điệp đến syslog.
− Ghi vào cơ sở dữ liệu như MySQL hay Oracle.
− Sinh ra dẫn xuất eXtensible Markup Language (XML)
− Bổ sung cấu hình trên router và firewall.
− Gửi thông điệp Server Message Block (SMP) đến hệ thống Microsoft Window.
Những công cụ khác cũng có thể gửi cảnh báo trong những định dạng khác như e-mail hay qua giao diện web.