PranavDeshpande7337/LangGraph-Threat-Intelligence-Agent

GitHub: PranavDeshpande7337/LangGraph-Threat-Intelligence-Agent

基于 LangGraph 和本地 LLM 构建的代理式威胁情报调查流水线,能对可疑 IP 或域名进行多源查询、风险评级并自动映射 MITRE ATT&CK 技术。

Stars: 0 | Forks: 0

# LangGraph 威胁情报 Agent 🛡️ 一个代理式 OSINT 调查 pipeline,它接收可疑的 IP 或 domain,并自主进行端到端的威胁情报调查。该 Agent 查询多个威胁情报源,对其发现进行推理,生成结构化的风险报告,并将发现映射到 MITRE ATT&CK 技术——这种调查就像 SOC 分析师手动执行的一样,被自动化为一个可重复、可审计的工作流。 该项目旨在展示直接适用于 AI 安全组织中威胁情报和检测与响应职位的检测工程、代理式推理和 AI 辅助调查工作流。 ## 架构 ``` User input (IP or domain) │ ▼ ┌─────────────────────┐ │ Input Guardrail │ Validates format, blocks RFC 1918 ranges, blocks │ core/guardrails.py │ internal keywords. SSRF prevention before any tool call. └────────┬────────────┘ │ ▼ ┌─────────────────────┐ │ LLM Reasoning │ Ollama-powered reasoning loop. Decides which tool to │ graph/nodes.py │ call next based on accumulated state. Hard cap: 4 loops. └────────┬────────────┘ │ ├──▶ [VirusTotal] ──┐ ├──▶ [AbuseIPDB] ──┼──▶ [Output Guardrail] ← scans API responses for └──▶ [DNS Lookup] ──┘ prompt injection, redacts in-place before result enters agent state │ ▼ ┌─────────────────────┐ │ Report Generator │ Structured JSON risk report: │ graph/nodes.py │ target, risk level, score, └────────┬────────────┘ indicators, recommendation │ ▼ ┌─────────────────────┐ │ MITRE ATT&CK Node │ LLM maps report findings to │ graph/nodes.py │ ATT&CK technique IDs, names, └────────┬────────────┘ relevance, tactic categories │ ▼ ┌─────────────────────┐ │ Streamlit Dashboard│ Real-time agent trace, risk │ dashboard.py │ card, ATT&CK table, JSON export └─────────────────────┘ ``` ## 检测与调查节点 ### 输入 Guardrail (`core/guardrails.py`) 在进行任何外部调用之前运行: | 检查内容 | 拦截目标 | |---|---| | 格式验证 | 格式错误的 IP 和无效的 domain 字符串 | | RFC 1918 范围 | 10.x, 172.16.x, 192.168.x, 127.x, 169.254.x (防止 SSRF) | | 内部关键字 | `localhost`, `internal`, `corp`, `intranet` | ### LLM 推理循环 (`graph/nodes.py`) Agent 通过读取累积的 state 并输出结构化的 JSON 决策来决定接下来调用哪个工具。每个工具最多调用一次。如果达到循环上限(4次迭代)或所有工具都已被调用,则回退到报告生成。 ### 威胁情报工具 (`core/tools.py`) | 工具 | 返回内容 | 回退方案 | |---|---|---| | VirusTotal | 恶意/可疑/安全计数、信誉评分 | 模拟数据 | | AbuseIPDB | 滥用置信度评分、报告计数、Tor 标志、ISP、国家 | 模拟数据 | | DNS | 正向解析(domain → IPs)或反向 PTR 查找 | 实时 — 无需密钥 | ### 输出 Guardrail (`core/guardrails.py`) 在每次工具调用之后,结果进入 agent state 之前运行: - 递归扫描所有字符串字段以查找 prompt injection 模式 - 模式包括:指令覆盖尝试、角色重分配字符串、system prompt 注入、数据渗出指令 - 原位脱敏匹配到的内容并记录发现以供审计 - 被标记的工具将在仪表板中显示 ### 报告生成器 (`graph/nodes.py`) 将所有工具结果综合成一份结构化的风险报告: ``` { "target": "185.220.101.1", "risk_level": "critical", "risk_score": 92, "summary": "...", "indicators": ["..."], "recommendation": "..." } ``` | 分数 | 风险等级 | |---|---| | > 80 个恶意检测或滥用分数 > 80 | CRITICAL(严重) | | > 3 个恶意或滥用分数 > 50 | HIGH(高) | | > 5 个可疑检测或 Tor exit node | MEDIUM(中) | | 轻微问题,无明显恶意活动 | LOW(低) | | 无检测,信誉良好的基础设施 | CLEAN(安全) | ### MITRE ATT&CK 映射节点 (`graph/nodes.py`) 在报告生成器之后运行。将完成的风险报告发送给 LLM(附带结构化的 ATT&CK prompt)并返回: ``` { "mitre_techniques": [ { "id": "T1583.001", "name": "Acquire Infrastructure: Domains", "relevance": "Target domain registered recently with privacy protection, consistent with adversary infrastructure acquisition." } ], "tactic_categories": ["Resource Development", "Reconnaissance"] } ``` 如果风险等级为 `clean` 或 `unknown`,则会优雅地跳过 — 避免不必要的 LLM 调用。 ## Streamlit 仪表板 (`dashboard.py`) - **实时推理轨迹** — 每个节点在完成后通过 `st.status` 流式传输其输出,展示 Agent 在每一步的决策 - **风险报告卡片** — 颜色编码的风险徽章、评分进度条、指标列表、建议 - **MITRE ATT&CK 表格** — 技术 ID 直接链接到 `attack.mitre.org`,包含相关性和战术类别列 - **已执行工具面板** — 显示哪些工具已运行,并标记任何其输出中被脱敏了注入模式的工具 - **导出** — 将完整的调查(报告 + ATT&CK 映射)下载为带时间戳的 JSON 文件,或保存到 `exports/` - **演示目标** — 一键使用模拟数据调查预设目标,无需 API 密钥 ## 快速开始 ### 1. 安装依赖 ``` python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt ``` ### 2. 安装 Ollama(LLM 推理必需) 从 [ollama.com/download](https://ollama.com/download) 下载,然后执行: ``` ollama pull llama3.2 ollama serve # keep this running in a separate terminal ``` ### 3. 配置环境 在项目根目录下创建一个 `.env` 文件: ``` OLLAMA_MODEL=llama3.2 VIRUSTOTAL_API_KEY= # optional — uses mock data if blank ABUSEIPDB_API_KEY= # optional — uses mock data if blank ``` ### 4. 运行 CLI ``` # 演示模式 — 使用 mock data 运行 3 个目标 python main.py --demo # 调查特定目标 python main.py --target 8.8.8.8 python main.py --target malware.com # 输出原始 JSON 报告 python main.py --target malware.com --json # 交互模式 python main.py ``` ### 5. 启动仪表板 ``` streamlit run dashboard.py ``` 打开 `http://localhost:8501`。使用侧边栏输入目标或点击演示按钮。 ### 6. 运行测试 ``` pytest tests/ -v ``` ## 环境与 API 密钥 | 变量 | 必需 | 备注 | |---|---|---| | `OLLAMA_MODEL` | 是 | 默认值:`llama3.2`。在低内存机器上可尝试 `llama3.2:1b` | | `VIRUSTOTAL_API_KEY` | 否 | 在 [virustotal.com](https://virustotal.com) 获取免费层级。未配置时回退到模拟数据 | | `ABUSEIPDB_API_KEY` | 否 | 在 [abuseipdb.com](https://abuseipdb.com) 获取免费层级。未配置时回退到模拟数据 | 模拟数据涵盖了一组已知的测试目标(`8.8.8.8`、`malware.com`、`185.220.101.1` 等),并具有真实的数值。完整的推理 pipeline、guardrail 和 MITRE 映射在模拟模式下工作方式完全相同。 ## 项目结构 ``` langgraph-threat-intel/ ├── core/ │ ├── state.py # AgentState — shared graph state (TypedDict) │ ├── guardrails.py # Input validator + output sanitiser │ └── tools.py # VirusTotal, AbuseIPDB, DNS API wrappers ├── graph/ │ ├── nodes.py # All node functions including MITRE mapping │ └── builder.py # Graph topology — nodes, edges, conditional routing ├── tests/ │ └── test_guardrails.py ├── exports/ # JSON exports from dashboard (auto-created) ├── dashboard.py # Streamlit investigation dashboard ├── main.py # CLI entry point ├── requirements.txt └── .env ``` ## 扩展 Pipeline **添加新的威胁情报源** — 按照相同的规范化 dict 返回模式,在 `core/tools.py` 中添加一个包装函数,在 `graph/nodes.py` 中添加一个工具节点,在 `graph/builder.py` 中注册它,并将其添加到 `reasoning_node` 中的 LLM 的 system prompt 中。Pipeline 的其余部分会自动识别它。 **更换 LLM** — 编辑 `graph/nodes.py` 中的 `llm` 初始化块。任何兼容 LangChain 的聊天模型都可以作为直接替代品(`ChatOpenAI`、`ChatAnthropic`、`ChatGoogleGenerativeAI` 等)。 **连接真实的日志源或 SIEM** — Agent 只需要一个目标字符串作为输入。将 `agent.invoke(initial_state)` 包装在为您提供指标的任何摄取层中(webhook、Kafka consumer、SOAR playbook 触发器)。 ## 涵盖的概念 - **代理式调查工作流** — LangGraph 多步推理,具备工具选择、状态累积和循环控制 - **检测工程** — guardrail 设计、prompt injection 检测、在编排层进行 SSRF 防御 - **OSINT 方法论** — 多源指标扩充、DNS 透视、信誉关联 - **MITRE ATT&CK 框架** — 从非结构化威胁发现中进行自动化技术映射 - **威胁行为者画像** — 根据基础设施模式通过 LLM 辅助进行风险特征分析 - **可审计的 AI 系统** — 每个节点的决策都可以通过共享的 state 和仪表板轨迹视图进行追踪 - **本地 LLM 集成** — 基于 Ollama 的推理,实现零成本、保护隐私的运行
标签:AI智能体, AI风险缓解, ESC4, Kubernetes, LangGraph, OSINT, 威胁情报, 安全, 开发者工具, 自动化调查, 超时处理, 逆向工具