SIEM/Log Management Cấu hình Security Analytics plugin – SIGMA Detector Rules

I. YÊU CẦU BÀI LAB
1.1. Giới thiệu bài lab

Bài lab này thực hiện việc cài đặt Security Analytics plugin trên hệ thống ELK Stack. Sau đó tích hợp Sigma Detector Rules để phát hiện các hành vi bất thường trên ba nền tảng là Windows, Linux và Network. Sigma là một định dạng rule phát hiện phổ quát cho phép viết một rule duy nhất và có thể chuyển đổi sang nhiều nền tảng SIEM khác nhau. Mục tiêu cuối cùng của bài lab là tạo detector map với index pattern và thiết lập gửi cảnh báo findings đến Telegram khi rule được kích hoạt.

Thiết bị sử dụng trong bài lab:​
  • Máy ảo Ubuntu 20.04 LTS.​
  • ELK Stack phiên bản 7.17.15 bao gồm Elasticsearch và Kibana.​
  • Sigma CLI và các backend plugins cần thiết.​
  • Telegram Bot API để gửi cảnh báo.​
1.2. Mô tả vấn đề cần giải quyết
Trong thực tế vận hành, các đội ngũ SOC phải làm việc với nhiều nền tảng SIEM khác nhau. Mỗi nền tảng lại có cú pháp detection riêng biệt khiến cho việc duy trì các quy tắc phát hiện trở nên khó khăn và tốn nhiều công sức. Sigma ra đời để giải quyết bài toán này bằng cách cung cấp một định dạng rule chuẩn có thể chuyển đổi sang nhiều backend khác nhau như Elasticsearch, Splunk, QRadar và Microsoft Sentinel. Bài lab này hướng dẫn cách tích hợp Sigma rules vào ELK Stack từ khâu tạo rule, chuyển đổi sang Elasticsearch query, tạo detection rule trên Kibana cho đến thiết lập cảnh báo qua Telegram.

II. TRIỂN KHAI
2.1. Mô hình giải pháp tổng thể

Toàn bộ quy trình được thực hiện theo luồng sau:

Sigma Rules ở định dạng YAML → Dùng sigma-cli để chuyển đổi → Elasticsearch Lucene Query → Tạo Detection Rule trên Kibana → Gửi cảnh báo qua Telegram khi có phát hiện.

Trong đó các Sigma rules được viết cho ba loại log khác nhau bao gồm log từ hệ thống Linux (SSH authentication), log từ hệ thống Windows (PowerShell process) và log từ thiết bị mạng (kết nối đến địa chỉ IP độc hại). Sau khi chuyển đổi thành công, các query sẽ được đưa vào Kibana dưới dạng detection rules và liên kết với các index pattern tương ứng.

2.2. Cài đặt ELK Stack
Đầu tiên cần tạo file docker-compose.yml để khởi chạy Elasticsearch và Kibana. Nội dung file như sau:
yaml

version: '3.3'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.15
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
networks:
- sigma
kibana:
image: docker.elastic.co/kibana/kibana:7.17.15
container_name: kibana
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- sigma
networks:
sigma:
driver: bridge

Sau đó chạy lệnh sau để khởi động stack:

bash

sudo docker-compose up -d
sleep 60

Kiểm tra các container đã chạy bằng lệnh:

bash

sudo docker ps
1781014414269.png

Hình 1: Kết quả lệnh docker ps hiển thị hai container elasticsearch và kibana đang chạy ổn định

Kết quả hiển thị cho thấy cả hai container đều có trạng thái Up chứng tỏ ELK Stack đã hoạt động bình thường.

2.3. Cài đặt Sigma CLI
Sigma CLI là công cụ dòng lệnh dùng để chuyển đổi các rule từ định dạng Sigma sang các ngôn ngữ truy vấn của các nền tảng SIEM khác nhau. Để cài đặt Sigma CLI cần tạo một virtual environment riêng biệt:

bash

sudo mkdir -p /opt/sigma-venv
sudo chown $USER:$USER /opt/sigma-ven
python3 -m venv /opt/sigma-venv
source /opt/sigma-venv/bin/activate
pip install sigma-cli

Sau khi cài đặt xong, cần cài thêm backend plugin cho Elasticsearch:

bash

sigma plugin install elasticsearch

Để kiểm tra Sigma CLI đã hoạt động tốt hay chưa, có thể chạy lệnh sau:

bash

sigma plugin list --plugin-type backend
1781019116654.png

Hình 2: Danh sách các backend plugins đã cài đặt trong đó có elasticsearch backend

2.4. Tạo ba Sigma rules cho Linux, Windows và Network
Trước hết cần tạo thư mục chứa các rule tùy chỉnh:

bash

sudo mkdir -p /opt/sigma-rules/custom
sudo chown -R $USER:$USER /opt/sigma-rules

Rule thứ nhất dùng để phát hiện SSH Brute Force trên hệ thống Linux:

bash

cat > /opt/sigma-rules/custom/ssh_bruteforce.yml << 'EOF'
title: SSH Brute Force Detection
id: 11111111-1111-1111-1111-111111111111
status: test
description: Detects SSH authentication failures
logsource:
product: linux
service: auth
detection:
selection:
Message|contains:
- 'Failed password'
- 'authentication failure'
condition: selection
level: medium
EOF

Rule thứ hai dùng để phát hiện PowerShell Execution trên hệ thống Windows:

bash

cat > /opt/sigma-rules/custom/windows_powershell.yml << 'EOF'
title: PowerShell Process Execution
id: 22222222-2222-2222-2222-222222222222
status: test
description: Detects PowerShell process creation
logsource:
product: windows
category: process_creation
detection:
selection:
Image|endswith: '\powershell.exe'
condition: selection
level: medium
EOF

Rule thứ ba dùng để phát hiện kết nối đến các địa chỉ IP độc hại từ thiết bị mạng:

bash

cat > /opt/sigma-rules/custom/network_malicious_ip.yml << 'EOF'
title: Malicious IP Connection
id: 33333333-3333-3333-3333-333333333333
status: test
description: Detects connections to known malicious IPs
logsource:
product: network
service: firewall
detection:
selection:
dst_ip:
- '185.130.5.253'
- '45.155.205.233'
- '103.124.105.0'
condition: selection
level: high
EOF

2.5. Chuyển đổi Sigma rules sang Elasticsearch query format

Sau khi có ba rule, bước tiếp theo là chuyển đổi chúng sang định dạng mà Elasticsearch có thể hiểu được.

Chuyển đổi rule SSH Brute Force:

bash

source /opt/sigma-venv/bin/activate
sigma convert --target lucene --without-pipeline /opt/sigma-rules/custom/ssh_bruteforce.yml

1781021635249.png

Hình 3: Kết quả chuyển đổi rule SSH thành query Message Failed\ password OR authentication\ failure)

Chuyển đổi rule PowerShell Execution:

bash

sigma convert --target lucene --without-pipeline /opt/sigma-rules/custom/windows_powershell.yml

1781022066044.png

Hình 4: Kết quả chuyển đổi rule PowerShell thành query Image:*\powershell.exe

Chuyển đổi rule Malicious IP Connection:

bash

sigma convert --target lucene --without-pipeline /opt/sigma-rules/custom/network_malicious_ip.yml

1781022451966.png

Hình 5: Kết quả chuyển đổi rule Malicious IP thành query dst_ip185.130.5.253 OR 45.155.205.233 OR 103.124.105.0)

2.6. Khởi tạo Detection Engine và tạo Index Patterns

Trước khi có thể tạo detection rules, cần phải khởi tạo detection engine trên Kibana:

bash

curl -X POST "http://localhost:5601/api/detection_engine/index" -H 'kbn-xsrf: true'

Tiếp theo, tạo các index patterns tương ứng cho từng loại log. Index pattern là cách để Kibana biết được cần phải tìm kiếm dữ liệu ở những chỉ mục nào.

bash

curl -X POST "http://localhost:5601/api/saved_objects/index-pattern" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'

{
"attributes": {
"title": "linux-logs-*",
"name": "linux-logs",
"timeFieldName": "@timestamp"
}
}'

curl -X POST "http://localhost:5601/api/saved_objects/index-pattern" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'

{
"attributes": {
"title": "windows-logs-*",
"name": "windows-logs",
"timeFieldName": "@timestamp"
}
}'

curl -X POST "http://localhost:5601/api/saved_objects/index-pattern" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'

{
"attributes": {
"title": "network-logs-*",
"name": "network-logs",
"timeFieldName": "@timestamp"
}
}'
1781023893260.png

Hình 6: Danh sách các index patterns đã tạo bao gồm linux-logs-, windows-logs- và network-logs-*

2.7. Tạo Detection Rules trên Kibana

Sau khi đã có index patterns, tiến hành tạo ba detection rules tương ứng với ba Sigma rules đã chuyển đổi.

Rule phát hiện SSH Brute Force:

bash

curl -X POST "http://localhost:5601/api/detection_engine/rules" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'

{
"rule_id": "sigma-ssh-bruteforce-001",
"name": "Sigma: SSH Brute Force Detection",
"description": "Phat hien nhieu lan dang nhap SSH that bai",
"index": ["linux-logs-*"],
"query": "Message*Failed password* OR *authentication failure*)",
"severity": "medium",
"risk_score": 50,
"type": "query",
"interval": "5m",
"from": "now-5m",
"enabled": true
}'

Rule phát hiện PowerShell Execution:

bash

curl -X POST "http://localhost:5601/api/detection_engine/rules" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'

{
"rule_id": "sigma-powershell-001",
"name": "Sigma: PowerShell Process Execution",
"description": "Phat hien tien trinh PowerShell duoc khoi chay",
"index": ["windows-logs-*"],
"query": "Image:*\\\\powershell.exe",
"severity": "medium",
"risk_score": 45,
"type": "query",
"interval": "5m",
"from": "now-5m",
"enabled": true
}'
Rule phát hiện Malicious IP Connection:

bash

curl -X POST "http://localhost:5601/api/detection_engine/rules" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'
{
"rule_id": "sigma-malicious-ip-001",
"name": "Sigma: Malicious IP Connection",
"description": "Phat hien ket noi den dia chi IP doc hai",
"index": ["network-logs-*"],
"query": "dst_ip185.130.5.253 OR 45.155.205.233 OR 103.124.105.0)",
"severity": "high",
"risk_score": 75,
"type": "query",
"interval": "5m",
"from": "now-5m",
"enabled": true
}'

Kiểm tra danh sách các rules đã tạo:

bash

curl -s "http://localhost:5601/api/detection_engine/rules/_find" | python3 -m json.tool | grep -E "rule_id|name"

1781024223389.png

Hình 7: Ba detection rules đã được tạo thành công trong Kibana

2.8. Tạo Telegram Bot và lấy Chat ID

Để nhận được cảnh báo qua Telegram, cần tạo một bot và lấy chat ID. Các bước thực hiện như sau:

Mở ứng dụng Telegram, tìm kiếm BotFather. Gửi tin nhắn /newbot cho BotFather. Đặt tên cho bot là Security Alert Bot và đặt username là SecurityAlertBot. Sau đó BotFather sẽ cung cấp một API token. Lưu lại token này.
Tiếp theo, tạo một group mới trên Telegram, thêm bot vừa tạo vào group. Gửi một tin nhắn bất kỳ trong group. Sau đó chạy lệnh sau để lấy chat ID:

bash

curl -s "https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates" | python3 -m json.tool

Tìm dòng "chat":{"id": -123456789} và ghi lại số chat ID (thường là số âm).

2.9. Tạo Watcher Alert gửi findings đến Telegram

Trước khi tạo watcher, cần kích hoạt trial license:

bash

curl -X POST "http://localhost:9200/_license/start_trial?acknowledge=true"

Sau đó tạo watcher với nội dung sau (thay YOUR_TOKEN và YOUR_CHAT_ID bằng giá trị thật):

bash

TELEGRAM_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
curl -X PUT "http://localhost:9200/_watcher/watch/sigma_telegram_alert" -H 'Content-Type: application/json' -d'

{
"trigger": { "schedule": { "interval": "5m" } },
"input": {
"search": {
"request": {
"indices": [".siem-signals-default"],
"body": {
"query": {
"range": { "@timestamp": { "gte": "now-5m" } }
}
}
}
}
},
"condition": {
"compare": { "ctx.payload.hits.total.value": { "gt": 0 } }
},
"actions": {
"telegram_alert": {
"webhook": {
"scheme": "https",
"host": "api.telegram.org",
"port": 443,
"method": "post",
"path": "/bot'"$TELEGRAM_TOKEN"'/sendMessage",
"body": "{\"chat_id\": \"'"$CHAT_ID"'\", \"text\": \"SIGMA ALERT: {{ctx.payload.hits.total.value}} detection(s) found. Check Kibana for details.\"}"
}
}
}
}'

Kiểm tra watcher đã được tạo thành công:

bash

curl -s "http://localhost:9200/_watcher/watch/sigma_telegram_alert?pretty" | head -15
1781024326273.png

Hình 8: Watcher alert sigma_telegram_alert đã được tạo với trạng thái active

III. KẾT LUẬN
3.1. Kết quả đạt được


Sau quá trình triển khai, toàn bộ các yêu cầu của bài lab đã được đáp ứng. Sigma CLI đã được cài đặt thành công cùng với backend plugin cho Elasticsearch. Ba Sigma rules cho ba nền tảng Linux, Windows và Network đã được tạo và chuyển đổi sang Elasticsearch Lucene query format. Detection engine trên Kibana đã được khởi tạo và ba detection rules đã được tạo tương ứng với ba Sigma rules. Các index patterns cho từng loại log cũng đã được tạo để liên kết với các rule. Telegram bot đã được cấu hình và watcher alert đã được tạo để gửi cảnh báo findings đến Telegram mỗi khi có rule được kích hoạt.

3.2. Giá trị thực tế

Hệ thống tích hợp Sigma Detector Rules mang lại nhiều lợi ích thiết thực cho công tác vận hành bảo mật. Thứ nhất, việc sử dụng Sigma rules giúp chuẩn hóa quy trình phát hiện đe dọa, chỉ cần viết rule một lần có thể sử dụng trên nhiều nền tảng SIEM khác nhau. Thứ hai, cảnh báo qua Telegram giúp đội ngũ bảo mật nhận được thông báo ngay lập tức khi có sự kiện bất thường xảy ra mà không cần phải liên tục theo dõi Kibana. Thứ ba, hệ thống có thể dễ dàng mở rộng bằng cách bổ sung thêm nhiều Sigma rules khác từ cộng đồng SigmaHQ hoặc tự viết thêm các rule phù hợp với môi trường của tổ chức. Ngoài ra cũng có thể kết nối với các kênh cảnh báo khác như Slack, Microsoft Teams hoặc Webhook tùy chỉnh


 
Sửa lần cuối:
Back
Top