🚨 Xây Dựng Pipeline Triage IOC Với Suricata + ML + Docker
Honeypots tạo ra rất nhiều log ồn ào. Thách thức là làm thế nào để nhanh chóng xác định IP nào xứng đáng nhận sự chú ý của bạn và IP nào chỉ là tiếng ồn nền? Trong bài viết này, tôi sẽ hướng dẫn cách tôi xây dựng một pipeline triage IOC tiếp nhận telemetry từ Suricata/Zeek, đánh giá các IP nghi ngờ, áp dụng machine learning không giám sát và xuất ra các danh sách chặn có thể hành động.
🌐 Vấn Đề
Nếu bạn đã từng chạy một honeypot như T-Pot, bạn sẽ biết đến:
- Gigabyte các cảnh báo Suricata/Zeek
- Hàng ngàn IP nguồn duy nhất
- Vô số false positive
Việc phân loại thủ công tất cả những điều này không thể mở rộng. Tôi muốn có một pipeline có thể tự động:
- Tập hợp hoạt động theo IP
- Đánh giá từng IP về hành vi nghi ngờ
- Sử dụng ML để đánh dấu các bất thường
- Xuất ra các file case dễ đọc cho con người + danh sách chặn
🛠️ Pipeline Triage IOC
Tôi đã xây dựng một công cụ Python (ioc_triage.py
) tiếp nhận log NDJSON và sản xuất các đầu ra có cấu trúc.
Tính Năng Chính
- Tiếp nhận log từ Suricata/Zeek/T-Pot
- Tập hợp các đặc điểm như lưu lượng/min, cổng duy nhất, entropy, độ bùng nổ
- Đánh giá dựa trên quy tắc (có thể cấu hình qua
config.yaml
) - Machine Learning không giám sát (IsolationForest + LOF + OCSVM, tùy chọn PyOD HBOS+COPOD)
- Kết hợp quy tắc + ML → tầng kết hợp (quan sát, điều tra, block_candidate)
Đầu Ra:
- CSV theo từng IP
- File case JSON
- Danh sách chặn (theo IP và prefix)
⚙️ Cách Thức Hoạt Động
1. Tiếp Nhận
Đọc log NDJSON từ Suricata:
bash
python scripts/ioc_triage.py \
--input data/samples/raw.ndjson \
--hours 72 -vv
2. Tập Hợp
Tính toán cho từng IP nguồn:
- Lưu lượng/phút
- Cổng src/dst duy nhất
- Độ bùng nổ (biến thể hoạt động)
- Entropy cổng
- Số lượng cảnh báo
3. Đánh Giá
Cấu hình trọng số quy tắc trong scripts/config.yaml
:
yaml
score:
weights:
flows_per_min: 2.0
unique_dst_ports: 1.6
unique_src_ports: 1.3
alert_count: 0.8
max_severity: 0.6
thresholds:
block: 7.0
investigate: 3.5
4. Machine Learning
Sử dụng phát hiện bất thường không giám sát:
- IsolationForest
- LocalOutlierFactor
- OneClassSVM (Tùy chọn PyOD HBOS+COPOD)
Điểm số được chuẩn hóa và kết hợp thành ml_score + ml_confidence
.
5. Kết Hợp
Quy tắc + ML = tier_combined
→ quyết định cuối cùng: quan sát, điều tra hoặc block_candidate.
📦 Cài Đặt
Clone repository:
bash
git clone https://github.com/YOUR-USERNAME/ioc-triage-pipeline.git
cd ioc-triage-pipeline
Cài đặt các yêu cầu:
bash
pip install -r requirements.txt
(Các tùy chọn ML thêm):
bash
pip install pyod scikit-learn
Hoặc chạy qua Docker:
bash
docker build -t ioc-triage .
docker run -it --rm -v $(pwd):/app ioc-triage \
python scripts/ioc_triage.py --input data/samples/raw.ndjson --hours 72 -vv
🔍 Ví Dụ Đầu Ra
ip score ml_score tier ml_tier tier_combined reason
61.184.87.135 9.455 0.944 block_candidate block block_candidate flows/min cao, độ bùng nổ cao, nhiều cổng
Đầu Ra:
data/outputs/enriched.csv
→ các đặc điểm theo từng IPcases/.json
→ file caseoutputs/blocklist_combined.tsv
→ danh sách chặn đã hợp nhấtoutputs/blocklist_combined_prefix.tsv
→ prefix /24 + /48 đã được tổng hợp
🙌 Tại Sao Điều Này Quan Trọng
Dự án này biến tiếng ồn thô từ honeypot thành thông tin có thể hành động:
- Các nhà phân tích có thể tập trung vào các mối đe dọa có độ tin cậy cao
- Danh sách chặn tự động cập nhật
- Bạn có thể tinh chỉnh ngưỡng & tỷ lệ ô nhiễm ML
Nó cũng rất tuyệt vời cho sinh viên (như tôi!) để thể hiện kỹ năng ML + an ninh mạng theo cách thực tế, sẵn sàng cho portfolio.
📚 Những Gì Tiếp Theo?
- Thử nghiệm các mô hình deep learning (autoencoders, transformers)
- Thêm làm giàu chủ động (WHOIS, VirusTotal, AbuseIPDB)
- Xây dựng dashboard cho triage trực tiếp
Nếu bạn quan tâm đến honeypots, ML hoặc thông tin về mối đe dọa, hãy cho tôi biết và đánh giá ⭐ trên GitHub về những tính năng bạn muốn thấy tiếp theo!