karmakar-rahul/NetworkLogAnalytics-AI

GitHub: karmakar-rahul/NetworkLogAnalytics-AI

基于 Kafka 流式架构和机器学习的企业网络横向移动实时检测与运营分流平台。

Stars: 0 | Forks: 0

# 网络日志分析 AI **针对企业网络的 AI 驱动横向移动检测。** 这是一个实时分析平台,用于摄取网络身份验证日志、构建行为特征,并应用无监督和有监督机器学习来检测横向移动、内部侦察和权限提升:即攻击者在初次入侵后用于在网络中渗透的技术。 该系统以完整的流式 pipeline 构建:**Kafka → Consumer → MongoDB → FastAPI → React Dashboard**,并配备一个实时更新的运营仪表板以供分流排查。 ## 问题描述 横向移动是发生入侵*之后*的行为:攻击者在攻陷单个 endpoint 后,利用内部身份验证路径 —— SMB、RDP、WinRM、Kerberos 票据请求,在主机之间跳转、提升权限,并最终访问高价值目标。边界防御根本无法察觉,因为从定义上讲,这些是已经通过边界的流量。检测横向移动意味着要在数量庞大的正常日常流量中,找出极少数真正异常的身份验证模式。其中大部分流量来自 IT 管理员和服务账户,它们的合法行为表面上看起来可能与攻击者的行为非常相似。 本项目将其同时视为**无监督异常检测问题**(在没有任何标签的真实部署环境中会怎样?),以及在有标签可用时的**有监督分类问题**,并对这两种方法进行了正面比较。 ## 架构 ### 项目结构 ``` NetworkLogAnalyticsAI/ ├── producer/ │ ├── event_builder.py # Synthetic user/host/attack-chain event generation │ ├── network_topology.py # Org structure: departments, hosts, per-user "normal" access baseline │ └── producer.py # Kafka producer — live event stream ├── consumer/ │ ├── consumer.py # Kafka consumer — feature eng. + ML scoring + Mongo write │ ├── feature_engineering.py # Online (real-time, wall-clock windowed) feature computation │ ├── rules_engine.py # Anomaly score → risk level mapping │ └── mongo_writer.py ├── ml_engine/ │ ├── feature_builder.py # Offline (chronological replay) feature computation │ ├── train.py # Isolation Forest training + threshold calibration │ ├── train_supervised.py # XGBoost comparison model, same train/test split │ ├── evaluate.py # Held-out evaluation + permutation feature importance │ ├── predict.py # Live inference (loads model.pkl/scaler.pkl/threshold.json) │ ├── model.pkl / model_supervised.pkl │ └── threshold.json ├── shared/ │ ├── enums.py # AuthType, LogonType, AttackType, RiskLevel, ... │ └── schemas.py # NetworkAuthEvent and other shared dataclasses ├── database/ │ ├── collections.py │ └── indexes.py # Index definitions, applied at API startup ├── api/ │ ├── main.py │ ├── routes/ # dashboard.py, events.py, analytics.py │ └── services/ # dashboard_service.py, analytics_service.py, ml_service.py ├── scripts/ │ ├── generate_synthetic_data.py # Batch historical dataset (day-spread traffic) │ └── export_training_dataset.py # Export + feature-build directly from live Mongo data ├── datasets/ │ ├── synthetic/ │ └── processed/training_dataset.csv ├── outputs/ │ ├── metrics.json │ └── metrics_supervised.json └── Frontend/Dashboard/ └── src/ ├── routes/ # _app.index, _app.live, _app.threats, _app.ml, _app.users, _app.system ├── components/dashboard/ # layout.tsx, primitives.tsx └── lib/ # api.ts (typed client), queries.ts (React Query hooks) ``` **实时推理说明:** consumer 的实时评分目前仅加载 Isolation Forest 的产物(`model.pkl`、`scaler.pkl`、`threshold.json`)。XGBoost 模型在相同的留出数据集上进行训练和评估以进行比较,但尚未接入实时预测路径 —— 请参阅[路线图](#roadmap)。 ## 核心功能 - **合成的真实流量生成** —— 涵盖约 950 台主机(工作站、文件服务器、应用服务器、域控制器)的 400 个模拟用户(标准/服务/管理员账户),攻击链通过主机跳转的方式进行,与真实的横向移动完全一致。 - 通过 Kafka 进行**流式摄取**,并基于真实的到达时间窗口计算在线特征工程。 - **在相同的留出数据上评估的两种机器学习方法:** - *无监督* Isolation Forest,仅在假定为正常的流量上进行训练 —— 这是在没有确认的事件标签的真实部署中的现实场景。 - *有监督* XGBoost,基于此合成数据集中可用的真实标签进行训练 —— 这是在拥有标签数据时所能达到性能上限的评估。 - **实时运营仪表板** —— 包含六个页面,涵盖实时监控、威胁调查、模型透明度、按账户划分的风险以及基础设施健康状况,全部通过轮询 MongoDB 实时获取。 - **经过校准的可靠阈值** —— 默认情况下,阈值的选择以最大化 F1 分数为目标(而不是硬编码的精确率目标,因为这会悄无声息地导致召回率下降),并且会保存完整的精确率/召回率扫描结果以供检查。 - **真实的特征重要性** —— 在留出的测试集上计算置换重要性(Isolation Forest)和原生树重要性(XGBoost),而非伪造数据。 ## 技术栈 | 层级 | 技术 | |---|---| | 流处理 | Apache Kafka | | 存储 | MongoDB | | 特征工程与机器学习 | Python, pandas, scikit-learn, XGBoost | | API | FastAPI | | 仪表板 | React, TanStack Start/Router, TanStack Query, Tailwind, Recharts | | 环境 | Conda (`loganalyticsai`) | ## 快速开始 ### 前置条件 - Conda - Docker (Kafka + MongoDB) - Node.js (用于仪表板) ### 1. 环境 ``` conda create -n loganalyticsai python=3.11 conda activate loganalyticsai pip install -r requirements.txt ``` ### 2. 启动基础设施 ``` docker compose up -d # Kafka + MongoDB ``` ### 3. 启动流式 pipeline ``` python -m producer.producer # terminal 1 python -m consumer.consumer # terminal 2 ``` ### 4. 启动 API ``` uvicorn api.main:app --reload --port 8000 ``` ### 5. 启动仪表板 ``` cd Frontend/Dashboard npm install npm run dev # http://localhost:8080 ``` ## 训练模型 ``` # 从实时采集的 Mongo 数据中导出 feature dataset python -m scripts.export_training_dataset # 训练无监督 Isolation Forest python -m ml_engine.train # 训练有监督 XGBoost 对比模型(相同的 train/test split) python -m ml_engine.train_supervised # 在 held-out test set 上进行评估(Isolation Forest + feature importance) python -m ml_engine.evaluate ``` 这三个训练/评估脚本共享完全相同的 `train/calibration/test` 拆分(固定的 `random_state`),因此 Isolation Forest 和 XGBoost 的结果可以直接比较 —— 它们在相同的留出数据行上进行了评分。 ## 仪表板 | 页面 | 用途 | |---|---| | **概览** | 实时摘要:事件量、异常率、风险分布、最新事件 | | **实时监控** | 原始 Kafka 尾部数据 —— 包含实时异常分数和风险等级的每个事件 | | **威胁分析** | 按技术划分的攻击分类、主要受攻击主机、最高风险事件 | | **机器学习分析** | 模型性能、精确率/召回率权衡、特征重要性,以及实时的 Isolation Forest 与 XGBoost 对比 —— 自动展示当前在 F1 分数上表现更好的模型 | | **用户行为** | 按账户划分的异常排名 | | **系统状态** | Pipeline 健康状况 —— Kafka、MongoDB、producer、consumer、模型状态 | ## API 参考 | Endpoint | 描述 | |---|---| | `GET /api/summary` | 汇总计数:总事件、异常、横向移动、严重事件 | | `GET /api/events` | 按时间戳排序的最近 N 条事件 | | `GET /api/events/live` | 同上,针对快速轮询进行了优化 | | `GET /api/traffic-timeline` | 过去 24 小时的每小时事件量 | | `GET /api/risk-distribution` | 按风险等级统计的事件计数 | | `GET /api/attack-breakdown` | 按攻击技术统计的事件计数 | | `GET /api/top-risk-entities` | 按异常计数排名的顶级用户和主机 | | `GET /api/ml` | Isolation Forest 评估指标 | | `GET /api/ml/supervised` | XGBoost 评估指标(如果尚未训练则为 null) | | `GET /api/system` | 基础设施健康状况 | ## 路线图 - [ ] 将实时推理接入并使用当前性能最佳的模型(`predict.py` + `rules_engine.py`),而不是在不管机器学习分析比较结果如何的情况下,始终使用 Isolation Forest 进行评分 - [ ] 相对特征/基于用户基线的特征(偏离用户自身的历史常态,而不仅仅是群体范围的计数),以提高在现实流量密度下的精确率 - [ ] 将 Local Outlier Factor / 自编码器作为第三种检测方法 - [ ] 真实的推理延迟遥测(系统状态目前显示的是说明性占位符) - [ ] 用于横向移动路径的主机到主机访问图谱可视化 ## 作者 * Rahul Karmakar * (阿萨姆大学物理学硕士 | PGCP - BDA, C-DAC Chennai)
标签:Modbus, PE 加载器, 大数据, 异常检测, 插件系统, 横向移动检测, 流式处理, 目录扫描, 网络安全, 自动化攻击, 请求拦截, 软件成分分析, 逆向工具, 隐私保护