Tài liệu Báo cáo thực tập tốt nghiệp-ids snort

  • Số trang: 47 |
  • Loại file: PDF |
  • Lượt xem: 165 |
  • Lượt tải: 0
quangtran

Đã đăng 3721 tài liệu

Mô tả:

ĐẠI HỌC BÁCH KHOA HÀ NỘI Chương trình kỹ sư Chất lượng cao BÁO CÁO THỰC TẬP TỐT NGHIỆP SNORT IDS Giảng viên: PGS TS. Nguyễn Linh Giang Sinh viên thực hiện: Ngô Doãn Dương SHSV: 20090596 Lớp: HTTT và truyền thông - KSCLCK54 Hà Nội, 04/2014 Mục lục Lời nói đầu ....................................................... 3 Phần 1. Tổng quan về IDS Snort ........................ 4 Phát hiện xâm nhập là gì?.............................................................................................. 4 Các thành phần và cơ chế hoạt động của Snort .............................................................. 8 Tập luật trong Snort .................................................................................................... 13 Cấu hình Snort ............................................................................................................ 27 Phần 2. Snort và các sản phẩm kết hợp ............34 Phần 3. Thử nghiệm khả năng phản ứng của Snort IDS ...................................................................43 Phần 4. Kết luận ...............................................47 2 Lời nói đầu Bảo mật là một vấn đề lớn đối với tất cả các mạng trong môi trường doanh nghiệp ngày nay. Hacker và intruder (kẻ xâm nhập) đã nhiều lần thành công xâm nhập vào mạng công ty và đem ra ngoài rất nhiều thông tin giá tri.. Nhiều phương pháp đã phát triển để đảm bảo cho hạ tầng mạng và giao tiếp trên Internet, giữa chúng là sử dụng firewall (tường lửa), encryption (mã hóa), và VPN (mạng riêng ảo). Phát hiện xâm nhập là một công nghệ mới. Các phương pháp phát hiện xâm nhập bắt đầu xuất hiện những năm gần đây. Sử dụng phương thức phát hiện xâm nhập, có thể thu thập và sử dụng thông tin từ những loại tấn công đã biết và tìm ra một ai đó cố gắng tấn công vào mạng hay máy cá nhân. Thông tin thu thập theo cách này có thể sử dụng làm cho mạng chúng ta bảo mật hơn, nó hoàn toàn hợp pháp. Sản phẩm thương mại và mã nguồn mở đều sẵn có cho mục đích này. Nhiều công cụ đánh giá tình trạng nguy hiểm cũng sẵn có trên thị trường , nó dùng để đánh giá nhiều loại hình bảo mật khác nhau và vai trò của nó trong mạng. Snort là một hệ thống phát hiện xâm nhập mạng (NIDS) mã nguồn mở, là miễn phí. NIDS là một dạng IDS, được sử dụng để quét luồng dữ liệu trên mạng. Cũng có những IDS cơ bản trên host (host-based), nó được cài đặt trên host riêng và phát hiện những cuộc tấn công chỉ trên host đó thôi. Mặc dù tất cả phương pháp phát hiện xâm nhập vẫn còn mới, nhưng Snort giữ một vị trí là hệ thống chất lượng thuộc loại top (hàng đầu) ngày nay. Snort có thể làm việc chung với những sản phẩm khác. Những sản phẩm đó bao gồm cơ sở dữ liệu MySQL (http://mysql.org) và điều khiển phân tích cho cơ sở dữ liệu xâm nhập (ACID) (http://www.cert.org/kb/acid). Snort có khả năng ghi dữ liệu thu thập được (như là những cảnh báo – alerts – và những thông điệp dạng log khác) vào một cơ sở dữ liệu. MySQL được sử dụng làm cơ sở dữ liệu thông dụng, nó là nơi mà dữ liệu sẽ lưu giữ. Sử dụng Apache web server (http://apache.org) và ACID, có thể phân tích dữ liệu này. Sự kết hợp của Snort, Apache, MySQL, và ACID giúp ta ghi dữ liệu phát hiện xâm nhập vào trong cơ sở dữ liệu và xem, phân tích nó về sau, bằng một giao diện web cơ bản. 3 Phần 1. Tổng quan về IDS Snort 1. Phát hiện xâm nhập là gì? Phát hiện xâm nhập là một tập những công nghệ và phương thức dùng để phát hiện hành động khả nghi trên cả host và mạng. Hệ thống phát hiện xâm nhập (IDS)có 2 loại cơ bản sau: IDS signature-based (IDS dựa trên dấu hiệu) và IDS anomaly-based (IDS dựa trên sự bất thường). Intruder có những dấu hiệu, giống như virus máy tính - có thể được phát hiện bằng cách sử dụng phẩn mềm quét virus. có thể cố gắng tìm những gói dữ liệu có chứa những dấu hiệu liên quan đến xâm nhập đã biết hay những điều bất thường liên quan đến giao thức. Dựa trên những tập signature và rules, hệ thống phát hiện có thể tìm và ghi những hành động xâm nhập và phát ra cảnh báo. Sự phát hiện xâm nhập dựa trên sự bất thường thường phụ thuộc vào tính bất thường của tiêu đề (header) giao thức trong gói dữ liệu. Trong nhiều trường hợp, phương pháp này có thể đem lại kết quả tốt hơn đối với IDS signature-based. Thông thường một IDS capture dữ liệu từ mạng và áp dụng những rule của nó vào dữ liệu này hoặc phát hiện những anomaly trong nó. Snort là một IDS rule-base (IDS dựa trên tập luật) chính, tuy nhiên những input plug-in giúp phát hiện những anomaly trong tiêu đề giao thức. Snort sử dụng những rule lưu trong những text file, nó có thể xem được bằng một trình soạn thảo văn bản. Những rule được nhóm theo từng loại. Những rule đi cùng với mỗi loại được lưu trữ trong những file riêng. Những file này sau đó được tập hợp trong một file cấu hình chính, gọi là snort.conf. Snort đọc những rule này mỗi lần chạy và xây dựng các cấu trúc dữ liệu bên trong nó hoặc áp dụng những rule đó để capture dữ liệu. Việc tìm những signature và sử dụng chúng trong rule là một công việc đòi hỏi phải tinh tế, khi dùng nhiều rule, sẽ có nhiều công việc xử lý hơn được yêu cầu để capture dữ liệu trong thời gian thực. Snort cho phép định nghĩa lại rule cho việc phát hiện xâm nhập và rất “linh hoạt” cho ta thêm vào rule riêng của mình. 4 Một số định nghĩa cơ bản: 1.1 IDS: Intrusion Detection System (hệ thống phát hiện xâm nhập) hay IDS là phần mềm, phần cứng hoặc kết hợp cả ha i, dùng để phát hiện hành động của kẻ xâm nhập. Snort là một IDS mã nguồn mở sẵn có trên mạng. Một IDS có nhiều khả năng khác nhau tùy thuộc vào độ phức tạp của các thành phần trong nó. Nhiều công ty đã ứng dụng IDS kết hợp phần cứng và phần mềm. Nói cách khác, một IDS có thể sử dụng những công nghệ dựa trên các dấu dấu hiệu hoặcsự bất thường hoặc cả hai. 1.2 Network IDS hay NIDS: NIDS là một IDS capture dữ liệu trong quá trình truyền dữ liệu trên mạng (cáp, wireless) và gắn chúng vào một cơ sở dữ liệu của những signature. Phụ thuộc vào nơi mà một gói bi phát hiện với một tín hiệu xâm nhập, lúc đó một cảnh báo sẽ được phát sinh hoặc gói đó sẽ được ghi vào trong một file hay cơ sở dữ liệu. Một chuyên gia sử dụng Snort như là một NIDS. 1.3 Host IDS hay HIDS: Những hệ thống HIDS được cài đặt như là những agent (tác nhân) trên một host. Những hệ thống này có thể nhìn vào trong những log file ứng dụng để phát hiện ra hành vi kẻ xâm nhập. Một vài loại là reactive, có nghĩa nó chúng chỉ báo cho ta biết khi mà mọi việc đã xảy ra. Cũng có một số là proactive (đoán trước), chúng quét lưu lượng mạng tại những HIDS đã được cài đặt và phát cảnh báo ngay cho ta. 1.4 Signatures (dấu hiệu): Khi chúng ta nhìn vào trong gói dữ liệu, ta rút ra được một mẫu (lấy mẫu dữ liệu), mẫu đó gọi là signature. Một signature dùng để phát hiện một hoặc nhiều loại tấn công. Cho ví dụ, chuỗi “script/iisad-min” trong gói dữ liệu đi vào web server có thể nói cho ta biết đó là một hành vi xâm nhập. Signatures có thể trình bày nhiều thành phần khác nhau trong một gói dữ liệu phụ thuộc vào cách tấn công tự nhiên. Cho ví dụ, ban có thể tìm 5 signature trong IP header, transport layer header (TCP, UDP) và/hoặc application layer header hay payload. Thường thì IDS phụ thuộc vào signature để tìm những hành vi xâm nhập. Một vài sản phẩm IDS cần phải cập nhật từ nhà cung cấp những signature mới khi có một loại tấn công nào đó ra đời.Trong IDS khác, như Snort, có thể cập nhật signature của riêng mình. 1.5 Alerts (cảnh báo): Alerts là những loại thông báo người dùng của một hành vi xâm nhập. Khi một IDS phát hiện ra một intruder, nó sẽ báo cho người quản trị bảo mật bằng cách dùng những cảnh báo này. Alerts có thể là một dạng cửa sổ pop-up, dạng console, gửi một e-mail, v.v.. Alerts cũng có thể được lưu trong những log file hay cơ sở dữ liệu, nơi mà chúng có thể xem lại về sau. Snort có thể phát ra Alerts trong nhiều hình thức và được điều khiển bởi những output plug-ins. Snort cũng có thể gửi cùng một alert đến nhiều điểm đích. Cho ví dụ, nó có thể ghi Alerts vào trong cơ sở dữ liệu và phát ra SNMP trap cùng một lúc. Một vài plug-ins cũng có thể thay đổi cấu hình firewall nhằm ngăn những host xâm phạm vào firewall hay router. 1.6 Logs: Thông điệp log thường được lưu trong một file. Mặc định, Snort lưu những thông điệp này dưới thư mục /var/log/snort. Tuy hiên, vị trí của nó có thể thay đổi bằng cách sử dụng lệnh khi khởi động Snort. Thông điệp log có thể lưu ở dạng text (văn bản) hay binary (nhị phân). Những file binary có thể xem sau này bằng Snort hay chương trình tcpdump. Một công cụ mới gọi là Barnyard cũng có thể phân tích những log file nhị phân. Ghi ở dạng nhị phân thì nhanh hơn bởi vì nó lưu theo mức cao. Ghi theo dạng nhị phân rất hữu dụng trong trường hợp khi thực thi Snort đòi hỏi tốc độ cao. 1.7 False Alarms (cảnh báo lỗi): False alarm là loại cảnh báo phát ra biểu thi một dấu hiệu mà không có 6 hành vi xâm nhập nào. Cho ví dụ, những host bên trong mạng do cấu hình sai có thể những thông điệp broadcast khớp với một rule nào đó, kết quả là nó phát ra một cảnh báo sai. Ở một vài router như Linksys, nó sinh ra nhiều cảnh báo “lost of UpnP realated”. Để tránh những lỗi trên, phải thay đổi điều chỉnh những rule mặc định khác. Trong vài trường hợp, cần phải disable một vài rule để tránh False alarm. 7 2. Các thành phần và cơ chế hoạt động của Snort: Snort được chia thành nhiều phần. Những phần này làm việc cùng nhau nhằm phát hiện những loại tấn công khác nhau và sinh ra trong một định dạng yêu cầu từ hệ thống phái hiện. Một Snort IDS cơ bản gồm các thành phần chính sau: a. Packet Decoder : bộ giải mã gói b. Preprocessors : Bộ tiền xử lý. c. Detection Engine : bộ máy phát hiện d. Logging and Alerting System : hệ thống ghi và cảnh báo. e. Output Modules : các mô đun xuất. Dưới đây là mô hình của các thành phần Snort: Hình 3.1: Cơ chế hoạt động của IDS Sau đây sẽ giới thiệu ngắn gọn những thành phần này. Thông qua đó, có thể tạo một vài rule. 8 2.1 Packet Decoder: Packet decoder lấy những gói từ những loại khác nhau của giao diện mạng và chuẩn bị đưa chúng vào preprocessed hoặc gửi nó qua detection engine. Giao diện có thể là Ethernet, SLIP, PPP, v.v.. 2.2 Preprocessors: Preprocessors là những thành phần hay những plug-in được sử dụng cùng với Snort để sắp xếp và thay đổi những gói dữ liệu trước khi detection engine thực hiện công việc tìm kiếm nếu gói dữ liệu đó là nguy hiểm. Một vài preprocessor còn có thể thực hiện tìm ra những dấu hiệu bất thường trong tiêu đề gói và sinh ra cảnh báo. Preprocessor rất là quan trọng đối với IDS nhằm chuẩn bị những gói dữ liệu để phân tích cho việc thiết lập rule trong detection engine. Hacker sử dụng những công nghệ khác nhau nhằm đánh lừa một IDS bằng nhiều cách khác nhau. Cho ví dụ, có thể tạo một rule để tìm một dấu hiệu “script/iiadmin” trong gói HTTP. Nếu so khớp chính xác chuỗi này, có thể dễ dàng bắt lấy. Cho ví du:    “script/./iisadmin” “script/examples/../iisadmin” “script/iisadmin” Để làm phức tạp trạng thái, hacker cũng có thể chèn vào Uniform Resource Identifier (URI) ký tự nhị phân hay Unicode mà vẫn hợp quy tắc của một web server. Chú ý rằng web server thường hiểu tất cả những chuỗi và có thể xử lý chúng chính xác như mong muốn trong chuỗi “script/iisadmin”. Tuy nhiên IDS vẫn theo dõi so khớp chính xác, nó không thể phát hiện ra sự tấn công này. Một preprocessor có thể sắp xếp lại chuỗi đó để nó có thể phát hiện được. Preprocessor cũng có thể sử dụng cho những gói phân mảnh. Khi một gói dữ liệu có kích thước lớn truyền vào một host, gói đó thường bị phân mảnh. Cho ví dụ, kích thước mặc định lớn nhất cho gói dữ liệu trong mạng Ethernet thường là 1500 byte. Giá trị này được điều khiển bởi giá trị MTU (Maximum Transfer Unit) cho giao diện mạng. Điều này có nghĩa là nếu gửi dữ liệu lớn hơn 1500 byte, nó sẽ cắt thành nhiều gói, mỗi gói phân mảnh 9 đó có kích thước nhỏ hơn hoặc bằng 1500 byte. Hệ thống nhận sẽ tái hợp để thành gói dữ liệu nguyên thủy. Trên IDS, trước khi áp dụng những rule hay tìm một signature, phải tái hợp gói. Cho ví dụ, phân nửa dấu hiệu có thể cho thấy trong một đoạn này và nửa kia trong đoạn khác. Để phát hiện chính xác dấu hiệu, phải kết hợp tất cả phân đoạn của mảnh. Hacker sử dụng sự phân mảnh để đánh bại những hệ thống IDS. Preprocessor thường được dùng để bảo vệ những loại tấn công này. Preprocessor trong Snort có thể phân mảnh gói, giải mã HTTP URI, tái hợp luồng TCP, v.v.. Những chức năng này rất là quan trọng trong thành phần IDS. 2.4 Detection Engine: Detection engine là thành phần quan trọng nhất trong Snort. Nó chịu trách nhiệm phát hiện nếu có hành vi xâm nhập trong một gói. Detection engine tận dụng những rule Snort để làm việc này. Những rule được đọc trong cấu trúc dữ liệu bên trong hay buộc chặt chúng vào nơi mà chúng sẽ so khớp với tất cả các gói. Nếu một gói nào đó khớp với rule, hành động thích hợp sẽ sinh ra, chẳng hạn gói đó sẽ bị hủy. Những hành động đó có thể là ghi gói hay sinh cảnh báo. Detection engine là một phần tiêu chuẩn thời gian (time-critical) của Snort. Phụ thuộc vào sức khỏe của hệ thống và có bao nhiêu rule được định nghĩa, nó có thể tiêu tốn bao nhiêu thời gian cho công việc đáp ứng các gói này. Nếu lưu lượng trên hệ thống mạng của là khá cao khi Snort làm việc trong chế độ NIDS, có thể hủy những gói. Sự vận hành của Detection engine phụ thuộc vào các yêu tố sau:     Số rule trên đó. Sức khỏe của hệ thống trên đó có Snort đang chạy. Thông lượng bên trong đó. Sức vận hành trên mạng Khi thiết kế một NIDS, phải giữ tất cả hồ sơ kỹ thuật trong đó. Nên nhớ rằng hệ thống phát hiện có thể khảo sát tỉ mỉ và áp dụng rule trên nhiều phần của gói dữ liệu. Những phần này có thể là:  IP header của gói. 10  Header lớp transport. Header gồm: TCP, UDP, và những header lớp transport khác. Nó cũng có thể làm việc trên ICMP header.  Header lớp application. Nó gồm có: DNS header, FTP header, SNMP header, SMTP header. có thể phải sử dụng nhiều phương pháp trực tiếp tại header lớp application, chẳng hạn như tìm kiếm offset của dữ liệu.  Payload của dữ liệu. Điều này giúp tạo ra một rule dùng cho detection engine để tìm một chuỗi bên trong dữ liệu. Detection engine làm việc khác nhau trong mỗi phiên bản Snort khác nhau. Trong tất cả phiên bản Snort 1.x, detection engine ngừng xử lý trên gói đó khi một rule được so khớp trên gói đó. Phụ thuộc vào rule, detection engine thực hiện những hành động thích hợp như ghi log file hay sinh một cảnh báo. Điều này có nghĩa là nếu một gói khớp với tiêu chuần được định nghĩa trong nhiều rule, chỉ rule đầu tiên được áp dụng vào gói đó mà không tìm kiếm sự so khớp khác. Đây là một vấn đề. Một rule thiếu trọn vẹn sẽ sinh ra một cảnh báo không trọn vẹn, thâm chí nếu một rule khá đầy đủ (tương ứng với một cảnh báo tốt) có thể nằm sau rule trước nó. Vấn đề này đã được sửa trong Snort phiên bản 2, tất cả các rule đều được so khớp vào một gói trước khi sinh một cảnh báo. Sau khi so khớp tất cả các rule, rule nào trọn vẹn nhất sẽ được chọn để sinh cảnh báo. Detection engine trong Snort 2.0 đã được làm lại một cách hoàn chỉnh để nó so sánh tốt hơn, phát hiện sớm hơn so với các phiên bản trước. 2.5 Logging và Alerting System: Phụ thuộc vào detection engine tìm trong gói, gói có thể được dùng để ghi hành động hay sinh cảnh báo. Việc ghi lưu trong những text file đơn giản, loại file tcpdump hay những hình thức ghi khác. Mặc định tất cả những log file được lưu trong /var/log/snort. có thể sử dụng dòng lệnh “–l” để thay đổi vị trí sinh log file hay cảnh báo. Có nhiều lựa chọn dòng lệnh sẽ được thảo luận trong phần sau và chi tiết thông tin về cách ghi log file hay cảnh báo. 2.6 Output Modules: 11 Output modules hay plug-in thực hiện những hoạt động khác nhau phụ thuộc muốn lưu kết quả sinh ra bởi logging và cảnh báo thế nào. Về cơ bản, những modules này điều khiển loại kết quả sinh ra bởi hệ thống logging và cảnh báo. Phụ thuộc vào sự cấu hình, Output modules có thể làm những việc sau:        Đơn giản chỉ ghi vào file /var/log/snort/alerts hay những file khác Gửi SNMP traps Gửi thông điệp đến syslog. Ghi vào cơ sở dữ liệu như MySQL hay Oracle. Sinh ra dẫn xuất eXtensible Markup Language (XML) Bổ sung cấu hình trên router và firewall. Gửi thông điệp Server Message Block (SMP) đến hệ thống Microsoft Window. Những công cụ khác cũng có thể gửi cảnh báo trong những định dạng khác như e-mail hay qua giao diện web. Bảng sau đây cho ta thấy những thành phần khác nhau của một IDS: 12 3. Tập luật (rulesets) trong Snort: Giống như virus, hầu hết hành động xâm nhập có vài loại signature. Thông tin về những signature này dùng để tạo Snort rules. Trong chương 1, đã phân tích một số kỹ thuật tấn công DoS/DDoS để tìm ra những cơ chế hoạt động và thông tin về những công cụ và công nghệ của họ. Hơn nữa, có những lổi cơ sở dữ liệu khiến cho những intruder muốn khai thác. Có nhiều cuộc tấn công được biết đến cũng sử dụng signature để tìm một ai đó cố gắng khai thác chúng. Những signature này có thể hiển thị trong phần header (tiêu đề) của gói dữ liệu hoặc trong payload. Hệ thống phát hiện Snort dựa trên rules. Những rule này lấy cơ sở từ dấu hiệu kẻ xâm nhập (signature). Snort rules có thể được sử dụng để kiểm tra những phần khác nhau của gói dữ liệu. Snort 1.x có thể phân tích ở những header ở lớp 3 và 4 nhưng không thể phân tích ở giao thức lớp ứng dụng. Snort phiên bản 2.x có hỗ trợ phần header lớp ứng dụng. Những rule được áp dụng trong một kiểu nào đó đến tất cả các gói phụ thuộc vào loại đó. Một rule có thể sử dụng để phát ra một thông điệp cảnh báo, ghi một thông điệp, hay, trong những thuật ngữ của Snort, pass gói dữ liệu (không làm gì cả). Snort rules được viết theo cú pháp dễ hiểu nhất. Hầu hết những rules được viết trên một dòng đơn. Tuy nhiên cũng có thể mở rộng trên nhiều dòng bằng cách dùng một ký tự “\” vào cuối dòng. Rules thường đặt trong một file cấu hình, chẳng hạn như là snort.conf. cũng có thể sử dụng nhiều file bằng cách gôm chúng trong một file cấu hình chính. Trong chương này cung cấp thông tin về những loại rule khác nhau cũng như cấu trúc cơ bản của rule. sẽ tìm thấy nhiều ví dụ của những rule chung cho hành vi phát hiện xâm nhập trong phần sau. 3.1. Cấu trúc của một rule: Tất cả các rule đều có 2 phần logic: rule header và rule options. Hình 3.2: Cấu trúc Rule 13 Rule header chứa thông tin về hoạt động mà rule để lấy. Nó cũng chứa tiêu chuẩn cho việc so sánh một luật dựa vào gói dữ liệu. Rule option thường chứa một thông điệp cảnh báo và thông tin về thông điệp sẽ được sử dụng để phát sinh cảnh báo. Rule option cũng chứa tiêu chuẩn cho việc so sánh một luật dựa vào gói dữ liệu. Một rule có thể phát hiện một loại hay nhiều loại hành vi xâm nhập. Rule “thông minh” là rule có thể áp dụng lên nhiều dấu hiệu xâm nhập. Cấu trúc chung của rule header như sau: Action dùng để xác định loại hành động mà nó lấy về khi tiêu chuẩn gặp được và một rule được so sánh chính xác một gói dữ liệu. Những hoạt động điển hình là sinh ra một cảnh báo hoặc ghi thông điệp hoặc diện chứng cho rule khác. Protocol dùng để áp dụng rule lên gói chỉ với một giao thức riêng. Đây là tiêu chuẩn đầu tiên giám sát trong rule. cũng có thể sử dụng những thành phần khác để ngăn chặn những địa chỉ từ một mạng đầy đủ. Chú ý rằng có 2 trường địa chỉ trong rule. Địa chỉ nguồn và đích được xác định dựa trên trên trường direction. Cho một ví dụ, nếu trường direction là “ ”, địa chỉ phía bên trái là nguồn, địa chỉ bên phải là đích. Trong giao thức TCP/UDP, port xác định cổng nguồn và đích của gói khi rule áp dụng lên đó. Trong trường hợp những giao thức lớp network như IP và ICMP, port numbers không có ý nghĩa. Cho ví dụ, rule sau đây sẽ sinh ra cảnh báo khi nó phát hiện gói ping ICMP (ICMP ECHO REQUEST) với TTL bằng 100: alert icmp any any -> any any (msg: "Ping with TTL=100"; \ ttl: 100;) Phần nằm trước dấu ngoặc đơn gọi là rule header. Phần trong dấu ngoặc đơn là rule option. Header chứa những phần sau:  Một rule action (hành động của luật). Trong rule trên, action là “alert”, 14     có nghĩa là một cảnh báo sẽ sinh ra khi điều kiện bắt gặp. Nhớ rằng những gói được ghi bằng mặc định khi cảnh báo phát ra. Phụ thuộc vào trường action, rule option có thể chứa tiêu chuẩn cho rule. Protocol (giao thức). Ở đây là ICMP, nghĩa là rule chỉ áp dụng lên tất cả gói ICMP. Trong Snort detection engine, nếu giao thức của gói không phải ICMP, rule sẽ không làm gì trên gói đó để tiết kiệm thời gian xử lý của CPU. Thành phần protocol là rất quan trọng khi muốn áp dụng Snort rule chỉ trên những gói của một loại riêng biệt. Địa chỉ nguồn và cổng nguồn. Trong ví dụ này cả hai đều là “any”, có nghĩa là rule sẽ áp dụng lên tất cả các gói đến từ nhiều nguồn. Dĩ nhiên port number sẽ không áp dụng lên gói ICMP. Port number chỉ thích hợp trong trường hợp protocol là TCP hay UDP. Direction. Trong trường hợp này, nó là ký hiệu -> từ trái sang phải. Nói lên địa chỉ và port number bên trái dấu -> là nguồn còn bên phải là đích. Điều đó cũng có nghĩa rằng rule sẽ áp dụng lên gói đi từ nguồn đến đích. cũng có thể dùng dấu để định nghĩa địa chỉ nguồn/đích cho gói. Ký tự <> cũng có thể sử dụng để áp dụng rule lên gói đi từ 2 bên. Địa chỉ đích là cổng đích. Trong ví dụ này cả hai đều là “any”, có nghĩa là rule sẽ áp dụng lên tất cả các gói không quan tâm đến địa chỉ đích. Direction trong rule không đóng vai trò gí cả bởi vì rule được áp dụng lên tất cả các gói ICMP di chuyển cả hai bên, do đã sử dụng từ khóa “any” trong cả hai thành phần địa chỉ nguồn và đích. 15 3.2. Rule Option: Rule option theo sau rule header và được đặt trong cặp dấu ngoặc đơn. Có thể một lựa chọn hay nhiều lựa chọn truyền vào cùng dấu . Nếu sử dụng nhiều lựa chọn, dạng lựa chọn này là AND. Hành động trong rule header chỉ được gọi khi tất cả những tiêu chuẩn trong lựa chọn là đúng. đã sử dụng option như msg và ttl trong ví dụ trước rồi đó. Tất cả những lựa chọn được định nghĩa bởi từ khóa. Những Rule option chứa các đối số. Thường thì những lựa chọn có 2 phần: một từ khóa và một đối số. Những đối số truyền vào từ lựa chọn từ khóa bằng một dấu “:”. Chẳng hạn như: msg: "Detected confidential"; Lựa chọn msg là từ khóa và “Detected confidential” là đối số cho từ khóa này. Sau đây là những từ khóa thông dụng . Nó hoạt động trên những giao thức riêng, cho nên có ý nghĩa khác nhau đi theo giao thức. 3.2.1. Về nội dung (lớp application):  Từ khóa content: Một chức năng quan trọng của Snort, nó có khả năng tìm mẫu dữ liệu bên trong gói. Mẫu này có thể hiển thị ở dạng chuỗi ASCII hay nhị phân trong hình thức mã hexa. Rule sau đây phát hiện một mẫu “GET” trong phần dữ liệu của gói TCP xuất phát từ địa chỉ 192.168.1.0. từ khóa GET thường được sử dụng cho nhiều loại tấn công HTTP; tuy nhiên ở đây rule chỉ giúp cho hiểu như thế nào từ khóa này làm việc mà thôi: alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any \ (content: "GET"; msg: "GET matched";) Rule dưới đây cũng tương tự nhưng nó liệt kê ở dạng hexa: alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any \ (content: "|47 45 54|"; msg: "GET matched";) 16 Số 47 tương đương mã ASCII là G, 45 = E, 54 = T. cũng có thể kết hợp dạng ASCII và nhị phân trong hexa vào một rule. Ký tự hexa nằm trong cặp dấu “||”. Có 3 từ khóa khác nhau dùng chung với content. Những từ khóa này là tiêu chuẩn trong khi tìm một mẫu bên trong gói. Đó là: Offset Depth Nocase  Từ khóa offset: Từ khóa offset sử dụng để bắt đầu tìm trong khoảng nào đó từ điểm bắt đầu của phần dữ liệu của gói. Dùng một con số làm đối số cho từ khóa này. Ví dụ sau sẽ bắt đầu tìm từ “HTTP” sau 4 byte kể từ byte đầu tiên trong gói. alert tcp 192.168.1.0/24 any -> any any \ (content: "HTTP"; offset: 4; msg: "HTTP matched";) Từ khóa depth định nghĩa điểm để Snort ngừng tìm kiếm mẫu.  Từ khóa depth: Chỉ định một giới hạn dưới cho việc lấy mẫu. Dùng depth cho phép chỉ định một khoảng bắt đầu từ byte đầu tiên của gói. Dữ liệu sau khoảng này không lấy mẫu nữa. Nếu kết hợp offset và depth cùng với content, có thể chỉ ra vùng dữ liệu mà muốn lấy mẫu. Ví dụ muốn tìm từ “HTTP”, lấy mẫu 4 byte và chỉ xét trong 40 byte đầu tiên: alert tcp 192.168.1.0/24 any -> any any (content: \ "HTTP"; offset: 4; depth: 40; msg: "HTTP matched";) Nó rất quan trọng khi muốn giới hạn công việc tìm kiếm trong gói. Cho ví dụ, thông tin về yêu cầu HTTP GET được tìm thấy từ đầu gói. Không cần phải tìm toàn bộ gói. Nhiều gói được capture với kích thước 17 rất lớn, nó sẽ tốn nhiều thời gian để tìm kiếm.  Từ khóa nocase: Nocase thường kết hợp với content. Nó không có đối số. Nó chỉ giúp tìm mẫu trong dữ liệu không phân biệt chữ hoa hay thường.  Từ khóa flow: Flow được sử dụng để áp dụng một rule trên những phiên TCP đến những gói trong phương hướng riêng. Từ khóa này dùng xác định phương hướng. Những lựa chọn có thể sử dụng cho từ khóa này xác định phương hướng:     to_client to_server from_client from_server Những lựa chọn này lần đầu có thể gây cho khó hiểu. Từ “to” mang ý nghĩa là đáp ứng (response) và “from” mang nghĩa là yêu cầu (request). Những lựa chọn khác dưới đây cũng có thể sử dụng để áp dụng rule vào các trạng thái khác nhau của kết nối TCP.  Lựa chọn stateless, áp dụng rule mà không cần xem trạng thái của phiên TCP  Lựa chọn established, áp dụng rule mà để xác lập chỉ những phiên TCP  Lựa chọn no_stream, bật những rule để áp dụng vào gói mà không cần xây dựng từ một luồng  Lựa chọn stream_only, áp dụng rule chỉ trên những gói đã xây dựng từ một luồng. Luồng TCP (TCP Stream)được xử lý bởi bộ tiền xử lý stream4 (thảo luận trong phần sau). Lựa chọn stateless và established liên kết đến trạng thái TCP. 18 3.2.2. Lựa chọn về IP:  Từ khóa fragbits: Tiêu đề IP (IP header) chứa 3 cờ bit, dùng để phân mảnh và tái hợp gói IP. Chức năng các cờ như sau:  Bit dành riêng (RB – Reserved Bit), dùng cho tương lai.  Bit không phân mảnh (DF – Don’t Fragment Bit). Nếu bit này bật, nó cho  biết gói IP sẽ không phân mảnh.  Bit có nhiều phân mảnh (MF – More Fragments Bit). D tương đương DF. Tương tự, R là RB, M là MF. cũng có thể dùng dấu “!” trong rule. Ngoài ra, đi chung với “D,R,M”, ta cũng thường thấy các từ “+,-”. Nó có ý nghĩa, nếu là “+” tức là gắn thêm bit cờ với những bit khác, nếu là “-” thì bỏ bớt một số bit.  Từ khóa ipopts:  Trong IPv4, tiêu đề là 20 byte. có thể thêm những lựa chọn cho tiêu đề IP này. Chiều dài của phần lựa chọn có thể lên đến 20 byte. Lựa chọn IP dùng cho những mục đích khác nhau, đó là:  Record Route (rr)  Time Stamps (ts)  Lose Source Routing (lsrr): định tuyến nguồn nới lỏng  Strict Source Routing (ssrr); định tuyến nguồn siết chặc Trong Snort rule, hầu hết những lựa chọn thường dùng liệt kê trong RFC 791 tại http://www.rfc-editor.org/rfc/rfc791.txt. Hacker có thể dùng những lựa chọn này để tìm thông tin về tổ chức mạng. Ví dụ, loose và strict source routing có thể giúp hacker khám phá ra đườn dẫn của một mạng nào đó tồn tại hay không. Dùng những Snort rule, có thể phát hiện những nổ lực tìm kiếm của hacker bằng từ khóa ipopts. Rule sau áp dụng cho Losse Source Routing: alert ip any any -> any any (ipopts: lsrr; \ msg: "Loose source routing attempt";)  cũng có thể dùng từ khóa logto để ghi thông điệp vào một file. Tuy 19 nhiên, không thể chỉ định nhiều từ khóa lựa chọn IP trong một rule.  Từ khóa ip_proto: Ip_proto sử dụng IP Proto plug-in để xác định con số giao thức trong IP header. Từ khóa yêu cầu con số giao thức như một đối số. có thể sử dụng một tên cho giao thức nếu nó đã định nghĩa trong file /etc/protocols. Xem mẫu file tương tự như sau: ax.25 93 AX.25 # AX.25 Frames ipip 94 IPIP # Yet encapsulation micp 95 MICP # Internetworking Control Pro. scc-sp 96 SCC-SP Another IP Mobile # Semaphore Communications Sec. Pro. etherip 97 ETHERIP # within-IP Encapsulation Ethernet- encap 98 ENCAP # Yet Another IP encapsulation # 99 encryption scheme # gmtp 100 GMTP # GMTP ifmp 101 IFMP # Ipsilon Flow Management any private Protocol pnni 102 PNNI Rule sau kiểm tra nếu gói dữ liệu: # PNNI over IP giao thức IPIP là đang sử dụng bởi alert ip any any -> any any (ip_proto: ipip; \ msg: "IP-IP tunneling detected";) Tiếp theo, ta dùng một số thay vì tên (hiệu quả hơn) alert ip any any -> any any (ip_proto: 94; \ msg: "IP-IP tunneling detected";) Những giao thức mới nhất có thể tìm thấy từ ICANN tại 20
- Xem thêm -