Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
318,95 KB
Nội dung
1 MỤC LỤC 1. GIỚI THIỆU 3 2. THAO TÁC CHUNG 4 3. PHÂN TÍCH TẬP TIN LUẬT (RULES FILE PARSING) 8 4. C ẤU TRÚC DỮ LIỆU SAU KHI PHÂN TÍCH (DATA STRUCTURES AFTER PARSING) 11 5. KH ỞI TẠO CỦA BỘ PHÁT HIỆN GÓI TIN NHANH 13 6. NH ỮNG CÔNG CỤ VÀ NHỮNG TÀI NGUYÊN (TOOLS AND RESOURCES) 16 7. NH ỮNG THỐNG KÊ MÃ NGUỒN (SOURCE CODE STATISTICS) 17 2 NHỮNG MÔ HÌNH CỦA SNORT Tác giả: Andrés Felipe Arboleda (aarboleda@unicauca.edu.co) Charles Edward Bedón (cbedon@unicauca.edu.co ) Universidad del Cauca – Colombia 14th – April – 2005 Version 0.2 alpha Ref: http://afrodita.unicauca.edu.co/~cbedon/snort/snort.html Biên soạn và cập nhật: Lê Tiến Ngày cập nhật: 31/08/07. 3 1. GIỚI THIỆU Mục đích giới thiệu những mô hình này về những hàm của Snort. Những đối tượng t ừ mô hình tuần tự UML (những hình chữ nhật ở phía trên trong các mô hình) chỉ rõ những t ập tin chứa mã nguồn và những thông điệp (những mũi tên) giới thiệu những cách gọi hàm v ới những tập tin mã nguồn tương ứng. T ất cả những mô hình tuần tự được sắp xếp bằng cách thực hiện, nói cách khác, Snort th ực hiện bắt đầu với mô hình được minh họa trong hình 1 hình 2 Tài liệu này không mô tả chi tiết mã nguồn của Snort, nó chỉ đưa ra những bản đồ cho những người phát triển muốn biết cách đọc mã nguồn của Snort. Nh ững mô hình này đã kiểm tra ở Snort 2.2.0, thực hiện bắt lệnh sau: snort -d -l <path to log directory> -c <path to configuration file> 4 2. THAO TÁC CHUNG Hình 1: Mô hình khối Snort Mỗi module được mô tả như sau: o Module giải mã (Decoder): chuyển những gói tin bắt được thành những cấu trúc và những định danh liên kết những tầng giao thức. Sau đó, nó làm ở tầng ti ếp theo, mã hóa IP TCP hay UDP hay loại giao thức khác lấy những thông tin h ữu ích như những cổng và những địa chỉ Snort sẽ cảnh báo nếu nó tìm thấy những header không đúng cấu trúc, chiều dài TCP bất thường o Tiền xử lý (Preprocessor): Chúng có thể được xem như dạng bộ lọc mà xác định những thuộc tính muốn đưa vào kiểm tra sau đó (trong những mô hình kế tiếp như: Bộ dò tìm (Detection Engine), như nghi ngờ những kết nối thử đến nh ững cổng TCP/UDP hay rất nhiều gói tin UDP gởi đến trong một khoảng th ời gian ngắn (Hiện tượng: Dò cổng – Port Scan). Hàm tiền xử lý lấy các hàm có khả năng nguy hiểm cho bộ dò (Detection Engine) bằng cách cố gắng tìm những mẫu đã biết. 5 Những tập tin chứa những luật (Rules Files): Có những tập tin chứa danh sách những luật với của pháp cho trước. Cú pháp này bao gồm: những giao th ức, địa chỉ, kết xuất gắn kết liên đới (output plug-ins associated) Nh ững tập tin luật đó được cập nhật giống như những tập tin định nghĩa virus. o Những plug-in cho bộ dò (Detection Plug-ins): Những module đó được tham chi ếu từ những định nghĩa của nó trong những tập tin chứa luật, và chú ng được dùng để xác định những mẫu tấn công bất cứ khi nào một luật được thỏa. o Bộ dò tìm (Detection Engine): thường dùng của những bổ sung bộ dò; nó khớp (match) những gói tin tương phản những luật trước đây đã nạp vào bộ nhớ kể từ lúc Snort khởi tạo. o Những plug-in kết xuất (output plug-ins): Những module này cho phép định dạng những thông báo (những cảnh báo, những nhật ký – logs) cho người dùng truy xuất chúng bằng nhiều cách (console, những tập tin bên ngoài (external files), nh ững CSDL ) 6 Hình 2: Snort khởi tạo (Mô hình tuần tự 1) Hình 3: Snort khởi tạo (Mô hình tuần tự 2) 7 Hình 4: Phân tích (Parse) tập tin luật (Mô hình tuần tự 3). 8 3. PHÂN TÍCH TẬP TIN LUẬT (RULES FILE PARSING) Chú ý: Những hàm tiếp theo với tập tin ./parser.c Hàm ParseRulesFile() Hàm này phân tích, bởi 1 chu kỳ, mỗi dòng tập tin cấu hình (Ví dụ: snort.conf). Nếu dòng là một luật hợp lệ (không phải là một chú thích), nó được đưa qua một bộ phân tích lu ật (hàm ParseRule() ). Hàm ParseRule() Hàm này được thực thi một lần cho mỗi luật hợp lệ trong tập tin cấu hình. Ban đầu, nó tìm những dòng không phải là những luật phát hiện xâm nhập(detection rules), nói cách khác, những chỉ dẫn giống như include, var, tiền xử lý (preprocessor), những plug-in kết xu ất, nó gọi những hàm khởi tạo cho mỗi một luật phát hiện xâm nhập. N ếu một luật được thỏa, điều đó có nghĩa là bắt đầu cảnh báo (alert), ghi nhật ký (log) , pass, sự hoạt hóa (activation) hay động (dynamic), luật được kiểm chứng và đưa vào b ộ nhớ bằng hàm ProcessHeadNode(). Nh ững luật phát hiện (Detection rules) được chứa trong bộ nhớ bên trong những cấu trúc RuleTreeNode (RTN) và OptTreeNode (OTN) như những cấu trúc được khai báo trong t ập tin ./rules.h Chú ý: Tham khảo thêm câu hỏi “3.17 How does rule ordering work?” of [SnortFAQ 03]. Hàm ProcessHeadNode() Với prototype: ProcessHeadNode(RuleTreeNode *test_node, ListHead *list, protocol) Nó dùng một con trỏ RTN với test_node và những gắn kết vào cuối những dãy RTN của giao thức tương ứng trong ListHead trỏ bởi danh sách [Schildt 90]. 9 Hình 5: Những cấu trúc dữ liệu (Data structures) kết hợp với hàm ProcessHeadNode(). Hàm ParseRuleOptions() Với prototype: ParseRuleOptions(char *rule, int rule_type, int protocol) Nó tạo những OTN và những gắn kết (attaches) chúng với RTN trỏ bởi biết toàn cục rtn_tmp mà được đặt bởi hàm ProcessHeadNode(). Cu ối cùng nó được gọi trước đây bằng luật ParseRule(). Trong cách này lấy cấu trúc những RTN và những OTN liên kết ma trận ( chúng ta gọi ma trận liên kết đến một cấu trúc liên kết đã kết nối 2 chiều) mà đặt những luật được ch ứa trong bộ nhớ. Những RTN giữ dữ liệu trước đây cho bởi Header luật (rule header), trong khi nh ững OTN giữ dữ liệu cho bởi phần tùy chọn luật (Rule Options Section). Ví dụ: alert tcp any any -> 192.168.1.0/24 111 (content:”|00 01 86 a5|”; msg:”mountd access”;) | Header | Options | Ma tr ận liên kết được minh họa sau đây. Trong hình mỗi ô vuông đại diện cho một c ấu trúc dữ liệu và mỗi mũi tên, một con trỏ. 10 Hình 6: Ma trận đã kết nối (Linked matrix) [...]... dstport=any Hình 10: Khi một gói tin đến (Mô hình tuần tự 5) 15 Hình 11: Khi một gói tin đến (Mô hình tuần tự 6) 6 NHỮNG CÔNG CỤ VÀ NHỮNG TÀI NGUYÊN (TOOLS AND RESOURCES) Tác giả dùng những công cụ và tài nguyên sau để thử nghiệm: OpenOffice 1.1.4 S.: Linux (Mandrake 10.1 Official) IDE: Kdevelop v3.0 (GNU tools: make, gdb, ) 16 7 NHỮNG THỐNG KÊ MÃ NGUỒN (SOURCE CODE STATISTICS) Với Snort 2.2.0... kết những RTN và những OTN (nơi chứa các luật) 11 Hình 8: Khởi tạo bộ phát hiện gói tin nhanh - Mô hình tuần tự 4 (Fast packet detection engine initialization) 12 5 KHỞI TẠO CỦA BỘ PHÁT HIỆN GÓI TIN NHANH (INITIALIZATION OF THE FAST PACKET DETECTION ENGINE) Khởi tạo bắt đầu bằng cách gọi hàm fpCreateFastPacketDetection() trong tập tin /fpcreate.c từ hàm SnortMain() Hàm fpCreateFastPacketDetection() xem... được phân tích, những luật này được chứa trong những RTN và OTN theo cấu trúc sau: Hình 7: Cách lưu trữ những luật Con trỏ RuleLists là biến toàn cục mô tả trong tập tin /parser.c, nó dùng để xem xét kỹ (go over) tất cả các luật chứa trong bộ nhớ Nó trỏ đến thành phần đầu tiên của danh sách liên kết RuleListNode Mỗi node của danh sách có một con trỏ ListHead, mỗi loại luật có một cấu trúc (Cảnh báo-Alert,... (destination-port) trong luật Mục tiêu của cách này là làm cho việc so sánh những gói tin với những luật nhanh hơn 13 Hình 9: Cấu trúc dữ liệu tương ứng với bộ phát hiện gói tin nhanh 14 Nếu chúng ta thấy hàm fpCreateFastPacketDetection(), chúng ta đã tìm thấy khai báo một PORT_RULE_MAP cho mỗi giao thức (tcp, udp, ip, icmp), bên trong mỗi PORT_RULE_MAP có 3 nhóm của PORT_GROUP: một là bảng port nguồn... cục RuleLists với con trỏ RuleListNode, mỗi luật được phân lớp tương ứng với nội dung của nó (Content, UriContent hay NoContent) Nội dung được xác định thông qua OTN tương ứng với luật Trong OTN này chứa một trường gọi là ds_list, nó là một mảng con trỏ trỏ đến những cấu trúc dữ liệu khác nhau, phụ thuộc vào loại của những cấu trúc này mà nội dung được gán Sau khi phân lớp đầu tiên, nó được xác định... NGUỒN (SOURCE CODE STATISTICS) Với Snort 2.2.0 Thông tin chung Number of c files 135 Number of h files 154 Number of source code lines (approx.) 99.317 Total size of files 2’471.751 bytes Số lượng của những tập tin c và h trong một thư mục Number Number Directory of c of Number of Number h code of Total code lines code lines in lines in c files files in c files h files and h files / 27 41 26.794 . những mô hình tuần tự được sắp xếp bằng cách thực hiện, nói cách khác, Snort th ực hiện bắt đầu với mô hình được minh họa trong hình 1 hình 2 Tài liệu này không mô tả chi tiết mã nguồn của Snort, . (external files), nh ững CSDL ) 6 Hình 2: Snort khởi tạo (Mô hình tuần tự 1) Hình 3: Snort khởi tạo (Mô hình tuần tự 2) 7 Hình 4: Phân tích (Parse) tập tin luật (Mô hình tuần tự 3). 8 3. PHÂN TÍCH. nguồn của Snort. Nh ững mô hình này đã kiểm tra ở Snort 2.2.0, thực hiện bắt lệnh sau: snort -d -l <path to log directory> -c <path to configuration file> 4 2. THAO TÁC CHUNG Hình 1: Mô