ThuyLinhDo0808/Zero-day-Threat-Hunting-System

GitHub: ThuyLinhDo0808/Zero-day-Threat-Hunting-System

基于图神经网络的实时网络流量异常检测系统,通过将网络事件建模为动态图来发现零日攻击和高级持续性威胁。

Stars: 0 | Forks: 0

# Threat Hunter AI — 基于图的零日漏洞 / APT 检测 MVP 一种下一代网络防御系统,将流量建模为动态图 (IP、端口、进程作为节点;连接/syscalls 作为边),并使用 图神经网络(Graph Neural Network)实时标记异常子图——而不是 匹配已知的特征签名。 ## 1. 架构 ``` ┌────────────────────┐ │ Zeek / Suricata │ (simulated here by log_generator.py) │ conn.log, dns.log │ └─────────┬──────────┘ │ JSON events ▼ ┌────────────────────┐ │ Kafka topic: │ (simulated by an in-process asyncio │ "network-events" │ queue — see data_pipeline/kafka_producer.py) └─────────┬──────────┘ │ consume ▼ ┌────────────────────┐ │ Graph Builder │ data_pipeline/graph_builder.py │ (sliding window) │ → builds torch_geometric.data.Data └─────────┬──────────┘ │ Data(x, edge_index, edge_attr) ▼ ┌────────────────────┐ │ GNN Inference │ ml_model/inference.py │ (GraphSAGE, node │ → per-node anomaly score [0,1] │ anomaly scoring) │ → calibrated threshold + hysteresis └─────────┬──────────┘ │ scores + alerts ▼ ┌────────────────────┐ │ FastAPI backend │ backend/app/main.py │ REST + WebSocket │ → /ws/graph streams graph+alerts └─────────┬──────────┘ │ WebSocket (JSON) ▼ ┌────────────────────┐ │ Next.js dashboard │ frontend/ │ react-force-graph │ → live graph + alert panel └────────────────────┘ ``` Elasticsearch/Kibana 伴随该 pipeline 运行,用于长期日志存储 和分析师的深入查询(Logstash/Zeek → ES)。MVP 的实时检测 路径并不需要它们,因此它们在 `data_pipeline/README_ELK.md` 中进行说明,而未在代码中模拟——检测路径(Kafka → Graph → GNN → API → UI) 才是下方已实现且可运行的部分。 ## 2. 目录结构 ``` threat-hunter-ai/ ├── README.md ├── data_pipeline/ │ ├── log_generator.py # simulates Zeek conn.log JSON events (benign + attack bursts) │ ├── kafka_producer.py # thin wrapper: real kafka-python if available, else asyncio.Queue mock │ ├── graph_builder.py # sliding-window stream -> PyG Data objects, feature engineering │ └── README_ELK.md # notes on wiring real Zeek/Logstash/Elasticsearch later ├── ml_model/ │ ├── gnn_model.py # GraphSAGE/GAT anomaly model definition │ ├── train.py # training loop on labeled benign/malicious graph snapshots │ ├── inference.py # real-time scoring + thresholding/hysteresis to cut false positives │ └── dataset.py # synthetic labeled dataset generator (benign vs ransomware/APT patterns) ├── backend/ │ ├── requirements.txt │ └── app/ │ ├── main.py # FastAPI app, WebSocket /ws/graph, REST /alerts, /health │ ├── model_service.py # loads GNN once, exposes score_graph() │ └── stream_manager.py # bridges data_pipeline generator -> connected websocket clients └── frontend/ ├── package.json ├── lib/ │ └── useThreatSocket.js # WebSocket hook with reconnect + backoff ├── components/ │ ├── GraphView.jsx # react-force-graph-2d live network visualization │ ├── AlertPanel.jsx # scrolling list of high-confidence alerts │ └── Sidebar.jsx # stats: nodes, edges, avg score, threshold slider └── pages/ ├── index.jsx # dashboard layout └── _app.jsx ``` ## 3. 在本地运行 MVP(无需外部服务) ``` # 1. ML + backend cd backend pip install -r requirements.txt python -m app.main # starts FastAPI on :8000, auto-generates mock traffic internally # 2. Frontend cd frontend npm install npm run dev # Next.js on :3000, connects to ws://localhost:8000/ws/graph ``` 不需要 Kafka、Zeek 或 Elasticsearch 集群即可查看其端到端的运行情况: `data_pipeline/log_generator.py` 会合成真实的正常流量,并 定期注入勒索软件/APT 流量突发(C2 beaconing、横向移动扇出、 将海量文件写入特征签名转化为流特征),并且 当 `kafka` 包 / broker 不存在时,`kafka_producer.py` 会回退到内存异步队列,因此 `backend/app/main.py` 可以 独立运行整个循环。以后切换到真实的 Kafka + Zeek 只需更改一行配置 (参见 `README_ELK.md`)。
标签:AMSI绕过, Kafka, Metaprompt, SonarQube插件, 图神经网络, 威胁检测, 流计算, 网络安全, 网络流量分析, 自定义脚本, 逆向工具, 隐私保护