Cách cài đặt Suricata trên Ubuntu 20.04

Ngày đăng: November 29, 2022

Ubuntu

Giới thiệu

Suricata là một công cụ Giám sát An ninh Mạng (Network Security Monitoring - NSM) sử dụng các bộ chữ ký do cộng đồng tạo và do người dùng xác định (còn được gọi là quy tắc) để kiểm tra và xử lý lưu lượng mạng. Suricata có thể tạo các sự kiện nhật ký, kích hoạt cảnh báo và giảm lưu lượng truy cập khi phát hiện các gói hoặc yêu cầu đáng ngờ đối với bất kỳ số lượng dịch vụ khác nhau nào đang chạy trên máy chủ.

Theo mặc định, Suricata hoạt động như một Hệ thống phát hiện xâm nhập thụ động (Intrusion Detection System - IDS) để quét lưu lượng truy cập đáng ngờ trên máy chủ hoặc mạng. Nó sẽ tạo và ghi lại các cảnh báo để điều tra thêm. Nó cũng có thể được thiết lập cấu hình như một Hệ thống ngăn chặn xâm nhập (Intrusion Prevention System - IPS) đang hoạt động để ghi nhật ký, cảnh báo và chặn hoàn toàn lưu lượng mạng phù hợp với các quy tắc cụ thể.

Bạn có thể triển khai Suricata trên gateway host trong mạng để quét tất cả lưu lượng truy cập mạng đến và đi từ các hệ thống khác, hoặc bạn có thể chạy cục bộ trên các máy riêng lẻ ở một trong hai chế độ.

Trong hướng dẫn này, bạn sẽ học cách cài đặt Suricata và cách tùy chỉnh một số cài đặt mặc định của nó trên Ubuntu 20.04 để phù hợp với nhu cầu của bạn. Bạn cũng sẽ tìm hiểu cách tải xuống các bộ chữ ký hiện có (thường được gọi là bộ quy tắc) mà Suricata sử dụng để quét lưu lượng mạng. Cuối cùng, bạn sẽ tìm hiểu cách kiểm tra xem Suricata có hoạt động chính xác hay không khi phát hiện các yêu cầu và dữ liệu đáng ngờ trong phản hồi.

Điều kiện tiên quyết

Tùy thuộc vào cấu hình mạng của bạn và cách bạn định sử dụng Suricata, bạn có thể cần nhiều hoặc ít hơn CPU và RAM cho máy chủ của mình. Nói chung, bạn dự định kiểm tra lưu lượng truy cập càng nhiều thì bạn càng nên phân bổ nhiều tài nguyên hơn cho Suricata. Trong môi trường sản xuất, hãy lên kế hoạch sử dụng ít nhất 2 CPU và 4 hoặc 8GB RAM để bắt đầu. Từ đó, bạn có thể tăng quy mô tài nguyên theo hiệu suất của Suricata và lượng lưu lượng truy cập mà bạn cần xử lý.

Nếu bạn định sử dụng Suricata để bảo vệ máy chủ mà nó đang chạy, bạn sẽ cần:

  • Một máy chủ Ubuntu 20.04 có 2 CPU trở lên, sudo non-root user và bật tường lửa. Để thiết lập điều này, bạn có thể làm theo hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04 của chúng tôi.
  • Mặt khác, nếu bạn dự định sử dụng Suricata trên máy chủ cổng để giám sát và bảo vệ nhiều máy chủ, bạn sẽ cần đảm bảo rằng mạng của máy chủ được thiết lập cấu hình chính xác.

Bước 1: Cài đặt Suricata

Để bắt đầu cài đặt Suricata, bạn cần thêm thông tin kho lưu trữ phần mềm của Tổ chức Bảo mật Thông tin Mở (Open Information Security Foundation - OISF) vào hệ thống Ubuntu của mình. Bạn có thể sử dụng lệnh add-apt-repository để thực hiện việc này.

Chạy lệnh sau để thêm kho lưu trữ vào hệ thống của bạn và cập nhật danh sách các gói có sẵn:

  1. sudo add-apt-repository ppa:oisf/suricata-stable

Nhấn ENTER khi bạn được nhắc xác nhận rằng bạn muốn thêm kho lưu trữ (repository). Lệnh sẽ cập nhật danh sách các gói có sẵn cho bạn sau khi thêm kho lưu trữ mới.

Bây giờ bạn có thể cài đặt gói suricata bằng lệnh apt:

  1. sudo apt install suricata

Bây giờ gói đã được cài đặt, hãy bật suricata.service để nó sẽ chạy khi hệ thống của bạn khởi động lại. Sử dụng lệnh systemctl để kích hoạt nó:

  1. sudo systemctl enable suricata.service

Bạn sẽ nhận được kết quả như sau cho biết dịch vụ đã được bật:

Output
suricata.service is not a native service, redirecting to systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable suricata

Trước khi chuyển sang phần tiếp theo của hướng dẫn này, giải thích cách thiết lập cấu hình Suricata, hãy dừng dịch vụ bằng systemctl:

  1. sudo systemctl stop suricata.service

Dừng Suricata đảm bảo rằng khi bạn chỉnh sửa và kiểm tra tệp cấu hình, mọi thay đổi bạn thực hiện sẽ được xác thực và tải khi Suricata khởi động lại.

Bước 2: Thiết lập cấu hình Suricata lần đầu tiên

Gói Suricata từ kho lưu trữ OISF gửi kèm theo tệp cấu hình bao gồm nhiều trường hợp sử dụng khác nhau. Chế độ mặc định cho Suricata là chế độ IDS, vì vậy sẽ không có lưu lượng nào bị hủy, chỉ được ghi lại. Để chế độ này thành mặc định là một ý kiến hay khi bạn học Suricata. Khi bạn đã thiết lập cấu hình và tích hợp Suricata vào môi trường của mình, đồng thời biết rõ về các loại lưu lượng mà nó sẽ cảnh báo cho bạn, bạn có thể chọn bật chế độ IPS.

Tuy nhiên, cấu hình mặc định vẫn có một vài cài đặt mà bạn có thể cần thay đổi tùy thuộc vào môi trường và nhu cầu của mình.

(Tùy chọn) Kích hoạt ID luồng cộng đồng

Suricata có thể bao gồm trường Community ID trong đầu ra JSON của mình để dễ dàng khớp các bản ghi sự kiện riêng lẻ với các bản ghi trong bộ dữ liệu do các công cụ khác tạo ra.

Nếu bạn dự định sử dụng Suricata với các công cụ khác như Zeek hoặc Elaticsearch, thì việc thêm Community ID ngay bây giờ là một ý tưởng hay.

Để bật tùy chọn, hãy mở /etc/suricata/suricata.yaml bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

  1. sudo nano /etc/suricata/suricata.yaml

Tìm dòng 120 ghi # Community Flow ID. Nếu bạn đang sử dụng nano, hãy nhập CTRL+_ và sau đó nhập 120 khi được nhắc nhập số dòng. Bên dưới dòng đó là community-id key. Đặt nó thành true để kích hoạt cài đặt:

/etc/suricata/suricata.yaml
. . .
      # Community Flow ID
      # Adds a 'community_id' field to EVE records. These are meant to give
      # records a predictable flow ID that can be used to match records to
      # output of other tools such as Zeek (Bro).
      #
      # Takes a 'seed' that needs to be same across sensors and tools
      # to make the id less predictable.

      # enable/disable the community id feature.
      community-id: true
. . .

Giờ đây, khi bạn kiểm tra các sự kiện, chúng sẽ có một ID như 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ= mà bạn có thể sử dụng để tương quan các bản ghi trên các công cụ NMS khác nhau.

Lưu và đóng tệp /etc/suricata/suricata.yaml. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng CTRL+X, sau đó YENTER để xác nhận.

Xác định (các) Giao diện Mạng nào sẽ sử dụng

Bạn có thể cần ghi đè giao diện mạng mặc định hoặc các giao diện mà bạn muốn Suricata kiểm tra lưu lượng trên đó. Tệp cấu hình đi kèm với gói OISF Suricata mặc định kiểm tra lưu lượng trên thiết bị có tên là eth0. Nếu hệ thống của bạn sử dụng một giao diện mạng mặc định khác hoặc nếu bạn muốn kiểm tra lưu lượng truy cập trên nhiều giao diện thì bạn cần phải thay đổi giá trị này.

Để xác định tên thiết bị của giao diện mạng mặc định, bạn có thể sử dụng lệnh ip như sau:

  1. ip -p -j route show default

Cờ -p định dạng đầu ra để dễ đọc hơn và cờ -j in đầu ra dưới dạng JSON.

Bạn sẽ nhận được đầu ra như sau:

Output
[ { "dst": "default", "gateway": "203.0.113.254", "dev": "eth0", "protocol": "static", "flags": [ ] } ]

Dòng dev cho biết thiết bị mặc định. Trong ví dụ đầu ra này, thiết bị là giao diện eth0 được đánh dấu. Đầu ra của bạn có thể hiển thị tên thiết bị như ens... hoặc eno.... Dù tên là gì, hãy ghi lại tên đó.

Bây giờ bạn có thể chỉnh sửa cấu hình của Suricata và xác minh hoặc thay đổi tên giao diện. Mở tệp cấu hình /etc/suricata/suricata.yaml bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

  1. sudo nano /etc/suricata/suricata.yaml

Cuộn qua tệp cho đến khi bạn đến dòng có nội dung af-packet: khoảng dòng 580. Nếu bạn đang sử dụng nano, bạn cũng có thể chuyển đến dòng trực tiếp bằng cách nhập CTRL+_ và nhập số dòng. Bên dưới dòng đó là giao diện mặc định mà Suricata sẽ sử dụng để kiểm tra lưu lượng. Chỉnh sửa dòng để phù hợp với giao diện của bạn như ví dụ được đánh dấu sau:

/etc/suriata/suricata.yaml
# Linux high speed capture support
af-packet:
  - interface: eth0
    # Number of receive threads. "auto" uses the number of cores
    #threads: auto
    # Default clusterid. AF_PACKET will load balance packets based on flow.
    cluster-id: 99
. . .

Nếu bạn muốn kiểm tra lưu lượng truy cập trên các giao diện bổ sung, bạn có thể thêm các đối tượng - interface: eth... YAML. Ví dụ: để thêm thiết bị có tên enp0s1, hãy cuộn xuống cuối phần af-packet đến khoảng dòng 650. Để thêm giao diện mới, hãy chèn giao diện đó trước phần -interface: default như ví dụ được đánh dấu sau:

/ec/suricata/suricata.yaml
    #  For eBPF and XDP setup including bypass, filter and load balancing, please
    #  see doc/userguide/capture-hardware/ebpf-xdp.rst for more info.

  - interface: enp0s1
    cluster-id: 98

  - interface: default
    #threads: auto
    #use-mmap: no
    #tpacket-v3: yes

Đảm bảo chọn một giá trị cluster-id duy nhất cho mỗi đối tượng - interface.

Giữ trình chỉnh sửa của bạn mở và chuyển sang phần tiếp theo nơi bạn sẽ thiết lập cấu hình tải lại quy tắc trực tiếp. Nếu bạn không muốn bật cài đặt đó thì bạn có thể lưu và đóng tệp /etc/suricata/suricata.yaml. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng CTRL+X, sau đó YENTER để xác nhận.

Thiết lập cấu hình tải lại quy tắc trực tiếp

Suricata hỗ trợ tải lại quy tắc trực tiếp, nghĩa là bạn có thể thêm, xóa và chỉnh sửa quy tắc mà không cần khởi động lại quy trình Suricata đang chạy. Để bật tùy chọn tải lại trực tiếp, hãy cuộn xuống cuối tệp cấu hình và thêm các dòng sau:

/etc/suricata/suricata.yaml
. . .

detect-engine:
  - rule-reload: true

Với cài đặt này, bạn sẽ có thể gửi tín hiệu hệ thống SIGUSR2 đến quy trình đang chạy và Suricata sẽ tải lại mọi quy tắc đã thay đổi vào bộ nhớ.

Một lệnh như sau sẽ thông báo cho quy trình Suricata tải lại các bộ quy tắc của nó mà không cần khởi động lại quy trình:

  1. sudo kill -usr2 $(pidof suricata)

Phần $(pidof suricata) của lệnh gọi một subshell và tìm process ID của Suricata daemon đang chạy. Phần đầu sudo kill -usr2 của lệnh sử dụng tiện ích kill để gửi tín hiệu SIGUSR2 đến process ID được báo cáo lại bởi subshell.

Bạn có thể sử dụng lệnh này bất cứ lúc nào bạn chạy suricata-update hoặc khi bạn thêm hoặc chỉnh sửa các quy tắc tùy chỉnh của riêng mình.

Lưu và đóng tệp /etc/suricata/suricata.yaml. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng CTRL+X, sau đó YENTER để xác nhận.

Bước 3: Cập nhật Bộ quy tắc Suricata

Tại thời điểm này trong hướng dẫn, nếu bạn khởi động Suricata, bạn sẽ nhận được một thông báo cảnh báo như sau trong nhật ký rằng không có quy tắc nào được tải:

Output
<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/suricata.rules

Theo mặc định, gói Suricata bao gồm một bộ quy tắc phát hiện giới hạn (trong thư mục /etc/suricata/rules), do đó, việc bật Suricata vào thời điểm này sẽ chỉ phát hiện một lượng hạn chế lưu lượng xấu.

Suricata bao gồm một công cụ gọi là suricata-update có thể tìm nạp các bộ quy tắc từ các nhà cung cấp bên ngoài. Chạy nó như sau để tải xuống bộ quy tắc cập nhật cho máy chủ Suricata của bạn:

  1. sudo suricata-update

Bạn sẽ nhận được đầu ra như sau:

Output
19/10/2021 -- 19:31:03 - <Info> -- Using data-directory /var/lib/suricata. 19/10/2021 -- 19:31:03 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml 19/10/2021 -- 19:31:03 - <Info> -- Using /etc/suricata/rules for Suricata provided rules. . . . 19/10/2021 -- 19:31:03 - <Info> -- No sources configured, will use Emerging Threats Open 19/10/2021 -- 19:31:03 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.3/emerging.rules.tar.gz. 100% - 3044855/3044855 . . . 19/10/2021 -- 19:31:06 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 31011; enabled: 23649; added: 31011; removed 0; modified: 0 19/10/2021 -- 19:31:07 - <Info> -- Writing /var/lib/suricata/rules/classification.config 19/10/2021 -- 19:31:07 - <Info> -- Testing with suricata -T. 19/10/2021 -- 19:31:32 - <Info> -- Done.

Các dòng được đánh dấu cho biết bản suricata-update đã tìm nạp Quy tắc mở ET về các mối đe dọa mới nổi miễn phí và lưu chúng vào tệp /var/lib/suricata/rules/suricata.rules của Suricata. Nó cũng cho biết số lượng quy tắc đã được xử lý, trong ví dụ này, 31011 đã được thêm vào và 23649 trong số đó đã được bật.

Thêm nhà cung cấp bộ quy tắc

Công cụ suricata-update có thể tìm nạp các quy tắc từ nhiều nhà cung cấp bộ quy tắc thương mại và miễn phí. Một số bộ quy tắc như bộ ET Open mà bạn đã thêm hiện có sẵn miễn phí, trong khi những bộ quy tắc khác yêu cầu đăng ký trả phí.

Bạn có thể liệt kê bộ nhà cung cấp quy tắc mặc định bằng cách sử dụng cờ list-sources để suricata-update như sau:

  1. sudo suricata-update list-sources

Bạn sẽ nhận được một danh sách các nguồn như sau:

Output
. . . 19/10/2021 -- 19:27:34 - <Info> -- Adding all sources 19/10/2021 -- 19:27:34 - <Info> -- Saved /var/lib/suricata/update/cache/index.yaml Name: et/open Vendor: Proofpoint Summary: Emerging Threats Open Ruleset License: MIT . . .

Ví dụ: nếu bạn muốn bao gồm bộ quy tắc tgreen/hunting, bạn có thể kích hoạt nó bằng lệnh sau:

  1. sudo suricata-update enable-source tgreen/hunting

Sau đó chạy lại suricata-update và bộ quy tắc mới sẽ được thêm vào, bên cạnh các quy tắc ET Open hiện có và bất kỳ quy tắc nào khác mà bạn đã tải xuống.

Bước 4: Xác thực cấu hình của Suricata

Bây giờ bạn đã chỉnh sửa tệp cấu hình của Suricata để bao gồm Community ID tùy chọn, chỉ định giao diện mạng mặc định và bật tải lại quy tắc trực tiếp, bạn nên kiểm tra cấu hình.

Suricata có chế độ kiểm tra tích hợp sẽ kiểm tra tệp cấu hình và mọi quy tắc đi kèm về tính hợp lệ. Xác thực các thay đổi của bạn từ phần trước bằng cách sử dụng cờ -T để chạy Suricata ở chế độ thử nghiệm. Cờ -v sẽ in một số thông tin bổ sung và cờ -c cho Suricata biết nơi tìm tệp cấu hình của nó:

  1. sudo suricata -T -c /etc/suricata/suricata.yaml -v

Quá trình kiểm tra có thể mất một chút thời gian tùy thuộc vào dung lượng CPU bạn đã phân bổ cho Suricata và số lượng quy tắc mà bạn đã thêm vào, vì vậy hãy sẵn sàng đợi một hoặc hai phút để quá trình này hoàn tất.

Với bộ quy tắc ET Open mặc định, bạn sẽ nhận được đầu ra như sau:

Output
21/10/2021 -- 15:00:40 - <Info> - Running suricata under test mode 21/10/2021 -- 15:00:40 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode 21/10/2021 -- 15:00:40 - <Info> - CPUs/cores online: 2 21/10/2021 -- 15:00:40 - <Info> - fast output device (regular) initialized: fast.log 21/10/2021 -- 15:00:40 - <Info> - eve-log output device (regular) initialized: eve.json 21/10/2021 -- 15:00:40 - <Info> - stats output device (regular) initialized: stats.log 21/10/2021 -- 15:00:46 - <Info> - 1 rule files processed. 23879 rules successfully loaded, 0 rules failed 21/10/2021 -- 15:00:46 - <Info> - Threshold config parsed: 0 rule(s) found 21/10/2021 -- 15:00:47 - <Info> - 23882 signatures processed. 1183 are IP-only rules, 4043 are inspecting packet payload, 18453 inspect application layer, 107 are decoder event only 21/10/2021 -- 15:01:13 - <Notice> - Configuration provided was successfully loaded. Exiting. 21/10/2021 -- 15:01:13 - <Info> - cleaning up signature grouping structure... complete

Nếu có lỗi trong tệp cấu hình của bạn thì chế độ kiểm tra sẽ tạo mã lỗi và thông báo cụ thể mà bạn có thể sử dụng để giúp khắc phục sự cố. Ví dụ: bao gồm tệp quy tắc không tồn tại được gọi là test.rules sẽ tạo ra lỗi như sau:

Output
21/10/2021 -- 15:10:15 - <Info> - Running suricata under test mode 21/10/2021 -- 15:10:15 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode 21/10/2021 -- 15:10:15 - <Info> - CPUs/cores online: 2 21/10/2021 -- 15:10:15 - <Info> - eve-log output device (regular) initialized: eve.json 21/10/2021 -- 15:10:15 - <Info> - stats output device (regular) initialized: stats.log 21/10/2021 -- 15:10:21 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/test.rules

Với lỗi đó, bạn có thể chỉnh sửa tệp cấu hình của mình để bao gồm đường dẫn chính xác hoặc sửa các tùy chọn cấu hình và biến không hợp lệ.

Khi chế độ thử nghiệm Suricata của bạn chạy thành công, bạn có thể chuyển sang bước tiếp theo, đó là khởi động Suricata ở chế độ daemon.

Bước 5: Chạy Suricata

Bây giờ bạn đã có cấu hình và bộ quy tắc Suricata hợp lệ, bạn có thể khởi động máy chủ Suricata. Chạy lệnh systemctl sau:

  1. sudo systemctl start suricata.service

Bạn có thể kiểm tra trạng thái của dịch vụ bằng lệnh systemctl status:

  1. sudo systemctl status suricata.service

Bạn sẽ nhận được đầu ra như sau:

Output
● suricata.service - LSB: Next Generation IDS/IPS Loaded: loaded (/etc/init.d/suricata; generated) Active: active (running) since Thu 2021-10-21 18:22:56 UTC; 1min 57s ago Docs: man:systemd-sysv-generator(8) Process: 22636 ExecStart=/etc/init.d/suricata start (code=exited, status=0/SUCCESS) Tasks: 8 (limit: 2344) Memory: 359.2M CGroup: /system.slice/suricata.service └─22656 /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid --af-packet -D -vvv Oct 21 18:22:56 suricata systemd[1]: Starting LSB: Next Generation IDS/IPS... Oct 21 18:22:56 suricata suricata[22636]: Starting suricata in IDS (af-packet) mode... done. Oct 21 18:22:56 suricata systemd[1]: Started LSB: Next Generation IDS/IPS.

Như với lệnh chế độ kiểm tra, Suricata sẽ mất một hoặc hai phút để tải và phân tích cú pháp tất cả các quy tắc. Bạn có thể sử dụng lệnh tail để xem một thông báo cụ thể trong nhật ký của Suricata cho biết nó đã bắt đầu xong:

  1. sudo tail -f /var/log/suricata/suricata.log

Bạn sẽ nhận được một số dòng đầu ra và thiết bị đầu cuối có thể bị kẹt trong khi tải Suricata. Tiếp tục đợi đầu ra cho đến khi bạn nhận được một dòng như sau:

Output
19/10/2021 -- 19:22:39 - <Info> - All AFP capture threads are running.

Dòng này cho biết Suricata đang chạy và sẵn sàng kiểm tra lưu lượng. Bạn có thể thoát lệnh tail bằng CTRL+C.

Bây giờ bạn đã xác minh rằng Suricata đang chạy, bước tiếp theo trong hướng dẫn này là kiểm tra xem Suricata có phát hiện yêu cầu đối với URL thử nghiệm được thiết kế để tạo cảnh báo hay không.

Bước 6: Kiểm tra quy tắc Suricata

Bộ quy tắc ET Open mà bạn đã tải xuống chứa hơn 30000 quy tắc. Phần giải thích đầy đủ về cách hoạt động của các quy tắc Suricata và cách xây dựng chúng nằm ngoài phạm vi của phần hướng dẫn giới thiệu này. Phần hướng dẫn tiếp theo trong loạt bài này sẽ giải thích cách hoạt động của các quy tắc và cách xây dựng quy tắc của riêng bạn.

Đối với mục đích của hướng dẫn này, việc kiểm tra xem Suricata có đang phát hiện lưu lượng truy cập đáng ngờ với cấu hình mà bạn đã tạo hay không là đủ. Khởi động nhanh Suricata khuyên bạn nên kiểm tra quy tắc ET Open với số 2100498 bằng cách sử dụng lệnh curl.

Chạy phần sau để tạo yêu cầu HTTP, yêu cầu này sẽ trả về phản hồi khớp với quy tắc cảnh báo của Suricata:

  1. curl http://testmynids.org/uid/index.html

Lệnh curl sẽ xuất ra một phản hồi như sau:

Output
uid=0(root) gid=0(root) groups=0(root)

Dữ liệu phản hồi mẫu này được thiết kế để kích hoạt cảnh báo, bằng cách giả vờ trả về đầu ra của một lệnh như id có thể chạy trên một hệ thống từ xa bị xâm nhập thông qua trình bao web.

Giờ đây, bạn có thể kiểm tra nhật ký của Suricata để biết cảnh báo tương ứng. Có hai nhật ký được bật với cấu hình Suricata mặc định. Đầu tiên là trong /var/log/suricata/fast.log và thứ hai là nhật ký máy có thể đọc được trong /var/log/suricata/eve.log.

Kiểm tra /var/log/suricata/fast.log

Để kiểm tra mục nhập nhật ký trong /var/log/suricata/fast.log tương ứng với yêu cầu curl của bạn, hãy sử dụng lệnh grep. Sử dụng mã định danh quy tắc 2100498 từ tài liệu Quickstart, tìm kiếm các mục phù hợp với nó bằng lệnh sau:

  1. grep 2100498 /var/log/suricata/fast.log

Nếu yêu cầu của bạn sử dụng IPv6, thì bạn sẽ nhận được đầu ra như sau, trong đó 2001:DB8::1 là địa chỉ IPv6 công khai của hệ thống của bạn:

Output
10/21/2021-18:35:54.950106 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2000:4400:0018:30b3:e400:93a1:80 -> 2001:DB8::1:34628

Nếu yêu cầu của bạn sử dụng IPv4, thì nhật ký của bạn sẽ có thông báo như sau, trong đó 203.0.113.1 là địa chỉ IPv4 công khai của hệ thống của bạn:

Output
10/21/2021-18:35:57.247239 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 203.0.113.1:36364

Lưu ý giá trị 2100498 được đánh dấu trong đầu ra, là Signature ID (sid) mà Suricata sử dụng để xác định quy tắc.

Kiểm tra /var/log/suricata/eve.log

Suricata cũng ghi lại các sự kiện vào /var/log/suricata/eve.log (có biệt danh là nhật ký EVE) bằng cách sử dụng JSON để định dạng các mục nhập.

Tài liệu Suricata khuyến nghị sử dụng tiện ích jq để đọc và lọc các mục trong tệp này. Cài đặt jq nếu bạn không có nó trên hệ thống của mình bằng lệnh apt sau:

  1. sudo apt install jq

Khi bạn đã cài đặt jq, bạn có thể lọc các sự kiện trong nhật ký EVE bằng cách tìm kiếm chữ ký 2100498 bằng lệnh sau:

  1. jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Lệnh kiểm tra từng mục nhập JSON và in bất kỳ mục nhập nào có đối tượng alert, với signature_id key khớp với giá trị 2100498 mà bạn đang tìm kiếm. Đầu ra sẽ giống như sau:

Output
{ "timestamp": "2021-10-21T19:42:47.368856+0000", "flow_id": 775889108832281, "in_iface": "eth0", "event_type": "alert", "src_ip": "203.0.113.1", "src_port": 80, "dest_ip": "147.182.148.159", "dest_port": 38920, "proto": "TCP", "community_id": "1:XLNse90QNVTgyXCWN9JDovC0XF4=", "alert": { "action": "allowed", "gid": 1, "signature_id": 2100498, "rev": 7, "signature": "GPL ATTACK_RESPONSE id check returned root", "category": "Potentially Bad Traffic", . . . }

Lưu ý dòng "signature_id": 2100498, được đánh dấu, là khóa mà jq đang tìm kiếm. Cũng lưu ý dòng "community_id": "1:XLNse90QNVTgyXCWN9JDovC0XF4=", được đánh dấu trong đầu ra JSON. Khóa này là Mã định danh luồng cộng đồng (Community Flow Identifier) được tạo mà bạn đã bật trong tệp cấu hình của Suricata.

Mỗi cảnh báo sẽ tạo một Mã định danh luồng cộng đồng duy nhất. Các công cụ NMS khác cũng có thể tạo cùng một mã định danh để cho phép tham chiếu chéo một cảnh báo Suricata với đầu ra từ các công cụ khác.

Một mục nhập nhật ký phù hợp trong một trong hai tệp nhật ký có nghĩa là Suricata đã kiểm tra thành công lưu lượng mạng, khớp với quy tắc phát hiện và tạo cảnh báo cho phân tích hoặc ghi nhật ký tiếp theo. Phần hướng dẫn trong tương lai của loạt bài này sẽ khám phá cách gửi cảnh báo Suricata đến hệ thống Quản lý sự kiện thông tin bảo mật (Security Information Event Management - SIEM) để xử lý thêm.

Bước 7: Xử lý Cảnh báo Suricata

Khi bạn đã thiết lập và kiểm tra các cảnh báo, bạn có thể chọn cách bạn muốn xử lý chúng. Đối với một số trường hợp sử dụng, cảnh báo ghi nhật ký cho mục đích kiểm tra có thể là đủ; hoặc bạn có thể thích thực hiện một cách tiếp cận tích cực hơn để chặn lưu lượng truy cập từ các hệ thống tạo cảnh báo lặp lại.

Nếu bạn muốn chặn lưu lượng truy cập dựa trên các cảnh báo mà Suricata tạo ra, một cách tiếp cận là sử dụng các mục nhập từ nhật ký EVE, sau đó thêm các quy tắc tường lửa để hạn chế quyền truy cập vào hệ thống hoặc các hệ thống của bạn. Bạn có thể sử dụng công cụ jq để trích xuất các trường cụ thể từ cảnh báo, sau đó thêm quy tắc UFW hoặc IPtables để chặn yêu cầu.

Một lần nữa, ví dụ này là một tình huống giả định sử dụng dữ liệu phản hồi và yêu cầu được tạo có chủ ý. Kiến thức của bạn về các hệ thống và giao thức mà môi trường của bạn có thể truy cập là điều cần thiết để xác định lưu lượng nào là hợp pháp và lưu lượng nào có thể bị chặn.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt Suricata từ kho phần mềm OISF. Cài đặt Suricata theo cách này đảm bảo rằng bạn có thể nhận được các bản cập nhật bất cứ khi nào một phiên bản mới của Suricata được phát hành. Sau khi cài đặt Suricata, bạn đã chỉnh sửa cấu hình mặc định để thêm ID luồng cộng đồng để sử dụng với các công cụ bảo mật khác. Bạn cũng đã bật tính năng tải lại quy tắc trực tiếp và tải xuống bộ quy tắc ban đầu.

Khi bạn đã xác thực cấu hình của Suricata, bạn đã bắt đầu quá trình và tạo một số lưu lượng truy cập HTTP thử nghiệm. Bạn đã xác minh rằng Suricata có thể phát hiện lưu lượng truy cập đáng ngờ bằng cách kiểm tra cả hai nhật ký mặc định để đảm bảo chúng chứa cảnh báo tương ứng với quy tắc bạn đang kiểm tra.

Để biết thêm thông tin về Suricata, hãy truy cập trang web chính thức của Suricata. Để biết thêm chi tiết về bất kỳ tùy chọn cấu hình nào mà bạn đã cấu hình trong hướng dẫn này, hãy tham khảo Hướng dẫn sử dụng Suricata.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời