+1

Phần 1: Snort - opensource theo dõi hệ thống, phát hiện và cảnh báo xâm nhập

Giới thiệu chung

Snort

Snort được phát triển bởi Martin Roesch vào năm 1998. Hiện tại, Snort được phát triển bởi Sourcefire, Roesch trong vai trò là người sáng lập và CTO, được mua lại và sở hữu bởi Cisco từ năm 2013. Snort là một mã nguồn mở miễn phí với nhiều tính năng trong việc bảo vệ hệ thống bên trong, phát hiện sự tấn công từ bên ngoài vào hệ thống - một kiểu IDS/IPS, thực hiện giám sát các gói tin ra vào hệ thống.

hình mô tả logo của snort - con heo hồng ^^

Thuật ngữ

IDS/ IPS là gì nhỉ? Cùng xem bảng các thuật ngữ sử dụng trong bài viết dưới đây:

Thuật Ngữ Tên Chi Tiết Tạm dịch
IDS Intrusion Detection System Hệ thống phát hiện xâm nhập
IPS Intrusion Prevention System Hệ thống ngăn chặn xâm nhập
SIEM Security Information and Event Management Hệ thống phát hiện xâm nhập
HIDS Host-based IDS Hệ thống ngăn chặn xâm nhập trên host
NIDS Network-based IDS Hệ thống ngăn chặn xâm nhập trên mạng cục bộ
DMZ Demilitarized Zone Vùng biên – vùng ranh giới giữa mạng nội bộ và vùng Internet.

IDS/IPS

IDS - Intrusion Detection System

IDS là một thiết bị hoặc ứng dụng phần mềm giám sát mạng, hệ thống máy tính có nhiệm vụ theo dõi, phát hiện và có thể ngăn cản sự xâm nhập, cũng như các hành vi khai thác trái phép tài nguyên của hệ thống được bảo vệ mà có thể dẫn đến việc làm tổn hại đến tính bảo mật, tính toàn vẹn và tính sẵn sàng của hệ thống.

IDS gồm 2 dạng:

  • Host-based IDS (HIDS): HIDS thường được cài đặt trên một máy tính nhất định. Thay vì giám sát hoạt động của một Network segment, HIDS chỉ giám sát các hoạt động trên một máy tính. Nó thường được đặt trên các Host xung yếu của tổ chức và các server trong vùng DMZ.

HIDS in a network topology

  • Network-based IDS (NIDS): Giám sát trên toàn bộ mạng. Nguồn thông tin chủ yếu của NIDS là các gói dữ liệu đang lưu thông trên mạng như (cables, wireless) bằng cách sử dụng các card giao tiếp. NIDS thường được lắp đặt tại ngõ vào của mạng (Inline), có thể đứng trước hoặc sau firewall.

NIDS in a network topology

IPS - Intrusion Prevention System

IPS có các chức năng của một IDS, ngoài ra bổ sung thêm khả năng ngăn ngừa các hoạt động xâm nhập không mong muốn. Khi một hệ thống IDS có khả năng ngăn chặn các nguy cơ xâm nhập được phát hiện thì gọi là một IPS.


hình mô tả vai trò IDS và IPS trong hệ thống https://images.viblo.asia/2b9f1f3a-733e-40c7-8437-9880e79d235c.png


Kiến trúc Snort

Snort Architecture

Theo mô hình kiến trúc trên, Snort được chia làm các phần:

  •  Module Packet Decoder: Xử lý giải mã các gói tin
  •  Module Preprocessors: Tiền xử lý
  •  Module Detection Engine: Phát hiện xâm nhập và ngăn chặn.
  •  Module Logging and Alerting System: Cảnh báo xâm nhập
  •  Output Alert or Log to a File: Kết xuất thông tin.

Với kiến trúc thiết kế theo 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 bằng việc cài đặt hay viết thêm mới các module. Cơ sở dữ liệu luật của Snort đã lên tới hàng ngàn luật và được cập nhật thường xuyên bởi một cộng đồng người sử dụng. Snort có thể chạy trên nhiều h thống nền như Windows, Linux, OpenBSD, FreeBSD, NetBSD, Solaris, HP- UX, AIX, IRIX, MacOS.

Module Decoder

Snort 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. Gói tin sau khi được giải mã sẽ đưa vào Module tiền xử lý.

Module Preprocessors

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. Tiền xử lý có 03 nhiệm vụ chính là:

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

Module Detection Engine

Đâ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 sử dụng các luật (rule) được định nghĩa từ 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 detection engine là 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 thì 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,...

Module detection engine 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, ...
  •  Payload - 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 một 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. Thứ tự là: pass -> drop -> sdrop -> reject -> alert -> log

  • Alert: Tạo một cảnh báo bằng cách sử dụng phương pháp cảnh báo đã chọn, sau đó ghi lại log.
  • Log: ghi lại gói tin.
  • Pass: Cho phép bỏ qua gói tin này.
  • Sdrop: Chặn gói tin và không ghi log.
  • Drop: Chặn gói tin này và ghi lại log.
  • Reject: Chặn gói tin, ghi lại log và sau đó gửi thiết lập lại TCP nếu giao thức là TCP hoặc thông báo không thể truy cập, cổng ICMP nếu giao thức là UDP.

Module Logging and Alerting System

Tùy thuộc vào cấu hình mà module phát hiện (detection engine) 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. Output Alert or Log to a File: Ghi các log ở Module Logging and Alerting System. 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, xml, syslog, log file.

Module Output Alert or Log to a File

Cho phép snort chuyển đầu ra đã tạo tới cơ sở dữ liệu như Mysql hoặc gửi tin nhắn đến máy chủ Syslog. Module đầu ra hoặc plugin có thể kiểm soát loại đầu ra được tạo bởi hệ thống ghi nhật ký và cảnh báo.

Snort Rule / Rulesets

Hệ thống phát hiện của Snort hoạt động dựa trên các luật (rule) và các luật này lại được dựa trên các dấu hiệu nhận dạng tấn công. Các luật có thể được áp dụng cho tất cả các phần khác nhau của một gói tin dữ liệu. các hoạt động tấn công hay xâm nhập đều có các dấu hiệu riêng. Các thông tin về các dấu hiệu này sẽ được sử dụng để tạo lên các luật cho snort. Một luật có thể được sử dụng để tạo nên một thông điệp cảnh báo, log một thông điệp hay có thể bỏ qua một gói tin.


Dùng snort khi nào?

Với nhiều tính năng nổi bật, và đặc biệt là miễn phí và có cộng đồng hỗ trợ lớn. Snort nghiễm nhiên là một trong những giải pháp IDS/IPS được ứng dụng rộng rãi. Tuy nhiên, cần cân nhắc áp dụng vào môi trường enterprise.

Trong trường hợp các mạng có quy mô nhỏ, với số ít máy chủ an ninh, thì giải pháp IPS thường được cân nhắc nhiều hơn do tính chất kết hợp giữa phát hiện, cảnh báo và ngăn chặn.

Với các mạng lớn hơn thì chức năng ngăn chặn thường được giao phó cho một sản phẩm chuyên dụng - ví dụ như Firewall. Khi đó, hệ thống cảnh báo sẽ chỉ cần theo dõi, phát hiện và gửi các cảnh báo đến một hệ thống ngăn chặn khác. Sự phân chia trách nhiệm này sẽ làm cho việc đảm bảo an ninh cho mạng trở nên linh động và hiệu quả hơn.


Tổng kết

Qua bài viết này, các bạn đã có cái nhìn tổng quát về Snort - một opensource với kiến trúc và công dụng tuyệt vời. Trong phần tiếp theo, mình sẽ hướng dẫn cấu hình Snort trên máy chủ Ubuntu để theo dõi một mạng cụ thể. Và mình là thinnm00, theo dõi mình để cập nhật thông tin nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí