cyc123456789/Tom-Magic

GitHub: cyc123456789/Tom-Magic

一款将 OpenCTI 与本地 LLM 连接的网页端网络威胁情报分析平台,提供隐私优先的 AI 辅助威胁研究与检测规则生成能力。

Stars: 0 | Forks: 0

# Tom Magic 🦄 一个基于网页的网络威胁情报(CTI)分析平台,它将 **OpenCTI** 与 **本地 LLM**(通过 LM Studio)连接起来,以提供 AI 辅助的威胁研究。 ![Python](https://img.shields.io/badge/Python-3.11%2B-blue) ![FastAPI](https://img.shields.io/badge/FastAPI-0.115%2B-green) ![License](https://img.shields.io/badge/License-MIT-lightgrey) ## 功能 | 模块 | 描述 | |--------|-------------| | **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平台, 大语言模型, 威胁情报, 开发者工具, 网络安全, 自定义脚本, 逆向工具, 隐私保护