Phát hiện xâm nhập với Snort



Hey anh em! Sau một thời gian "lặn" rất dài, hôm nay mình HQK lại ngoi lên đây để chém gió cùng anh em. Ngồi làm báo cáo môn giám sát mạng, tiện viết luôn blog để anh em góp ý luôn.

Dzô luôn chủ đề chính thôi nào? ( Bài viết này mang đậm tính lý thuyết nên anh em nào thích demo tấn công, phòng thủ các thứ thì thông cảm đợi các bài viết tiếp theo nhé, hehe..)

I. Giới thiệu snort
II. Kiến trúc snort
III. Bộ luật 
IV. Demo

I. Giới thiệu Snort
- Snort là một hệ thống phòng chống và phát hiện xâm nhập dựa trên mạng (IPS/IDS) nguồn mở được phát triển bởi Sourcefire. Kết hợp việc kiểm tra dấu hiệu, giao thức và dấu hiệu bất thường.
- Snort có kiến trúc kiểu module, dễ dàng cho các quản trị viên tự bổ sung để tăng cường tính năng cho hệ thống của mình.
- Snort có thể chạy trên nhiều hệ thống: Windows, Linux, OpenBSD, Solaris…
- Những chức năng của Snort đó là packet sniffing, packet logging và network-based intrusion detection.

II. Kiến trúc



* Snort bao gồm nhiều thành phần, mỗi phần có một chức năng riêng biệt: 
      - Module giải mã gói tin
      - Module tiền xử lý
      - Module phát hiện
      - Module log và cảnh báo
      - Module kết xuất thông tin

- Khi Snort hoạt động, nó sẽ lắng nghe tất cả các gói tin nào di chuyển qua nó. Các gói tin sau khi bị bắt sẽ được đưa vào module giải mã. Tiếp theo sẽ vào module tiền xử lý và rồi module phát hiện. Tại đây tùy vào việc có phát hiện được xâm nhập hay không mà gói tin có thể bỏ qua để lưu thông tin tiếp hoặc đưa vào module Log và cảnh báo để xử lý. Khi các cảnh báo được xác định, Module kết xuất thông tin sẽ thực hiện việc đưa ra cảnh báo theo đúng định dạng mong muốn.

1. Module giải mã gói tin
- Nhiệm vụ chủ yếu của hệ thống này là phân tích gói dữ liệu thô bắt được trên mạng và phục hồi thành gói dữ liệu hoàn chỉnh ở lớp application, làm input cho hệ thống dectection engine. ( sử dụng thư viện pcap để bắt mọi gói tin trên mạng lưu thông qua hệ thống ).
2. Module tiền xử lý
- Module tiền xử lý là một môđun rất quan trọng đối với bất kỳ một hệ thống IDS nào để có thể chuẩn bị gói dữ liệu đưa và cho môđun Phát hiện phân tích. Ba nhiệm vụ chính của các môđun loại này là:
     + Kết hợp lại các gói tin.   
     + Giải mã và chuẩn hóa giao thức (decode/normalize).
     + Phát hiện các xâm nhập bất thường (nonrule /anormal)
3. Module phát hiện


- Đây là module quan trọng nhất của Snort. Nó chịu trách nhiệm phát hiện các dấu hiệu xâm nhập. Module phát hiện sử dụng các luật được định nghĩa trước để so sánh với dữ liệu thu thập được, từ đó xác định xem có xâm nhập xảy ra hay không.

4. Module log và cảnh báo
- Tùy thuộc vào module phát hiện có nhận dạng được xâm nhập hay không mà gói tin có thể bị ghi log hay đưa ra cảnh báo. Các file log là các file dữ liệu có thể ghi dưới nhiều định dạng khác nhau như tcpdump.
5. Module kết xuất thông tin

      

  - Module này thực hiện các thao tác khác nhau tùy thuộc vào việc cấu hình lưu kết quả xuất ra như thế nào.
     +  Ghi log file
     +  Ghi syslog
     + Ghi cảnh báo vào cơ sở dữ liệu
     + Tạo file log XML
     + Cấu hình lại Router, firewall
     + Gửi các cảnh báo được gói trong gói tin sử dụng giao thức SNMP

III. Bộ Luật
- Cấu trúc

                


- Phần Header chứa thông tin về hành động mà luật đó sẽ thực hiện khi phát hiện ra có xâm nhập nằm trong gói tin và nó cũng chứa các tiêu chuẩn để áp dụng luật với gói tin đó. 

- Phần Option chứa một thông điệp cảnh báo và các thông tin về các phần của gói tin dùng để tạo nên cảnh báo. Phần Option chứa các tiêu chuẩn phụ thêm để đối sánh luật với gói tin. Một luật có thể phát hiện được một hay nhiều hoạt động thăm dò hay tấn công. Các luật thông minh có khả năng áp dụng cho nhiều dấu hiệu xâm nhập.

1. Rule Header

          

          Ví dụ:  alert  icmp any any -> any any (msg: “Ping with TTL=100”;ttl: 100;)

  1.1. Action:
  * Có 5 luật được định nghĩa:
  - Pass: Hành động này hướng dẫn Snort bỏ qua gói tin này. 
  - Log: Hành động này dùng để log gói tin. Có thể log vào file hay vào cơ sở dữ liệu 
  - Alert: Gửi một thông điệp cảnh báo khi dấu hiệu xâm nhập được phát hiện. 
  - Activate: sử dụng để tạo ra một cảnh báo và kích hoạt một luật khác kiểm tra thêm các điều kiện của gói tin. 
  - Dynamic: chỉ ra đây là luật được gọi bởi các luật khác có hành động là Activate. 

1.2. Protocol
    * Chỉ ra loại gói tin mà luật được áp dụng:
       - IP
       - ICMP
       - TCP
       - UDP
    * Nếu là IP thì Snort sẽ kiểm tra header của lớp liên kết để xác định loại gói tin. Nếu bất kỳ giao thức     nào khác, Snort sẽ sử dụng header IP để xác định loại giao thức.
1.3. Address
- Xác định đại chỉ nguồn và địa chỉ đích. Địa chỉ có thể là của một host, nhiều host hoặc là địa chỉ mạng.
- Snort cung cấp cho ta kĩ thuật để loại trừ địa chỉ bằng cách sử dụng dấu ! để không kiểm tra các gói tin đến từ hay đi tới địa chỉ đó
Ví dụ, luật sau sẽ áp dụng cho tất cả các gói tin ngoại trừ các gói có nguồn xuất phát từ mạng lớp C 192.168.2.0.
alert  icmp ![192.168.2.0/24]  any  -> any  any (msg: “Ping with TTL=100”; ttl: 100;) 
 1.4. Port
- Dùng để áp dụng luật cho các gói tin đến từ hoặc đi đến một cổng hay một phạm vi cổng cụ thể nào đó. 
- Số hiệu cổng chỉ có ý nghĩa trong các giao thức TCP và UDP. Nếu protocol của luật là IP hay ICMP thì số hiệu cổng không đóng có ý nghĩa..
1.5. Direction
- Chỉ ra đâu là nguồn đâu là đích, có thể là “->”  hay  “ <-”  hoặc  “<>”. Trường hợp “<>” là khi ta muốn kiểm tra cả Client và Server.

2. Rule Options
-  Phần Rule Option nằm ngay sau phần Rule Header và được bao bọc trong dấu ngoặc đơn. Nếu có nhiều option thì các option sẽ được phân cách với nhau bằng dấu chấm phẩy ”,”.Nếu nhiều option được sử dụng thì các option này phải đồng thời được thoã mãn tức là theo logic các option này liên kết với nhau bằng AND. 
- Mọi option được định nghĩa bằng các từ khoá. Một số các option còn chứa các tham số. Nói chung một option gồm 2 phần: một từ khoá và một tham số, hai phần này phân cách nhau bằng dấu hai chấm. Ví dụ đã dùng :  
msg:  “Detected confidented”; msg là từ khoá còn “Detected confidented” là tham số. 
Sau đây là chi tiết một số các option của luật Snort: 
Từ khóa ack: 
- Trong header TCP có chứa trường Acknowledgement Number với độ dài 32 bit. Trường này có ý nghĩa là chỉ ra số thứ tự tiếp theo gói tin TCP của bên gửi đang được chờ để nhận. Trường này chỉ có ý nghĩa khi mà cờ ACK được thiết lập. 
- Các công cụ như Nmap sử dụng đặc điểm này ping một máy. Ví dụ, nó có thể gửi một gói tin TCP tới cổng 80 với cờ ACK được bật và số thứ tự là 0. Bởi vậy, bên nhận sẽ thấy gói tin không hợp lệ và sẽ gửi trở lại gói tin RST. Khi mà Nmap nhận được gói tin RST thì tức là địa chỉ đích đang “sống”. Phương pháp này vẫn làm việc tốt đối với các máy không trả lời gói tin thuộc dạng ping 
ICMP ECHO REQUEST. 
Vậy để kiểm tra loại ping TCP này thì ta có thể dùng luật như sau: 
Alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg: “TCP ping detected”) 
Từ khóa classtype: 
- Các luật có thể được phân loại và gán cho một số chỉ độ ưu tiên nào đó để nhóm và phân biệt chúng với nhau. Để hiểu rõ hơn về từ khoá này ta đầu tiên phải hiểu được file classification.config (được bao gồm trong file snort.conf sử dụng từ khoá include). Mỗi dòng trong file classification.config  có cú pháp như sau: 
config   classification:   name, description, priority trong đó:  
name: là tên dùng để phân loại, tên này sẽ được dùng với từ khoá classtype trong các luật Snort. 
description: mô tả về loại lớp này 
priority: là một số chỉ độ ưu tiên mặc định của lớp này. Độ ưu tiên này có thể được điều chỉnh trong từ khoá priority của phần option trong luật của Snort. 
Từ khóa content: 
- Một đặc tính quan trọng của Snort là nó có khả năng tìm một mẫu dữ liệu bên trong một gói tin. Mẫu này có thể dưới dạng chuỗi ASCII hoặc là một chuỗi nhị phân dưới dạng các kí tự hệ 16. Giống như virus, các tấn công cũng có các dấu hiệu nhận dạng và từ khoá content này dùng để tìm các dấu hiệu đó bên trong gói tin. 
Ví dụ: alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any (content: “GET”;  msg: “GET match”;) 
Luật trên tìm mẫu “GET” trong phần dữ liệu của tất cả các gói tin TCP có nguồn đi từ mạng 192.168.1.0/24  và đi đến các địa chỉ không thuộc mạng đó. 
Từ “GET” này rất hay được dùng trong các tấn công HTTP. 
Một luật khác cũng thực hiện đúng nhiệm vụ giống như lệnh trên nhưng mẫu dữ liệu lại dưới dạng hệ 16 là:  
alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any (content: “|47 45 54|”; msg: “GET match”;) 
Để ý rằng số 47 ở hệ 16 chính là bằng kí tự ASCII : G và tương tự 45 là E và 54 là T. Ta có thể dùng cả hai dạng trên trong cùng một luật nhưng nhớ là phải để dạng thập lục phân giữa cặp kí tự “||”.  
Có 3 từ khoá khác hay được dùng cùng với từ khoá content dùng để bổ sung thêm các điều kiện để tìm kiếm là : 
offset: dùng để xác định vị trí bắt đầu tìm kiếm (chuỗi chứa trong từ khoá content) là offset tính từ đầu phần dữ liệu của gói tin. Ví dụ sau sẽ tìm chuỗi  “HTTP” bắt đầu từ vị trí cách đầu đoạn dữ liệu của gói tin là 4 byte: 
alert tcp 192.168.1.0/24 any -> any any (content: “HTTP”; offset: 4; msg: “HTTP matched”;) 
dept : dùng để xác định vị trí mà từ đó Snort sẽ dừng việc tìm kiếm.Từ khoá này cũng thường được dùng chung với từ khoá offset vừa nêu trên.   
Ví dụ: 
alert tcp 192.168.1.0/24 any -> any any (content: “HTTP”; offset: 4; dept: 40; msg: “HTTP matched”;)
content-list: được sử dụng cùng với một file. Tên file (được chỉ ra trong phần tham số của từ khoá này) là một file text chứa danh sách các chuỗi cần tìm trong phần dữ liệu của gói tin. Mỗi chuỗi nằm trên một dòng riêng biệt. Ví dụ như file test có dạng như sau: 
-“test” “Snort” “NIDS” 
và ta có luật sau: 
alert tcp 192.168.1.0/24 any -> any any (content-list: “test”;msg: “This is my Test”;).  
Ta cũng có thể dùng kí tự phủ định “!”  trước tên file để cảnh báo đối với các gói tin không tìm thấy một chuỗi nào trong file đó.  
Từ khóa dsize:
Dùng để đối sánh theo chiều dài của phần dữ liệu. Rất nhiều tấn công sử dụng lỗi tràn bộ đệm bằng cách gửi các gói tin có kích thước rất lớn. Sử dụng từ khoá này, ta có thể so sánh độ lớn của phần dữ liệu của gói tin với một số nào đó. 
alert ip any any -> 192.168.1.0/24 any (dsize: > 6000; msg: “Goi tin co kich thuoc lon”;)  
Từ khóa flags: 
- Từ khoá này được dùng để phát hiện xem những bit cờ flag nào được bật (thiết lập) trong phần TCP header của gói tin. Mỗi cờ có thể được sử dụng như một tham số trong từ khoá flags. Sau đây là một số các cờ sử dụng trong từ khoá flags: 

Flag

Kí t tham s dùng trong lut ca Snort

FIN (Finish Flag)

F

SYN – Sync Flag

S

RST – Reset Flag

R

PSH – Push Flag

P

ACK – Acknowledge Flag

A

URG – Urgent Flag

U

Reserved Bit 1

1

Reserved Bit 2

2

No Flag set

0

Bảng các cờ sử dụng với từ khoá flags

 - Ta có thể sử dụng các dấu  “+”, “*” và “!” để thực hiện các phép toán logic AND, OR và NOT trên các bit cờ muốn kiểm tra. Ví dụ luật sau đây sẽ phát hiện một hành động quét dùng gói tin TCP SYN-FIN: 
alert tcp any any -> 192.168.1.0/24 any (flags: SF;  msg: “SYNC-FIN packet detected”;) 
Từ khóa fragbits: 
- Phần IP header của gói tin chứa 3 bit dùng để chống phân mảnh và tổng hợp các gói tin IP. Các bit đó là: 
- Reserved Bit (RB) dùng để dành cho tương lai. 
- Don’t Fragment Bit (DF): nếu bit này được thiết lập thì tức là gói tin đó không bị phân mảnh. 
- More Fragments Bit (MF): nếu được thiết lập thì tức là các phần khác (gói tin bị phân mảnh) của gói tin vẫn đang còn trên đường đi mà chưa tới đích. Nếu bit này không được thiết lập thì có nghĩa là đây là phần cuối cùng của gói tin (hoặc là  gói duy nhất). Điều này xuất phát từ nguyên nhân: Nơi gửi đi phải chia gói tin IP thành nhiều đoạn nhỏ do phụ thuộc vào Đơn vị truyền dữ liệu lớn nhất cho phép (Maximum Transfer Units - MTU) trên đường truyền. Kích thước của gói tin không được phép vượt quá kích thước lớn nhất này. Do vậy, bit MF này giúp bên đích có thể tổng hợp lại các phần khác nhau thành một gói tin hoàn chỉnh.

IV. Demo
- Demo cảnh báo máy đang bị một máy khác ping tới. Vì bài viết dài quá rồi, nên hẹn mọi người ở một bài viết sớm nhất về snort nhé. ( hoặc các bạn gõ tên demo này trên youtube sẽ có nhất nhiều video hướng dẫn. Chọn 1 video và làm theo, chúc các bạn thành công ).

- Bài viết có gì thiếu sót gì mọi người hãy bình luận cùng nhau thảo luận nhé. Bye anh em nhé!

 



Previous Post
Next Post

post written by:

0 Comment: