Csushobhit/NETRA-AI

GitHub: Csushobhit/NETRA-AI

基于多 Agent LLM 推理与无监督异常检测的 AI 驱动 SOC 平台,实现对网络日志的智能威胁检测、情报富化和可解释告警分类。

Stars: 1 | Forks: 0

# 🛡️ NETRA-AI ### *基于 AI 的网络评估与威胁识别分析*

![NETRA-AI 横幅](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d684f6df03174734.png)
![Python](https://img.shields.io/badge/Python-3.9+-3776AB?style=for-the-badge&logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-Backend-black?style=for-the-badge&logo=flask&logoColor=white) ![Spring Boot](https://img.shields.io/badge/Spring_Boot-Frontend-6DB33F?style=for-the-badge&logo=springboot&logoColor=white) ![OpenSearch](https://img.shields.io/badge/OpenSearch-Database-005EB8?style=for-the-badge&logo=opensearch&logoColor=white) ![LangChain](https://img.shields.io/badge/LangChain-Agents-1C3C3C?style=for-the-badge&logo=langchain&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Containerized-2496ED?style=for-the-badge&logo=docker&logoColor=white)
## 📖 目录 - [概述](#-overview) - [问题陈述](#-problem-statement) - [核心功能](#-key-features) - [系统架构](#-architecture) - [系统流程](#-system-flow) - [技术栈](#-tech-stack) - [模块分解](#-module-breakdown) - [项目截图](#-screenshots) - [安装与设置](#️-installation--setup) - [运行系统](#-running-the-system) - [API 参考](#-api-reference) - [项目结构](#-project-structure) - [设计决策](#-design-decisions) - [未来改进](#-future-improvements) - [作者](#-author) ## 🚀 概述 **NETRA-AI** 是一个混合的、AI 驱动的安全运营中心 (SOC) 平台,它模拟了现实世界中的安全分析师如何检测、调查和响应网络威胁——并在每个步骤中实现了智能自动化。 它独特地将**行为异常检测**与**威胁情报富化**分离开来,采用人在回路的设计,让分析师保留对决策的最终控制权。 ## 🔍 问题陈述 现代安全系统面临三个基本挑战: | 问题 | 描述 | |---|---| | **告警量过大** | 系统每秒产生数千条日志——人工分析根本不可能完成 | | **基于规则的局限性** | 静态规则无法捕捉不断演变的新的攻击模式 | | **缺乏可解释性** | 触发的告警缺乏上下文、推理过程或可操作的指导 | **NETRA-AI** 通过结合无监督 ML(异常检测)、多 Agent LLM 推理和经过验证的外部威胁情报来解决这三个问题。 ## ✨ 核心功能 - 🔬 通过 Isolation Forest 实现的**行为异常检测**(弱信号层) - 🤖 **多 Agent 推理 Pipeline** — 调查 Agent、决策 Agent 与解释 Agent - 🧠 **基于向量的行为记忆** — 使用 OpenSearch 进行归一化的 k-NN 相似度检索 - 🌐 **威胁情报引擎** — Maltrail(约 20 万个 IP)+ AbuseIPDB + AlienVault OTX + VirusTotal - 🗂️ **缓存优先的 TI 系统** — 显著减少冗余的外部 API 调用 - 🔁 **反馈学习循环** — 用户纠正被存储并反馈给 Agent 的推理过程 - 🛡️ **4 级风险分类** — `malicious` / `high_risky` / `low_risky` / `unknown` - 🔐 **基于角色的访问控制** — 使用 Spring Security (BCrypt) 的管理员和用户角色 - 🛠️ **管理员控制面板** — 管理 TI 索引、更新 API 密钥、查看不可变的审计日志 - 📊 **OpenSearch Dashboards** — 所有系统数据的实时可视化 ## 🧩 架构 ### 高层系统架构 ``` flowchart TB subgraph DATA["📂 Data Layer"] LG["🔧 Log Generator\n(Simulated Attacks)"] OS_LOGS[("🗄️ OpenSearch\nlogs index")] end subgraph PIPELINE["⚙️ Processing Pipeline"] FE["📐 Feature Engineering\n(freq · ratio · ports · time)"] ML["🤖 Isolation Forest\n(Anomaly Score — Weak Signal)"] end subgraph AGENTS["🧠 Multi-Agent System"] IA["🔍 Investigation Agent\nattack_type + reasoning"] DA["⚖️ Decision Agent\nrisk_score + action"] EA["📝 Explanation Agent\nhuman-readable output"] end subgraph MEMORY["💾 Behavioral Memory"] MEM[("🗄️ OpenSearch\nmemory index\nk-NN Normalized Vectors")] FB["🔄 User Feedback Loop"] end subgraph TI["🌐 Threat Intelligence"] MTL["📋 Maltrail\n~200k IPs"] CACHE[("🗄️ OpenSearch\nTI Cache Indices")] APIS["🔌 External APIs\nAbuseIPDB · OTX · VirusTotal"] TIA["🧬 TI Agent (LLM)\nDynamic Classification"] end subgraph OUTPUT["📊 Output Layer"] FLASK["🐍 Flask API\nBackend (Port 9201)"] SPRING["☕ Spring Boot\nFrontend Dashboard (Port 9202)"] end LG --> OS_LOGS OS_LOGS --> FE FE --> ML ML --> IA MEM --> IA IA --> DA DA --> EA DA --> MEM FB --> MEM EA --> FLASK FLASK -.->|"User triggers TI"| MTL MTL --> CACHE CACHE --> APIS APIS --> TIA TIA --> CACHE TIA --> FLASK FLASK --> SPRING ``` ## 🔄 系统流程 ### Pipeline A — 行为检测 ``` sequenceDiagram participant Gen as Log Generator participant OS as OpenSearch (logs) participant FE as Feature Engine participant ML as Isolation Forest participant Mem as Memory (k-NN) participant Inv as Investigation Agent participant Dec as Decision Agent participant Exp as Explanation Agent loop Continuous Streaming Gen->>OS: Write log (ip, timestamp, event, port, status) end loop Every 2s OS->>FE: Read new logs (timestamp-based query) FE->>FE: Compute features per (IP × time_window) FE->>ML: Feature vector [freq, ratio, ports, hour] ML-->>Dec: anomaly_score (weak signal) Mem-->>Inv: Top-3 similar past behaviors (k-NN) FE->>Inv: Features + ML Score + Memory context Inv-->>Dec: attack_type + reasoning Dec-->>Exp: risk_score + action Exp-->>OS: Persist enriched alert end ``` ### Pipeline B — 威胁情报 (用户触发) ``` flowchart LR IP[/"🔍 Suspicious IP\n(User selects)"/] MT{{"Maltrail\nCheck"}} CA{{"TI Cache\nCheck"}} API["AbuseIPDB\nOTX · VirusTotal"] TIA["🧬 TI Agent\n(LLM — Dynamic weights)"] OUT[/"📋 Result:\nmalicious · high_risky\nlow_risky · unknown"/] IP --> MT MT -->|"✅ Found"| OUT MT -->|"❌ Miss"| CA CA -->|"✅ Cached"| OUT CA -->|"❌ Miss"| API API --> TIA TIA --> OUT OUT -->|"Cache result"| CA ``` ### 记忆与反馈循环 ``` flowchart LR A["New Alert\nFeature Vector"] --> B["Normalize\nfeature_vector\n0→1 scale"] B --> C["k-NN Query\nOpenSearch\nmemory index"] C --> D["Top-3 Similar\nPast Behaviors"] D --> E["Agent Reasoning\n(enriched context)"] E --> F["Decision\n+ Risk Score"] F --> G["Store in\nMemory Index"] H["User Feedback\ncorrect / incorrect"] --> I["Update Memory\nfeedback field"] I --> C ``` ## 🧱 技术栈 ### 后端 | 层级 | 技术 | |---|---| | API 框架 | Flask (Python) | | AI / LLM | LangChain + OpenAI GPT-4o-mini | | ML 模型 | Scikit-learn — Isolation Forest | | 向量搜索 | OpenSearch k-NN | | TI APIs | AbuseIPDB, AlienVault OTX, VirusTotal | ### 前端 | 层级 | 技术 | |---|---| | Web 框架 | Spring Boot | | 模板引擎 | Thymeleaf | | 安全框架 | Spring Security (BCrypt) | | 认证数据库 | MySQL | ### 基础设施 | 组件 | 技术 | |---|---| | 主数据库 | OpenSearch 2.x (Docker) | | 数据可视化 | OpenSearch Dashboards | | 容器化 | Docker | ## 📦 模块分解 ``` mindmap root((NETRA-AI)) Generator log_generator modes writer Ingestion reader tracker Features feature_engineer grouping ML model inference isolation_forest.pkl Agents investigation_agent decision_agent explanation_agent ti_agent orchestrator prompts Memory normalizer retriever schema store Threat Intel load_maltrail update_maltrail checker external_apis scorer Flask API routes pipeline_service alert_service ti_service admin_service Spring Boot DashboardController AdminController SecurityConfig AuthService ``` ## 🖼️ 项目截图 ### 着陆页 ![管理面板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ca05419289174743.png) ### 主仪表板 ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a8720f8d89174752.png) ### 告警调查视图 ![告警详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8c07698f6a174756.png) ### 威胁情报面板 ![威胁情报](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a1dd0a9c0c174804.png) ## ⚙️ 安装与设置 ### 前提条件 - Python 3.9+ - Java 17+ (用于 Spring Boot 前端) - Maven 3.6+ - Docker Desktop - Git - MySQL 8.x ### 1. 克隆仓库 ``` git clone https://github.com/csushobhit/NETRA-AI.git cd netra-ai ``` ### 2. 启动 OpenSearch & Dashboards ``` # OpenSearch (后端 DB) docker run -d -p 9200:9200 ^ -e "discovery.type=single-node" ^ -e "plugins.security.disabled=true" ^ -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=YourPassword@123" ^ -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" ^ opensearchproject/opensearch:2 # OpenSearch Dashboards (可选 UI) docker run -d -p 5601:5601 ^ -e "OPENSEARCH_HOSTS=http://host.docker.internal:9200" ^ -e "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true" ^ opensearchproject/opensearch-dashboards:2 ``` 验证 OpenSearch 是否正在运行:打开 `http://localhost:9200` ### 3. Python 环境设置 ``` python -m venv venv venv\Scripts\activate # Windows source venv/bin/activate # Linux/Mac pip install -r requirements.txt ``` ### 4. 配置环境变量 在项目根目录创建一个 `.env` 文件: ``` OPENAI_API_KEY=sk-your-openai-key ABUSEIPDB_API_KEY=your-abuseipdb-key OTX_API_KEY=your-otx-key VIRUSTOTAL_API_KEY=your-virustotal-key ``` ### 5. 初始化 OpenSearch 索引 ``` python -m threat_intel.db.indices ``` ### 6. 加载 Maltrail 威胁数据库 (一次性) ``` # 克隆 Maltrail repo 并索引约 20 万个已知恶意 IP python -m threat_intel.init.load_maltrail ``` ### 7. 训练 ML 模型 ``` # 首先生成大约 30–60 分钟的 logs,然后: python -m scripts.train_model ``` 训练后的模型将保存到 `models/isolation_forest.pkl`。 ### 8. 前端 (Spring Boot) 创建 MySQL 数据库: ``` CREATE DATABASE soc_frontend; ``` 配置 `soc-frontend/src/main/resources/application.properties`: ``` spring.datasource.url=jdbc:mysql://localhost:3306/soc_frontend spring.datasource.username=root spring.datasource.password=your-mysql-password spring.jpa.hibernate.ddl-auto=update server.port=9202 ``` ``` cd soc-frontend mvn spring-boot:run ``` ## 🚀 运行系统 打开三个终端并按顺序运行: ``` # 终端 1 — 模拟网络流量(攻击 + 正常) python -m generator.log_generator # 终端 2 — AI processing pipeline python app/main.py # 终端 3 — Web dashboard cd soc-frontend && mvn spring-boot:run ``` | 服务 | URL | 描述 | |---|---|---| | 前端仪表板 | `http://localhost:9202` | 主 SOC 界面 | | Flask 后端 API | `http://localhost:9201` | REST API | | OpenSearch | `http://localhost:9200` | 数据库 | | Dashboards | `http://localhost:5601` | 数据可视化 | **默认管理员登录:** `admin` / `admin@123` ## 🔌 API 参考 ### 检测与告警 | 方法 | 端点 | 描述 | |---|---|---| | `GET` | `/dashboard` | KPI:总数、可疑、正常、TI 恶意数量 | | `GET` | `/alerts` | 所有已处理的告警 | | `GET` | `/alerts?filter=suspicious` | 仅限可疑告警 | | `GET` | `/alerts?hours=1` | 过去 N 小时内的告警 | | `GET` | `/alerts/` | 特定 IP 的完整告警历史 | ### 威胁情报 | 方法 | 端点 | Body / 参数 | 描述 | |---|---|---|---| | `GET` | `/search?ip=` | — | 对单个 IP 进行 TI 检查 | | `POST` | `/run-ti` | `{"ip": "x.x.x.x"}` | 用户触发的 TI 分析 | | `POST` | `/bulk-ti` | `{"ips": ["..."]}` | 对选定的 IP 进行批量 TI 分析 | ### 反馈 | 方法 | 端点 | Body | 描述 | |---|---|---|---| | `POST` | `/feedback` | `{"ip": "...", "feedback": "correct"}` | Agent 反馈 | ### 管理 | 方法 | 端点 | 描述 | |---|---|---| | `GET` | `/admin/ti/` | 浏览 TI 索引(带分页) | | `POST` | `/admin/ti/delete` | 从任何 TI 索引中删除 IP | | `GET` | `/admin/audit` | 不可变的审计日志 | | `POST` | `/admin/update-keys` | 更新 `.env` 中的 API 密钥 | | `POST` | `/admin/update-maltrail` | 拉取最新的 Maltrail 更新 | ## 📁 项目结构 ``` netra-ai/ │ ├── agents/ # Multi-agent AI reasoning │ ├── investigation_agent.py # Attack classification │ ├── decision_agent.py # Risk scoring + action │ ├── explanation_agent.py # Human-readable output │ ├── ti_agent.py # TI dynamic classification │ ├── orchestrator.py # Agent pipeline controller │ └── prompts.py # All LLM prompts │ ├── api/ # Flask REST layer │ ├── routes.py │ ├── pipeline_service.py # Background pipeline thread │ ├── alert_service.py │ ├── ti_service.py │ ├── admin_service.py │ └── init_indices.py │ ├── config/ │ ├── llm_config.py │ └── env_config.py │ ├── db/ │ └── opensearch_client.py │ ├── features/ │ ├── feature_engineer.py # Stateful per-IP aggregation │ └── grouping.py │ ├── generator/ │ ├── log_generator.py │ ├── modes.py # Normal/Brute/Spike/Scan │ └── writer.py │ ├── ingestion/ │ ├── reader.py # Timestamp-based OS reader │ └── tracker.py │ ├── memory/ │ ├── normalizer.py # Feature normalization (0–1) │ ├── retriever.py # k-NN behavioral similarity │ ├── schema.py │ └── store.py │ ├── ml/ │ ├── model.py │ └── inference.py │ ├── models/ │ └── isolation_forest.pkl │ ├── scripts/ │ └── train_model.py │ ├── soc-frontend/ # Spring Boot web application │ └── src/main/java/com/soc/socfrontend/ │ ├── controller/ │ ├── service/ │ ├── model/ │ ├── repository/ │ └── config/ │ ├── threat_intel/ │ ├── db/ │ │ ├── indices.py # All index definitions │ │ └── queries.py │ ├── init/ │ │ ├── load_maltrail.py # Bulk loader (one-time) │ │ └── update_maltrail.py # Incremental updater │ └── services/ │ ├── checker.py # Core TI classification flow │ ├── external_apis.py # API integrations │ ├── scorer.py │ └── ti_input_builder.py │ ├── .env # API keys (not committed) ├── requirements.txt └── README.md ``` ## 🎯 设计决策 **为什么将 Isolation Forest 作为弱信号?** 它在没有标记训练数据的情况下检测统计异常。其分数作为支持证据传递给 AI Agent,而不是最终结论——这保持了决策的可解释性,且模型具有可替换性。 **为什么采用多 Agent 架构?** 将调查 → 决策 → 解释拆分为独立的 Agent,使得每个组件都可以独立测试和替换。如果 LLM 成本变得过高,任何 Agent 都可以用确定性逻辑替换,而不会破坏其他 Agent。 **为什么将检测和 TI 管道分开?** 它们回答的根本是不同的问题。检测问的是“这种行为异常吗?”——TI 问的是“这个 IP 是已知的恶意 IP 吗?”将它们合并会导致不透明的决策;将它们分开则保留了可解释性和模块化。 **为什么采用人在回路的设计?** 在真实的 SOC 环境中,没有经过分析师审查的自动拦截会引入风险。NETRA-AI 进行富化和优先级排序——分析师保留最终的操作权限。 **为什么选择 OpenSearch 而不是传统数据库?** OpenSearch 提供全文搜索、时间序列范围查询、k-NN 向量相似度(用于记忆)、实时索引和内置的 Dashboards——这对于单一部署的实时 SOC 平台至关重要。 **为什么在记忆中对向量进行归一化?** OpenSearch k-NN 使用欧几里得距离。如果不进行归一化,`request_freq` (0–200+) 将主导 `failed_ratio` (0–1),使得相似度变得毫无意义。归一化确保了所有行为维度的贡献均等。 ## 📊 OpenSearch 索引参考 | 索引 | 用途 | 关键字段 | |---|---|---| | `logs` | 原始网络事件 | `ip`, `timestamp`, `event_type`, `status`, `port` | | `alerts` | 富化后的检测结果 | `ip`, `attack_type`, `risk_score`, `action`, `ti_label` | | `memory` | 行为记忆 (k-NN) | `ip`, `feature_vector`, `decision`, `risk`, `feedback` | | `maltrail_ips` | 已知的恶意 IP | `ip`, `status`, `source` | | `known_malicious_ips` 经 TI 确认为恶意的 IP | `ip`, `score`, `source` | | `known_risky_ips` | 高风险缓存 | `ip`, `score`, `source` | | `known_low_risky_ips` | 低风险缓存 | `ip`, `score`, `source` | | `known_unknown_ips` | 未解析的缓存 | `ip`, `score`, `source` | ## 🔮 未来改进 - [ ] 基于WebSocket的实时告警流(取代轮询) - [ ] 域名和 URL 的威胁情报支持 - [ ] 集成 MISP 以获取企业级威胁情报源 - [ ] 集成 Kafka 用于分布式的高容量日志摄取 - [ ] 自动化的安全事件响应工作流 - [ ] 关联引擎 — 跨多个 IP 关联相关告警 - [ ] 由累积反馈驱动的 ML 模型重训练 Pipeline - [ ] 攻击时间线重放,提供逐步可视化 - [ ] Maltrail 数据摄取支持 CIDR 范围 ## 👤 作者
**Sushobhit Chattaraj** *毕业设计项目 — 计算机科学工程* [![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=for-the-badge&logo=linkedin)](https://www.linkedin.com/in/sushobhit-chattaraj-410b2a253/) [![GitHub](https://img.shields.io/badge/GitHub-Profile-181717?style=for-the-badge&logo=github)](https://github.com/csushobhit)
*设计为一个实用、可扩展且可解释的 AI-SOC 系统*
**⭐ 如果您觉得有用,请给本仓库加星!**
标签:AI安全, Apex, Chat Copilot, Docker, Flask, IP 地址批量处理, LangChain, NETRA-AI, Python, Spring Boot, TCP/IP协议栈, 人工智能, 威胁情报, 威胁识别架构, 安全决策, 安全系统, 安全运营中心, 安全防御评估, 开发者工具, 异常检测, 插件系统, 无后门, 智能安全分析, 机器学习, 混合架构, 用户模式Hook绕过, 网络安全, 网络安全平台, 网络日志分析, 网络映射, 网络评估, 请求拦截, 轻量级, 逆向工具, 隐私保护