cyc123456789/Tom-Magic
GitHub: cyc123456789/Tom-Magic
一款将 OpenCTI 与本地 LLM 连接的网页端网络威胁情报分析平台,提供隐私优先的 AI 辅助威胁研究与检测规则生成能力。
Stars: 0 | Forks: 0
# Tom Magic 🦄
一个基于网页的网络威胁情报(CTI)分析平台,它将 **OpenCTI** 与 **本地 LLM**(通过 LM Studio)连接起来,以提供 AI 辅助的威胁研究。



## 功能
| 模块 | 描述 |
|--------|-------------|
| **Ask AI** | 提出自然语言问题;系统会实时查询 OpenCTI,并利用本地 LLM 生成答案 |
| **IOC Pivot** | 输入 IP、域名、哈希或 URL,以检索相关的威胁行为者、恶意软件、攻击活动和报告 |
| **Hunt Query Generator** | 根据 IOC 和 MITRE ATT&CK TTP 生成检测规则 (Sigma / KQL / YARA / Splunk SPL) |
| **Threat Actor Profile** | 查找或浏览所有威胁行为者,包含完整的配置文件、AI 活动摘要以及相关报告 |
| **CTI Search** | 跨指标、报告和威胁行为者进行全文搜索 |
| **Query Logs** | 可搜索的所有 AI 查询和 Hunt 生成记录的历史记录,包含响应时间统计 |
- **UI 语言**:繁体中文 / English 切换
- **LLM 语言**:AI 响应与 UI 语言相匹配
- **本地优先**:所有推理均在 LM Studio 上运行 —— 不会向云端 API 发送任何数据
## 前置条件
### 1. Python 3.11 或更高版本
```
python3 --version # must be 3.11+
```
### 2. OpenCTI 实例
一个正在运行的 OpenCTI 服务器(自托管或可通过网络访问)。
本项目的默认地址:`http://192.168.5.151:8080`
### 3. LM Studio
从 [lmstudio.ai](https://lmstudio.ai) 下载。
在 LM Studio 中:
1. 下载 `meta-llama-3.1-8b-instruct`(或任何 Llama/Mistral 模型)
2. 加载模型
3. 启动 **Local Server**(默认端口 `1234`)
## 安装说明
### 1. 克隆仓库
```
git clone https://github.com/cyc123456789/tom-magic.git
cd tom-magic
```
### 2. 创建虚拟环境
```
python3 -m venv .venv
```
激活它:
| Shell | 命令 |
|-------|---------|
| bash / zsh | `source .venv/bin/activate` |
| PowerShell | `.venv\Scripts\Activate.ps1` |
| CMD | `.venv\Scripts\activate.bat` |
### 3. 安装依赖
```
pip install -e .
```
或者直接从 `pyproject.toml` 安装:
```
pip install fastapi "uvicorn[standard]" jinja2 python-multipart \
pycti langchain langchain-openai langchain-community \
chromadb sentence-transformers python-dotenv httpx pydantic-settings
```
### 4. 配置环境变量
复制示例文件并填写你的值:
```
cp .env.example .env
```
编辑 `.env`:
```
# OpenCTI
OPENCTI_URL=http://:8080
OPENCTI_TOKEN=
# LM Studio (本地 OpenAI 兼容服务器)
LMSTUDIO_BASE_URL=http://localhost:1234/v1
LMSTUDIO_MODEL=meta-llama-3.1-8b-instruct
# App
APP_HOST=0.0.0.0
APP_PORT=8000
APP_DEBUG=true
```
**如何获取你的 OpenCTI token:**
登录 OpenCTI → Profile(右上角) → API Access → 复制 token。
## 运行
确保已激活虚拟环境并且 LM Studio 正在运行,然后执行:
```
python -m uvicorn py_cti.main:app --host 0.0.0.0 --port 8000
```
或者使用模块快捷方式:
```
python -m py_cti.main
```
在浏览器中打开 `http://localhost:8000`。
## 项目结构
```
tom-magic/
├── src/py_cti/
│ ├── api/
│ │ └── routes.py # FastAPI endpoints
│ ├── cti/
│ │ ├── client.py # OpenCTI query service
│ │ ├── actor.py # Threat actor profiles
│ │ └── pivot.py # IOC pivot analysis
│ ├── llm/
│ │ ├── chain.py # Ask AI (RAG chain)
│ │ ├── hunt.py # Hunt query generator
│ │ └── actor_summary.py # Actor AI summary
│ ├── db/
│ │ └── database.py # SQLite query logging
│ ├── config.py
│ └── main.py # FastAPI app entry point
├── web/
│ ├── templates/index.html # Single-page UI
│ └── static/
│ ├── css/style.css # Google Material Design 3
│ └── js/app.js # UI logic + i18n
├── data/ # Auto-created; holds logs.db
├── .env.example
└── pyproject.toml
```
## API Endpoints
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| `POST` | `/api/ask` | 向 AI 提问 `{question, lang}` |
| `GET` | `/api/pivot?ioc=` | IOC pivot 分析 |
| `POST` | `/api/hunt` | 生成检测规则 `{platform, iocs, ttps, context, lang}` |
| `GET` | `/api/actor?name=` | 威胁行为者档案 |
| `GET` | `/api/actors?limit=` | 列出所有威胁行为者 |
| `GET` | `/api/actor/summary?name=&lang=` | AI 生成的行为者摘要 |
| `GET` | `/api/report?id=` | 报告详情 |
| `GET` | `/api/search?q=&type=` | CTI 全文搜索 |
| `GET` | `/api/logs/ask` | Ask AI 查询历史 |
| `GET` | `/api/logs/hunt` | Hunt 查询历史 |
| `GET` | `/api/logs/stats` | 使用统计 |
## 环境变量参考
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `OPENCTI_URL` | — | OpenCTI 服务器 URL |
| `OPENCTI_TOKEN` | — | OpenCTI API token |
| `LMSTUDIO_BASE_URL` | `http://localhost:1234/v1` | LM Studio 服务器 URL |
| `LMSTUDIO_MODEL` | `meta-llama-3.1-8b-instruct` | LM Studio 中加载的模型 ID |
| `APP_HOST` | `0.0.0.0` | 绑定地址 |
| `APP_PORT` | `8000` | 监听端口 |
| `APP_DEBUG` | `true` | 启用自动重载 |
## 故障排除
**LM Studio 加载了错误的模型**
在 LM Studio → My Models 中,选择正确的模型并点击 **Load**。在启动服务器之前验证它是否已加载。
**查询超时**
默认的 LLM 超时时间为 180 秒。如果你的硬件速度较慢,请增加 `src/py_cti/llm/chain.py` 和 `hunt.py` 中的 `timeout=` 值。
**OpenCTI 连接被拒绝**
检查运行 Tom Magic 的机器是否可以访问 `OPENCTI_URL`。对于 VMware 桥接网络,请直接使用虚拟机的 IP 地址。
**`ModuleNotFoundError: No module named 'py_cti'`**
确保已激活虚拟环境,并且你已运行 `pip install -e .`。
## 技术栈
- **后端**:FastAPI + Uvicorn
- **LLM**:LangChain + LM Studio(兼容 OpenAI 的本地 API)
- **CTI**:pycti (OpenCTI Python 客户端)
- **数据库**:SQLite(查询日志,自动创建)
- **前端**:Vanilla JS + Google Material Design 3
- **Markdown**:marked.js v12 + highlight.js 11.9
标签:AV绕过, DLL 劫持, FastAPI, OpenCTI, Web平台, 大语言模型, 威胁情报, 开发者工具, 网络安全, 自定义脚本, 逆向工具, 隐私保护