Snort là phần mềm IDS được phát triển bởi Martin Roesh dưới dạng mã nguồn mở. Snort ban đầu được xây dựng trên nền Unix nhưng sau đó phát triển sang các nền tảng khác. Snort được đánh giá rất cao về khả năng phát hiện xâm nhập. Tuy snort miễn phí nhưng nó lại có rất nhiều tính năng tuyệt vời. Với kiến trúc 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. Snort có thể chạy trên nhiều hệ thống như Windows, Linux, OpenBSD, FreeBSD, Solaris,…
Bên cạnh việc có thể hoạt động như một ứng dụng bắt gói tin thông thường, Snort còn được cấu hình để chạy như một NIDS.
1.1.5.1. Cấu trúc Snort
– Cấu trúc của Snort bao gồm 5 modul:Module giải mã gói tin, module tiền xử lý, module phát hiện, module log và cảnh báo, module kết xuất thông tin
Hình 3.2: Kiến trúc của Agent thu thập, phân tích
Khi Snort hoạt động, nó sẽ lắng nghe 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 sẽ được đưa vào module giải mã. Tiếp theo sẽ vào module tiền xử lý và rồi module phát hiện. Tại đây tùy vào việc có phát hiện được xâm nhập hay không mà gói tin có thể bỏ qua để lưu thông tin tiếp hoặc đưa vào module Log và cảnh báo để xử lý. Khi các cảnh báo được xác định, Module kết xuất thông tin sẽ thực hiện việc đưa ra cảnh báo theo đúng định dạng mong muốn.
Module giải mã gói tin:
Module giải mã gói tin bắt mọi gói tin trên mạng lưu thông qua hệ thống. Bắt các gói dữ liệu các nhau của tầng network (Ethernet, SLIP, PPP….);
Một gói tin sau khi được giải mã sẽ được đưa tiếp vào module tiền xử lý.
Module tiền xử lý: Thực hiện 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 Agent 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.
Phát hiện các xâm nhập bất thường (nonrule/anormal): xử lý 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.
Module phát hiện:
Đây là module quan trọng nhất, 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.
Module log và cảnh báo:
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.
c) Tập luật
– Cơ sở dữ liệu các địa chỉ IP, tên miền độc hại, các dấu hiệu mất ATTT do người phát triển tự định nghĩa;
– Cơ sở dữ liệu dấu hiệu đặc biệt về những cuộc tấn công (smurf attack, buffer overfollow, paket sniffers,…)
1.1.5.2. Cấu trúc tập luật
Cấu trúc : Rule Header | Rule 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 tiểu chuẩn để áp dụng luật với gói tin đó.
Phần Option: chứa 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 với gói tin. Một option gồm 2 phần: một từ khóa và một tham số.
* Từ khóa ack
Trong header TCP có chứa trường Acknowledgement Number với độ dài 32 bit. Trường này chỉ ra số thứ tự tiếp theo gói tin TCP của bên gửi đang được chờ để nhận. Trường này chỉ có ý nghĩa khi mà cờ ACK được thiết lập. Các công cụ như Nmap sử dụng đặc điểm này để ping một máy. Ví dụ nó có thể gửi gói tin TCP tới cổng 80 với cờ ACK được bật và số thứ tự là 0. Bởi vậy bên nhận thấy gói tin không hợp lệ sẽ gửi lại gói tin RST. Và khi nhận được gói RST này, Nmap sẽ biết được IP này đang tồn tại hay không.
* Từ khóa classtype
Các luật có thể được phân loại và gán cho 1 số chỉ độ ưu tiên nào đó để nhóm và phân biệt chúng với nhau. Để hiểu rõ hơn về classtype thì ta cần hiểu được file classification.config. Mỗi dòng trong file này đều có cấu trúc như sau:
Config classification: name, description, priority
* Từ khóa content
Một đặc tính quan trọng của Snort là có khả năng tìm 1 mẫu dữ liệu bên trong một gói tin.
* Từ khóa dsize
Dùng để đối sánh theo chiều dài của phần dữ liệu. Rất nhiều cuộc tấn công sử dụng lỗi tràn bộ đệm bằng cách gửi các gói tin có kích thước rất lớn.
* Từ khóa flags
Từ khóa này dùng để phát hiện xem những bit cờ flag nào được bật trong phần TCP header của gói tin. Mỗi cờ có thể được sử dụng như 1 tham số trong từ khóa flags.
* Từ khóa fragbits
Phần IP header của gói tin chứa 3 bit dùng để chống phân mảnh và tổng hợp các gói tin IP. Các bit đó là:
+ Reversed bit (RB) dùng để dành cho tương lai
+ Don’t Fragment Bit (DF): nếu bit này được thiết lập tức là gói tin không bị phân mảnh + More Fragments Bit (MF): nếu được thiết lập thì các phần khác của gói tin vẫn đang trên đường đi mà chưa tới đích. Nếu bit này không được thiết lập thì đây là phần cuối cùng của gói tin.
Làm chủ Snort là bạn đã có thể tự bảo vệ hệ thống của mình một cách tốt nhất rồi, để theo dõi thêm các bài viết liên quan đến các giải pháp bảo mật hệ thống vui lòng bạn theo dõi GocNhinSo.Com nhé!