BÀI VIẾT

Hướng dẫn cài đặt SIEM dùng Suricata và Elastic Stack trên Ubuntu 20.04

6.4K
author Nguyễn Ngọc Đang - 2022-03-14 16:07:22 (GMT+7)

Giới thiệu

Trong bài hướng dẫn trước chúng ta đã tìm hiểu về cách cài đặt và thiết lập 1 số cấu hình với Suricata, để nó như một hệ thống phát hiện xâm nhập (IDS) và ngăn chặn xâm nhập (IPS).

Trong hướng dẫn này, chúng ta sẽ khám phá cách tích hợp Suricata với Elasticsearch, KibanaFilebeat để bắt đầu tạo công cụ quản lý sự kiện và thông tin bảo mật (SIEM) trên Ubuntu 20.04. Các công cụ SIEM được sử dụng để thu thập, tổng hợp, lưu trữ và phân tích dữ liệu sự kiện nhằm tìm kiếm các mối đe dọa bảo mật và hoạt động đáng ngờ trên mạng và máy chủ của chúng ta.

Các thành phần sẽ sử dụng để xây dựng công cụ SIEM:

  • Elasticsearch: để lưu trữ, lập chỉ mục và tìm kiếm các sự kiện bảo mật đến từ máy chủ Suricata.
  • Kibana: để hiển thị nhật ký sự kiện bảo mật được lưu trữ trong Elasticsearch.
  • Filebeat: để phân tích cú pháp tệp nhật ký của Suricata eve.json và gửi từng sự kiện đến Elasticsearch để xử lý.
  • Suricata: để quét lưu lượng mạng để tìm các sự kiện đáng ngờ và ghi lại hoặc loại bỏ các gói không hợp lệ.

Đầu tiên, chúng ta sẽ cài đặt và định cấu hình Elasticsearch và Kibana với một số cài đặt xác thực cụ thể. Sau đó, sẽ thêm Filebeat vào hệ thống Suricata của chúng ta để gửi eve.json của nó tới Elasticsearch.

Cuối cùng, chúng sẽ ta kết nối với Kibana bằng SSH và trình duyệt web, sau đó tải và thao tác với các bảng điều khiển Kibana hiển thị các sự kiện và cảnh báo của Suricata.

Cài đặt Elasticsearch và Kibana trên Ubuntu

Điều kiện cần để cài đặt Elasticsearch và Kibana

Nếu như chúng ta đang theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata thì chúng ta đã có Suricata đang chạy trên máy chủ Ubuntu 20.04.

Nếu như chúng ta vẫn chưa cài đặt Suricata thì chúng ta có thể theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata

Chúng ta cũng sẽ cần một máy chủ thứ hai để lưu trữ Elasticsearch và Kibana. Máy chủ này sẽ được gọi là máy chủ Elasticsearch. Yêu cầu cần thiết phải là một máy chủ Ubuntu 20.04 với:

  • RAM 4GB
  • 2 CPU

Ngoài ra chúng ta cũng có thể chọn chạy Elasticsearch, Kibana, Filebeat và Suricata trên cùng một máy chủ để thử nghiệm.

Cài đặt Elasticsearch và Kibana

Đầu tiên để có thể cài đặt Elasticsearch và Kibana chúng ta cần thêm Elastic GPG key vào máy chủ của chúng ta bằng lệnh sau:

bash (root)
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

Tiếp theo, thêm danh sách nguồn vào thư mục sources.list.d trong đó apt sẽ tìm kiếm các nguồn mới:

bash (root)
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list

Sau đó chúng ta đã có thể cài đặt Elasticsearch và Kibana bằng cách thực thi lệnh sau:

bash (root)
apt update && apt install elasticsearch kibana

Sau khi đã cài đặt Elasticsearch và Kibana hoàn tất chúng ta cần tiến hành lưu lại địa chỉ IP của máy chủ đã được cài đặt. Chúng ta có thể sử dụng lệnh sau để kiểm tra:

bash (root)
ip -brief address show
Kết quả
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens3             UP             103.97.125.173/25 fe80::f816:3eff:febd:cbdf/64
ens4             UP             10.124.11.30/22 fe80::f816:3eff:fe1c:f8bb/64

Chúng ta cần ghi nhớ địa chỉ IP của máy chủ Elasticsearc(trong trường hợp này 10.124.11.30). Địa chỉ này sẽ được đề cập đến your_private_ip ngoài ra chúng ta cần lưu ý tên interface, trong trường hợp này ens4.

Trong phần tiếp theo, chúng ta sẽ định cấu hình Elasticsearch và Kibana để lắng nghe các kết nối trên địa chỉ IP đến từ máy chủ Suricata.

Cấu hình Elasticsearch

Elasticsearch được cấu hình để chỉ chấp nhận các kết nối cục bộ theo mặc định và không có bất kỳ xác thực nào được kích hoạt, vì vậy các công cụ như Filebeat sẽ không thể gửi nhật ký đến nó. Trong phần này của hướng dẫn, chúng ta sẽ định cấu hình cài đặt mạng cho Elasticsearch và sau đó kích hoạt mô-đun xpack tích hợp của Elasticsearch.

Cấu hình mạng Elasticsearch

Bởi vì máy chủ Elasticsearch và Suricata của chúng ta là riêng biệt do đó cần phải định cấu hình Elasticsearch để lắng nghe các kết nối trên interface của nó.

Mở file /etc/elasticsearch/elasticsearch.yml bằng chỉnh sửa ưa thích:

bash (root)
vi /etc/elasticsearch/elasticsearch.yml

Tìm dòng network.host: 192.168.0.1 tiến hành comment dòng này và thêm một dòng mới sau dòng đó để định cấu hình network.bind_host như bên dưới:

/etc/elasticsearch/elasticsearch.yml
...
# ---------------------------------- Network -----------------------------------
#
# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "10.124.11.30"]
#
...

Cần tiến hành thay thế your_private_ip sang IP máy chủ mà các bạn đã thiết lập.

Tiếp theo cần tiến hành thêm các dòng sau vào cuối file:

/etc/elasticsearch/elasticsearch.yml
. . .
discovery.type: single-node
xpack.security.enabled: true

Tuỳ chọn discovery.type cho phép Elasticsearch chạy dưới dạng một node duy nhất còn xpack.security.enabled bật một số tính năng bảo mật có trong Elasticsearch.

Lưu và đóng file khi chúng ta chỉnh sửa xong.

Tiếp theo, chúng ta sẽ khởi động Elasticsearch và sau đó định cấu hình mật khẩu để sử dụng mô-đun xpack.

Chúng ta đã định cấu hình mạng và bảo mật xpack cho Elasticsearch, bạn cần khởi động nó để các thay đổi có hiệu lực bằng cách thực thi lệnh sau:

bash (root)
systemctl start elasticsearch.service

Sau khi Elasticsearch đã được bật chúng ta tiến đến phần cấu hình mật khẩu Elasticsearch.

Cấu hình mật khẩu Elasticsearch

Chúng ta đã tiến hành bật xpack.security.enabled vì thế cần tạo mật khẩu cho người dùng Elasticsearch như hướng dẫn sau:

bash (root)
cd /usr/share/elasticsearch/bin
./elasticsearch-setup-passwords auto

Chúng ta sẽ nhận được đầu ra như sau.

Kết quả
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]

Khi được nhắc tiếp tục, hãy nhấn y và sau đó ENTER:

Kết quả
Changed password for user apm_system
PASSWORD apm_system = zCltq0sJ7TBZtctcgvVi

Changed password for user kibana_system
PASSWORD kibana_system = rZb6CvOrmot14Y6PjgB5

Changed password for user kibana
PASSWORD kibana = rZb6CvOrmot14Y6PjgB5

Changed password for user logstash_system
PASSWORD logstash_system = fT4iH7mDTZdhEVL7FSae

Changed password for user beats_system
PASSWORD beats_system = cGXcnzVoft9Uca94u4DH

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = C1EQBZcsR61qFkptf3BH

Changed password for user elastic
PASSWORD elastic = vodzGekhiBoIORVcYk2u

Chúng ta sẽ không thể chạy lại tiện ích này, vì vậy hãy đảm bảo ghi lại những mật khẩu này. Vì chúng ta sẽ sử dụng mật khẩu của người dùng trong phần tiếp theo của hướng dẫn này.

Tại thời điểm này trong hướng dẫn, chúng ta đã hoàn tất việc định cấu hình Elasticsearch. Phần tiếp theo giải thích cách định cấu hình cài đặt mạng của Kibana và xpack.

Cấu hình Kibana

Trong phần trước của hướng dẫn này, chúng ta đã định cấu hình Elasticsearch để lắng nghe các kết nối trên địa chỉ IP của máy chủ Elasticsearch. Chúng ta sẽ làm điều tương tự đối với Kibana để Filebeats trên máy chủ Suricata có thể tiếp cận.

Đầu tiên, cần kích hoạt xpackcủa Kibana. Sau đó,sẽ định cấu hình cài đặt mạng và chi tiết xác thực của Kibana để kết nối với Elasticsearch.

Kích hoạt trong Kibana xpack.security

Chúng ta có thể tạo các khóa mã hóa cần thiết bằng cách sử dụng kibana-encryption-keys có trong thư mục /usr/share/kibana/bin như sau:

bash (root)
cd /usr/share/kibana/bin/
./kibana-encryption-keys generate -q

Kết quả như sau:

Kết quả
xpack.encryptedSavedObjects.encryptionKey: 62f92ae5072b92cf9f8cd9c92877a4b1
xpack.reporting.encryptionKey: f6484ca8c9172cf082a45241c3ab71c2
xpack.security.encryptionKey: a3f7df71c746f2b4ed3f1b3cd29974fb

Bây giờ chúng ta sẽ thêm kết quả trên vào file cấu hình của Kibana /etc/kibana/kibana.yml như sau:

bash (root)
/etc/kibana/kibana.yml

Tiến hành thêm kết quả trên vào cuối file.

/etc/kibana/kibana.yml
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"
#
xpack.encryptedSavedObjects.encryptionKey: 62f92ae5072b92cf9f8cd9c92877a4b1
xpack.reporting.encryptionKey: f6484ca8c9172cf082a45241c3ab71c2
xpack.security.encryptionKey: a3f7df71c746f2b4ed3f1b3cd29974fb

Cấu hình mạng Kibana

Để cấu hình mạng của Kibana để nó có sẵn trên địa chỉ IP của máy chủ Elasticsearch, tìm dòng #server.host: "localhost" trong file /etc/kibana/kibana.yml. Thêm một dòng mới sau dòng với địa chỉ IP của máy chủ.

/etc/kibana/kibana.yml
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"
server.host: "10.124.11.30"

Lưu và đóng file khi đã chỉnh sửa xong.

Tiếp theo, chúng ta sẽ cần cấu hình tên người dùng và mật khẩu mà Kibana sử dụng để kết nối với Elasticsearch.

Cấu hình thông tin đăng nhập Kibana

Có hai cách để đặt tên người dùng và mật khẩu mà Kibana sử dụng để xác thực với Elasticsearch. Đầu tiên là chỉnh sửa file /etc/kibana/kibana.yml và thêm các giá trị vào đó. Phương pháp thứ hai là lưu trữ các giá trị trong kho khóa của Kibana , đây là một file được xáo trộn mà Kibana có thể sử dụng để lưu trữ.

Chúng tôi sẽ sử dụng phương pháp kho khóa trong hướng dẫn này vì nó tránh chỉnh sửa trực tiếp file cấu hình của Kibana.

Để thêm vào kho khóa bằng cách sử dụng kibana-keystore, trước tiên hãy di chuyển vào thư mục /usr/share/kibana/bin. Tiếp theo, chạy lệnh sau để đặt tên người dùng cho Kibana:

bash (root)
./kibana-keystore add elasticsearch.username

Tiến hành nhập username là kibana_system như sau:

Kết quả
Enter value for elasticsearch.username: *************

Bây giờ lặp lại lệnh tương tự cho mật khẩu.

bash (root)
./kibana-keystore add elasticsearch.password

Tiến hành nhập password đã được tạo bên trên khi nảy:

Kết quả
Enter value for elasticsearch.password: ********************

Bây giờ chúng ta đã định cấu hình mạng và xpack cho Kibana, cũng như thêm thông tin đăng nhập vào kho khóa, chúng ta cần khởi động nó để các thay đổi có hiệu lực.

bash (root)
systemctl start kibana.service

Khi Kibana bắt đầu, chúng ta có thể tiếp tục đến phần tiếp theo của hướng dẫn này, nơi chúng ta sẽ định cấu hình Filebeat trên máy chủ Suricata để gửi nhật ký của nó đến Elasticsearch.

Cài đặt Filebeat

Các quy trình Elasticsearch và Kibana đã được định cấu hình với cài đặt mạng và xác thực, bước tiếp theo là cài đặt và thiết lập Filebeat trên máy chủ Suricata.

Để bắt đầu cài đặt Filebeat, hãy thêm khóa Elastic GPG vào máy chủ Suricata bằng lệnh sau:

bash (root)
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

Kết quả như sau:

Kết quả
OK

Tiếp theo, thêm danh sách nguồn vào thư mục sources.list.d:

bash (root)
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list

Kết quả như sau:

Kết quả
deb https://artifacts.elastic.co/packages/7.x/apt stable main

Bây giờ chúng ta sẽ tiến hành cài đặt gói Filebeat:

bash (root)
apt update && apt install filebeat

Tiếp theo, chúng ta sẽ cần định cấu hình Filebeat để kết nối với cả Elasticsearch và Kibana. Mở /etc/filebeat/filebeat.yml bằng trình chỉnh sửa ưa thích của bạn:

bash (root)
vi /etc/filebeat/filebeat.yml

Thêm một dòng sau #host: "localhost:5601" trỏ đến địa chỉ IP và cổng của máy chủ Kibana:

/etc/filebeat/filebeat.yml
# =================================== Kibana ===================================

# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  #host: "localhost:5601"
   host: "10.124.11.30:5601"

Tìm Elasticsearch Output của file chỉnh sửa hosts usernamepassword để khớp với các giá trị cho máy chủ Elasticsearch:

/etc/filebeat/filebeat.yml
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["10.124.11.30:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "vodzGekhiBoIORVcYk2u"

Lưu và đóng file khi chúng ta chỉnh sửa xong.

Tiếp theo, kích hoạt mô-đun Suricata tích hợp sẵn của Filebeats bằng lệnh sau:

bash (root)
filebeat modules enable suricata

Kết quả như sau:

Kết quả
Enabled suricata

Bây giờ Filebeat đã được định cấu hình để kết nối với Elasticsearch và Kibana, với mô-đun Suricata được bật, bước tiếp theo là tải bảng điều khiển và vào Elasticsearch.

bash (root)
filebeat setup

Kết quả như sau:

Kết quả
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines

Nếu không có lỗi, tiến hành khởi động Filebeat. Nó sẽ bắt đầu gửi các sự kiện từ nhật ký của Suricata eve.json tới Elasticsearch.

bash (root)
systemctl start filebeat.service

Bây giờ chúng ta đã cấu hình Filebeat, Kibana và Elasticsearch để xử lý nhật ký Suricata, bước cuối cùng trong hướng dẫn này là kết nối với Kibana và khám phá trang tổng quan SIEM.

Tổng quan SIEM của Kibana

Kibana là thành phần đồ họa. Chúng ta sẽ sử dụng Kibana với trình duyệt để khám phá dữ liệu cảnh báo và sự kiện của Suricata. Vì chúng ta đã định cấu hình Kibana để chỉ khả dụng qua địa chỉ IP của máy chủ Elasticsearch, chúng ta sẽ cần sử dụng đường hầm SSH để kết nối với Kibana.

Kết nối với Kibana bằng SSH

Chạy lệnh sau trong một thiết bị đầu cuối trên máy tính của chúng ta để tạo đường hầm SSH tới Kibana:

bash (root)
ssh -L 5601:10.124.11.30:5601 root@103.97.125.173 -N

Trong đó:

  • -L chuyển tiếp lưu lượng truy cập đến hệ thống cục bộ của chúng ta trên cổng 5601 tới máy chủ từ xa.
  • Phần 10.124.11.30:5601của lệnh chỉ định dịch vụ trên máy chủ Elasticsearch nơi lưu lượng truy cập sẽ được chuyển tiếp đến.
  • IP 103.97.125.173 là địa chỉ IP công cộng mà chúng ta sử dụng để kết nối và quản lý máy chủ.
  • -N hướng dẫn SSH không chạy một lệnh giống như một trình /bin/bash, và thay vào đó, chỉ giữ kết nối mở.

Nếu muốn đóng đường hầm bất kỳ lúc nào, hãy nhấn CTRL+C.

Trên Windows giống như ảnh chụp màn hình sau:

Trên MacOS và Linux giống như ảnh chụp màn hình sau:

Khi chúng ta đã kết nối với máy chủ Elasticsearch qua SSH với cổng chuyển tiếp tại chỗ, hãy mở trình duyệt và truy cập http://127.0.0.1:5601 . Chúng ta sẽ được chuyển hướng đến trang đăng nhập của Kibana:

Nếu trình duyệt không thể kết nối với Kibana, sẽ nhận được một thông báo như sau:

Kết quả
channel 3: open failed: connect failed: No route to host

Lỗi này cho biết rằng đường hầm SSH không thể kết nối với dịch vụ Kibana trên máy chủ. Đảm bảo rằng đã chỉ định địa chỉ IP chính xác cho máy chủ Elasticsearch của mình và tải lại trang trong trình duyệt của bạn.

Đăng nhập vào máy chủ Kibana bằng Tên người dùng và mật khẩu của elastic mà chúng ta đã sao chép trước đó trong hướng dẫn này.

Sau khi đăng nhập vào Kibana, chúng ta có thể khám phá trang tổng quan Suricata mà Filebeat đã định cấu hình.

Hãy nhập các cụm từ tìm kiếm type:dashboard suricata. Tìm kiếm này sẽ trả về hai kết quả: Suricata Events và Suricata Alerts như hình sau:

Nhấp vào [Filebeat Suricata] Events Overview để truy cập trang tổng quan Kibana hiển thị tổng quan về tất cả các sự kiện Suricata đã ghi:

Để truy cập trang tổng quanSuricata Alerts, hãy lặp lại tìm kiếm hoặc nhấp vào Alerts. Kết quả sẽ giống như ảnh chụp màn hình sau:

Nếu chúng ta muốn kiểm tra các sự kiện và cảnh báo mà mỗi bảng điều khiển hiển thị, hãy cuộn xuống cuối trang sẽ tìm thấy một bảng liệt kê từng sự kiện và cảnh báo. Chúng ta có thể mở rộng từng mục nhập để xem mục nhập nhật ký gốc từ Suricata và kiểm tra chi tiết các trường khác nhau như IP của một cảnh báo, kiểu tấn công, ID chữ ký Suricata và các trường khác.

Kibana cũng tích hợp sẵn các bảng điều khiển mà chúng có thể truy cập bằng menu ở bên trái cửa sổ trình duyệt. Điều hướng đến Networkđể biết tổng quan về các sự kiện được hiển thị trên bản đồ, cũng như dữ liệu tổng hợp về các sự kiện trên mạng.

Chúng ta có thể cuộn xuống cuối trang để có bảng liệt kê tất cả các sự kiện phù hợp với khung thời gian tìm kiếm đã chỉ định của bạn. Cũng có thể kiểm tra chi tiết từng sự kiện hoặc chọn một sự kiện để tạo dòng thời gian Kibana, sau đó chúng ta có thể sử dụng để điều tra luồng lưu lượng truy cập cụ thể, cảnh báo hoặc ID cộng đồng.

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 Filebeat, Kibana và Elasticsearch để xử lý nhật ký 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 vào trong thực tế, công việc.


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Lệnh xóa tất cả IP trong ipset
Lệnh xóa tất cả IP trong ipset
Hướng dẫn thiết lập bảo mật máy chủ MongoDB
Hướng dẫn thiết lập bảo mật máy chủ MongoDB
Hướng dẫn cài đặt Snort trên Ubuntu 20.04
Hướng dẫn cài đặt Snort trên Ubuntu 20.04

Object Storage

Chuẩn S3, không giới hạn băng thông

Object Storage

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Bình luận

Tính năng đang được phát triển

Đang tải bình luận