koushikchowdary6/network-anomaly-detector

GitHub: koushikchowdary6/network-anomaly-detector

利用 Isolation Forest 对 NetFlow 流量进行无监督异常检测,无需标签即可标记端口扫描、数据外泄和 DoS 等异常行为。

Stars: 0 | Forks: 0

# 网络异常检测器 📡🌲 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/koushikchowdary6/network-anomaly-detector/actions/workflows/ci.yml) 使用 **Isolation Forest** 的网络流量**无监督**异常检测。它会学习正常 NetFlow 格式流量的特征,并标记 异常值——如端口扫描突发、数据外泄、DoS 泛洪——**而完全无需告知 哪些流量属于攻击**。这正是无监督 检测对于 SOC 的意义所在:它可以发现那些基于特征规则的系统或 在旧标签上训练的监督模型所遗漏的新型 攻击。 ## 每个流量的特征 `duration`, `src_bytes`, `dst_bytes`, `src_pkts`, `dst_pkts`, `pkts_per_sec` — 标准的 NetFlow 字段。重尾分布的字节/数据包计数会在 模型读取之前进行对数缩放和 标准化处理 (`src/detector.py`)。 ## 快速开始 ``` pip install -r requirements.txt PYTHONPATH=src python src/evaluate.py ``` ``` from data import generate from detector import AnomalyDetector X, y = generate() # y is only for scoring, not training det = AnomalyDetector().fit(X) # unsupervised det.predict(X) # 1 = anomaly, 0 = normal det.anomaly_score(X) # higher = more anomalous ``` ## 结果 在内置的合成数据集(4000 条流量,5% 异常)上,检测器 以极高的 ROC-AUC 和 F1 分数恢复了注入的攻击——同时在训练期间从未查看过 标签。 ## 测试 ``` PYTHONPATH=src python -m pytest tests/ -v ``` 5 项测试涵盖了数据集生成、二元预测、异常评分 高于正常流量,以及明显的 DoS 特征流量被 正确标记。 ## ⚠️ 关于数据的诚实声明 数据集 (`src/data.py`) 是**合成的**,其中的异常值提取自 刻意区分的类攻击分布——因此模型在此处得分非常 高。真实流量(CICIDS, UNSW-NB15)更为杂乱,数值也会 更低;带有标签的抓包数据体积庞大且受授权限制,因此使用合成生成器 来实现可复现的离线 pipeline。如果将它们指向真实的流量 CSV 文件,特征提取和模型代码 将保持不变。 ## 作者 Koushik Chowdary — [LinkedIn](https://linkedin.com/in/koushik-chowdary) · [GitHub](https://github.com/koushikchowdary6)
标签:Apex, 孤立森林, 安全规则引擎, 异常检测, 插件系统, 无监督学习, 机器学习, 网络安全, 网络流量分析, 逆向工具, 隐私保护