Tiền xử lý phục vụ cho nhiều mục đích. Nó “bình thường hoá” traffic cho các services, để chắc chắn rằng dữ liệu trong các packet Snort đang theo dõi sẽ có cơ hội tốt nhất để so sánh với các tín hiệu nhận dạng (signatures ) mà Snort đuợc trang bị. Chức năng khác của quá trình tiền xử lý là tự phòng thủ. Các cuộc tấn công được phát triển để lẩn tránh hoặc làm tràn ngập NIDS sensor, vì thế attacker có thể lợi dụng làm những công việc mình cần. Chức năng frag2 và stream4 tiền xử lý có chức năng chính để chống lại các phương pháp này.
Và chức năng cuối cùng cũng là chức năng quan trọng nhất là làm cho Snort có thêm chút thông minh để phát hiện ra các cuộc tấn công mang phong cách không bình thuờng mà Snort không được trang bị trong rules.
2.4.3.1 FLOW
Flow preprocessor có một module là flow-portscan. Flow theo dõi tất cả traffic và giữ các track kết nối giữa hệ thống và port lạ, khi có 1 flow lạ mới thông tin sẽ chuyển qua hash (làm cho các track nhỏ hơn , nhanh hơn trong tracking các địa chỉ IP và PORTS) được lưu trữ trong bảng bộ nhớ dành sẵn. Các option cho flow preprocessor
Memcap
Chỉ định mức tối đa cho bộ nhớ khi tracking, mặc định là 10MB, thông số này để điều khỉên bộ nhớ của Snort khi cần
Rows
Chỉ định số dòng trên bảng hash, mặc định là 4,099 dòng Stats_interval
Có thể chuyển tình trạng của flow preprocessor qua stdout, giá trị là một số nguyên đại diện cho thời gian tính bằng giây (s) , rất hữu ích khi dùng cho mục đích test
Hash
Phương pháp sử dụng hash thông tin vào bảng, có thể set hash có giá trị là 1 (byte) hoặc 2 (số nguyên ) dùng hash 2 nhanh hơn
Preprocessor flow: stats_interval 0 hash 2 2.4.3.2 frag2
Khi một packet đi từ mạng này qua mạng khác, nó thường cần phân mảnh thành các packet nhỏ hơn, bởi vì mạng thứ 2 sẽ giới hạn kích thuớc của packet và tất nhiên nhỏ hơn mạng đầu tiên. Và tất cả các packet nhỏ sẽ đuợc sắp xếp lại khi đến nơi. Một trong những phương pháp của attacker là dùng các packet nhỏ để lừa firewall hoặc IDS. Ví dụ: rules của Snort đang dò tìm chuỗi /users.pwd trong các section của packet, một attacker có thể tạo ra một dãy các packet rất nhỏ chỉ chứa vài byte trong data của packet, mảnh đầu tiên có thể chứa /user , và cái packet phân mảnh thứ 2 có thể chứa s.pwd, các packet này sẽ không kích hoạt báo động bởi vì nó không giống các rules nào cả, frag2 preprocessor sẽ sắp xếp sự phân mảnh này vào chung và nó sẽ dễ dàng phát hiện sự ẩn dấu đó. Hoặc một ví dụ khác các attacker có thể đưa ra 1 dung lượng quá lớn các packet đã phân mảnh nó sẽ chiếm dung lưonng của hệ thống và làm overload có thể Snort sẽ từ chối tất cả và ảnh hưởng tới các packet không liên quan, các tools mà attacker thường dùng là Fragroute, frag2 có các options để chống lại các dạng tấn công này
Timeout:
Số dây trước khi tắt các sension để flush lại bộ nhớ, mặc định là 60s Memcap
Số luợng bytes của memory set aside, mặc định là 4MB Detect_state_problems
Bật chức năng báo động khi phát hiện điều kiện không bình thường trong các packet phân mảnh, nó nên được bật cho hầu hết các trường hợp
Min_ttl
Thiết lập time to live (TTL) tối thiểu đuợc chấp nhận của tiền xử lý, mặc định là 0
Ttl_limit
Thiết lập ttl maximum, nó không nên quá lớn ,mặc định là 5 Thiết lập khuyến cáo nên dùng:
Preprocessor frag2 2.4.3.3 stream4
stream4 được thiết kế để bảo vệ Snort từ 1 dạng tấn công mới của attacker tới các NIDS sensor bằng cách gửi tràn ngập các packet chứa các chuỗi dữ liệu giống như trong rules để kích các báo động, cũng có khá nhiều tools dùng cho việc này nhưng Snort của có cách chống lại.
stream4 có 2 nhiệm vụ chính: sateful inspection ( kiểm tra tính nguyên ven ), awareness and session reassembly ( nhận biết và sắp xếp các session )
Các option của stream4 Detect_scans
Mặc định là tắt. nó sẽ báo động khi phát hiện các tools scan ports Detect_state_problems
Mặc định tắt. sẽ báo động khi có vấn đề về tình trạng của cuộc thoại bị phát hiện
Disable_evasion_alerts
Cũng mặc định tắt luôn. nếu bật nó có thể phát hiện attacker đang cố gắng từ chối IDS bằng cách gởi các packet đuơc sắp xếp lộn xộn, hoặc các packet là SYN trong data
Thiết lập thời gian sống ít nhất để chấp nhận các packet vào stream4 preprocessor
Ttl_limit
Giống như trong phần của frag2 keepstats [machine, binary]
Mặc định tắt, nếu bật nó sẽ hiển thị tình trạng các senssion đã theo dõi ở 2 chế độ machine là text file, định dạng binary và dùng tools barnyard để thống nhất Noinspect
Mặc định cũng off. tắt chức năng statefull inspection của tất cả các packets Ta có thể tham khảo về các tiến trình stateful ở hình này
Timeout mặc định là 30s log_flushed_streams
Nếu một packet đang bị theo dõi và là nguyên nhân gây ra báo động, ta có thể dump session này và lưu thông tin từ stream4 vào đĩa cứng
Memcap
Giống phần frag2
preprocessor stream4: detect scans, disable_evasion_alerts, timeout 60, ttl_limit 10
2.4.3.4 stream4_reassemble
Snort phản hồi những chuỗi kí tự nó đọc đuợc trong các gói tin đi qua nếu nó trùng với các kí tự nhận dạng trong signatures. Nếu attacker có thể phân chia các kí tự thành nhiều gói tin để tránh báo động của Snort, stream4_reassemble đóng vài trò sắp xếp lại các traffic giữa 2 hệ thống đàm thoại ( conversation ) của network, gia tăng khả năng match các signatures
Các conversation network thường là các chương trình dùng bằng command line như Telnet, Ftp, Smtp có thể là các nguyên nhân nội dung của các packet lọt qua được hệ thống. Reassemble các traffic các services này là cần thiết để ngăn chặn các báo động lầm hoặc bỏ sót.
Một kĩ thuật khác của attacker là nhúng các gói tin với các kí tự gây lỗi, reassemble vẫn có thể phát hiện được
Các option của reassemble Clientonly
Chỉ bật chức năng này trên client Serveronly
Chỉ bật chức năng này trên server Both
Bật trên cả server và client Noalerts
Ports [list]
Chỉ định những ports cụ thể để reassembly Câu lệnh khuyên dùng:
Preprocessor stream4_reassemble: both
2.4.3.5 Tiền xử lý các http inspect
Có nhiều cách thông tin có thể định dạng sang các http session và cũng có nhiều loại khác nhau biểu diễn các thông tin như là các http session như
multimedia, .xml, .HTML, .asp, .php, .java,….và kết quả Snort phải “massage” nội dung của các HTTP conversation để định dạng lại data phục vụ cho quá trình phát hiện tốt nhất
Có 2 kiểu cấu hình http_inspect là global và server. Global ảnh huởng trực tiếp tới http traffic ,cấu hình Server chứa các phần setting cho 1 máy server và các group servers như vậy, cái này rất thường dùng để cấu hình cho web server dùng apache hoặc IIS
http_inspect ( global )
Có 3 option trong phần này dùng để config http traffic: iis_unicode_map <filename> [codemap <interger]
Chỉ đuờng dẫn tới map file unicode.map. Nó sẽ chỉ cho bộ tiền xử lý biết làm cách nào để map các kí tự unicode sang ASCII dạng text đê match các
signatures. Ta phải chỉ ra code dể map ví dụ 1252 là latin code detect_anomalous_servers
Sẽ báo động khi gặp các ports lạ không tiêu chuẩn. thường không bật chế độ này
proxy_alert
Nếu bạn sử dụng proxy server cho các internet user, bật chức năng này để giám sát các user không dùng proxy để kết nối internet
Đề nghị setting cho mode này:
preprocessor http_inspect: global iis_unicode_map unicode.map 1252 http_inspect_server
Có thể dùng option này cho servers bất kì hoặc các servers trong môi truờng làm việc của mình. hầu hết các administrator đều dùng 1 server riêng dùng cho IIS và cái khác dùng Apache servers. Trong phần trình bày này sẽ có ví dụ cụ thể.
Có 2 kiều cấu hình cho http_inspetct_server là “default” và “by IP address”, kiểu “default” chỉ cấu hình cho tất cả web traffic không liên quan gì đến IP address, còn kiểu “IP address” chỉ cấu hình cho các IP đựơc chỉ định hoặc 1 dãy các IP. Có các option là:
Default hoặc < IP address > Như đã trình bày ở trên Profile <all | apache | iis >
Có thể dùng apache hoặc chỉ dùng cho iis ta cũng có thể dùng all cho cả 2. Các bảng sau sẽ trình bày cụ thể của profile khi dùng từng loại
Bảng setting cho profile "all"
Option Setting flow_depth 300
lis_unicode_map Map sử dụng cho mode globle ascii No non_refc_char On multi_slash No directory No apache_whitespace Yes double_decode Yes j_encode Yes bare_byte Yes lis_unicode Yes lis_backslash No lis_delimiter Yes
Bảng setting cho profile "apache"
Option Setting flow_depth 300
chunk_encoding Báo động khi các chunks lớn hơn 500,000 bytes ascii No
non_rfc_char On multi_slash No directory No
apache_whitespace Yes
Bảng setting cho profile "iis"
Option Setting flow_depth 300
lis_unicode_map Map sử dụng cho mode globle ascii No
multi_slash No directory No double-decode Yes u_encode Yes bare_byte Yes lis_unicode Yes lis_backslash No lis_delimiter Yes apache_whitespace Yes utf_8 No non_strict On
Đây là phần cấu hình mặc định cho http_inspect_server:
Preprocessor http_inspect_server: server default profile all ports {80 8080 } Đây là phần cấu hình cho IIS server http_inspect_server :
Preprocessor http_inspect_server: server 10.10.10.33 profile iis ports { 80 8080 }
Còn đây là cấu hình điển hình cho Apache server:
Preprocessor http_inspect_server 10.1.1.125 profile apache ports { 80 8080 }