Hướng dẫn cài đặt Suricata trên Ubuntu 20.04
Giới thiệu
Suricata là một công cụ giám sát an ninh mạng (NSM) sử dụng tập hợp các chữ ký do cộng đồng tạo ra và do người dùng xác định (còn được gọi là các 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 khi phát hiện các gói hoặc yêu cầu đáng ngờ đối với bất kỳ dịch vụ khác nhau đ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 (IDS) để quét các lưu lượng đáng ngờ trên máy chủ hoặc mạng. Nó sẽ tạo ra và ghi lại các cảnh báo để điều tra thêm. Nó cũng có thể được định cấu hình như một hệ thống ngăn chặn xâm nhập đang hoạt động (IPS) để 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ài viết này sẽ hướng dẫn bạn cài đặt Suricata trên Ubuntu 20.04.
Cài đặt Suricata trên Ubuntu
Điều kiện cần để cài đặt Suricata
Để cài đặt Suricata chúng ta cần có một máy chủ Ubuntu 20.04 với 2 CPU trở lên. Sau khi đã có đầu đủ cấu hình máy chủ như đã yêu cầu chúng ta sẽ tiến hành cài đặt suricata
Cập nhật hệ thống
Để đảm bảo rằng tất cả các phụ thuộc của Suricata đều được cập nhật, hãy thực thi lệnh bên dưới:
Trong quá trình cập nhật hệ thống chúng ta chờ từ 5 phút đến 15 phút.
Cài đặt Suricata trên Ubuntu 20.04
Để bắt đầu cài đặt Suricata, chúng ta cần thêm repository của 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.
Thực thi lệnh sau để thêm repository vào hệ thống của chúng ta và cập nhật danh sách các packages có sẵn:
Trong quá trình cập nhật danh sách các packages chúng ta nhấn Enter
khi chúng ta được nhắc xác nhận rằng chúng ta muốn thêm kho lưu trữ. Lệnh sẽ cập nhật danh sách các gói có sẵn cho chúng ta sau khi nó thêm kho lưu trữ mới.
Sau khi chúng ta đã thực hiện repository vào hệ thống của chúng ta và cập nhật danh sách các packages thì tiến hành cài đặt Suricata bằng cách sử dụng lệnh apt
như sau:
Sau khi đã cài đặt Suricata thành công chúng ta sẽ kích hoạt suricata.service để Suricata sẽ chạy khi hệ thống khi khởi động lại. Sử dụng lệnh systemctl
để kích hoạt:
Kết quả sau khi thực thi lệnh trên sẽ như sau:
Như vậy Suricata đã hoạt động trên hệ thống của bạn. Chúng ta có thể kiểm tra bằng lệnh sau:
Cấu hình Suricata trên Ubuntu
Suricata được cài đặt từ repository OISF sẽ đi kèm file cấu hình bao gồm nhiều trường hợp sử dụng khác nhau. Theo mặc định cho Suricata là chế độ IDS, vì vậy khi chúng ta sử dụng Suricata cần cấu hình và tích hợp Suricata vào môi trường và biết rõ về các loại lưu lượng mà nó sẽ cảnh báo, chúng ta 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à chúng ta để có thể cần thay đổi tùy thuộc vào môi trường và nhu cầu.
Kích hoạt Community ID
Suricata có thể bao gồm Community ID trong đầu ra JSON để giúp dễ dàng khớp các bản ghi sự kiện riêng lẻ với các bản ghi trong tập dữ liệu được tạo bởi các công cụ khác.
Nếu chúng ta định sử dụng Suricata với các công cụ khác như Zeek hoặc Elasticsearch , thêm Community ID ngay bây giờ là một ý tưởng hay.
Để bật tùy chọn Community ID, hãy mở /etc/suricata/suricata.yaml
bằng trình chỉnh sửa ưa thích của chúng ta:
Tìm đến dòng 120 # Community Flow ID
. Theo mặc định thì giá trị Community ID sẽ được tắt có giá trị là false
như vậy để bật giá trị Community ID chúng ta sẽ tiến hành chuyển false
thành true
như sau:
Xác định Network Interface sẽ sử dụng
Chúng ta có thể cần ghi đè Network Interface mặc định hoặc các Interface mà chúng ta muốn Suricata kiểm tra lưu lượng truy cập. File 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 gọi eth0
. Nếu hệ thống của chúng ta sử dụng giao diện mạng mặc định khác hoặc nếu chúng ta muốn kiểm tra lưu lượng truy cập trên nhiều giao diện, thì chúng ta sẽ cần thay đổi giá trị này.
Để xác định tên thiết bị của Network Interface mặc định, chúng ta có thể sử dụng lệnh như sau:
Trong đó các tuỳ chọn có ý nghĩa như sau:
-p
: định dạng đầu ra để dễ đọc hơn.-j
: in đầu ra dưới dạng JSON.
Chúng ta sẽ nhận được đầu ra như sau:
Từ kết quả chúng ta có được thông tin từ dòng dev
cho biết thiết bị mặc định. Trong đầu ra ví dụ này, thì Network Interface sẽ là ens3
. Đầu ra của chúng ta có thể hiển thị tên thiết bị như ens...
hoặc eno....
Bây giờ chúng ta có thể chỉnh sửa cấu hình của Suricata và xác minh hoặc thay đổi tên Network Interface bằng cách mở file cấu hình /etc/suricata/suricata.yaml
sử dụng trình chỉnh sửa ưa thích của bạn:
Thực hiện tìm đến dòng dòng có nội dung af-packet:
ở dòng thứ 580. Bên dưới dòng đó là Interface mặc định mà Suricata sẽ sử dụng để kiểm tra lưu lượng. Chỉnh sửa dòng này để phù hợp với Interface của chúng ta như đã thực hiện kiểm tra ở trên:
Nếu như chúng ta cần kiểm tra thêm lưu lượng truy cập trên các Interface bổ sung, chúng ta có thể thêm nhiều - interface: eth... hơn. Ví dụ: để thêm một Interface được đặt tên ens4, chúng ta sẽ tìm đến cuối phần af-packet:
đến dòng 650. Để thêm Interface mới, cần thực hiện chèn nó vào trước -interface: default
như ở ví dụ sau:
Cần đảm bảo rằng chọn một cluster-id
có giá trị duy nhất cho mỗi Interface.
Cấu hình Live Rule Reloading
Suricata hỗ trợ Live Rule Reloading, có nghĩa là chúng ta có thể thêm, xóa và chỉnh sửa quy tắc mà không cần khởi động lại tiến trình Suricata đang chạy. Để bật tùy chọn Live Rule Reloading, hãy thực hiện di chuyển xuống cuối file cấu hình /etc/suricata/suricata.yaml
và thêm các dòng sau:
Với cài đặt này, chúng ta sẽ có thể gửi SIGUSR2 tín hiệu hệ thống đến quá 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 quá 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 quá trình:
Trong đó $(pidof suricata)
của lệnh tìm ID tiến trình của Suricata đang chạy. Phần đầu kill -usr2
của lệnh sử dụng kill tiện ích để gửi SIGUSR2 tín hiệu đến ID tiến trình.
Cập nhật Suricata Rulesets
Tại thời điểm này trong hướng dẫn, nếu chúng ta khởi động Suricata, chúng ta sẽ nhận được thông báo cảnh báo như sau trong nhật ký rằng không có quy tắc tải nào:
Theo mặc định, 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), vì vậy 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 truy cập không hợp lệ.
Suricata bao gồm một công cụ được gọi là suricata-update
có thể lấy 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:
Kết quả như sau:
Các dòng được đánh dấu cho biết đã tìm nạp quy tắc mới bởi suricata-update
và lưu chúng vào file cấu hình của Suricata. Nó cũng cho biết số lượng quy tắc đã được xử lý, trong ví dụ này, 32135 đã được thêm vào và 24742 đã được kích hoạt.
Thêm nhà cung cấp Ruleset
Công cụ suricata-update
này có thể tìm nạp các Ruleset từ nhiều nhà cung cấp bộ quy tắc miễn phí và thương mại. Một số bộ quy tắc như bộ ET Open mà chúng ta đã thêm là miễn phí, trong khi những bộ khác yêu cầu đăng ký trả phí.
Chúng ta có thể liệt kê nhóm nhà cung cấp Ruleset mặc định bằng cách sử dụng lệnh sau:
Chúng ta sẽ thu được kết quả như sau:
Ví dụ: Nếu chúng ta muốn thêm nhà cung cấp Ruleset tgreen/huntingquy
, chúng ta có thể bật bộ Ruleset này bằng cách sử dụng lệnh sau:
Sau đó, chạy lệnh suricata-update
và Ruleset mới sẽ được thêm vào, ngoài các quy tắc ET Open hiện có và bất kỳ quy tắc nào khác mà chúng ta đã tải xuống.
Xác thực cấu hình của Suricata
Bây giờ chúng ta đã chỉnh sửa file cấu hình của Suricata để bao gồm Community ID, network interface và bật live rule reloading, chúng ta nên kiểm tra cấu hình.
Suricata có chế độ kiểm tra tích hợp sẽ kiểm tra file cấu hình và mọi quy tắc bao gồm về tính hợp lệ. Thực thi lệnh sau:
Trong đó:
-T
: Chạy Suricata ở chế độ thử nghiệm.-v
: Sẽ in một số thông tin bổ sung.-c
: Cho Suricata biết nơi tìm tệp cấu hình của nó.
Quá trình kiểm tra có thể mất một chút thời gian tùy thuộc vào lượng CPU đã phân bổ cho Suricata và số lượng quy tắc đã thêm.
Với bộ quy tắc ET Open mặc định, chúng ta sẽ nhận được đầu ra như sau:
Khi quá trình chạy chế độ kiểm tra Suricata của bạn hoàn tất thành công, chúng có thể chuyển sang bước tiếp theo, đó là khởi động Suricata ở chế độ daemon.
Chạy Suricata
Bây giờ chúng ta đã có cấu hình Suricata và bộ quy tắc hợp lệ, chúng ta có thể khởi động máy chủ Suricata.
Như vậy Suricata đã hoạt động trên hệ thống của bạn. Chúng ta có thể kiểm tra bằng lệnh sau:
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. Chúng ta có thể sử dụng lệnh tail
để theo dõi một thông báo cụ thể trong nhật ký của Suricata cho biết nó đã hoàn tất khởi động:
Chúng ta sẽ nhận được một số dòng đầu ra. Tiếp tục đợi đầu ra cho đến khi nhận được một dòng như sau:
Dòng này cho biết Suricata đang chạy trên hệ thống của chúng ta.
Thử nghiệm Suricata Rules
Thử nghiệm dựa theo Quickstart
Bộ quy tắc ET Open mà chúng ta đã tải xuống chứa hơn 30000 quy tắc. 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à chúng ta đã tạo hay không.
Thực thi lệnh sau tạo một yêu cầu HTTP, yêu cầu này sẽ trả về phản hồi phù hợp với quy tắc cảnh báo của Suricata:
Lệnh curl
sẽ xuất ra một phản hồi như sau:
Dữ liệu phản hồi ví dụ này được thiết kế để kích hoạt cảnh báo, bằng cách trả lại kết quả đầu ra của một lệnh như id vậy có thể chạy trên hệ thống từ xa bị xâm nhập thông qua web shell.
Bây giờ chúng ta có thể kiểm tra nhật ký của Suricata để có 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à /var/log/suricata/eve.json
.
Đầu tiên chúng ta sẽ tiến hành check log tại file /var/log/suricata/fast.log
để kiểm tra xem sau khi thực thi lệnh curl
thì log Suricata sẽ tiến hành ghi những gì.
Chúng ta sẽ nhận thấy dòng thông báo như sau có chứa thông tin ATTACK_RESPONSE
kết quả đầy đủ như sau:
Tiếp theo chúng ta có thể kiểm tra log ghi tại file /var/log/suricata/eve.json
. Với file /var/log/suricata/eve.json
chúng ta cần sử dụng JSON để tiến hành phân tích file log này.
Suricata khuyến nghị sử dụng tiện ích jq
để đọc và lọc các mục nhập trong file này. Cài đặt jq
nếu jq
không có nó trên hệ thống của chúng ta bằng lệnh sau:
Sau khi cài đặt jq
thành công, chúng ta có thể lọc các eve.json bằng cách tìm kiếm ID 2100498 như lệnh sau:
Lệnh kiểm tra từng mục và in bất kỳ mục nhập nào có đối tượng, với signature_id khớp với giá trị 2100498 mà chúng ta đang tìm kiếm. Đầu ra sẽ giống như sau:
Thử nghiệm Rule ICMP
Chúng ta sẽ tiến hành thử nghiệm Rule ICMP của Suricata như sau:
Thực hiện ping đến VPS hoặc Server đã thiết lập Suricata, trong ví dụ này chúng ta sẽ tiến hành ping đến IP 103.97.125.151:
Quay trở lại VPS hoặc Server đã cài đặt và cấu hình Suricata chúng ta thực hiện check log realtime tại file /var/log/suricata/fast.log
bằng lệnh bên dưới:
Kết quả như sau:
Như vậy qua 2 thử nghiệm trên chúng ta nhận thấy 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 ra một cảnh báo để phân tích hoặc ghi nhật ký tiếp theo.
Tổng Kết.
Qua bài viết hướng dẫn trên chúng ta hoàn tất việc cài đặt và cấu hình Suricata trên Ubuntu 20.04. Hy vọng các bạn thành công trong việc cài đặt cũng như áp dụng được Suricata vào trong thực tế, công việc.
Tính năng đang được phát triển