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:
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
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
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
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
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
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"
}
}'
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"
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
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
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
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
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
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
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
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"
}
}'
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"
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
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: