NampelliSrilekha/CTI-Agent

GitHub: NampelliSrilekha/CTI-Agent

面向 SOC 的对话式威胁情报分析 Agent,通过自然语言查询多个实时情报源并返回结构化研判结果。

Stars: 0 | Forks: 0

# CTI-Agent 一个专为安全运营中心(SOC)设计的**对话式威胁情报(CTI)分析师**。你可以用自然语言询问有关 IP、域名、文件哈希、威胁行为者和软件漏洞的问题——该 Agent 会选择合适的工具,查询实时的情报源,并返回带有来源归类的结构化判定结果。 基于 **LangGraph**(ReAct Agent 循环)、**Claude Sonnet** 和 **FastAPI** 构建,配备浏览器 UI 和实时工具调用追踪面板。 ## 功能特点 ## 架构 ``` ┌─────────────┐ POST /chat ┌──────────────┐ │ ui/ │ ──────────────────► │ app.py │ │ index.html │ ◄────────────────── │ (FastAPI) │ └─────────────┘ reply + steps └──────┬───────┘ │ ▼ ┌─────────────────┐ │ agent/graph.py │ │ LangGraph ReAct│ │ + MemorySaver │ └────────┬────────┘ │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ lookup_ip get_threat_actor pivot lookup_domain check_exposure lookup_hash │ ▼ agent/tools.py ──► External CTI APIs ``` 该 Agent 运行标准的 **ReAct 循环**:LLM 决定调用哪个工具 → 工具获取数据 → 结果反馈 → LLM 综合得出最终答案。LangGraph 的 `MemorySaver` 通过 `session_id` 对状态进行快照,从而实现多轮对话的上下文关联。 ## 项目结构 ``` CTI-Agent/ ├── app.py # FastAPI server — /chat endpoint + static UI ├── agent/ │ ├── graph.py # LangGraph agent, system prompt, tool wrappers │ ├── tools.py # Async CTI API integrations │ └── injection_guard.py # Prompt injection detection & output sanitization ├── ui/ │ └── index.html # Chat UI + agent trace panel ├── data/ │ └── mock_intel.py # Sample intel data (for offline/dev reference) ├── requirements.txt └── .env # API keys (not committed) ``` ## 工具 | 工具 | 描述 | 数据来源 | |------|-------------|--------------| | `lookup_ip` | IP 信誉、滥用评分、开放端口 | AbuseIPDB, VirusTotal, Shodan | | `lookup_domain` | 域名信誉和威胁脉搏 | VirusTotal, AlienVault OTX | | `lookup_hash` | 文件哈希恶意软件检测 | VirusTotal | | `get_threat_actor` | APT 概况 — 别名、TTPs、目标 | OTX, MITRE ATT&CK(本地参考) | | `check_exposure` | 针对软件 + 版本的 CVE 查询 | NVD | | `pivot` | 从 IOC 关联出的域名/IP | Shodan, AlienVault OTX | ## 前置条件 - Python 3.11+(已使用 3.14 测试) - 你打算使用的各项服务的 API key(见下文) ## 设置说明 **1. 克隆并创建虚拟环境** ``` cd CTI-Agent python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate ``` **2. 安装依赖** ``` pip install -r requirements.txt ``` **3. 配置环境变量** 在项目根目录下创建一个 `.env` 文件: ``` ANTHROPIC_API_KEY=your_anthropic_key VIRUSTOTAL_API_KEY=your_virustotal_key ABUSEIPDB_API_KEY=your_abuseipdb_key OTX_API_KEY=your_otx_key NVD_API_KEY=your_nvd_key SHODAN_API_KEY=your_shodan_key ``` | 变量 | 必需 | 用途 | |----------|----------|---------| | `ANTHROPIC_API_KEY` | 是 | 为 LLM (Claude Sonnet) 提供动力 | | `VIRUSTOTAL_API_KEY` | 推荐 | IP、域名和哈希查询 | | `ABUSEIPDB_API_KEY` | 推荐 | IP 滥用评分 | | `OTX_API_KEY` | 推荐 | 威胁脉搏、行为者情报、关联分析 | | `NVD_API_KEY` | 可选 | CVE / 暴露面检查(没有也能运行,但会受到速率限制) | | `SHODAN_API_KEY` | 可选 | 开放端口、主机名、关联数据 | **4. 运行服务器** ``` python app.py ``` 在浏览器中打开 [http://localhost:8000](http://localhost:8000)。 ## API ### `POST /chat` ``` { "session_id": "abc123", "message": "Is 45.83.122.10 malicious?" } ``` **响应:** ``` { "reply": "**MALICIOUS**\n\n- Abuse score: 87/100\n...", "steps": [ { "tool": "lookup_ip", "input": { "ip": "45.83.122.10" } } ] } ``` - `session_id` — 在多次请求中复用同一个 ID 以保持对话历史 - `steps` — 本轮对话期间进行的工具调用(显示在 UI 追踪面板中) ## 示例查询 - *45.83.122.10 是恶意的吗?* - *APT29 以哪些 TTPs 闻名?* - *我们运行的是 Confluence 7.13 — 我们有暴露风险吗?* - *检查哈希 44d88612fea8a8f36de82e1278abb02f* - *从该 IP 关联出相关的域名*(后续提问 — 使用会话记忆) ## 安全性 - **直接注入拦截** — 在发送给 Agent 之前,会扫描用户输入中是否包含诸如“忽略指令”之类的模式 - **间接注入防御** — 工具的输出会被包装,并且类角色前缀会被脱敏,以防外部数据劫持对话 - **工具优先策略** — 系统 prompt 指示 Agent 必须始终调用工具,绝不捏造情报 - **确定性 LLM** — `temperature=0` 确保分析的一致性和可复现性 ## 技术栈 | 层级 | 技术 | |-------|------------| | Agent 编排 | LangGraph 1.x (`create_react_agent`) | | LLM | Claude Sonnet(通过 `langchain-anthropic`) | | 工具框架 | LangChain `@tool` 装饰器 | | 记忆 | LangGraph `MemorySaver`(进程内) | | API 服务器 | FastAPI + Uvicorn | | HTTP 客户端 | aiohttp(异步并行 API 调用) | | 前端 | 原生 HTML/CSS/JS | ## 许可证 MIT(或在此处指定你的许可证)
标签:AI智能体, DLL 劫持, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 网络安全, 逆向工具, 隐私保护