11/08/2018, 23:25

[Network] Tìm hiểu cơ chế, cách hoạt động của IDS (phần 2)

1.Giới thiệu về snort Snort là phần mềm IDS được phát triển bởi Martin Roesh dưới dạng mã nguồn mở. Snort ban đầu được xây dựng trên nền Unix nhưng sau đó phát triển sang các nền tảng khác. Snort được đánh giá rất cao về khả năng phát hiện xâm nhập. Tuy snort miễn phí nhưng nó lại có rất nhiều ...

1.Giới thiệu về snort

Snort là phần mềm IDS được phát triển bởi Martin Roesh dưới dạng mã nguồn mở. Snort ban đầu được xây dựng trên nền Unix nhưng sau đó phát triển sang các nền tảng khác. Snort được đánh giá rất cao về khả năng phát hiện xâm nhập. Tuy snort miễn phí nhưng nó lại có rất nhiều tính năng tuyệt vời. Với kiến trúc kiểu module, người dùng có thể tự tăng cường tính năng cho hệ thống Snort của mình. Snort có thể chạy trên nhiều hệ thống như Windows, Linux, OpenBSD, FreeBSD, Solaris …

Bên cạnh việc có thể hoạt động như một ứng dụng bắt gói tin thông thường, Snort còn được cấu hình để chạy như một NIDS.

2.Kiến trúc của Snort

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
    

Kiến trúc của Snort được thể hiện qua mô hình sau:

1-300x105.jpg

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.

2.1 Module giải mã gói tin

Snort chỉ 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-300x249.jpg

Một gói tin sau khi được giải mã sẽ đưa tiếp vào module tiền xử lý.

2.2 Module tiền xử lý

Module này rất quan trọng đối với bất kỳ hệ thống nào để có thể chuẩn bị gói dữ liệu đưa vào cho Module phát hiện phân tích. 3 nhiệm vụ chính:

  •      Kết hợp lại các gói tin: Khi một dữ liệu lớn được gửi đi, thông tin sẽ không đóng gói toàn bộ vào một gói tin mà thực hiện phân mảnh, chia thành nhiều gói tin rồi mới gửi đi. Khi Snort nhận được các gói tin này, nó phải thực hiện kết nối lại để có gói tin ban đầu. Module tiền xử lý giúp Snort có thể hiểu được các phiên làm việc khác nhau.
    
  •      Giải mã và chuẩn hóa giao thức (decode/normalize): công việc phát hiện xâm nhập dựa trên dấu hiệu nhận dạng nhiều khi thất bại khi kiểm tra các giao thức có dữ liệu có thể được biểu diễn dưới nhiều dạng khác nhau. Ví dụ: một Web server có thể nhận nhiều dạng URL: URL viết dưới dạng hexa/unicode hay URL chấp nhận dấu / hay . Nếu Snort chỉ thực hiện đơn thuần việc so sánh dữ liệu với dấu hiệu nhận dạng sẽ xảy ra tình trạng bỏ sót hành vi xâm nhập. Do vậy, 1 số Module tiền xử lý của Snort phải có nhiệm vụ giải mã và chỉnh sửa, sắp xếp lại các thông tin đầu vào.
    
  •      Phát hiện các xâm nhập bất thường (nonrule/anormal): các plugin dạng này thường để xử lý với các xâm nhập không thể hoặc rất khó phát hiện bằng các luật thông thường. Phiển bản hiện tại của Snort có đi kèm 2 plugin giúp phát hiện xâm nhập bất thường đó là portscan và bo (backoffice). Portscan dùng để đưa ra cảnh báo khi kẻ tấn công thực hiện quét cổng để tìm lỗ hổng. Bo dùng để đưa ra cảnh báo khi hệ thống nhiễm trojan backoffice.
    

2.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.

Một vấn đề quan trọng đối với module phát hiện và vấn đề thời gian xử lý gói tin: một IDS thường nhận rất nhiều gói tin và bản thân nó cũng có rất nhiều luật xử lý. Khi lưu lượng mạng quá lớn có thể xảy ra việc bỏ sót hoặc không phản hồi đúng lúc. Khả năng xử lý của module phát hiện phụ thuộc vào nhiều yếu tố: số lượng các luật, tốc độ hệ thống, băng thông mạng.

Một module phát hiện có khả năng tách các phần của gói tin ra và áp dụng luật lên từng phần của gói tin:

  •      IP header
    
  •      Header ở tầng transport: TCP, UDP
    
  •      Header ở tầng application: DNS, HTTP, FTP …
    
  •      Phần tải của gói tin
    

Do các luật trong Snort được đánh số thứ tự ưu tiên nên 1 gói tin khi bị phát hiện bởi nhiều luật khác nhau, cảnh báo được đưa ra theo luật có mức ưu tiên cao nhất.

2.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

2.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
    

3.Bộ luật của Snort

3.1 Cấu trúc luật của Snort

Tìm hiểu một ví dụ:

alert tcp 192.168.0.0/22 23 -> any any (content:”confidential”; msg: “Detected confidential”)

Ta thấy cấu trúc có dạng sau:

|Rule Header| Rule Option| |

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 tiểu chuẩn để áp dụng luật với gói tin đó.

Phần Option: chứa 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 với gói tin.

3.2 Cấu trúc của phần Header

Action| Protocol| Address| Port| Direction| Address| Port| | Alert| TCP| 192.168.0.0/22| 23| ->| Any| Any

  •      Action: là phần quy định loại hành động nào được thực thi. Thông thường các hành động rạo ra một cảnh báo hoặc log thông điệp hay kích hoạt một luật khác.
    
  •      Protocol: giao thức cụ thể
    
  •      Address: địa chỉ nguồn và địa chỉ đích
    
  •      Port: xác định các cổng nguồn, cổng đích của một gói tin
    
  •      Direction: phần này sẽ chỉ ra địa chỉ nguồn và địa chỉ đích
    

3.2.1 Action

Có 5 luật được định nghĩa:

  • Pass: cho phép Snort bỏ qua gói tin này
  • Log: dùng để log gói tin. Có thể log vào file hay vào CSDL
  • Alert: gửi thông điệp cảnh báo khi dấu hiệu xâm nhập được phát hiện
  • Activate: tạo ra cảnh báo và kích hoạt thêm các luật khác để kiểm tra thêm điều kiện của gói tin
  • Dynamic: đây là luật được gọi bởi các luật khác có hành động là Activate

3.2.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

3.2.3 Address

Có 2 phần là địa chỉ đích và địa chỉ nguồn. Nó có thể là 1 IP đơn hoặc 1 dải mạng. Nếu là “any” thì áp dụng cho tất cả địa chỉ trong mạng. Chú ý: nếu là một host thì có dạng: IP-address/32. VD: 192.168.0.1/32

Snort cung cấp phương pháp để loại trừ địa chỉ IP bằng cách sử dụng dấu “!”. VD: alert icmp ![192.168.0.0/22] any -> any any (msg: “Ping with TTL=100”; ttl: 100;)

Lưu ý: dấu “[]” chỉ cần dùng khi đằng trước có “!”

3.2.4 Port

Số port để áp dụng cho các luật. VD: telnet là 23, DNS là 53 … Port chỉ áp dụng cho 2 giao thức là TCP và UDP

Để sử dụng 1 dãy các port thì ta phân biệt bởi dấu “:”. VD: alert udp any 1024:8080 -> any any (msg: “UDP port”            </div>
            
            <div class=

0