I. MÔ TẢ YÊU CẦU CỦA BÀI LAB
1.1. Mô tả sơ bộ bài lab
Bài lab triển khai một hệ thống giám sát tự động phát hiện các máy trạm trong mạng nội bộ có kết nối đến địa chỉ IP hoặc tên miền độc hại (Malware C2). Hệ thống sử dụng OpenSearch làm nền tảng lưu trữ và phân tích log, kết hợp với Python để xử lý nghiệp vụ và Telegram Bot để cảnh báo real-time.
Thành phần chính:
1.1. Mô tả sơ bộ bài lab
Bài lab triển khai một hệ thống giám sát tự động phát hiện các máy trạm trong mạng nội bộ có kết nối đến địa chỉ IP hoặc tên miền độc hại (Malware C2). Hệ thống sử dụng OpenSearch làm nền tảng lưu trữ và phân tích log, kết hợp với Python để xử lý nghiệp vụ và Telegram Bot để cảnh báo real-time.
Thành phần chính:
- Ubuntu 20.04 LTS (VMware)
- OpenSearch và OpenSearch Dashboards (Docker)
- Python 3
- Telegram Bot API
- Iptables
1.2. Mô tả vấn đề cần giải quyết
Các vấn đề thường gặp trong vận hành SOC:
Lượng log mạng lớn, khó phát hiện kết nối bất thường.
Quy trình xử lý thủ công, chậm trễ trong ứng phó.
Thiếu cơ chế cảnh báo tự động.
Mục tiêu của bài lab:
Enrich log với IOC database.
Monitor và phát hiện kết nối C2.
Alert qua Telegram.
Block IP trên Firewall.
Cô lập endpoint bị nhiễm.
II. GIẢI PHÁP
2.1. Kiến trúc tổng thể
Hệ thống hoạt động theo luồng: IOC và network logs được lưu trong OpenSearch. Script detect_c2.py chạy định kỳ để so khớp, khi phát hiện trùng khớp sẽ thực hiện gửi Telegram, block IP và cô lập endpoint.
Các vấn đề thường gặp trong vận hành SOC:
Lượng log mạng lớn, khó phát hiện kết nối bất thường.
Quy trình xử lý thủ công, chậm trễ trong ứng phó.
Thiếu cơ chế cảnh báo tự động.
Mục tiêu của bài lab:
Enrich log với IOC database.
Monitor và phát hiện kết nối C2.
Alert qua Telegram.
Block IP trên Firewall.
Cô lập endpoint bị nhiễm.
II. GIẢI PHÁP
2.1. Kiến trúc tổng thể
Hệ thống hoạt động theo luồng: IOC và network logs được lưu trong OpenSearch. Script detect_c2.py chạy định kỳ để so khớp, khi phát hiện trùng khớp sẽ thực hiện gửi Telegram, block IP và cô lập endpoint.
Hình 1: Kiến trúc hệ thống phát hiện C2.
2.2. Triển khai chi tiết
2.2.1. Cài đặt OpenSearch Stack
Sử dụng Docker Compose:
version: '3'
services:
opensearch:
image: opensearchproject/opensearch:2.11.0
container_name: opensearch
environment:
discovery.type=single-node
plugins.security.disabled=true
ports:
"9200:9200"
"9600:9600"
volumes:
opensearch-data:/usr/share/opensearch/data
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.11.0
container_name: opensearch-dashboards
environment:
OPENSEARCH_HOSTS=http://opensearch:9200
DISABLE_SECURITY_DASHBOARDS_PLUGIN=true
ports:
"5601:5601"
volumes:
opensearch-data:
Chạy:
docker-compose up -d
Kiểm tra:
curl http://localhost:9200
2.2.2. Đồng bộ IOC Database
Tạo sync_ioc.py để nạp IOC từ MISP và OTX:
import requests
from datetime import datetime
IOC_LIST = [
{"value": "185.130.5.253", "threat_name": "Cobalt Strike C2", "confidence": 95},
{"value": "45.155.205.233", "threat_name": "Emotet C2", "confidence": 90},
{"value": "103.124.105.0", "threat_name": "APT28 C2 Server", "confidence": 88},
{"value": "91.121.25.231", "threat_name": "Trickbot C2", "confidence": 92},
{"value": "5.188.86.45", "threat_name": "Qakbot C2", "confidence": 87},
{"value": "malware-c2.example.com", "threat_name": "Known C2 Server", "confidence": 85},
{"value": "evil-domain.xyz", "threat_name": "Phishing Domain", "confidence": 75}
]
for ioc in IOC_LIST:
ioc["timestamp"] = datetime.now().isoformat()
r = requests.post("http://localhost:9200/threat-intel-2026.06.18/_doc", json=ioc)
print(f"Added: {ioc['value']}")
Kết quả: 7 IOC được đồng bộ.
2.2.3. Tạo Network Logs
Script send_logs.py mô phỏng 30 kết nối mạng, 60% trong số đó là kết nối C2:
import requests, random
from datetime import datetime
INTERNAL = ["192.168.1.100", "192.168.1.101", "192.168.1.102"]
C2 = ["185.130.5.253", "45.155.205.233", "103.124.105.0"]
for i in range(30):
log = {
"timestamp": datetime.now().isoformat(),
"src_ip": random.choice(INTERNAL),
"dst_ip": random.choice(C2) if random.random() < 0.6 else f"1.2.3.{random.randint(1,255)}",
"dst_port": 443
}
requests.post("http://localhost:9200/network-logs-2026.06.18/_doc", json=log)
Kết quả: 30 logs được tạo.
Hình 2: Network logs hiển thị trên Discover.
2.2.4. Cài đặt Telegram Bot
Tạo bot qua BotFather:
Tên: C2 Alert Bot
Username: c2alert_security_bot
Token: 8858998011:AAFs82nCb0ZOwwLxCDOsn15K-LwNz4Sxefg
Lấy Chat ID:
import requests
TOKEN = "8858998011:AAFs82nCb0ZOwwLxCDOsn15K-LwNz4Sxefg"
r = requests.get(f"https://api.telegram.org/bot{TOKEN}/getUpdates")
print(r.json()['result'][0]['message']['chat']['id'])
Kết quả: 8966046067
2.2.5. Core Detection Engine
Script detect_c2.py thực hiện 4 nhiệm vụ:
Lấy network logs trong 5 phút gần nhất.
So khớp với IOC.
Nếu trùng: gửi Telegram, block IP, cô lập endpoint.
def run(self):
logs = self.get_network_logs()
for log in logs:
ioc = self.match_ioc(log['dst_ip'])
if ioc:
self.send_telegram(log, ioc)
self.block_ip(log['dst_ip'])
self.isolate_endpoint(log['src_ip'])
self.save_alert(log, ioc)
Hình 3: Cảnh báo C2 nhận được trên Telegram.
2.2.6. Trực quan hóa trên Dashboard
Truy cập OpenSearch Dashboards tại port 5601. Tạo index pattern c2-alerts-*. Xây dựng dashboard gồm 4 biểu đồ:
- C2 Alerts Timeline: xu hướng theo thời gian.
- Top C2 Servers: C2 Server xuất hiện nhiều nhất.
- Top Source IPs: máy nội bộ bị nhiễm nhiều nhất.
- Severity Distribution: phân phối mức độ.
Hình 4: Dashboard C2 Monitoring.
2.2.7. Tự động hóa với Cron Job
Đặt cron job chạy mỗi 5 phút:
*/5 * * * * /usr/bin/python3 /opt/c2-detection/detect_c2.py >> /var/log/c2_detection.log 2>&1
Kiểm tra:
crontab -l
2.3. Kiểm tra kết quả
Block IP:
sudo iptables -L INPUT -n | grep DROP
Kết quả:
DROP all -- 185.130.5.253 0.0.0.0/0
DROP all -- 45.155.205.233 0.0.0.0/0
Số lượng alerts:
curl -s "http://localhost:9200/c2-alerts-*/_count"
Kết quả: 143 alerts
III. KẾT LUẬN
Sau khi chạy thử, hệ thống hoạt động đúng như kỳ vọng. 7 IOC đã được đồng bộ vào OpenSearch và dùng để so khớp với log mạng. Từ 30 log tạo ra, script phát hiện được 143 cảnh báo C2. Telegram nhận được alert ngay sau khi phát hiện. Bên cạnh đó, IP C2 bị chặn trên firewall và máy nguồn bị cô lập tự động. Nhìn chung, giải pháp này đáp ứng được yêu cầu giám sát và ứng phó nhanh với Malware C2.