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, 本地服务, 本地部署, 桌面情报平台, 法规合规, 浏览器界面, 管理员账户, 网络诊断, 角色权限管理, 证据归档, 语义搜索, 边缘计算, 链式保管, 隐私安全