Chương II I: Thực Nghiệm

Một phần của tài liệu HỆ THỐNG PHÁT HIỆN XÂM NHẬP IDS (Trang 52 - 57)

C .hức năng của IDS

Chương II I: Thực Nghiệm

I.Giới thiệu về Snort IDS 1.Giới thiệu

Snort là một hệ thống phát hiện xâm nhập mạng (NIDS) mã nguồn mở miễn phí. NIDS là một kiểu của hệ thống phát hiện xâm nhập (IDS), được sử dụng để quét dữ liệu di chuyển trên mạng. Cũng có các hệ thống phát hiện xâm nhập host-based, được cài đặt trên một ost cụ thể và chỉ để phát hiện các sự tấn công nhắm đến host đó. Mặc dù tất cả các phương pháp phát hiện xâm nhập vẫn còn mới nhưng Snort được đánh giá là hệ thống tốt nhất hiện nay.

Dữ liệu được thu thập và phân tích bởi Snort. Sau đó, Snort lưu trữ dữ liệu trong cơ sở dữ liệu MySQL bằng cách dùng output plug-in. Web server Apache với ACID, PHP, thư viện GD và PHPLOT sẽ biểu diễn dữ liệu này trên trình duyệt khi một người dùng kết nối đếnserver.

Người dùng có tạo nhiều kiểu truy vấn khác nhau để phân tích dữ liệu. Snort chủ yếu là một IDS dựa trên luật, tuy nhiên các input plug-in cũng tồn tại để phát hiện sự bất thường trong các header của giao thức.

Snort sử dụng các luật được lưu trữ trong các file text, có thể được chỉnh sửa bởi người quản trị. Các luật được nhóm thành các kiểu. Các luật thuộc về mỗi loại được lưu trong các file khác nhau. File cấu hình chính của Snort là snort.conf. Snort đọc những luật này vào lúc khởi tạo và xây dựng cấu trúc dữ liệu để cung cấp các luật để bắt giữ dữ liệu. Tìm ra các dấu hiệu và sử dụng chúng trong các luật là một vấn đề đòi hỏi sự tinh tế, vì bạn càng sử dụng nhiều luật thì năng lực xử lý càng được đòi hỏi để thu thập dữ liệu trong thực tế. Snort có một tập hợp các luật được định nghĩa trước để phát hiện các hành động xâm nhập và bạn cũng có thể thêm vào các luật của chính bạn. Bạn cũng có thể xóa một vài luật đã được tạo trước để tránh việc báo động sai.

2.Các thành phần của Snort:

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: Bộ giải mã gói  Preprocessor: Bộ tiền xử lý.

 Dectection Engine: Bộ máy phát hiện.

 Logging và Alerting System: Hệ thông ghi nhận và cảnh báo.

Packet Decoder (Bộ phận giải mã gói)

Packet decoder lấy những gói từ những loại khác nhau của giao diện mạng và chuẩn bị đưa chúng vào preprocessor hoặc gửi nó qua detection engine.

Preprocessor (Bộ phận xử lí trước)

Preprocessors là những thành phần hay những plug-in được sử dụng cùng với Snort để 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 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. Hacker sử dụng những công nghệ khác nhau nhằm đánh lừa một IDS bằng nhiều cách khác nhau. Cho ví dụ, bạn có thể tạo một rule để tìm một dấu hiệu “script/iiadmin” trong gói HTTP. Nếu bạn so khớp chính xác chuỗi này, bạn có thể dễ dàng bắt lấy. Cho ví du:

• “script/./iisadmin”

• “script/examples/../iisadmin”

• “script/iisadmin”

Để làm phức tạp trạng thái, hacker cũng có thể chèn vào Uniform Resource Identifier (URI) ký tự nhị phân hay Unicode mà vẫn hợp quy tắc của một web server. Chú ý rằng web server thường hiểu tất cả những chuỗi và có thể xử lý chúng chính xác như mong muốn trong chuỗi “script/iisadmin”. Tuy nhiên IDS vẫn theo dõi so khớp chính xác, nó không thể phát hiện ra sự tấn công này. Một preprocessor có thể sắp xếp lại chuỗi đó để nó có thể phát hiện được.

Preprocessor cũng có thể sử dụng cho những gói phân mảnh. Khi một gói dữ liệu có kích thước lớn truyền vào một host, gói đó thường bị phân mảnh. Cho ví dụ, kích thước mặc định lớn nhất cho gói dữ liệu trong mạng Ethernet thường là 1500 byte.

Giá trị này được điều khiển bởi giá trị MTU (Maximum Transmission Unit) cho giao diện mạng. Điều này có nghĩa là nếu bạn gửi dữ liệu lớn hơn 1500 byte, nó sẽ cắt thành nhiều gói, mỗi gói phân mảnh đó có kích thước nhỏ hơn hoặc bằng 1500 byte. Hệ thống nhận sẽ tái hợp để thành gói dữ liệu nguyên thủy. Trên IDS, trước khi bạn áp dụng những rule hay tìm một signature, bạn phải tái hợp gói. Cho ví dụ, phân nửa dấu hiệu có thể cho thấy trong một đoạn này và nửa kia trong đoạn khác. Để phát hiện chính xác dấu hiệu, bạn phải kết hợp tất cả phân đoạn của mảnh. Hacker sử dụng sự phân mảnh để đánh bại những hệ thống IDS. Preprocessor thường được dùng để bảo vệ những loại tấn công này. Preprocessor trong Snort có thể phân mảnh gói, giải mã HTTP URI, tái hợp luồng TCP, v.v.. Những chức năng này rất quan trọng trong thành phần IDS.

Dectection Engine (Bộ phận phát hiện):

Detection engine là thành phần quan trọng nhất trong Snort. 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. Detection engine tận dụng những rule 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 mạnh của hệ thống trên đó có Snort đang chạy.

• Thông lượng bên trong đó.

• Lưu lượng 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. (adsbygoogle = window.adsbygoogle || []).push({});

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

Logging và Alerting System (Hệ thống ghi và cảnh báo) :

Phụ thuộc vào detection engine tìm trong gói, gói có thể được dùng để ghi hành động hay sinh cảnh báo. Việc ghi lưu trong những text file đơn giản, loại file tcpdump hay những hình thức ghi khác. 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.

Output Modules (Bộ phận đầu ra) :

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:

• Đơn giản chỉ ghi vào snort/log/ hay những thư mục 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 (SMB) đế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.

Bảng sau đây cho ta thấy những thành phần khác nhau của một IDS:

Tên Mô tả

Packet Decoder Chuẩn bị gói cho việc xử lý

Preprocessor hay Input plugin Dùng để bình thường hoá 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 rule lên gói

Logging and Alerting System Sinh thông điệp cảnh báo và ghi lại log

Output Modules Xử lý cảnh báo, ghi và sinh kết quả cuối

cùng.

Một phần của tài liệu HỆ THỐNG PHÁT HIỆN XÂM NHẬP IDS (Trang 52 - 57)