← TRỞ VỀ PORTFOLIO
CASE 03DETECTION ENGINEERINGPYTORCH / GNN

Realtime C2 Detection with GNN

Research prototype phát hiện C2 bằng cách biểu diễn network traffic thành đồ thị giao tiếp động thay vì phân loại từng flow độc lập.

Approach

Quan sát quan hệ, không chỉ quan sát từng packet/flow.

Pipeline xây dynamic IP-to-IP graph trong sliding window, tổng hợp 14 node features và chạy GraphSAGE hoặc GATv2. Cách biểu diễn này hướng tới phát hiện các mẫu beaconing và neighborhood bất thường.

Engineering

Streaming pipeline tách ba trách nhiệm.

  1. Flow builder parse và replay timestamp.
  2. Graph updater duy trì window, TTL và tạo PyG snapshot.
  3. Inference worker dự đoán, tạo explanation và chuyển alert sang API/dashboard.

Evidence

Code, tests và reproducibility trước metric.

Repo có data parser, graph builder, baseline/GNN models, API, dashboard, Docker và CI. README chủ động yêu cầu tái tạo metric từ scripts và không coi số ví dụ là kết quả đã xác minh nếu thiếu artifact cuối.

README ghi rõ: "Numbers below come from reports/final_metrics.json" — nhưng hai nguồn không khớp nhau. Model: GraphSAGE v3, window 60s, 18-dim (14 flow + 4 temporal), CTU-13 Scenario 10.
F1 = 0.652README.md §Results, "Model Comparison" — ngưỡng 0.5, precision 0.958, recall 0.494
F1 = 0.3951reports/final_metrics.json → models.graphsage.f1_default — cùng ngưỡng mặc định
F1 = 0.6328reports/final_metrics.json → models.graphsage.f1_tuned — ngưỡng tối ưu 0.9118 (khác ngưỡng README dùng)
chưa đối chiếu
F1 theo nguồn — chưa đối chiếu 0.00.51.0 0.652 README 0.3951 JSON (default thr) 0.6328 JSON (tuned thr)

What I learned

Một ML demo tốt phải phân biệt code-complete và result-complete.

Model architecture có thể đã chạy, nhưng metric chỉ nên xuất hiện trong CV khi dataset, split, artifact và lệnh tái tạo đều rõ ràng. Đây là ranh giới giữa một claim hấp dẫn và một claim có thể bảo vệ khi phỏng vấn.

Scope trung thực: research prototype; không tuyên bố hiệu năng model khi chưa có artifact metrics được tái tạo.