Xây dựng hệ thống phát hiện xâm nhập với Snort cho một hệ thống thông tin

Mở đầu Theo Mạng An toàn thông tin VSEC (The VietNamese security network), 70% website tại Việt Nam có thể bị xâm nhập, trên 80% hệ thống mạng có thể bị hacker kiểm soát. Điều này cho thấy chính sách về bảo mật của các hệ thống thông tin của Việt Nam chưa được quan tâm và đầu tư đúng mức. Khi một hệ thống thông tin bị hacker kiểm soát thì hậu quả không thể lường trước được. Đặc biệt, nếu hệ thống đó là một trong những hệ thống xung yếu của đất nước như hệ thống chính phủ, hệ thống ngân hàng, hệ thống viễn thông, hệ thống thương mại điện tử thì những thiệt hại về uy tín, kinh tế là rất lớn. Trong bối cảnh đó, hệ thống phát hiện xâm nhập ngày càng trở nên phổ biến và đóng vai trò quan trọng không thể thiếu trong bất kỳ chính sách bảo mật và an toàn thông tin của bất kỳ hệ thống thông tin nào. Các sản phẩm phát hiện xâm nhập hiện nay rất đa dạng và phong phú. Nó có thể là phần cứng hoặc phần mềm. Trong số các sản phẩm phát hiện xâm nhập mềm thì Snort luôn là lựa chọn hàng đầu của những người làm về an toàn thông tin. Với những lý do kể trên chúng tôi quyết định chọn khóa luận tốt nghiệp của mình là “Xây dựng hệ thống phát hiện xâm nhập với Snort cho một hệ thống thông tin”. Tóm tắt khóa luận Khóa luận được chia thành hai phần. Phần I giới thiệu về hệ thống phát hiện xâm nhập (Intrusion detecsion system). Phần II trình bày cụ thể về hệ thống phát hiện xâm nhập Snort. Phần I trình bày những khái niệm căn bản nhất của hệ thống phát hiện xâm nhập (IDS), các loại IDS, các thành phần và nguyên lý hoạt động của hệ thống IDS. Phần I cũng giới thiệu một số kiểu tấn công phổ biến trên Internet. Phần II trình bày các bộ phận cấu thành Snort, nguyên lý hoạt động và sự phối hợp của các bộ phận cấu thành Snort. Phần II đặc biệt đi sâu về cách xây dựng, quản lý, thực thi và cập nhật các tập luật.

doc88 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2791 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Xây dựng hệ thống phát hiện xâm nhập với Snort cho một hệ thống thông tin, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ap. memcap Giới hạn dung lượng bộ nhớ cho stream4. Mặc định là 8Megabyte Dưới đây là một ví dụ cấu hình stream4 preprocessor: preprocessor stream4: detect scans, disable_evasion_alerts, timeout 60, ttl_limit 10 3.3.4. stream4_reassemble preprocessor Snort dựa vào việc so sánh trùng khớp các chuỗi ký tự trong các gói tin với một chuỗi ký tự trong tập luật. Nếu một kẻ tấn công chia chuỗi ký tự thành nhiều phần, mỗi phần được gửi kèm trong một gói tin thì Snort có thể so sánh không trùng khớp với các tập luật (tương tự như sự phân mảnh của các gói tin). Stream4_reassemble ráp nối các mẩu dữ liệu để khôi phục thành một phiên giao tiếp hoàn chỉnh giữa hai hệ thống. Do vậy, mà tăng được khả năng so sánh trùng khớp giữa tập luật và chuỗi ký tự của phiên giao tiếp mạng. Với các dịch vụ có tính tương tác cao như Telnet, Rlogin, FTP, SMTP thì nội dung của phiên giao tiếp được chia thành rất nhiều gói tin. Việc ráp lại các phiên giao tiếp sẽ giảm thiểu việc mất đi các cảnh báo chính xác. Các tùy chọn trong stream4_reasemble preprocessor bao gồm: clientonly Chỉ ráp bên phía Client của phiên giao tiếp. Mặc định, tùy chọn này là enable. serveronly Chỉ ráp phía Server của phiên giao tiếp. both Ráp cả hai bên Server và Client. noalerts Thực hiện việc ráp nhưng không đưa ra cảnh báo cho việc ráp này. ports [ list] Danh sách các phiên giao tiếp trên các cổng trong list sẽ được ráp. Các cổng được đặt cách nhau bằng khoảng trống (ví dụ: 21 22 23 25 110 143 1433). Mặc định các phiên giao tiếp trên các cổng sau sẽ được ráp: 21, 23, 25, 53, 80, 110, 111,143, 513, và 1433. Ví dụ cấu hình stream4_reassemble: preprocessor stream4_reassemble: both 3.3.5. HTTP Inspect Preprocessor Định dạng nội dung các phiên giao tiếp Http sao cho dễ dàng so trùng với các signature. Có 2 lọai cấu hình http_inspect: global và server. Cấu hình global tạo ra các thay đổi ảnh hưởng đến toàn bộ traffic Http. Cấu hình server bao gồm các thiết lập dành cho 1 server đơn hay 1 nhóm server tương tự. 3.3.5.1. http_inspect (global) Bao gồm các cấu hình ảnh hưởng đến việc kiểm tra toàn bộ phiên giao tiếp Http. Có ba tùy chọn: iis_unicode_map [codemap ]: Tùy chọn này thực ra không phải là tùy chọn. Nó cần phải được include nếu không sẽ sinh ra lỗi. Mặc định vị trí của file map (gọi là unicode.map) được include với các luật mà chúng ta download và giải nén. Nó cho bộ tiền xử lí biết làm thế nào map các kí tự Unicode sang ASCII text từ đó so sánh với signature. Ta phải chỉ ra code map thường dùng (1252 là code map ANSI Latin I được dùng trong tiếng Anh) detect_anomalous_servers: Cảnh báo nếu giao tiếp Http chuẩn được phát hiện trên cổng không chuẩn. Do có nhiều thiết bị và dịch vụ có giao diện web-based chạy trên các cổng không chuẩn nên điều này có thể phát sinh nhiều lỗi false positive, vì vậy ít khi được enable. proxy_alert: nếu ta dùng 1 proxy server để quy định các Internet user của bạn thì sẽ sinh cảnh báo đối với các user không dùng proxy. Nó không phát hiện blind firewall proxies. Nếu ta không dùng 1 proxy server thì có thể sinh ra nhiều lỗi false positive Sau đây là một ví dụ cấu hình cho http_inspect global: preprocessor http_inspect: global iis_unicode_map unicode.map 1252 3.3.5.2. http_inspect_server Là 1 phần của http_inspect preprocessor. Ta có thể cấu hình cho các server được chỉ định trong môt hệ thống. Hầu hết các nhà quản trị hệ thống đều cấu hình cho IIS server và Apache server. Có khá nhiều tùy chọn trong mục này. Thiết lập một tùy chọn “no” để tùy chọn đó không sinh cảnh báo nhưng không disable tùy chọn đó. Có 2 loại cấu hình http_inspect_server: “default” và “by IP address”. Cấu hình “default” kiểm tra tất cả giao tiếp web không liên quan đến một địa chỉ IP được cấu hình riêng. Cấu hình “by IP address” sẽ cấu hình cho một địa chỉ IP riêng hay cho một loạt địa chỉ. Các tùy chọn như sau: default hoặc : cung cấp từ “default” hay một địa chỉ IP (hay CIDR block các địa chỉ IP) profile : vì có quá nhiều thiết lập, ta có thể chọn một tập các tùy chọn được cấu hình trước bằng cách chọn apache hay iis. Chọn all để tạo một cấu hình theo ý mình. Chọn all cho cấu hình mặc định và chọn iis hay apache cho các server riêng hay các nhóm server riêng. Nếu một profile được dùng, ta không thể thay đổi thiết lập thuộc về profile. Chỉ có 4 thiết lập cho ta thay đổi: port, iis_unicode_map, allow_proxy_use, flow_depth. ports {}: liệt kê các cổng (cách nhau bởi khoảng trắng và chứa trong {} trên đó các dịch vụ Http đang chạy. iis_unicode_map [codemap ]: Giống như cấu hình cho global configuration. Thực ra đây không phải là 1 tùy chọn, nó cần được include nếu không sẽ sinh lỗi. Theo mặc định vị trí của map file (unicode.map) được include với các luật bạn đã download và extract. Nó giúp bộ tiền xử lý biết cách map các ký tự Unicode sang ASCII text để so trùng với signature. Ta phải chỉ ra code map (1252 là code map ANSI-Latin I được dùng trong tiếng Anh). flow_depth : Do hấu hết signature cảnh báo trong 150-300 byte đầu tiên của một gói Http, ta không cần nhìn qua điểm này. Điều này làm giảm đáng kể hao phí của http_inspect. ascii : Nên disable cảnh báo đối với mã hóa ASCII utf_8 : Apache dùng mã hóa UTF-8, nên disable cảnh báo đối với UTF-8. u_encode : Vì chưa có web client nào dùng mã hóa này, nên tốt nhất enable cảnh báo khi phát hiện mã hóa kiểu này. bare_byte : Đây là một cách để nhận diện các IIS server bằng cách chúng phản ứng với một tập đặc biệt các kí tự ASCII dùng mã hóa UTF-8. Không client hợp pháp nào dùng mã hóa này do đó nên cho phép cảnh báo. base : Cho phép giải mã các kí tự base_36. Thường để off. iis_unicode : Phiên giao tiếp Unicode thường là dấu hiệu của sự cố gắng xâm nhập do đó nên cảnh báo. double_decode : Cảnh báo một thủ thuật tấn công IIS mà mã hóa Unicode với Unicode, lừa cho server làm những điều xấu. Nên cho phép cảnh báo với loại này. none_rfc_char {}: cho phép ta cảnh báo với kí tự non-RFC nhất định. Cẩn thận nếu ta chỉ ra một kí tự thường dùng, ta có thể gây ra nhiều lỗi false positive. multi_slash : Một số web server cho phép các họat động nguy hiểm nếu một URL bị làm rối bởi nhiều dấu slash trong một dòng. Điều này thường ẩn chứa một yêu cầu nguy hiểm và cần đựơc cảnh báo. iis_backslash : Nếu ta muốn một cảnh báo khi một dấu backslash kiểu Window được dùng thay vì một slash bình thường, thiết lập là yes. Dù sao thì http_inspect cũng bình thường hóa các dấu slash này directory : Bằng cách dùng các chuỗi kí tự lạ có thể lừa một web server chuyển sang duyệt thư mục. Các kí tự như “/../” và “_/”được chuyển thành “/” bởi http_inspect. Nếu ta muốn cảnh báo thì thiết lập là yes apache_whitespace : Một số Apache server có thể bị nguy hiểm bởi việc thay một khoảng trắng bằng một kí tự tab. Cho phép cảnh báo này có thể gây ra nhiều false positive. iis_delimeter : Hầu hết web server chấp nhận kiểu ngăn cách này mà không có vấn đề gì. Không cần thiết phải cảnh báo. chunk_length : Những chuỗi quá dài có thể là một trong những cách tấn công. Một chuỗi 500,000 bytes thường đủ để xác định được giữa tấn công và những giao thức dùng để giải mã bằng HTTP. non_strict : Vài Server cho phép những URIs bất thường (ví dụ như là Apache). Nếu bạn có Apache server, hãy enable nó. allow_proxy_use: Cho phép proxy dùng trên web server xác định. Option này dấu đi các cảnh báo tạo bởi server này để dùng proxy không cho phép. no_alerts : Tắt tất cả các cảnh báo tạo ra bởi http_inspect. oversize_dir_length : Nếu chiều dài thư mục dài hơn kích thước cho phép, Một cảnh báo sẽ được tạo ra. Nhiều ứng dụng server tạo ra một lượng rất lớn URLs có thể là nguyên nhân của false positives. inspect_uri_only : Nếu ta cần tới hiệu quả có thể dùng http_inspect chỉ để theo dõi phần URI trong HTTP request. Đây là một cài đặt cấu hình http-inspect_server mặc định: preprocessor http_inspect_server: server default profile all ports {80 8080} Đây là cài đặt cấu hình cho một server http_inspect_server cho một server IIS: preprocessor http_inspect_server: server 10.10.10.100 profile iis ports {80 8080} Đây là cài đặt cấu hình cho một server http_inspect_server cho một server Apache: preprocessor http_inspect_server: server 10.10.10.200 profile apache ports {80 8080} 3.3.5.3. rpc_decode Phiên giao tiếp của RPC có thể trải rộng trên nhiều gói tin và giải mã trên nhiều cách. Bộ tiền xử lý rpc_decode chuẩn hoá giao tiếp này. Vì vậy nó được định dạng trong cách mà Snort có thể so sánh được trong danh sách các dấu hiệu. Một danh sách các cổng mà RPC server chạy trên dòng cấu hình được cung cấp. Dưới đây là 4 tùy được thêm vào cho rpc_decode: alert_fragments : Tạo ra các cảnh báo cho những phiên giao tiếp RPC bị phân mảnh. Nó giống như chỉ tạo ra các false positives. no_alert_multiple_requests : Xác định rằng không có cảnh nào được tạo ra khi có nhiều hơn một RPC request chứa trong một gói tin. Bình thường, nó muốn tạo ra các cảnh báo khi điều này xảy ra. Thỉnh thoảng sự kết hợp của stream4_reassembly và with rpc_decode có thể là nguyên nhân tạo ra các false positives. no_alert_large_fragments: Các phân mảnh của RPC có thể lớn hơn kích thước của mảnh hiện thời. Nếu bạn thấy false positives, ta nên disable những cảnh báo này. no_alert_incomplete : Các thông báo của RPC có thể rất lớn - thỉnh thoảng lớn hơn MTU của mạng. Điều này có thể là nguyên nhân tạo ra rất nhiều các false positives của vài dịch vụ mạng RPC. Dưới đây là một đề nghị của rpc_decode: preprocessor rpc_decode:111 32771 1024 3.3.5.4. bo Back Orifice được tạo ra bởi một tổ chức cracker có tên là Cult of the Dead Cow (regulars at DefCon). Nó dùng để mã hóa phiên giao tiếp. Vì cơ chế mã hóa không phức tạp nên có thể brute-forced hiệu quả trên bộ tiền xử lý bo. Hiện nay, Với sự hiện diện khắp nơi của các phần mềm antivirus trên các môi trường, Back Orifice đang trên danh sách bị bài trừ của các phần mềm này. Bộ tiền xử lý này được tạo ra để theo dõi các traffic của Back Orifice, nhiều nhà quản trị hệ thống disable bộ tiền xử lý này bằng cách thêm kí hiệu # ở đầu dòng. Cấu hình khuyến nghị: # preprocessor bo 3.3.5.5. telnet_decode Bộ tiền xử lý này chuẩn hóa các ký tự không chuẩn và các chuỗi trong phiên giao tiếp Telnel và FTP. Nó không sinh ra các cảnh báo và không có tùy chọn. Dưới đây là cấu hình khuyến nghị: preprocessor telnet_decode 3.3.5.6. arpspoof arpspoof là một bộ tiền xử lý được thiết kế để phát hiện những hành vi tấn công trên mạng cục bộ. Nó theo dõi dấu hiệu của các công cụ tấn công bằng arp spoofing – một dạng tấn công của man-in-the-middle attack. Các công cụ điển hình cho xâm phạm hệ thống kiểu này là Ettercap và arpspoof. Mặc định arpspoof bị disable. Vì giao thức Arp chỉ hoạt động trên mạng cục bộ vì vậy nếu Snort sensor không nằm trong cùng một mạng với các host mà nó bảo vệ thì việc đặt enable arpspoof cũng không có tác dụng và nó chỉ tạo ra các cảnh báo sai. Bộ tiền xử lý này đòi hỏi người quản trị hệ thống sử dụng các địa chỉ IP tĩnh và địa chỉ MAC tương ứng với mỗi địa chỉ IP. Bộ tiền xử lý arpspoof làm cho Snort trở thành một công cụ xuất sắc trong việc phát hiện nguồn của các cuộc tấn công Arp spoofing. Dưới đây là một ví dụ cấu hình arpspoof: # preprocessor arpspoof # preprocessor arpspoof_detect_host: 192.168.40.1 f0:0f:00:f0:0f:00 3.3.5.7. Perfmonitor Một trong những khả năng do thám của phiên bản Snort mới nhất là khả năng theo dõi chính những trạng thái của chúng. perfmonitor đo lường hiệu quả thực và lý thuyết của Snort. Khi bộ tiền xử lý này hoạt động cũng nên enable chế độ xuất ra màn hình hoặc file. Dưới đây là những tùy chọn mặc định: Packets received Packets dropped Percentage of packets dropped Packets Received Kpackets per second Average bytes per packets Mbits per second (wire) Mbits per second (rebuilt) (average Mbits Snort injects after rebuilding packets) Mbits per second (total) Pattern-matching percent (average percent of data received that Snort processes in pattern matching) CPU usage (user time, system time, idle time) Alerts per second SYN packets per second SYN/ACK packet per second New sessions per second Deleted sessions per second Total sessions Max sessions during time interval Stream flushes per second Stream faults per second Stream timeouts Frag completes per second Frag inserts per second Frag deletes per second Frag flushes per second Frag timeouts Frag faults Khi từ khoá “flow” được enable, nó in ra trạng thái của loại phiên giao tiếp và giao thức được nhìn thấy bởi Snort. Từ khoá “event” bật báo cáo sự kiện và in ra trạng thái về số lượng các dấu hiệu được so sánh bởi những mẫu so sánh và số những so sánh thành công với cờ của các dấu hiệu. Chúng được gọi là những sự kiện đủ và không đủ. Nó sẽ hiện ra nếu có vấn đề với tập luật của người dùng. Từ khoá “max” bật lên hiệu quả lớn nhất của Snort trên lý thuyết, làm cho bộ xử lý có tốc độ và hiệu quả lớn nhất. Nó không chỉ hợp lệ cho cơ chế của bộ xử lý duy nhất. Từ khoá “pkcnt” điều chỉnh số gói tin để xử lý trước khi kiểm tra thời gian hiện thời. Boost này có tác dụng cho tới khi kiểm tra thời gian hiện thời. Mặc định, mức là 10000. Dưới đây là ví dụ cách để cấu hình và enable bộ tiền xử lý perfmonitor: preprocessor perfmonitor: time 30 events flow file stats.profile max \ console pktcnt 10000 preprocessor perfmonitor: time 300 file /var/tmp/snortstat pktcnt 10000 3.4. Cấu hình Output Một trong những điểm mạnh của Snort là nó có các tùy chọn cho phép Snort kết xuất thông tin theo nhiều định dạng. Từ đó, có thể sử dụng các công cụ khác để phân tích dữ liệu thu được. Bởi vì, không phải bất kỳ cuộc tấn công nào Snort cũng có thể phát hiện được. Khi một kiểu tấn công mới xuất hiện thì nó chưa được cập nhật trong tập luật của Snort. Do đó, khả năng kết xuất thông tin ra các định dạng khác nhau của Snort là rất quan trọng. Nhiều nhà quản trị hệ thống sư dụng các công cụ khác để phân tích và điều tra các cuộc tấn công dựa trên những thông tin mà Snort sinh ra. Để làm được điều này thì Snort phải xuất dữ liệu theo những định dạng cụ thể. Để Snort hỗ trợ kết xuất những kiểu định dạng này thì khi biên dịch ta phải đặt những tùy chọn thích hợp. Ví dụ, để Snort xuất ra cơ sở dữ liệu MySQL thì một cơ sở dữ liệu MySQL cần được cài đặt trên hệ thống đã cài đặt Snort đó và phải cấu hình lựa chọn –with-mysql khi thực hiện lệnh ./configure. Một số tùy chọn chỉ làm việc trên một nền tảng nhất định. Ví dụ, chỉ một hệ thống Window mới có thể truy nhập trực tiếp vào Microsoft SQL Server bằng mssql plug-in (với hệ thống Unix phải sử dụng ODBC với odbc plug-in). Nhiều plug-in có thể sử dụng đồng thời, cho phép sử dụng nhiều công cụ để quản trị hệ thống. 3.4.1. alert_syslog: Các hệ thống Unix sử dụng syslog để tập hợp các thông báo sinh ra bởi một hay nhiều hệ thống về một nơi. Có nhiều cách khác nhau mà thông tin do Snort sinh ra được lưu trữ trong syslog. Bằng Snort ta có thể định rõ cách thức xuất thông tin và thứ tự ưu tiên. Định dạng của việc cấu hình này là: Output alert_syslog: Tùy chọn facility là một trong những ưu tiên chuẩn của syslog và mặc định là LOG_AUTH: LOG_AUTH LOG_AUTHPRIV LOG_DAEMON LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_USER Tùy chọn priority cũng trình bày một trong những ưu tiên chuẩn của syslog và mặc định là LOG_ALERT: LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG Dưới đây là một ví dụ cấu hình xuất của syslog: output alert_syslog: LOG_AUTH LOG_ALERT Với hệ thống Windows ta phải xác định cụ thể host trong cấu hình ( với một hệ thống Unix thì có thể cấu hình ở mức hệ điều hành để hệ thống gửi log đến một syslog server cụ thể). Định dạng với hệ thống Window: Host=: Ví dụ: output alert_syslog: host=192.168.0.100:1699 LOG_AUTH LOG_ALERT 3.4.2. log_tcpdump Sử dụng log_tcpdump để log các gói tin theo định dạng file của tcpdump. Hiện nay, có rất nhiều ứng dụng đọc được định dạng này. Tùy chọn duy nhất cho log_tcpdump là filename. Ví dụ cấu hình log_tcpdump plug-in: output log_tcpdump /var/log/snort/tcpdump.out 3.4.3. Database (Cơ sở dữ liệu) Database plug-in cho phép ghi các thông tin của Snort vào cơ sở dữ liệu trên hệ thống mà Snort đang chạy hay trên một host nào đó trên mạng. Cấu hình database plug-in để Snort xuất thông tin theo định dạng sau: output database: , , Chọn log hoặc alert. Với log thì Snort sẽ gửi các thông tin log vào cơ sở dữ liệu, với alert thì Snort sẽ gửi các cảnh báo. Nếu muốn sử dụng cả log và alert thì ta phải có 2 dòng cấu hình output database Xác định loại database. Snort hỗ trợ các loại cơ sở dữ liệu sau: mysql, postgresql, oracle, odbc, và mssql (chỉ dùng với Snort chạy trên nền Window). Khi cấu hình cơ sở dữ liệu để xuất, sử dụng các tham số sau: host Địa chỉ IP của the database server. Nếu để trống thì sẽ là localhost port Port lắng nghe của database server. Chỉ cần xác định nếu database server không sử dụng port chuẩn. dbname= Loại cơ sở dữ liệu: mysql, postgresql, oracle, odbc, hoặc mssql user username để login vào database password password sử dụng để login vào database sensor_name Tên sensor cho cấu hình (Có thể có hoặc không). Có thể sử dụng tham số -l ở dòng lệnh để xác định địa chỉ IP của sensor thay cho tên của sensor đó. encoding Mã hóa dữ liệu của quá trình giao tiếp với cơ sở dữ liệu. Có 3 dạng hex, base64 hoặc ascii. Các tùy chọn để cấu hình Snort xuất dữ liệu ra các loại cơ sở dữ liệu khác nhau khi cài đặt Snort: Với cơ sở dữ liệu MySQL ./configure --with-mysql Với cơ sở dữ liệu PostgreSQL ./configure --with-postresql Với ODBC ./configure --with-odbc Với cơ sở dữ liệu Oracle ./configure --with-oracle 3.5. Cấu hình các file include Thành phần cuối cùng của file snort.conf chuẩn là include. Lệnh include chỉ cho Snort đường dẫn đến những file cấu hình và những file chứa các tập luật. Đường dẫn mặc định nên được xác định trước trong phần cấu hình. Sử dụng biến $RULE_PATH hoặc đường dẫn đầy đủ để xác định đường dẫn đến các file cần include. Dưới đây là 1 ví dụ của file include thông báo cho Snort rằng tập luật nào được dùng. Dòng dưới chứa file bad-traffic.rules. # include $RULE_PATH/bad-traffic.rules include $RULE_PATH/exploit.rules include $RULE_PATH/scan.rules 4. Xây dựng và quản lý các tập luật 4.1. Download các tập luật Trong các gói cài đặt Snort đã bao gồm các tập luật nhưng ta vẫn phải cập nhật các tập luật thường xuyên. Có thể download những tập luật mới nhất từ Việc lưu các tập luật tại vị trí nào là do người quản trị hệ thống đặt ra. Một số người thích đặt trong thư mục /etc/snort, một số người khác thích đặt trong thư mục /usr/local/etc/snort. Ngoài ra ta cũng có thể copy vào file snort.conf. Một ví dụ quản lý các tập luật: tạo thư mục snort_rules trong thư mục /usr/local/share/. Trong thư mục snort_rules tạo các thư mục tương chẳng hạn /usr/local/share/snort_rules/010406. Download các tập luật vào các thư mục tương ứng rồi giải nén: tar -zxvf snortrules-snapshot-2_1.tar.gz Bất kể ta quyết định đặt các tập luật ở thư mục nào, cần chắc chắn rằng biến RULE_PATH trong file snort.conf được trỏ tới vị trí của thư mục chứa *.rules . Dưới đây là danh sách các file rules(mỗi luật bao gồm 1 file snort.conf và nhiều file *.config được dùng bởi Snort ): attack-responses.rules local.rules shellcode.rules backdoor.rules misc.rules smtp.rules bad-traffic.rules multimedia.rules snmp.rules chat.rules mysql.rules sql.rules ddos.rules netbios.rules telnet.rules deleted.rules nntp.rules tftp.rules dns.rules oracle.rules virus.rules dos.rules other-ids.rules web-attacks.rules experimental.rules p2p.rules web-cgi.rules exploit.rules policy.rules web-client.rules finger.rules pop2.rules web-coldfusion.rules ftp.rules pop3.rules web-frontpage.rules icmp-info.rules porn.rules web-iis.rules icmp.rules rpc.rules web-misc.rules imap.rules rservices.rules web-php.rules info.rules scan.rules x11.rules Mỗi file luật bao gồm 1 danh sách các luật được tổ chức dựa theo loại tấn công hoặc loại traffic cần theo dõi. Để disable một tập luật ta thêm dấu # trước dòng INCLUDE của file snort.conf. Để disable từng luật riêng rẽ ta thêm dấu # trước luật đó. 4.2. Mô tả các tập luật Dưới đây là mô tả tổng quan các tập luật: attack-responses.rules Phát hiện host trên mạng cục bộ đang gởi các phản hồi tới một cuộc tấn công thành công. backdoor.rules Phát hiện các phiên kết nối sinh ra bởi các backdoor. bad-traffic.rules Theo dõi header của các gói tin không hợp lệ như phiên giao tiếp TCP và UDP với port = 0, hoặc gói tin SYN được gửi tới địa chỉ multicast. chat.rules Mặc định là disable. Nó theo dõi những người dùng instant messenger và những phương thức chat khác. Nếu hoạt động này liên quan tới chính sách bảo mật của tổ chức thì nên để enable. ddos.rules Cảnh báo tạo ra từ những phương thức tấn công từ chối dịch vụ từ xa nổi tiếng như Trin00 và shaft. deleted.rules Mặc định nó không tham chiếu tới file snort.conf, nó chỉ là một tập hợp những luật cũ của Snort. dns.rules Sinh ra cảnh báo khi phát hiện tấn công vào DNS server (Bao gồm cả phát hiện zone transfer) dos.rules Phát hiện các traffic tạo ra bởi tấn công từ chối dịch vụ. Nó sẽ phát hiện 1 vài kiểu tấn công như winnuke và jolt, và có thể phát hiện các tấn công kiểu IGMP và teardrop. experimental.rules Đây là nơi mặc định bao gồm những kiểu luật mới, vì vậy có thể kiểm các luật mới tại đây. exploit.rules Bao gồm những dấu hiệu của nhiều lỗi có thể khai thác đã được công bố. Để hệ thống giảm thiểu tối đa những lỗi có thể bị tấn công thì hệ thống cần được cập nhật những bản vá lỗi thường xuyên. finger.rules Sinh ra các cảnh báo khi phát hiện những hành động tấn công vào dịch vụ finger-trên các hệ thống Unix dịch vụ này được chạy mặc định. Nếu dịch vụ finger trên hệ thống đã disable thì có thể disable tập luật này. ftp.rules Sinh ra cảnh báo khi phát hiện những tấn công vào dịch vụ FTP. icmp-info.rules Tập luật này được mặc định disable. Nó có thể hữu ích trong việc phát hiện những vấn đề rắc rối ICMP. icmp.rules Cảnh báo được tạo ra khi Snort thấy những dấu hiệu ping đặc trưng của các công cụ tấn công. Những cảnh báo này khá hiệu quả. Luật “destination urreachable” có thể gây ra nhiều nhiễu, tuy nhiên, bạn vẫn có thể cho tập luật này enabled nhưng tắt những luật “unreachable”. imap.rules Sinh ra các cảnh báo khi phát hiện ra những tấn công nhằm vào dịch vụ email IMAP. info.rules Mặc định là disable. Nó tạo ra những cảnh báo trên nhiều giao tiếp bình thường được tìm thấy trên một mạng an toàn. local.rules Chứa các luật do người quản trị tự tạo. misc.rules Chứa các luật không thuộc cùng loại với các tập luật khác. multimedia.rules Mặc định là disable, nếu trong chế độ bảo mật của tổ chức cần thiết bảo mật các ứng dụng chạy multimedia qua mạng thì nên enable tập luật này. mysql.rules Phát hiện các hành động tấn công vào cơ sở dữ liệu MySQLDetects. netbios.rules Phát hiện nhiều loại sâu tấn công vào Window là nguyên nhân gây ra nhiều phiền phức cho mạng và cho những người quản trị hệ thống. Một vài cảnh báo có thể gây ra những lỗi nhầm lẫn do người quản trị chia sẻ quyền truy cập vào những truy cập trên SMB và NetBIOS. nntp.rules Chứa các dấu hiệu để nhận ra các tấn công nhằm vào các giao thức network time của server. oracle.rules Phát hiện những tấn công vào cơ sở dữ liệu Oracle. other-ids.rules Theo dõi những traffic tạo bởi những IDS khác. p2p.rules Mặc định là disable. Nó phát hiện những hành động có thể gây hại do các phần mềm peer to peer gây ra. policy.rules Mặc định là disable. Nó bao gồm các luật thiết lập cho việc theo dõi các hành động có thể vi phạm chính sách bảo mật của tổ chức. Ví dụ sử dụng tài khoản anoymous FTP. Cần xem lại các luật trong file và thêm hoặc bỏ bớt những gì không phù hợp với chính sách bảo mật của tổ chức. pop2.rules Tạo ra những luật khi phát hiện dịch vụ email POP2 bị tấn công. pop3.rules Sinh ra cảnh báo khi phát hiện dịch vụ email POP3 bị tấn công. rpc.rules Tạo ra các cảnh báo khi có các tấn công vào remote procedure call (RPC) của các hệ điều hành. Nếu sensor đang theo dõi các giao tiếp của internet và các hành vi của RPC không được phép thực thi trong hoặc ngoài môi trường, hãy disable tập luật này. Nếu sensor đang theo dõi các giao tiếp của mạng bên trong thì rất cần thiết enable nó, phụ thuộc vào loại hệ thống đang chạy trên mạng. rservices.rules Tạo ra các cảnh báo khi rservices(rlogin, rsh và rexec) bị phát hiện trên mạng. Đây là những dòng lệnh có khả năng điều khiển hệ thống. Nếu bạn dùng chúng trên môi trường thì có thể enable tập luật này. scan.rules Phát hiện nhiều kiểu quét mạng và dịch vụ. Nó cũng phát hiện được nhiều dấu hiệu đặc trưng của những công cụ quét mạng. shellcode.rules Mặc định là disable. Tập luật này dùng để phát hiện các shellcode trong các packet payload đang tìm cách làm ảnh hưởng tới nhiều hệ thống. Những shellcode này có thể là payload của những tấn công thành công mà không bị phát hiện. Các luật này được thiết kế để kiểm tra payload của tất cả các giao tiếp, nó thể nhận ra các dấu hiệu một cách hiệu quả nếu được enable smtp.rules Sinh ra cảnh báo khi phát hiện tấn công vào giao thức SMTP. snmp.rules Phát hiện tấn công dựa trên các giao tiếp SNMP. sql.rules Phát hiện những tấn công vào cơ sở dữ liệu Microsoft SQL Server. telnet.rules Cảnh báo khi phát hiện những hành động truyền dữ liệu nguy hiểm trong phiên giao tiếp telnet. tftp.rules Cảnh báo khi phát hiện tấn công vào địch vụ TFTP. virus.rules Mặc định là disable. Là tập luật phát hiện virus web-attacks.rules Mặc định là disable. Nó tạo ra những thông báo khi biết được những tấn công nhằm vào web servers. Có thể enable nó, nó thường không tạo ra nhiều cảnh báo sai. web-cgi.rules Tạo ra những cảnh báo khi phát hiện ra những tấn công nhằm vào dịch vụ CGI. web-client.rules Tạo ra những cảnh báo khi phát hiện ra những giao tiếp có khả năng gây ảnh hưởng nguy hiểm tới web client. Hầu hết các cảnh báo dựa trên giao tiếp của Microsoft Outlook Web Access và thường tạo ra những cảnh báo sai. Nên disable tập luật này. web-coldfusion.rules Sinh ra cảnh báo khi phát hiện những tấn công vào ứng dụng web Coldfusion web-frontpage.rules Tạo ra các cảnh báo khi phát hiện ra những tấn công nhằm vào các Frontpage web . web-iis.rules Phát hiện những tấn công vào máy chủ web chạy Microsoft Internet Information Server (IIS) web-misc.rules Các luật phát hiện tấn công web web-php.rules Phát hiện các tấn công vào Web server chạy ứng dụng PHP x11.rules Phát hiện các tấn công vào các phiên giao tiếp X-Window 4.3. Tự xây dựng các tập luật Một luật của Snort có hai thành phần chính là Header và các tùy chọn 4.3.1. Các Header của luật Các header là phần đầu tiên của một luật, header định nghĩa trong gói tin chứa những gì. Header bao gồm (hành động, giao thức, địa chỉ IP nguồn, port nguồn, hướng di chuyển của gói tin, địa chỉ IP đích, port đích) Có thể xem nó như phần mô tả của các kết nối mạng, bốn thành phần xác định duy nhất một kết nối là: source IP, source port, destination IP, destination port. Header cũng bao gồm chỉ hướng đi của gói tin đó, được xác định bằng -> hoặc là . Dưới đây là một phần của 1 luật chuẩn dùng để đưa ra cảnh báo khi có 1 hành động quét SYN FIN đang diễn ra. alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SCAN SYN FIN";flags:SF; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:1;) Phần nằm trong dấu ngoặc đơn “(“ “)” là các tùy chọn của các luật. Đây là nơi xác định các thông báo mặc định, các cờ và các kiểu tấn công. Các tùy chọn của luật sẽ được trình bày ở phần sau. Phần đầu tiên trong header là trường hành động (action field), trong ví dụ trên cảnh báo là định nghĩa cho hành động khi luật được so sánh trùng khớp. Các giá trị có thể của hành động bao gồm: alert Đưa ra cảnh báo và ghi log khi so sánh trùng khớp. log Chỉ ghi log các gói tin khi so sánh trùng khớp. pass Bỏ qua các gói tin khi so sánh trùng khớp. activate Cảnh báo và sau đó kích hoạt một luật hoặc một tập luật. dynamic Bỏ qua cho đến khi được kích hoạt bởi luật activate. Trường tiếp theo là phần Protocol. Các giao thức này có thể là IP, TCP, UDP hoặc ICMP (những giao thức mới được cập nhật trong các phiên bản mới bao gồm ARP, IGPR, GRE, OSPF, RIP…). Source IP là phần tiếp theo. Source IP có thể là một biến hoặc một danh sách địa chỉ IP. Là địa chỉ IP của bên gửi các gói tin. Nhiều địa chỉ IP có thể dùng trong trường hợp này bằng cách dùng danh sách địa chỉ IP, danh sách địa chỉ IP và netmask của chúng nằm trong 1 dấu ngoặc vuông và phân cách bằng 1 dấu phẩy. Ví du: alert tcp [64.147.128.0/19,198.60.72.0/23] any -> $HOME_NET any Port: Sau địa chỉ IP là port. Cách viết port được xác định thông qua các ví dụ sau: - any : port bất kỳ - 23 xác định cổng telnet - 21:23 các cổng từ 21 đến 23 - :23 các cổng nhỏ hơn hoặc bằng 23 - 23: Các cổng lớn hơn hoặc bằng 23 Khi định nghĩa cho giao thức ICMP thì không cần giá trị port sau giao thức ICMP Ví dụ: Xác định những gói tin với giao thức tcp, địa chỉ IP nguồn 64.147.128.0/19,198.60.72.0/23, port nguồn 21 đến 23 (FTP đến telnet) tới mạng đích HOME_NET với cổng đích bất kỳ: alert tcp [64.147.128.0/19,198.60.72.0/23] 21:23 -> $HOME_NET any Chiều giao tiếp (Traffic Direction): Sau phần port là chiều giao tiếp, chiều di chuyển của các gói tin bao gồm -> hoặc . Trường cuối cùng là địa chỉ IP đích và port đích. Các viết giống như viết địa chỉ IP nguồn và port nguồn. 4.3.2. Các tùy chọn của luật Phần còn lại của luật là các tùy chọn xác định những phần liên quan trong mạng của gói tin. Nó thường là 1 thông báo chỉ tới các gói tin để Snort tìm kiếm các gía trị và xác định những gói tin được xem là có khả năng gây hại. Những lựa chọn này chỉ có hiệu lực nếu các header có giá trị tương ứng với nội dung của gói tin. Nếu có 1 sự tương ứng, Snort thường tạo ra cảnh báo tới file cảnh báo trong thư mục logging của Snort. Dữ liệu của gói tin cũng được ghi lại. Điều này chắc chắn rằng khi cảnh được xác định, người quản trị hệ thống có thể xem lại. Ví dụ: alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SCAN SYN FIN";flags:SF; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:1;) Phần tùy chọn trong luật trên là: (msg:"SCAN SYN FIN";flags:SF; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:1;). Phần của các tùy chọn phải nằm trong dấu ngoặc đơn “(” “)”. Các tùy chọn cách nhau bởi dấu chấm phẩy “;”. Các tùy chọn có thể bỏ trống, vì vậy luật “alert ip any any -> any any” là một luật hợp lệ. Định dạng của phần tùy chọn nằm trong dấu ngoặc đơn như sau: Thông báo (msg) loại tấn công, bao gồm một từ khóa và một giá trị khóa là “msg”. Phần giá trị của khóa được viết trong cặp dấu nháy kép “” và sau dấu hai chấm “:”. Ví dụ msg:”SCAN SYN FIN”. Chuỗi giá trị của thông báo do người quản trị hệ thống quyết định. Vì vậy, các thông báo nên có ý nghĩa, dễ hiểu, mô tả chính xác hành động tấn công. Nếu không nó có thể làm rối tập luật khi số lượng cảnh báo lớn lên theo thời gian. Cờ: Sau phần thông báo là các cờ (flags). Các cờ có thể có hoặc không có trong tập luật và phải phụ thuộc vào loại giao thức (protocol). Chẳng hạn các cờ SYN, ACK, FIN thì phải thuộc giao thức tcp và không thể nằm trong một luật cho giao thức IP. Trong ví dụ trên, luật tìm kiếm trong header TCP các cờ SYN và FIN. Một vài trường hợp khác có thể dùng những phần nối tiếp sau các cờ. Ví dụ, dấu + xác định cờ đứng sau đứng sau cờ được xác định (nghĩa là độ ưu tiên của các cờ xác định bằng dấu + không bằng cờ được xác định rõ ràng). Kí tự * tương ứng với tất cả các cờ, ngược lại là dấu ! để phủ nhận bất kể loại cờ nào. Ví dụ, trong luật dưới đây, cờ ACK được chọn, nhưng luật này cũng phù hợp với những cờ khác theo sau nó: alert tcp $HOME_NET 146 -> $EXTERNAL_NET 1024: (msg:"BACKDOOR Infector.1.x"; content: "WHATISIT"; flags: A+; reference:arachnids,315; sid:117; classtype:misc-activity; rev:3;) Các tùy chọn thường dùng: msg: ; Tùy chọn thông báo mô tả hành động tấn công. Đây là nơi cho phép nhà quản trị hệ thống mô tả chi tiết liên quan đến cảnh báo. Ví dụ, thông báo “BACKDOOR attempt” mô tả loại tấn công. alert tcp $EXTERNAL_NET any -> $TELNET_SERVERS 23 ( sid: 210; rev: 3; msg: "BACKDOOR attempt"; flow: to_server,established; content: "backdoor"; nocase; classtype: attempted-admin;) flags: ; Tùy chọn này xác định các cờ sẽ so sánh với các gói tin: Dưới đây là các cờ của giao thức TCP: A = ACK F = FIN P = PSH R = RST S = SYN U = URG 2 = reserved bit 1 = most significant bit 0 = no flags Lựa chọn này dùng các kí tự như +, *, và ! . Ví dụ, F+ nghĩa là cờ FIN được dùng nhưng những cờ khác có thể được dùng sau nó. SA* nghĩa là có thể SYN hoặc ACK, hoặc cả 2 và những cờ khác cũng có thể được chọn. Dấu "!" phủ nhận việc sử dụng các cờ. Ví dụ: !RP; không dùng cả cờ RST và PSH, trong việc tìm kiếm trong gói tin sẽ bỏ qua RST và PSH. Nhiều lựa chọn các cờ có thể được sử dùng cho chung 1 mục đích cụ thể. content: ; content: ; Phần tùy chọn này dùng để xác định một chuỗi text hoặc một chuỗi HEX với data payload. Đây là phương thức để phát hiện tấn công tràn bộ đệm hoặc so sánh những chuỗi nhị phân. Tùy chọn này có phân biệt chữ hoa và chữ thường (case-sensitive), để không phân biệt chữ hoa và chữ thường ta dùng nocase. Dùng ký tự pipe (|) trong trường hợp dữ liệu là HEX. Ta có thể sử dụng nhiều chuỗi trong cùng một luật. Ví dụ 1: alert tcp $HTTP_SERVERS $HTTP_PORTS -> $EXTERNAL_NET any ( sid: 495; rev: 6; msg: "ATTACK-RESPONSES command error"; flow: from_server,established; content: "Bad command or filename"; nocase; classtype: bad-unknown;) Luật trên sẽ tìm trong phần dữ liệu của các gói tin chuỗi "Bad command or filename" Ví dụ 2: alert tcp $HOME_NET 22 -> $EXTERNAL_NET any ( sid: 1810; rev: 3; msg: "ATTACK-RESPONSES successful gobbles ssh exploit (GOBBLE)"; flow: from_server,established; content: "|2a|GOBBLE|2a|"; reference: bugtraq,5093;classtype: successful-admin;) Luật trên sẽ tìm chuỗi text nhị phân chứa giá trị đầu tiên là 2A và theo sau là những kí tự "GOBBLE", và cuối cùng kết thúc bởi 1 giá trị hex là 2A khác. Bốn giá trị (offset, depth, nocase, and regex) được sử dụng để hỗ trợ tùy chọn content: offset: ; offset định nghĩa vị trí bắt đầu tìm kiếm trong data payload. Offset luôn luôn đi theo sau tùy chọn content. Giá trị mặc định của offset là byte đầu tiên trong data payload của các gói tin. Ví dụ: alert tcp $HOME_NET 902 -> $EXTERNAL_NET any ( sid: 1760; rev: 2; msg: "OTHER- IDS ISS RealSecure 6 event collector connection attempt"; flow: from_server,established; content: "6ISS ECNRA Built-In Provider, Strong Encryption";offset: 30; depth: 70; nocase; classtype: successful-recon-limited;) Luật trên sẽ tìm chuỗi "6ISS ECRNA Built-In Provider, Strong Encryption" từ vị trí byte thứ 30 trong data payload. depth: ; Giới hạn chiều dài tìm kiếm từ offset, và sẽ chỉ tìm kiếm trong từ offset đến depth trong toàn bộ payload. Nếu không có lựa chọn này thì mặc định sẽ tìm trong cả chuỗi, từ đầu đến cuối. Ví dụ dưới sẽ giới hạn chiều dài các bytes được kiểm tra từ offset được chọn. Ở đây chiều dài được chọn là 70bytes Ví dụ: alert tcp $HOME_NET 2998 -> $EXTERNAL_NET any ( sid: 1761; rev: 2; msg: "OTHER- IDS ISS RealSecure 6 daemon connection attempt"; flow: from_server,established; content: "6ISS ECNRA Built-In Provider, Strong Encryption"; offset: 30; depth: 70; nocase; classtype: successful-recon-limited;) Luật trên tìm chuỗi "6ISS ECNRA Built-In Provider, Strong Encryption" từ vị trí offset 30 đến vị trí depth 70. nocase; Khi sử dụng tùy chọn này thì nội dung tìm kiếm trong content sẽ không phân biệt chữ hoa và chữ thường. Ví dụ: alert tcp $HOME_NET any $EXTERNAL_NET 6699 ( sid: 561; rev: 6; msg: "P2P Napster Client Data"; flow: established; content: ".mp3"; nocase; classtype: policy-violation;) Luật trên tìm file kết thúc với các hậu tố “.mp3” ,”.Mp3”,”.MP3”. Không phân biệt chữ hoa và chữ thường. regex Cho phép tìm kiếm nội dung bằng các ký tự thay thế. Ký tự “*” thay thế cho một chuỗi bất kỳ, ký tự “?” thay thế cho một ký tự bất kỳ. Ví dụ, content:”string*”;regex; tìm chuỗi bắt đầu bằng string, content:”string?”;regex; tìm chuỗi 7 ký tự trong đó 6 ký tự đầu là string, ký tự thứ 7 là một ký tự bất kỳ. regex lấy ý tưởng từ Perl Compatible Regular Expressions. logto: ; Option này sẽ ghi log những dữ liệu cụ thể với 1 tên duy nhất trong /var/log/snort cho phép dễ dàng tổ chức hoặc định dạng các thư mục với tùy chọn -l . Ví dụ, nếu luật có logto: “ICMP”, mọi gói tin tương ứng với luật này sẽ được lưu trong thư mục /var/log/snort/ICMP. Tùy chọn này thường không được tìm thấy trên tập luật có thể tải về SnortCenter. Nó được định dạng bởi người dùng. Sau đây là một luật cơ bản ghi log mọi kết nối telnet tới 1 dãy các địa chỉ IP 192.168.10.0/24 và lưu trong /var/log/snort/telnets. log tcp any any -> 192.168.10.0/24 23 (logto:"telnets";) ttl: ; Tùy chọn kiểm tra time to live của gói tin tới. Trường time to live với giá trị 1 nghĩa là ICMP traceroute. Ví dụ: alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 385; rev: 3; msg: "ICMP traceroute"; ttl: 1; itype: 8; reference: arachnids,118; classtype: attempted-recon;) id: ; Giá trị identification trong IP header. Trong IP header identification là một giá trị 16 bit. Khi một gói tin bị phân mảnh thì các gói tin bị phân mảnh từ 1 gói tin sẽ có cùng giá trị identification. Ví dụ: alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"DOS Land attack"; id:3868; seq: 3868; flags:S; reference:cve,CVE-1999-0016; classtype:attempted-dos; sid: 269; rev:3;)dsize: [] ; Tùy chọn dsize xác định kích thước của payload. Các gói tin trên một phiên giao tiếp thông thường sẽ có những giới hạn về kích thước. Ví dụ một gói tin ICMP thường có kích thước không lớn. Ví dụ: alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 499; rev: 3; msg: "ICMP Large ICMP Packet"; dsize: >800; reference: arachnids,246; classtype: bad-unknown;) Luật trên sẽ tìm các gói tin có kích thước lớn hơn 800 byte. ack: ; Tùy chọn này kiểm tra số acknowledgment number. Tùy chọn ack có thể được sử dụng để kiểm tra fingerprint của một số công cụ quét mạng (chẳng hạn như Nmap ping). Ví dụ: alert tcp $EXTERNAL_NET any -> $HOME_NET any ( sid: 628; rev: 2; msg: "SCAN nmap TCP"; flags: A,12; ack: 0; reference: arachnids,28; classtype: attempted-recon;) Luật trên sẽ tìm các gói tin có giá trị acknowledgment number bằng 0. seq: ; Tùy chọn này kiểm tra số Sequence number của TCP. Một số kiểu tấn công từ chối dịch vụ sử dụng một số sequence number xác định. Dưới đây là một ví dụ backdoor Trojan quét sử dụng TCP sequence number: alert tcp $EXTERNAL_NET 80 -> $HOME_NET 1054 ( sid: 106; rev: 4; msg: "BACKDOOR ACKcmdC trojan scan"; flags: A,12; seq: 101058054; ack: 101058054; reference: arachnids,445; classtype: misc-activity;) itype: ; Tùy chọn này dùng để xác định một loại ICMP cụ thể. Trong gói tin ICMP thì loại ICMP có chiều dài 1byte và là byte đầu tiên của gói ICMP. Ví dụ dưới đây tìm ICMP có loại là 0 (echo reply) alert icmp $EXTERNAL_NET any $HOME_NET any ( sid: 1855; rev: 2; msg: "DDOS Stacheldraht agent->handler (skillz)"; content: "skillz"; itype: 0; icmp_id: 6666; reference: url,staff.washington.edu/dittrich/misc/stacheldraht.analysis; classtype: attempted-dos;) icode: ; Tùy chọn này thường đi kèm với tùy chọn itype. Tùy chọn này xác định byte thứ 2 trong gói tin ICMP, chính là trường code trong gói tin ICMP. Ví dụ dưới đây tìm những gói ICMP có type = 3, code = 1 (Host unreachable) alert icmp any any -> any any ( sid: 485; rev: 2; msg: "ICMP Host Unreachable (Communication Administratively Prohibited)"; itype: 3; icode: 1; classtype: misc-activity;) icmp_id: ; Phần chính tương tự bên cạnh lựa chọn icode áp dụng cho các lựa chọn ID của ICMP. Nó dùng để kết hợp với các requests và response và trả lời các qúa trình Ping. session: [printable|all]; Dùng lựa chọn sau để chụp toàn bộ dữ liệu của các phiên giao tiếp TCP. Nó hữu ích trong việc theo dõi những người dùng xác định làm gì trên hệ thống hoặc trên mạng. Sử dụng một trong hai giá trị printable hoặc all. Printable sẽ hiển thị tất cả các ký tự bao gồm cả những ký tự ẩn và có thể sử dụng cho việc nghe lén password. Với giá trị all thì những ký tự nonoprintable sẽ được ghi thành dạng hex. ipopts: ; IP options không được thường xuyên dùng trong những phiên giao tiếp bình thường của TCP/UDP và ICMP. Tùy chọn IP được sử dụng để ghi các hop (bước đi) mà gói tin đi qua. Bảng 2.2 : Các giá trị của tùy chọn ipopts rr Record route eol End of list nop No op ts Timestamp sec IP security option lsrr Loose source routing ssrr Strict source routing satid Stream identifier Ví dụ: alert icmp $EXTERNAL_NET any -> $HOME_NET any ( sid: 475; rev: 1; msg: "ICMP traceroute ipopts"; ipopts: rr; itype: 0; reference: arachnids,238; classtype: attempted-recon;) fragbits: ; Tùy chọn fragbits được sử dụng chọ sự phân mảnh các gói tin và các bit không sử dụng trong IP header. Trong IP header có 3 bit dùng cho việc này: Bảng 2.3 : Các giá trị của tùy chọn phân mảnh gói tin R Reserved bit D Don't fragment bit M More fragments bit Ví dụ dưới đây tìm những gói tin ip có bit reserved được thiết lập: alert ip $EXTERNAL_NET any -> $HOME_NET any ( sid: 523; rev: 4; msg: "BAD-TRAFFIC ip reserved bit set"; fragbits: R; classtype: misc-activity;) content_list: ; Tùy chọn này được dùng với tùy chọn react. Nó cung cấp khả năng tìm trong 1 tập hợp các chuỗi trong 1 payload của gói tin. Nó hữu ích trong việc tạo ra bộ lọc hoặc tạo 1 danh sách các hành vi không hợp lệ. Một danh sách này có thể bao gồm nhiều từ như: warez, sploits, hackz, pr0n… Trong file này mỗi từ được liệt kê trên 1 dòng. react: ; Để sử dụng tùy chọn này, khi biên dịch Snort phải có tùy chọn –flexresp kèm theo lệnh ./configure. Tùy chọn này có thể cần thêm một số thư viện như libnet. Tùy chọn này được sử dụng với tùy chọn content-list. Tùy chọn này cho phép Snort đóng một kết nối và gửi cảnh báo tới người dùng. Ví dụ: alert tcp any any 192.168.10.0/24 80 ( content-list: " adult"; msg: "Warning, adult content"; react: block, msg;) uricontent: [!] "content string"; Tùy chọn này được sử dụng để tìm một chuỗi (tương tự như tùy chọn content). Tuy nhiên, tùy chọn này chỉ tìm trong nội dung của URI gửi đến server. Luật dưới đây cảnh báo có một lệnh gửi tới server. alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS ( sid: 1328; rev: 4; msg: "WEB-ATTACKS ps command attempt"; flow: to_server,established; uricontent: "/bin/ps"; nocase; classtype: web-application-attack;) ip_proto: [!] ; Trong IP header có trường 8 bit protocol. Nó xác định giao thức lớp trên của IP. Tùy chọn này được sử dụng để so sánh trùng khớp với giá trị protocol trong ip header. Giá trị có thể là tên hoặc là số. Ví dụ, một số lỗi được phát hiện trên hệ điều hành của Cisco router. Các Giao thức 53, 55, 57 và 103 sẽ được sử dụng để chụp những gói tin có thể gây ra lỗi. alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 53;) alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 55;) alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 77;) alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"Cisco IPv4 DoS"; classtype:attempted-dos; ip_proto 103;) Để biết thêm thông tin về các số, tên của các giao thức xem trong file /etc/protocols trên các hệ thống Unix hoặc file c:\WINNT\system32\drivers\etc\protocol trên các hệ thống Window. Dưới đây là một liên kết tham khảo các tên giao thức và số tương ứng: sameip; Tùy chọn này dùng để tìm những địa chỉ ip nguồn và địa chỉ ip đích giống nhau. alert ip any any -> any any ( sid: 527; rev: 4; msg: "BAD-TRAFFIC same SRC/DST"; reference: cve,CVE-1999-0016; reference: url,www.cert.org/advisories/CA-1997-28.html; classtype: bad-unknown; sameip;) stateless; Một số cảnh báo sinh ra từ các phiên giao tiếp TCP dựa trên trạng thái của các gói tin. Như vậy, nó phải chờ cho tới khi quá trình bắt tay 3 bước hoàn thành. Trong trường hợp stateless nó chỉ cần kiểm tra trạng thái của từng gói tin và có thể đưa ra cảnh báo. Luật sau kiểm tra các gói tin tcp có tất cả các cờ được thiết lập và đưa ra cảnh báo ngay mà không cần hoàn tất quá trình bắt tay 3 bước: alert tcp any any -> any any ( msg: "All TCP flags set"; flags: 12UAPRSF; stateless;) sid: ; SID thường cần hữu ích để những công cụ như SnortCenter phân tích các thông báo. Nó không hiệu quả để nhận ra các dấu hiệu. Vì các cảnh báo chỉ có duy nhất một ID, rất dễ chia mục, lựa chọn này đơn giản chỉ là cung cấp một SID cho các luật bằng những chương trình như ACID và SnortCenter. Bình thường Snort cung cấp một SID cho mỗi cảnh báo. Người dùng không cần thiết phải tự chọn: alert tcp $EXTERNAL_NET any -> $SQL_SERVERS 1433 ( sid: 704; rev: 5; msg: "MS-SQL xp_sprintf possible buffer overflow"; flow: to_server,established; content: "x|00|p|00|_|00|s|00|p|00|r|00|i|00|n|00|t|00|f|00|"; nocase; reference: bugtraq,1204; classtype: attempted-user;) rev: ; Lựa chọn này chỉ ra những số sửa đổi của từng luật, khi 1 luật phát triển và những dấu hiệu chính xác được thêm vào, nó cần thêm vào 1 cho số sửa đổi. Cách này giúp chúng ta định dạng version của luật nào được dùng. alert tcp $SMTP_SERVERS any -> $EXTERNAL_NET 25 ( sid: 721; rev: 4; msg: "VIRUS OUTBOUND .pif file attachment"; flow: to_server,established; content: "Content-Disposition|3a|"; content: "filename=|22|"; distance: 0; within: 30; content: ".pif|22|"; distance: 0; within: 30; nocase; classtype: suspicious-filename-detect;) classtype: : Lựa chọn này cung cấp thêm thông tin về một sự kiện nhưng không thực sự sinh ra các cảnh báo. Điều này cho phép 1 danh sách tạo ra từ file classification.config của Snort.Tất cả các classtypes kết thúc với 1 có độ ưu tiên cao nhất. 1 : High Priority 2 : Medium Priority 3 : Low Priority 4 : No Priority Xem chi tiết trong file classification.config. Bảng 2.4 : Các giá classtype có mức ưu tiên 1 attempted-user Attempted User Privilege Gain unsuccessful-user Unsuccessful User Privilege Gain successful-user Successful User Privilege Gain attempted-admin Attempted Administrator Privilege Gain successful-admin Successful Administrator Privilege Gain shellcode-detect Executable code was detected trojan-activity A Network Trojan was detected web-application-attack Web Application Attack kickass-porn Porn Content Requested policy-violation Potential Corporate Privacy Violation Dưới đây là một ví dụ sử dụng classtype: alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS ( sid: 1233; rev: 7; msg: "WEB-CLIENT Outlook EML access"; flow: from_client,established; uricontent: ". eml"; classtype: attempted-admin;) priority: ; File classification.config gán mức độ ưu tiên High, Medium, Low và None cho tất cả các classtype. Sử dụng tùy chọn này với các công cụ khác như ACID và SnortCenter để tìm kiếm những dữ liệu xuất của Snort cho một mức độ ưu tiên cụ thể. reference : ,; Tùy chọn này cung cấp một liên kết tới một web site. Nên đặt site này là site cung cấp các thông tin về loại tấn công đó. alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS ( sid: 1284; rev: 9; msg: "WEB-CLIENT readme.eml download attempt"; flow: from_client,established; uricontent: "/readme.eml"; nocase; reference: url,www.cert.org/advisories/CA-2001-26.html; classtype: attempted-user;) Một số lưu ý khi xây dựng tập luật: - Nội dung trong luật dài và chính xác thì càng tốt. - Chú ý các luật có phân biệt chữ hoa chữ thường (trừ khi sử dụng tùy chọn nocase) 4.3.3. Thực thi luật Snort đã thay đổi các kiểm tra các luật trong những phiên bản gần đây. Các luật được kiểm tra theo thứ tự của các giao thức TCP/UDP, ICMP, và sau đó là IP. Ngoài ra, các luật quan trọng được kiểm tra trước. Một luật TCP port phải được kiểm tra trước các luật khác. Các luật có những chuỗi dài hơn cũng sẽ được kiểm tra trước. Ví dụ, một luật so sánh nội dung “Volume in drive C has no label” sẽ được kiểm tra trước luật so sánh với chuỗi “Volume in”. Cũng cần lưu ý là những luật kiểm tra nội dung sẽ được thực hiện trước những luật không kiểm tra nội dung. 4.3.4. Cập nhật thường xuyên Cần cập nhật định kỳ các phiên bản luật mới nhất của Snort tại trang chủ Công việc này có thể thực hiện tự động bằng các đoạn mã hoặc các công cụ. Một công cụ được sử dụng khá phổ biến là Oinkmaster, là một tập các mã Perl thực hiện việc backup thư mục chứa tập luật cũ, download tập luật mới nhất, thay đổi cấu hình và sinh ra những báo cáo từ sự thay đổi phiên bản tập luật cũ lên phiên bản tập luật mới hơn.Ngoài ra, cũng có một số công cụ khác như IDSPolman và SnortCenter hoặc có thể viết các đoạn mã Bash để download các tập luật mới nhất. Một số nhà quản trị hệ thống không tin tưởng vào cách cập nhật tự động. Họ thường tự cập nhật bằng cách tự viết lại các luật. Khả năng điều khiển và thay đổi các tập luật của Snort là rất quan trọng nó quyết định tính hiệu của của hệ thống phát hiện xâm nhập. Quá trình cập nhật tự động có thể làm cho Snort hoạt động không chính xác. Vì vậy, các cập nhật bằng tay thường được khuyến cáo. Tài liệu tham khảo: [1] Carl Endorf, Eugene Schultz and Jim Mellander. Intrusion Detection & Prevention, McGraw- Hill, 2004, 388 pages. [2] Jacob Babbin, Simon Biles, Angela D. Orebaugh. Snort Cookbook, O'Reilly, March 2005, 288 pages. [3] Kerry J. Cox, Christopher Gerg. Managing Security with Snort and IDS Tools, O'Reilly, August 2004, 288 pages. [4] Richard Stevens, TCP/IP Illustrated Volume 1, Addison- Wesley, December 1993, 576 pages. [5] Stephen Northcutt, Judy Novak. Network Intrusion Detection, Third Edition, New Riders Publishing, August 28, 2002, 512 pages.

Các file đính kèm theo tài liệu này:

  • docXây dựng hệ thống phát hiện xâm nhập với Snort cho một hệ thống thông tin.doc
Luận văn liên quan