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 劫持, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 网络安全, 逆向工具, 隐私保护