Dezirae-Stark/CT-OSINT-AI-Tools
GitHub: Dezirae-Stark/CT-OSINT-AI-Tools
一款离线的反极端主义情报监控平台,本地处理 Telegram 消息并提供完整证据链。
Stars: 0 | Forks: 0
# GhostExodus OSINT 平台
**反极端主义情报监控套件,支持英国执法部门。**
实时监控 Telegram 频道,使用本地 AI 进行威胁分类,跨通信关联实体,生成 INTELREPORT PDF,并维护具有完整链式保管日志的合法可辩护的 SHA-256 证据存档——完全在设备端运行,不使用云端、不订阅。
## TL;DR
| 项目 | 说明 |
|------|------|
| **平台** | Windows 11 原生(无需 Docker,无需 WSL) |
| **安装** | 运行 `build_installer.bat` → 生成 `GhostExodus_Setup_v1.0.0.exe` |
| **启动** | 启动 `GhostExodus.exe` → 浏览器在 `http://localhost:8000` 打开 |
| **首次运行** | 在浏览器向导中创建管理员账户 |
| **Telegram 认证** | 在终端窗口输入一次手机验证码 |
| **数据** | 所有数据存储在 `%AppData%\GhostExodus\` —— 从不离设备 |
| **默认登录** | 首次运行向导中设置用户名与密码 |
| **角色** | ADMIN / ANALYST / VIEWER(每个 API 端点均实施 RBAC) |
| **LLM** | 本地运行 `llama3.1:8b`(启动前需运行 Ollama) |
| **嵌入** | 通过 Ollama 运行的 `nomic-embed-text` |
## 目录
1. [功能特性](#features)
2. [系统要求](#system-requirements)
3. [安装 — 安装包(推荐)](#installation--installer-package-recommended)
4. [安装 — 从源码构建](#installation--from-source)
5. [配置(.env)](#configuration-env)
6. [首次运行](#first-run)
7. [用户界面](#user-interface)
8. [用户角色与权限](#user-roles--permissions)
9. [Telegram 频道监控](#telegram-channel-monitoring)
10. [威胁分类引擎](#threat-classification-engine)
11. [语义搜索与 RAG](#semantic-search--rag)
12. [实体关联与图谱](#entity-correlation--graph)
13. [证据管理](#evidence-management)
14. [情报报告](#intelligence-reports)
15. [告警规则](#alert-rules)
16. [API 参考](#api-reference)
17. [构建 Windows 安装包](#building-the-windows-installer)
18. [架构](#architecture)
19. [安全注意事项](#security-notes)
20. [技术栈](#technology-stack)
## 功能特性
### 核心能力
- **实时 Telegram 监控** — Telethon MTProto 连接订阅被监控频道的实时消息事件;新消息在数秒内出现在仪表盘
- **关键词威胁引擎** — 6 个内置威胁类别(行动策划、招募、融资、宣传、英国特定、煽动),支持正则与精确匹配自定义规则
- **本地 LLM 分类** — 在 Ollama 中运行的 `llama3.1:8b` 对中/高严重性消息进行分类,识别威胁类别、TTP、UK 相关性与紧迫性
- **语义搜索** — 使用 `nomic-embed-text` 嵌入存储在 ChromaDB 中;支持按语义、关键词或实体进行搜索,并采用余弦相似度评分
- **RAG 智能查询** — LlamaIndex 检索增强生成管道,可对消息语料库进行问答式分析
- **实体提取与关联** — 正则与 LLM 混合提取 Telegram 句柄、电话号码、邮箱、洋葱链接、加密货币地址、域名;构建共现关系图谱
- **文体学分析** — 写作风格指纹识别(TTR、三元语法、句子节奏、表情符号比例),支持余弦相似度的作者比对
- **SHA-256 证据存档** — 每条摄入消息在捕获时计算哈希;文件系统存档位于 `data/evidence/YYYY-MM-DD/`;支持单项完整性验证
- **案件包导出** — 导出包含证据 JSON 文件、哈希清单、链式保管日志及独立验证脚本的 ZIP 压缩包
- **INTELREPORT 报告** — 生成 9 节正式情报报告(执行摘要 → 行为者 → TTPs → 网络 → 时间分析 → UK 相关性 → 证据引用),通过 WeasyPrint + Jinja2 生成;若不可用则回退为 HTML
- **基于角色的访问控制** — 所有 API 端点强制实施 ADMIN / ANALYST / VIEWER 角色
- **完整审计追踪** — 所有用户操作(登录、报告生成、严重性覆盖、证据导出、用户创建等)写入不可变审计日志表
- **告警规则** — 支持 KEYWORD / ENTITY / FREQUENCY 触发类型,附带 ARCHIVE / NOTIFY / BOTH 动作;通过 SMTP 与 ntfy.sh 推送通知
- **APScheduler 作业** — 每 6 小时执行证据完整性扫描,每 30 分钟关联实体共现,每 15 分钟清理频率缓存
- **实时 WebSocket 推送** — 仪表盘通过 WebSocket 接收实时消息事件,支持指数退避自动重连
## 系统要求
### 最低硬件
| 组件 | 要求 |
|------|------|
| 操作系统 | Windows 10(版本 17763)或 Windows 11(仅 64 位) |
| 内存 | 16 GB(LLM 占用 8 GB + 操作系统/应用 8 GB) |
| 显卡 | 建议使用 8 GB+ 显存的 NVIDIA GPU(Ollama 默认使用 GPU) |
| 存储 | 20 GB 可用空间(模型与数据) |
| CPU | 建议 8 核 |
### 软件先决条件
以下组件必须在运行 GhostExodus 前安装:
1. **Ollama** — [https://ollama.com](https://ollama.com)
- 安装后拉取所需模型:
- `ollama pull llama3.1:8b`
- `ollama pull nomic-embed-text`
- 确保 Ollama **正在运行**(`ollama serve`)再启动 GhostExodus
2. **Telegram API 凭证** — 参考 [Telegram 频道监控](#telegram-channel-monitoring)
### 仅从源码构建需要
- **Python 3.11+** — [python.org](https://www.python.org/downloads/)
- **Node.js 18+** — [nodejs.org](https://nodejs.org/)
- **Inno Setup 6**(可选,用于构建安装包)— [jrsoftware.org/isinfo.php](https://jrsoftware.org/isinfo.php)
## 安装 — 安装包(推荐)
1. **以管理员身份运行** `GhostExodus_Setup_v1.0.0.exe`
2. 按照安装向导操作
3. 结束时勾选 **“启动 GhostExodus”** 以立即启动
安装程序会:
- 部署至 `C:\Program Files\GhostExodus\`
- 在 `%AppData%\GhostExodus\` 创建可写数据目录
- 将 `.env.example` 复制到 `%AppData%\GhostExodus\.env` 用于首次配置
- 可选添加启动注册表项(安装时选择)
- 若未检测到 Ollama 会给出警告(可后续安装并正常使用)
安装完成后,**编辑 `%AppData%\GhostExodus\.env`** 再启动(参见[配置](#配置-env))。
## 安装 — 从源码构建
```
:: 1. Clone
git clone https://github.com/Dezirae-Stark/CT-OSINT-AI-Tools.git ghostexodus
cd ghostexodus
:: 2. Create Python venv
python -m venv venv
call venv\Scripts\activate
:: 3. Install dependencies
pip install -r requirements.txt
:: 4. Build frontend
cd frontend
npm install
npm run build
cd ..
:: 5. Copy frontend to backend static
xcopy /E /Y /I frontend\dist backend\static
:: 6. Create .env
copy .env.example .env
:: Edit .env with your credentials
:: 7. Pull Ollama models
ollama pull llama3.1:8b
ollama pull nomic-embed-text
:: 8. Start (from project root)
cd backend
uvicorn main:app --host 127.0.0.1 --port 8000
```
## 配置(.env)
配置文件位于 `GhostExodus.exe` 同目录(安装路径:`%AppData%\GhostExodus\.env`;源码路径:项目根目录)。
### 必需设置
```
# Telegram API — 从 https://my.telegram.org/apps 获取
TELEGRAM_API_ID=12345678
TELEGRAM_API_HASH=abcdef1234567890abcdef1234567890abcdef12
TELEGRAM_PHONE=+447700000000
# Security — 使用以下命令生成:python -c "import secrets; print(secrets.token_hex(32))"
JWT_SECRET=your-64-character-hex-secret-here-do-not-use-default
```
### 可选设置
```
# Environment(开发模式会为 Vite 开发服务器启用 CORS)
ENV=production
# Ollama(如果 Ollama 在 localhost 上运行,默认设置即可)
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1:8b
OLLAMA_EMBED_MODEL=nomic-embed-text
# JWT expiry in hours
JWT_EXPIRY_HOURS=24
# Email alerts(留空以禁用)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=alerts@example.com
SMTP_PASSWORD=your-smtp-password
SMTP_FROM=alerts@example.com
ALERT_EMAIL_TO=analyst@example.com
# Push notifications via ntfy.sh(留空以禁用)
NTFY_URL=https://ntfy.sh/your-topic-here
```
### 生成 JWT 密钥
```
python -c "import secrets; print(secrets.token_hex(32))"
```
## 首次运行
1. **确保 Ollama 正在运行**:执行 `ollama serve`(或安装后作为 Windows 服务运行)
2. **启动 GhostExodus**:双击桌面图标或运行 `GhostExodus.exe`
3. 控制台窗口会保持运行服务端进程
4. 浏览器自动打开 `http://localhost:8000`
5. **首次运行向导** 检测到无用户存在,提示创建首个管理员账户
### Telegram 认证
首次启动并配置 Telegram 凭证后,**控制台窗口**将显示:
```
Please enter the code you received on Telegram:
```
输入 Telegram 发送至手机的 5 位验证码。会话将保存至 `data/telegram.session`;后续启动除非会话过期否则不再询问。
## 用户界面
GhostExodus 采用暗色终端美学 UI,字体使用 IBM Plex Mono,强调色为蓝色。
### 仪表盘
实时概览包含:
- 4 张统计卡片:今日消息数 · 活动告警数 · 监控频道数 · 高/危急标记数
- **实时消息流**(左侧,占 60%):带严重性标签、关键词高亮与内嵌 AI 分类标签的可滚动消息卡片
- **严重性环形图**(右侧上方):NONE/LOW/MEDIUM/HIGH/CRITICAL 分布
- **Top 频道柱状图**(右侧中部):最近 24 小时最活跃频道
- **近期 AI 分类**(右侧下方):AI 分类器的威胁类别
新消息通过 WebSocket 推送并以滑动动画插入流顶部,无需刷新。
### 搜索
可切换三种搜索模式:
- **语义** — 基于向量嵌入的意义检索
- **关键词** — 精确/正则文本匹配
- **实体** — 按 Telegram 句柄、电话、邮箱、加密货币地址等搜索
RAG 模式:支持以自然语言提问并返回 AI 生成的答案及引用来源消息。
### 实体图谱
基于 React Flow 的力导向图展示提取的实体:
- 节点按类型着色(句柄/电话/邮箱/加密货币/洋葱/域名)
- 边粗细表示共现次数
- 点击节点弹出详情面板:类型、首次/最后出现、共现实体、相关消息、文体特征
### 时间线
多序列面积图展示各频道消息量随时间变化;堆叠图显示严重性分布;热度图呈现频率峰值;自动检测活跃时段并推测时区偏移。
### 告警规则
创建并管理触发规则:
- **KEYWORD** — 消息文本中的正则或精确匹配
- **ENTITY** — 实体值子串匹配
- **FREQUENCY** — N 条消息在 M 分钟内(格式:`N:M`)
动作选项:**ARCHIVE**(自动标记消息)、**NOTIFY**(邮件 + 推送)、**BOTH**。
可在激活前对最近 100 条消息进行规则测试。
### 报告
按日期范围及可选的频道/严重性筛选生成正式情报报告,生成过程异步进行;UI 轮询状态(Pending → Complete)。报告包含:
1. 案件引用与分类头部
2. 执行摘要(LLM 生成)
3. 识别出的行为者(带详情的表格)
4. 关键通信(按严重性排序的前 10 条消息)
5. TTP 评估(AI 生成)
6. 网络关系(AI 生成)
7. 时间分析(AI 生成)
8. UK 相关性评估(AI 生成)
9. 证据引用列表(附 SHA-256 哈希)
10. 分析员备注与建议操作
### 证据
证据档案浏览器提供:
- 每条证据的 SHA-256 哈希显示(点击复制完整哈希)
- **验证**按钮:重新哈希并比对存储值(VERIFIED/TAMPERED)
- 多选并**导出案件包**:下载包含证据 JSON 文件、清单、链式保管日志及独立 `verification_script.py` 的 ZIP
### 设置
分页设置面板:
- **频道** — 添加/移除监控的 Telegram 频道;支持历史回填
- **用户** — 创建账户、分配角色、重置密码、停用账户(仅 ADMIN)
- **系统** — Ollama 状态、ChromaDB 集合统计、SQLite 文件大小、活动监控器数量
## 用户角色与权限
| 操作 | VIEWER | ANALYST | ADMIN |
|------|--------|---------|-------|
| 查看仪表盘、消息流、时间线、图谱 | 是 | 是 | 是 |
| 关键词/语义/实体搜索 | 是 | 是 | 是 |
| 覆盖消息严重性 | 否 | 是 | 是 |
| 创建/编辑告警规则 | 否 | 是 | 是 |
| 生成报告 | 否 | 是 | 是 |
| 导出案件包 | 否 | 是 | 是 |
| 添加/移除 Telegram 频道 | 否 | 是 | 是 |
| 用户管理 | 否 | 否 | 是 |
| 查看审计日志 | 否 | 否 | 是 |
| 查看系统状态 | 否 | 否 | 是 |
## Telegram 频道监控
### 获取 API 凭证
1. 登录 [https://my.telegram.org/apps](https://my.telegram.org/apps) 使用待监控的号码
2. 创建新应用(名称/描述可自定义)
3. 复制 **API ID**(整数)与 **API Hash**(32 位十六进制字符串)
4. 在 `.env` 中填写这些信息以及 E.164 格式的电话号码(如 `+447700000000`)
### 添加频道
1. 进入 **设置 → 频道**
2. 输入频道用户名(如 `@channelname`)或 Telegram 频道 ID
3. 点击 **添加频道**
4. 可选点击 **回填** 摄入最近 500 条历史消息
GhostExodus 通过 Telethon 事件处理器订阅实时消息;会话持久化,重启后继续生效。FloodWait 错误会自动进行指数退避重试。
### 每条消息采集内容
- 消息文本、发送者 ID/用户名、时间戳
- 转发链信息
- 媒体类型(PHOTO / DOCUMENT / WEBPAGE / OTHER)
- 查看数与转发数
- 完整原始 JSON 载荷的 SHA-256 哈希
- 关键词匹配结果(类别、关键词、匹配类型、严重性贡献)
- LLM 分类(异步处理,仅 MEDIUM+ 严重性消息)
## 威胁分类引擎
### 内置关键词类别
| 类别 | 严重性权重 | 示例模式 |
|------|------------|---------|
| OPERATIONAL_PLANNING | 3 | attack, target, operation, surveillance, reconnaissance, weapons acquisition |
| INCITEMENT | 3 | kill, murder, execute, behead, martyr, jihad |
| RECRUITMENT | 2 | join, recruit, pledge, bay'ah, brothers wanted |
| FINANCING | 2 | donate, funding, zakat, hawala, crypto for the cause |
| UK_SPECIFIC | 2 | London, Birmingham, Manchester, Home Office, MI5, PREVENT |
| PROPAGANDA | 1 | nasheed, infidel, crusader, taghut, takfir |
额外正则匹配:`@telegram_handles`、`t.me/` 邀请链接、洋葱地址、英国电话号码、加密联系引用、加密货币钱包地址。
### 严重性计算
| 匹配得分 | 严重性 |
|----------|--------|
| 0 | NONE |
| 1–2 | LOW |
| 3–5 | MEDIUM |
| 6+ | HIGH |
LLM 可在分类响应中覆盖为 **CRITICAL**,或当 `requires_immediate_action == true` 时提升为 **HIGH**。
### LLM 分类输出
每条被分类消息附带 JSON 对象:
- `threat_category`(OPERATIONAL_PLANNING / RECRUITMENT / …)
- `severity`(NONE/LOW/MEDIUM/HIGH/CRITICAL)
- `ttps`(MITRE ATT&CK 风格战术字符串数组)
- `target_indicators`(潜在目标提及)
- `uk_relevance`(布尔值)
- `requires_immediate_action`(布尔值)
- `reasoning`(分析师可读的解释)
## 语义搜索与 RAG
### 语义搜索
所有消息使用 `nomic-embed-text`(768 维向量)嵌入,并以余弦相似度存储在 ChromaDB 中;语义搜索按意义接近度返回排序结果。
### RAG 智能查询
LlamaIndex 构建检索增强管道:
1. 嵌入查询
2. 从 ChromaDB 检索 Top-K 语义最相似消息
3. 将检索上下文与查询一起送入 `llama3.1:8b`
4. 返回带来源引用的综合答案
适用于类似 *“某城市正在进行的物流策划是什么?”* 或 *“跨渠道是否提及同一人物?”* 的查询。
## 实体关联与图谱
### 提取实体类型
| 类型 | 示例 |
|------|------|
| TELEGRAM_HANDLE | `@username`、`t.me/username` |
| PHONE | 英国座机/手机号,国际 E.164 格式 |
| EMAIL | 任意邮箱地址 |
| CRYPTO | 比特币/以太坊/门罗币地址 |
| ONION | `.onion` 地址 |
| DOMAIN | 引用的网页域名 |
| ALIAS | LLM 推断的别名与昵称 |
### 共现关联
在同一消息中出现的实体会被关联。共现次数 ≥ 2 的实体对会在图谱中建立带权重(次数)的边。实体图谱使用 React Flow 渲染为力导向图。
### 文体学
按发送者(Telegram 发送方)提取的特征:
- 平均句子长度
- 类型-标记比(词汇丰富度)
- 前 10 三元语法
- 标点比例、表情符号比例、大写比例
- 自动语言检测(通过 langdetect)
`compare_authors(messages_a, messages_b)` 计算特征向量的余弦相似度,返回相似度分数(≥0.75 视为高度相似/可能同一作者)。
## 证据管理
### 捕获
每条摄入消息按如下方式归档:
```
data/evidence/YYYY-MM-DD/{channel_id}_{message_id}.json
```
JSON 文件包含捕获时刻序列化的完整原始载荷。JSON 的 SHA-256 哈希存入 `evidence_manifest` 表,附加字段:
- `captured_at_utc` — 捕获时间戳
- `file_path` — 相对路径
- `verification_status` — NULL(未校验)/ VERIFIED / TAMPERED
### 完整性验证
点击单项 **验证** 按钮,或由调度器每 6 小时执行 `verify_integrity_batch()`:重新读取文件、计算哈希并与存储值比对;不一致时标记为 TAMPERED 并写入审计日志。
### 案件包导出
选择证据项并点击 **导出案件包**,下载的 ZIP 包含:
```
case_bundle_{timestamp}.zip
├── messages/
│ ├── {channel_id}_{message_id}.json
│ └── ...
├── manifest.json # All hashes + timestamps
├── chain_of_custody.txt # Human-readable audit trail
└── verification_script.py # Standalone Python verifier (no GhostExodus required)
```
验证脚本仅依赖 Python 标准库,可提供给检察官或取证人员。
## 情报报告
报告以 PDF(WeasyPrint)生成,失败时回退为 HTML;生成在后台进行,UI 轮询完成状态。
### 案件引用格式
```
GX-YYYYMM-{4-digit-sequence}
Example: GX-202601-0001
```
### 报告章节
1. 分类头部(标注 `SENSITIVE — LAW ENFORCEMENT USE ONLY`)
2. 报告元数据(案件引用、时间范围、生成者、覆盖频道)
3. 执行摘要(LLM 生成,约 200 词)
4. 识别出的行为者(带出现次数的实体表)
5. 关键通信(按严重性排序的前 10 条消息,含文本摘录)
6. TTP 评估(LLM 生成)
7. 网络关系(LLM 生成)
8. 时间分析(LLM 生成)
9. UK 相关性评估(LLM 生成)
10. 证据引用列表(附 SHA-256 哈希)
11. 分析员备注与建议操作
## 告警规则
### 规则类型
| 类型 | 触发值格式 | 示例 |
|------|-----------|------|
| KEYWORD | 正则或精确字符串 | `bomb.{0,20}london` |
| ENTITY | 实体值子串 | `@suspicious_handle` |
| FREQUENCY | N:M(N 条消息在 M 分钟内) | `50:60` |
### 动作
| 动作 | 效果 |
|------|------|
| ARCHIVE | 设置 `is_archived=True` |
| NOTIFY | 发送邮件(通过 SMTP)与/或推送(ntfy.sh) |
| BOTH | 归档 + 通知 |
### 通知
- **邮件**:在 `.env` 中配置 `SMTP_*` 与 `ALERT_EMAIL_TO`;支持 TLS(465 端口)与 STARTTLS(587 端口)
- **推送**:配置 `NTFY_URL` 并指定 ntfy.sh 主题;通知可在移动端/桌面端通过 ntfy 应用接收
## API 参考
交互式 Swagger UI:`http://localhost:8000/api/docs`
ReDoc:`http://localhost:8000/api/redoc`
### 关键端点
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/feed` | 分页消息流,支持按严重性与频道过滤 |
| GET | `/api/messages/{id}` | 完整消息详情(含关联实体) |
| PATCH | `/api/messages/{id}/severity` | 覆盖消息严重性(ANALYST+) |
| WS | `/api/feed/live` | WebSocket 实时消息流 |
| POST | `/api/search` | 语义/关键词/实体/RAG 搜索 |
| GET | `/api/entities/graph` | React Flow 图谱数据 |
| GET | `/api/entities/{id}` | 实体详情(含文体特征与最近消息) |
| GET | `/api/timeline` | 按频道的时间序列消息量 |
| GET | `/api/timeline/hourly` | 每小时分布与峰值检测 |
| GET | `/api/alerts/rules` | 列出告警规则 |
| POST | `/api/alerts/rules` | 创建告警规则(ANALYST+) |
| POST | `/api/alerts/rules/{id}/test` | 对最近 100 条消息测试规则 |
| POST | `/api/reports/generate` | 异步触发报告生成(ANALYST+) |
| GET | `/api/reports/{id}/download` | 下载报告 PDF/HTML |
| GET | `/api/evidence` | 证据清单 |
| GET | `/api/evidence/{id}/verify` | 运行完整性检查 |
| POST | `/api/evidence/export-bundle` | 导出案件包 ZIP |
| GET | `/api/channels` | 已监控频道列表 |
| POST | `/api/channels` | 添加频道(ANALYST+) |
| GET | `/api/admin/users` | 用户列表(仅 ADMIN) |
| POST | `/api/admin/users` | 创建用户(仅 ADMIN) |
| GET | `/api/admin/audit-log` | 完整审计追踪(仅 ADMIN) |
| GET | `/api/admin/system/status` | 系统健康状态(仅 ADMIN) |
## 构建 Windows 安装包
### 先决条件
- Windows 机器,安装 Python 3.11+ 与 Node.js 18+
- [Inno Setup 6](https://jrsoftware.org/isinfo.php)(可选;若缺失则输出原始 `dist/GhostExodus/` 目录供直接运行)
- UPX(可选,用于压缩)
### 构建流程
```
build_installer.bat
```
脚本执行步骤:
1. 检查 Python 与 Node.js 是否可用
2. 构建 React 前端(`npm install && npm run build`)
3. 创建独立的 Python 构建虚拟环境
4. 在虚拟环境中安装 `requirements.txt` 与 `pyinstaller==6.11.1`
5. 清理旧的 `build/` 与 `dist/` 目录
6. 运行 `pyinstaller ghostexodus.spec` 生成 `dist/GhostExodus/GhostExodus.exe`
7. 运行 Inno Setup 编译器生成 `installer/output/GhostExodus_Setup_v1.0.0.exe`
若未找到 Inno Setup,脚本将优雅退出并给出说明,同时保留可直接运行的原始 `dist/GhostExodus/` 目录。
### 自定义安装包
编辑 `installer/ghostexodus.iss` 以修改:
- `AppVersion` — 版本号
- `DefaultDirName` — 安装路径
- 压缩级别(`Compression=lzma2/ultra64`)
-默认包含启动注册表项
## 架构
```
GhostExodus.exe (PyInstaller --onedir)
│
├── launcher.py Entry point — sets up paths, loads .env,
│ starts uvicorn in-process, opens browser
│
└── backend/
├── main.py FastAPI app — lifespan starts monitors + scheduler
│ Serves React SPA from /backend/static/
│
├── config.py Pydantic Settings — all config from .env
├── database.py 9 SQLModel tables + write_audit_log() helper
│
├── auth/ JWT auth, bcrypt, RBAC dependencies
├── collector/ Telethon connection, channel monitoring,
│ keyword engine, APScheduler jobs
├── intelligence/ Ollama LLM client (semaphore-serialised),
│ ChromaDB vector store, LlamaIndex RAG,
│ entity extractor, stylometry
├── evidence/ SHA-256 archiver, case bundle export,
│ chain-of-custody log
├── reports/ WeasyPrint PDF generator, Jinja2 templates
├── alerts/ Rules engine, email/push notifier
└── routers/ FastAPI routers for all API endpoints
```
### 数据流 — 消息摄入
```
Telegram channel
│ (Telethon event)
▼
_process_message()
├── SHA-256 hash raw JSON
├── Deduplicate (channel_id + telegram_message_id)
├── keyword_engine.match_keywords() → severity
├── archive_message() → data/evidence/YYYY-MM-DD/
├── asyncio.create_task(_embed_message_async()) → ChromaDB
├── asyncio.create_task(_classify_async()) → Ollama LLM [MEDIUM+]
└── asyncio.create_task(_evaluate_alerts()) → alert rules
│
└── broadcast() → WebSocket clients → Dashboard live feed
```
### Ollama 并发控制
所有 Ollama 调用通过单个 `asyncio.Semaphore(1)` 序列化,防止 8 GB 显卡显存耗尽;分类、嵌入与 RAG 查询按顺序排队。嵌入以较低优先级(fire-and-forget)执行,不会阻塞消息摄入。
## 安全注意事项
1. **`.env` 文件** — 包含 Telegram 凭证与 JWT 密钥,绝不提交到版本控制;`.gitignore` 已排除
2. **Telegram 会话文件**(`data/telegram.session`)— 包含已认证会话令牌,按凭证处理
3. **证据目录** — 包含原始情报数据,需按组织数据策略与法律义务处理
4. **JWT 密钥** — 使用强 32 字节随机密钥;默认占位符将在未来版本被拒绝
5. **所有用户操作** 均记录至审计追踪表;该表按设计为仅追加
6. **SHA-256 哈希** 在原始序列化 JSON 捕获时计算,确保其作为原始内容可采纳性的哈希
7. **网络绑定** — 服务器仅绑定 `127.0.0.1:8000`,不会主动暴露至网络
8. **角色强制** — 角色在 API 服务器端强制实施;VIEWER 令牌对 ANALYST+ 端点返回 403,无论 UI 状态
## 技术栈
| 层级 | 技术 | 版本 |
|------|------|------|
| 后端 API | FastAPI | 0.111+ |
| ASGI 服务器 | Uvicorn | 0.30+ |
| Telegram 客户端 | Telethon | 1.36+ |
| 向量数据库 | ChromaDB | 0.5+ |
| 关系数据库 | SQLite(通过 SQLModel) | 0.0.19+ |
| ORM | SQLAlchemy(异步) | 2.0+ |
| LLM 推理 | Ollama | `llama3.1:8b` |
| 嵌入 | Ollama | `nomic-embed-text` |
| RAG 框架 | LlamaIndex | 0.10+ |
| 认证 | python-jose(JWT) | 3.3+ |
| 密码哈希 | bcrypt | 4.0+ |
| 任务调度 | APScheduler | 3.10+ |
| HTTP 客户端 | httpx + aiohttp | — |
| PDF 生成 | WeasyPrint | 62+ |
| 模板引擎 | Jinja2 | 3.1+ |
| 前端 | React 18 + Vite 5 + Tailwind CSS v3 | — |
| 图表 | Recharts | 2.x |
| 图谱可视化 | React Flow | 11.x |
| 状态管理 | Zustand | 4.x |
| 前端 HTTP 客户端 | Axios | 1.x |
| 字体 | IBM Plex Mono、JetBrains Mono、Inter(Google Fonts) | — |
| 构建系统(Windows) | PyInstaller 6.11 + Inno Setup 6 | — |
| 证据哈希 | SHA-256(Python hashlib) | — |
## 分类
```
SENSITIVE — LAW ENFORCEMENT USE ONLY
Built for local deployment. No cloud dependencies. All data stays on device.
This platform is intended for use by authorised personnel only.
Misuse may constitute a criminal offence under the Computer Misuse Act 1990.
```
*GhostExodus OSINT Platform v1.0.0 — CT-OSINT Intelligence*
*为支持英国执法部门而构建的反极端主义情报行动。*
标签:AI风险缓解, ESC4, HTTP/HTTPS抓包, LLM, LLM评估, nomic-embed-text, Ollama, OSINT, PDF报告生成, RAG, RBAC, SHA-256, Telegram监控, Unmanaged PE, Windows原生应用, 代码示例, 反恐, 反极端主义, 命令行验证, 威胁监测, 实体关联, 嵌入模型, 态势感知, 情报分析, 数据主权, 数据分析, 无云, 无订阅, 本地AI, 本地服务, 本地部署, 桌面情报平台, 法规合规, 浏览器界面, 管理员账户, 网络诊断, 角色权限管理, 证据归档, 语义搜索, 边缘计算, 链式保管, 隐私安全