MỤC LỤC
LỜI CẢM ƠN 1
MỤC LỤC 2
MỞ ĐẦU 5
CHƯƠNG I 7
TỔNG QUAN VỀ HỆ THỐNG PHÁT HIỆN XÂM NHẬP 7
1.1. Tổng quan về các nguy cơ an ninh. 7
1.1.1. Những kiểu tấn công nhằm vào điểm yếu của hệ thống. 7
1.1.1.1. Kiểu tấn công thăm dò. 7
1.1.1.2. Kiểu tấn công truy cập. 8
1.1.1.3. Kiểu tấn công từ chối dịch vụ. 9
1.1.1.4. Kiểu tấn công qua ứng dụng web. 10
1.1.2. Vấn đề bảo mật hệ thống mạng. 12
1.1.2.1. Các vấn dề chung về bảo mật hệ thống mạng. 12
1.1.2.2. Khái niệm bảo mật hệ thống mạng máy tính. 13
1.1.2.3. Lỗ hổng bảo mật và phương thức tấn công mạng. 14
1.1.2.4. Vấn đề bảo mật cho hệ thống mạng doanh nghiệp. 16
1.2. Tổng quan về hệ thống phát hiện và phòng chống xâm nhập. 17
1.2.1. Định nghĩa. 17
1.2.2. Vai trò của hệ thống phát hiện xâm nhập IDPS. 18
1.2.3. Những ưu điểm và hạn chế của hệ thống. 19
1.2.4. Kiếm trúc chung của hệ thống phát hiện xâm nhập. 19
1.2.4.1. Phân loại hệ thống phát hiện xâm nhập IDPS. 19
1.2.4.2. Mô hình, cấu trúc và hoạt động của hệ thống. 21
CHƯƠNG II 30
HỆ THỐNG PHẦN MỀM PHÁT HIỆN XÂM NHẬP SNORT 30
2.1. Tổng quan về Snort. 30
2.1.1. Khái niệm. 30
2.1.2. Các đặc tính. 30
2.2. Các thành phần của Snort. 32
2.2.1. Bộ phận giải mã gói. 32
2.2.2. Bộ phận xử lí trước. 33
2.2.3. Bộ phận phát hiện. 34
2.2.3.1. Những biểu thức thông thường cho SQL injection. 34
2.3.2.2. Những biểu thức thông thường cho CSS. 38
2.2.4. Hệ thống ghi và cảnh báo. 41
2.2.5. Bộ phận đầu ra. 41
2.3. Các chế độ làm việc của Snort. 42
2.3.1. Chế độ “lắng nghe” mạng. 42
2.3.2. Chế độ phát hiện xâm nhập mạng. 44
2.4. Làm việc với tập luật của Snort. 45
2.4.1. Luật dở đầu tiên: 46
2.4.2. Cấu trúc chung của luật trong Snort. 46
2.4.2.1. Rule header. 46
2.4.2.2. Rule option. 48
CHƯƠNG III 56
TRIỂN KHAI SNORT BẢO VỆ HÊ THỐNG MẠNG 56
3.1. Tiêu chí triển khai. 56
3.1.2. Một số chú ý khi triển khai. 56
3.1.2. Các hệ thống và mạng phải giám sát. 57
3.1.3. Tạo các điểm kết nối. 58
3.1.4. Lưu lượng mã hóa. 58
3.1.5. Bảo mật bộ cảm biến Snort. 59
3.1.6. Chọn một hệ điều hành 59
3.1.7. Cấu hình các giao diện 60
3.2. Xây dựng snort bảo vệ hệ thống mạng. 61
3.2.1. Tham khảo một số mô hình thực tế. 61
3.2.2. Xây dựng mô hình. 63
3.4. Triển khai cơ sở hạ tầng. 65
3.4.1. Cấu hình. 65
3.4.2. Cài đặt snort trong hệ thống ubuntu. 65
3.4.3. Cấu hình với file Snort.conf. 69
3.5. Phân tích snort bảo vệ hệ thống trước các cuộc tấn công. 75
3.5.1. Mô hình tấn công. 75
3.5.2. Tấn công Dos. 75
3.5.2.1. Kịch bản tấn công 75
3.5.2.2. Phân tích kỹ thuật tấn công của hacker. 76
3.5.2.3. Kết luận. 79
3.5.3. Tấn công sql injection. 79
3.5.3.1. Kịch bản tấn công. 80
3.5.3.2. Phân tích tấn công. 81
3.5.3.3 Kết luận. 85
KẾT LUẬN 86
1. Những vấn đề gặp phải khi sử dụng IDS. 86
2. IPS là giải pháp: 86
3. Đánh giá và xu hướng phát triển của IDS. 87
BẢNG KÝ HIỆU VIẾT TẮT 89
PHỤ LỤC HÌNH ẢNH 90
PHỤ LỤC CÁC BẢNG 91
TÀI LIỆU THAM KHẢO 92
92 trang |
Chia sẻ: netpro | Lượt xem: 3861 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Tìm hiểu và nghiên cứu hệ thống phần mềm phát hiện và phòng chống xâm nhập, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phụ thuộc vào ứng dụng cụ thể của bạn, gía trị này có thể là “.php” hoặc “.asp” hoặc “.jsp”. Từ trước điểm này, ta không thể hiện luật Snort tương ứng nhưng chỉ thay thế sự biểu diễn chung là được sử dụng để tạo ra các luật này. Từ sự biểu diễn chung này bạn có thể dễ dàng tạo ra nhiều luật Snort.
Trong sự diễn đạt chung trước, ta tìm ra dấu (--) bởi vì đó có thể là các tình huống mà vị trí SQL injection có thể thậm chí không cần dấu ngoặc đơn.
Ví dụ, truy vấn SQL mà có vị trí mà phía chứa các giá trị số:
select value1, value2, num_value3 from database
where num_value3=some_user_supplied_number
Trong trường hợp này, kẻ tấn công có thể thực hiện truy vấn SQL bằng cách cung cấp một đầu vào như sau:
3; insert values into some_other_table
Cuối cùng, sự bổ sung pcre ‘i’và ’x’ được sử dụng sao cho tương ứng mà không có trường.
Dấu hiệu ở trên có thể được mở rộng hơn nữa để phát hiện ra sự xuất hiện của dấu ngoặc đơn. Tuy nhiên dấu ngoặc đơn có xu hướng xuất hiện như là một phần của lưu lượng HTTP thông thường. Để giảm lược được vị trí lỗi từ điều này và cũng từ bất kỳ sự xuất hiện thông thường của dấu ngoặc đơn và dấu gạch kép, thì dấu hiệu ở trên có thể được chỉnh sửa khi lần đầu tiên phát hiện ra sự xuất hiện của dấu =. Dữ liệu đầu vào của người dùng thông thường là các request dạng thức GET hoặc POST, nơi mà các trường của đầu vào sẽ được phản xạ là:
username=some_user_supplied_value&password=some_user_supplied_value
Do đó, nỗ lực SQL inject sẽ thể hiện dữ liệu đầu vào người dùng được ưu tiên bởi dấu = hoặc mã hex tương ứng.
b). Minh họa chỉnh sửa để phát hiện các ký tự biến đổi SQL.
/((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(;))/i
Đầu tiên xem xét dấu = hoặc mã hex tương ứng của nó (%3D). Sau đó cho phép số 0 hoặc các ký tự không phải dòng mới và sau đó nó sẽ kiểm tra dấu ngoặc đơn, dấu gạch kép.
SQL injection giải quyết xung quanh vấn để sử dụng dấu ngoặc đơn để thực hiện truy vấn ban đầu sao cho nó luôn luôn mang tới giá trị đúng. Hầu hết các ví dụ thảo luận về kiểu tấn công này sử dụng chuỗi 1 or 1=1. Tuy nhiên, phát hiện ra chuỗi này có thể dễ dàng tránh khỏi bằng cách áp dụng chuỗi như 1 or 2>1. Do đó chỉ phần mà là hằng số mới là giái trị số alpha ban đầu, được theo sau bởi dấu ngoặc đơn và sau đó là từ or. Logic Boolean xuất hiện sau đó có thể được biến đổi thành một phạm vi mà vị trí mẫu chung là hoặc là rất phức tạp hoặc không bao quát toàn bộ các biến. Do đó, các tấn công này có thể được phát hiện ở mức độ chính xác.
c). Minh họa tấn công SQL injection điển hình.
/\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
\w*: Không hoặc nhiều số alpha hoặc các ký tự hoặc các ký tự gạch dưới.
(\%27)|\'): Dấu ngoặc đơn hoặc mã hex tương ứng.
(\%6F)|o|(\%4F))((\%72)|r|(\%52): Từ or với sự kết hợp rất nhiều của các mã hex chữ hoa và chữ thường.
Sử dụng truy vấn SQL “union”cũng là phổ biến trong các tấn công SQL Injection chống lại rất nhiều cơ sở dữ liệu. Nếu sự biển diễn chung trước kia chỉ là phát hiện ra dấu ngoặc đơn hoặc các ký tự biến đổi SQL khác ,thì bạn có thể điều chỉnh truy vấn để kiểm tra đặc biệt các dấu ngoặc đơn hoặc từ khoá “union”. Điều này cũng có thể được mở rộng hơn nữa thành các từ khoá khác như “select” “insert” “update” và “detect”.
d). Minh họa dò tìm SQL Injection với từ khoá Union.
/((\%27)|(\'))union/ix
(\%27)|(\'): Dấu ngoặc đơn và mã hex tương ứng union.
Sự biểu diễn có thể được viết cho các truy vấn SQL khác như >select, insert, update, delete. drop và vv..
Kẻ tấn công thấy rằng ứng dụng Web là vùng dễ bị tổn thương trong SQL injection thì sẽ cố gắng khai thác. Nếu nhận ra rằng cơ sở dữ liệu trước, sau trong MS SQL server, thì thực hiện một hoặc nhiều các thủ tục lưu trữ và mở rộng nguy hiểm. Thủ tục này bắt đầu với các chữ “sp” hoặc “xp”. Điển hình thực hiện thủ tục mở rộng “xp_cmdshell”, cho phép thực hiện dòng lệnh shell Window thông qua SQL server. Quyền truy cập với những dòng lệnh sẽ được thực hiện là các tài khoản mà SQL đang hoạt động, thông thường là hệ thống cục bộ. Tiếp đó điều chỉnh registry bằng các thủ tục như xp_regread, xp_regwrite vv..
e). Mô phỏng các tấn công SQL Injection trên MS SQL server.
/exec(\s|\+)+(s|x)p\w+/ix
exec: Từ khoá được yêu cầu để chạy các thủ tục mở rộng hoặc lư trữ.
(\s|\+)+: Một hoặc nhiều khoảng trắng được mã hoá tương đương.(s|x)p: Chữ cái “sp” hoặc “xp” để định danh các thủ tục được mở rộng hoặc lưu trữ riêng biệt.
\w+: Một hoặc nhiều các số alpha hoặc dấu gạch dưới để hoàn tất tên của thủ tục.
2.3.2.2. Những biểu thức thông thường cho CSS.
Khi thực hiện một tấn công kịch bản thông qua website hoặc thực hiện kiểm tra điểm yếu của website thì người tấn công đầu tiên phải quan tâm tới tag định dạng HTML đơn giản như chữ in đậm, chữ in nghiêng hoặc chữ gạch chân. Mặt khác, thì ta có thể dùng tag kịch bản thông thường như alert("OK"). Hầu hết các kịch tài liệu trực tuyến hoặc tài liệu được in trong CSS sử dụng kịch bản nay như một ví dụ để xác định nếu một site có thể là điểm yếu cho CSS. Việc phát hiện này có thể xác định được. Tuy nhiên, những kẻ tấn công tiên tiến hơn có thể dấu đi toàn bộ chuỗi bằng cách nhập các cơ số Hex tương ứng. Chính vì vậy, các tag sẽ được hiển thị dưới dạng %3C%73%63%72%69%70%74%3E . Ngoài ra thì kẻ tấn công còn sử dụng Web Application Proxy như là một điểm yếu và đảo ngược lại các ký tự đặc biệt của người trình duyệt như to %3E . Chính vì vậy kẻ tấn công vào URL sẽ thêm các dấu ngoặc như {} [] // thay vì đưa các giá trị cơ số hex.
Các kiểm tra biểu thức thông thường sau cho kẻ tấn công có thể mở và đóng các tag … với bất kỳ đoạn text nào bên trong nó. Các kiểm tra biểu thức sẽ bắt tất cả or or . Chúng ta cũng cần kiểm tra xuất hiện của các dấu ngoặc như {} [], cũng như các giá trị cơ số hex tương ứng, hoặc (%3C|<).. Để phát hiện ra toàn bộ chuỗi có cơ số hex, ta phải kiểm tra xuất hiện của các số như %, [a-z0-9%] là đầu vào đăng nhập người dùng. Đôi khi điều này có thể sai nhưng hầu hết thì sẽ phát hiện kẻ tấn công thực sự.
a). Minh họa cho tấn công CSS đơn giản (hoặc XSS).
/((\%3C)|)/ix
(\%3C)|<): Kiểm tra mở các dẩu trên hoăc cơ số hex tương ứng.
((\%2F)|\/)* : Các dấu \ đóng các tag hoặc là các cơ số hex tương ứng của nó.
[a-z0-9\%]+: Để kiểm tra các chuỗi số bên trong các tag hoặc biểu diễn lại cơ số hex tương ứng.
((\%3E)|>): Kiểm tra việc đóng các dấu () hoặc cơ số hex tương ứng.
Snort signature:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII Cross-site scripting attempt"; flow:to_server,established; pcre:"/((\%3C)|)/i"; classtype:Web-application-attack; sid:9000; rev:5;)
CSS cũng được hoàn thành bằng cách sử ding . Việc tồn tại mặc định snort signature có thể trành được tấn công dễ dàng.
b). Minh họa tấn công CSS “<img src”.
/((\%3C)|)/I
(\%3C)|<): Mở các dấu ( hoặc các cơ số hex tương ứng.
(\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47): Các chữ ‘img’ kết hợp với ASCII, hoặc là chữ to nhỏ tương ứng với cơ số hex tương ứng.
[^\n]+ : Bất kỳ 1 ký tự nào khác so với các dòng <img.
(\%3E)|>): Đóng các dấu ngoặc hoặc cơ số hex tương ứng.
c). Minh họa cho tấn công CSS.
/((\%3C)|)/I
Signature đơn giản nay giống như mở tag HTML và cơ số hex tương ứng, được kế tiếp bằng một ký tự hoặc nhiều ký tự khác hơn là dòng mới và sau đó kế tiếp bằng việc đóng tag hoặc cơ số hex tương ứng . Điều nay có thể tạo ra một vài lỗi phụ thuộc vào web application và web server được cấu trúc như thế nào, nhưng nó sẽ đảm bảo bắt được tất cả thậm chí là tấn công CSS từ xa.
Điều quan dấu hiện biểu thức thông thường có thể được sử dụng để phát hiện tấn công SQL Injection và các tấn công CSS. Một vài các dấu hiệu bị tưởng là đơn giản, chúng ta sẽ phải tăng cường cảnh báo thậm chí nếu có một gợi ý của một tấn công. Nhưng cũng có thể các dấu hiệu là kết quả sai. Để quan tâm tới điều nay, phải chỉnh sửa các dấu hiệu đơn giản với việc thêm vào các kiểm tra mẫu chính vì vậy chúng đưa ra kết quả chính xác hơn. Biểu thức biểu mẫu 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 lưu 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. Lưu 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.
Tốc độ của bus được sử dụng.
Lưu 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.
2.2.4. Hệ thống ghi và cảnh báo.
Hình 17: Logging và Alerting System của snort.
Phụ thuộc những đặc tính mà bộ phận phát hiện tìm thấy trong gói tin, gói tin có thể được sử dụng để ghi lại các hành vi hoặc tạo ra một cảnh báo. Các thông tin ghi lại được giữ trong các file text đơn giản hoặc các dạng khác.
Bộ phận này rất quan trọng nó không chỉ đảm nhận nhiệm vụ. Mà còn có thể cho chúng ta xem được các hành vi khi sự kiện được ghi lại, từ đó có thể để ý và thấy sự bất thường ở những lần kế tiếp. Bộ phận này giúp ích cho những người làm quản trị.
2.2.5. Bộ phận đầu ra.
Module đầu ra hoặc plug-in có thể hoạt động theo nhiều cách phụ thuộc vào việc bạn muốn lưu các output được tạo ra bằng hệ thống ghi và tạo cảnh báo như thế nào.
Tuỳ thuộc vào cấu hình, Output Modules có thể làm việc giống như:
Ghi nhật ký vào file /var/log/Snort/alerts.
Gửi ra SNMP traps.
Ghi vào cơ sở dữ liệu giống như MySQL or Oracle ....
2.3. Các chế độ làm việc của Snort.
2.3.1. Chế độ “lắng nghe” mạng.
Hình 18: Tính năng sniffer.
Các công cụ sniffer mạng như tcpdump, ethereal, và Tethereal có đầy đủ các đặc tính và phân tích gói tin một cách xuất sắc, tuy nhiên, có lúc ta cần xem lưu lượng mạng trên bộ cảm biến Snort. Trong trường hợp này, sử dụng Snort như là một sniffer là khả thi. Kết quả xuất của chế độ Snort sniffer hơi khác so với các sniffer dòng lệnh. Nó rất dễ để đọc và ta có thể thấy thích khả năng bắt giữ gói tin nhanh của nó. Một đặc tính hay của chế độ này là việc tóm tắt lưu lượng mạng khi kết thúc việc bắt giữ gói tin. Thỉnh thoảng, nó có thể là một công cụ gỡ rối hữu dụng cho nhà quản trị.
Bật chế độ sniffer cho Snort bằng cờ -v:
# Snort –v
Trong lúc khởi động, Snort hiển thị chế độ, thư mục ghi log, và các giao diện mà nó đang lắng nghe. Khi việc khởi động hoàn tất, Snort bắt đầu xuất các gói tin ra màn hình. Kết quả xuất này khá cơ bản: nó chỉ hiển thị các header IP,TCP/UDP/ICMP và một số cái khác. Để thoát chế độ sniffer, sử dụng Ctrl-C. Snort thoát bằng cách tạo ra một bản tóm tắt các gói tin được bắt giữ, bao gồm các giao thức, thống kê phân mảnh và tái hợp gói tin. Để xem dữ liệu ứng dụng, sử dụng cờ -d. Tùy chọn này cung cấp các kết quả chi tiết hơn:
# Snort –vd
Dữ liệu ứng dụng có thể thấy được và ta có thể nhìn thấy các plain text trong gói tin. Trong trường hợp này, văn bản gửi từ một server DNS được thể hiện dưới dạng plain text. Để xem được chi tiết hơn, bao gồm các header lớp liên kết dữ liệu, sử dụng cờ -e. Việc sử dụng cả hai tùy chọn –d và –e sẽ cho hiển thị hầu như tất cả các dữ liệu trong gói tin:
# Snort –vde
Các chuỗi thập lục phân hiển thị nhiều dữ liệu hơn. Có địa chỉ MAC và địa chỉ IP. Khi thực hiện kiểm tra trên một mạng hoặc bắt giữ dữ liệu bằng Snort, việc bật –vde cung cấp nhiều thông tin nhất.
Để lưu lại trong logfile thay vì xuất ra console, sử dụng Snort -dve > temp.log.
Tóm lại, đây là các tùy chọn có thể sử dụng với chế độ sniffer của Snort
Bước tiếp theo sau khi sniffing các gói tin là ghi log chúng. Việc ghi log chỉ đơn giản bằng cách thêm tùy chọn –l, theo sau đó là thư mục mà ta muốn lưu trữ các log. Thư mục mặc định trong Snort là /var/log/Snort. Nếu ta xác định một thư mục không tồn tại thì Snort sẽ báo một thông điệp lỗi. Ta có thể sử dụng các tùy chọn –d, -a và –e để điều khiển số lượng thông tin sẽ được ghi log cho mỗi gói tin. Trong ví dụ sau đây, thư mục log được thiết lập là /usr/local/log/Snort, và các logfile bao gồm các payload gói tin.
ví dụ: # Snort -l /usr/local/log/Snort –d
Khi chạy trong chế độ này, Snort thu thập mỗi gói tin nó thấy và lưu chúng trong thư mục log theo kiểu phân cấp. Nói cách khác, một thư mục mới được tạo ra cho mỗi địa chỉ được bắt giữ và dữ liệu liên quan đến địa chỉ này được lưu trong thư mục đó. Snort lưu các gói tin thành các file ASCII, với tên file được tạo ra từ giao thức và số cổng. Cách tổ chức này làm cho nhà quản trị có thể dễ dàng thấy được ai đang kết nối với mạng, số cổng và giao thức họ đang sử dụng (sử dụng ls –R để liệt kê thư mục log). Hãy nhớ xác định biến mạng (trong file cấu hình hoặc sử dụng -h) để xác định chỉ ghi log cho mạng.
Cách tổ chức phân cấp này hữu dụng khi một số giới hạn các host được quan tâm hoặc ta muốn xem thoáng qua các địa chỉ IP của các host được bắt giữ. Tuy nhiên, thư mục log có thể ngày càng nhiều vì sự gia tăng thư mục và các file. Nếu ta ghi log tất cả lưu lượng trên một mạng lớn thì có thể sẽ bị tràn inodes (Unix giới hạn tổng số file trong một file hệ thống) trước khi bị tràn bộ nhớ. Nếu một người nào đó thực hiện việc quét mạng của ta và ánh xạ tất cả 65536 cổng TCP cũng như 65536 cổng UDP, ta sẽ đột ngột có hơn 131000 file trong một thư mục đơn. Sự bùng nổ file này có thể là một thử thách lớn cho bất kì một máy nào, và rất dễ trở thành cách tấn công DoS. Việc ghi log theo kiểu nhị phân có thể đọc được bởi Snort, tcpdump hoặc ethereal. Cách này làm tăng tốc độ và khả năng vận chuyển của việc bắt giữ gói tin. Hầu hết các hệ thống có thể bắt giữ và ghi log với tốc độ 100 Mbps mà không có vấn đề gì. Để ghi log các gói tin theo kiểu nhị phân, sử dụng lựa chọn –b.
Ví dụ:# Snort -b -l /usr/local/log/Snort/temp.log
Khi ta đã thực hiện việc bắt giữ gói tin, ta có thể đọc lại các file vừa tạo ra bằng khóa –r. Kết quả giống như sniffer của Snort. Lưu ý rằng –r không thể sử dụng với –C.
# Snort -r /usr/local/log/Snort/temp.log
Ở chế độ này, Snort không giới hạn việc đọc dữ liệu nhị phân được lưu trữ trong chế độ sniffer
2.3.2. Chế độ phát hiện xâm nhập mạng.
Snort là một công cụ phát hiện xâm nhập tuyệt vời. Khi được sử dụng như là một NIDS, Snort cung cấp khả năng phát hiện xâm nhập gần như là thời gian thực. Chúng ta sẽ xem rất nhiều cách mà Snort có thể được sử dụng như là một NIDS và tất cả các tùy chọn cấu hình có thể. Trong chế độ cảnh báo, Snort cần một file cấu hình (thật ra, chỉ cần xác định vị trí của file Snort.conf là đặt Snort trong chế độ này).
Vị trí mặc định của file này là /etc/Snort.conf. Nếu ta muốn đặt ở một vị trí khác, ta phải sử dụng khóa –c kèm với vị trí đặt file. Các cảnh báo được đặt trong file alert trong thư mục log (mặc định là /var/log/Snort). Snort sẽ thoát ra với với một lỗi nếu file cấu hình hoặc thư mục log không tồn tại.
Các cài đặt mặc định cho hầu như tất cả các mục trong file này là khá tốt (mặc dù sẽ có các cảnh báo nhầm). Biến duy nhất chúng ta mới thiết lập là biến RULE_PATH, chỉ cho Snort nơi của các file luật. File cảnh báo nằm trong thư mục /var/log/Snort. File này chứa các cảnh báo được tạo ra khi Snort đang chạy. Các cảnh báo Snort được phân loại theo kiểu cảnh báo. Một luật Snort cũng xác định một mức độ ưu tiên cho một cảnh báo. Điều này cho phép ta lọc các cảnh báo có độ ưu tiên thấp.
2.4. Làm việc với tập luật của Snort.
Hình 19: Sơ đồ luật hình cây của snort.
Giống như virut, hấu hết các hành vi xâm nhập đều có một vài dấu hiệu. Thông tin về các dấu hiệu này được sử dụng để tạo ra các luật của Snort. Bạn có thể sử dụng honey post để biết kẻ xâm nhập đang làm gì và thông tin về các công cụ và kĩ thuật của chúng. Ngoài ra, có các sơ sở dữ liệu về các điểm yếu mà kẻ xâm nhập muốn khai thác. Những cách tấn công đã biết này cũng có thể được sử dụng như là các dấu hiệu để phát hiện một người nào đó muốn tấn công hệ thống của bạn. Các dấu hiệu có thể tồn tại trong header của các gói tin. Hệ thống phát hiện xâm nhập dựa trên Snort thì dựa trên các luật. Các luật của Snort có thể được sử dụng để kiểm tra nhiều phần khác nhau của gói tin.
Một luật có thể được sử dụng để tạo ra một thông điệp cảnh báo, ghi lại một thông điệp..., hoặc trong Snort là “pass” gói tin. Hầu hết các luật của Snort được viết theo từng dòng đơn. Tuy nhiên, bạn cũng có thể mở rộng các luật thành nhiều dòng bằng cách sử dụng kí tự gạch chéo ngược tại cuối dòng. Các luật thường được đặt trong file cấu hình, thường là snort.conf. Bạn cũng có thể sử dụng nhiều file bằng cách gom chúng lại trong một file cấu hình chính.
2.4.1. Luật dở đầu tiên:
Thật ra, đây có thể là luật tệ nhất đã từng được viết, nhưng nó kiểm tra rất tốt nếu Snort đang hoạt động tốt và có thể tạo ra các cảnh báo.
Alert ip any any => any any (msg : IP Packet detected)
Bạn có thể dùng luật này vào cuối mỗi file snort.conf khi bạn cài đặt Snort lần đầu tiên. Luật này sẽ tạo ra cảnh báo cho mỗi gói tin Ip bắt được. Nó sẽ làm đầy không gian đĩa một cách nhanh chóng nếu như bạn vẫn để nó ở đó. Luật này dở vì nó không truyền đạt bất kì thông tin gì. Tại sao ta sử dụng luật này? Đó có thể là lần đầu tiên bạn kiểm tra để đảm bảo Snort đã được cài đặt đúng. Trong các lần tiếp theo, bạn sẽ thấy thông tin về các phần khác nhau của luật Snort.
Luật kế tiếp tạo ra cảnh báo cho tất cả các gói tin ICMP.
Alert icmp any any => any any (msg : “ICMP Packet found”)
2.4.2. Cấu trúc chung của luật trong Snort.
Tất cả các luật Snort đều có hai phần chính: header và options
Rule header
Rule Options
Phần header chứa các thông tin về hành động mà luật sẽ thực hiện. Nó cũng chứa các tiêu chuẩn về việc so sánh một luật trên một gói tin. Phần option thường chứa một thông điệp cảnh báo và thông tin về phần nào của gói tin được sử dụng để tạo ra cảnh báo. Một luật có thể phát hiện một hoặc nhiều kiểu xâm nhập.
2.4.2.1. Rule header.
Cấu trúc tổng quát của phần header như sau:
Action
Protocol
Address
Port
Direction
Address
Port
Trường Rule header
Mô tả trường
Giải thích
Action
Xác định kiểu hành động được thực hiện khi một tiêu chuẩn được so trùng và một luật giống với gói tin dữ liệu. Hành động điển hình là việc tạo ra các cảnh báo hoặc ghi lại các thông điệp log. Dưới đây là các action trong rule header.
Pass
Dùng thông báo cho Snort bỏ qua gói tin. Action này là một tuỳ chọn đóng vai trò quan trọng trong việc làm tăng tốc độ xử lý của Snort khi ta không muốn kiểm tra nội dung của các gói tin.
Log
Action dùng để log những gói tin, có rất nhiều cách khác nhau để log các gói tin. Như là log vào file text hoặc vào database. Gói tin có thể được log với những độ ưu tiên khác nhau, tuỳ thuộc vào tham số dòng lệnh đi theo và file cấu hình.
Alert
Dùng để gửi một tin nhắn đến admin khi một gói tin co dấu hiệu trùng hợp trong rule. Có nhiều cách khác nhau để thực thi một alert như thông báo lên console, log vào file…
Activate
Dùng để tạo một alert và khi đó sẽ sử dụng các rule khác để kiểm tra nhiều mối rằng buộc hơn. Dynamic rule dùng cho trường hợp này.
User có thể tự tạo cho riêng mình những action khác nhau, theo trường hợp cụ thể.
Protocol
Được sử dụng để áp dụng luật trên gói tin cho một giao thức cụ thể. Phần protocol được sử dụng để áp dụng luật trên các gói tin chỉ đối với một giao thức cụ thể. Đây là tiêu chuẩn đầu tiên được đề cập trong luật. Một vài giao thức được sử dụng như là IP, ICMP, UDP, TCP.
Address
Xác định đại chỉ nguồn và địa chỉ đích. Địa chỉ có thể là của một host, nhiều host hoặc là địa chỉ mạng. Lưu ý rằng trong một luật sẽ có 2 địa chỉ: địa chỉ nguồn và địa chỉ đích.
Port
Được áp dụng trong trường hợp TCP hay UDP, xác định cổng nguồn và đích của một gói tin mà luật được áp dụng. Trong trường hợp giao thức lớp mạng là IP và ICMP, số port là không có ý nghĩa.
Direction
Được dùng xác định địa chỉ và cổng nào được sử dụng như là nguồn hay là đích.
Bảng 2: Rule header.
Ví dụ: Xét một luật sau đây. Luật này sẽ tạo ra một thông điệp cảnh báo bất cứ khi nào nó phát hiện một gói tin ping ICMP (ICMP ECHO REQUEST) với TTL là 150, như sau:
alert icmp any any -> any any (msg: "Ping with TTL=150";\ ttl: 150 :)
2.4.2.2. Rule option.
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.
Trường Rule option
Mô tả trường
Giải thích
Ack: ;
TCP header chứa một trường cknowledgement 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
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
Offset : ;
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.
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.
Depth: ;
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;
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:;
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.
Drsize: [] ;
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: ;
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.
Fragbits:;
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: ;
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: ;
Option icmp_seq giống như từ khóa icmp_id.
Itype: ;
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: ;
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: ;
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
Các file đính kèm theo tài liệu này:
- Tìm hiểu và nghiên cứu hệ thống phần mềm phát hiện và phòng chống xâm nhập.doc