furious-05/ShadowHorn
GitHub: furious-05/ShadowHorn
一个免费开源的 OSINT 与威胁情报平台,整合多源数据采集、AI 关联分析、关系图谱可视化和专业报告生成能力。
Stars: 10 | Forks: 1

# ShadowHorn
**高级开源情报与威胁分析平台**
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/)
[](https://react.dev/)
[](https://vitejs.dev/)
[](https://www.mongodb.com/)
[](https://docs.docker.com/compose/)
[](https://discord.gg/AxBskSe5Yb)
关于 •
功能 •
安装 •
使用 •
API 密钥 •
贡献 •
社区与支持
## 🛡️ 关于
**ShadowHorn** 是一个专为安全研究人员、调查人员和威胁分析师设计的下一代 OSINT(开源情报)平台。它将强大的数据收集器与关联分析相结合,以揭示数字领域中隐藏的联系。
ShadowHorn 采用现代的 **React** 前端和健壮的 **Python Flask** 后端构建,为收集、分析和可视化来自多个来源(包括社交媒体、代码库和泄露数据库)的情报数据提供了无缝的体验。
ShadowHorn 本身完全免费使用,其核心数据收集和关联分析管道是围绕免费层级的 API 构建的。您可以从首次收集到关联分析全程无需为外部服务付费(如果您选择启用,可选的泄露目录查询可能会产生提供商计费)。
▶️ Installation & Basic Usage Video
Click the image above to watch the installation and basic usage guide for ShadowHorn.
### 🌐 数据来源
ShadowHorn 目前从以下来源收集 OSINT:
- **GitHub** – 仓库、星标、关注者和活动。
- **Twitter/X** – 个人资料元数据和最近的推文。
- **Reddit** – 帖子、评论和 Karma 值。
- **Medium** – 文章和作者资料。
- **StackOverflow** – 问题、答案和声望。
- **Snapchat** – 公开的个人资料元数据。
- **搜索引擎** – 额外的链接和 OSINT 上下文。
- **BreachDirectory 与泄露检查** – 泄露指标和凭证暴露情况。
## 🚀 功能
ShadowHorn 被组织成直观的模块,以简化您的情报工作流程:
### 📊 仪表盘
您运营的指挥中心。查看实时系统状态、活动的收集器、数据库统计信息和最近的活动日志。获取当前调查目标的高级概览。

### 📡 数据收集
一套强大的收集器,用于从单个目标(用户名 / 电子邮件 / 全名)收集原始情报。
**收集内容**
- **社交媒体**:Snapchat、Twitter/X、Reddit、LinkedIn。
- **代码仓库**:GitHub 用户和仓库分析。
- **搜索引擎**:DuckDuckGo 和 Google 风格的 Dork 查询。
- **泄露数据**:集成泄露目录和泄露检查 API。
**最佳使用方法**
- 当您需要所有平台的信息时,使用**完整分析**;当您只关心少数几个平台时,使用**选择性分析**。
- 如果您只知道一个**用户名**,将其粘贴到**Username** 中,并(可选地)在 **Fullname** 和 **Keyword** 中复用它,以便搜索引擎和 Medium 收集器有输入内容。
- 如果您拥有电子邮件、全名和关键字,请**填写所有字段**——收集器将使用您提供的所有信息。
- 对于每个平台使用不同账号的情况,请在 **Username** 中使用查询语法,例如 `generic=main;github=ghuser;snapchat=scuser`。
*收集器支持多线程和代理友好的操作,以实现更隐蔽的运行。*
**收集视图**


### 💾 数据管理
在调查结束时安全地清理存储的 OSINT 数据。
- **定向清理**:通过提供标识符(电子邮件 / 用户名 / 个人资料键),删除单个配置文件的已收集 OSINT、关联结果和 OSINT 结果文件。
- **范围类别**:选择要清除的层级(MongoDB OSINT 集合、关联文档以及 `backend/osint_results` 下的 JSON 文件)。
- **全局重置(受保护)**:使用“Clean all data”按钮并输入 `clean all data` 以执行完整的环境重置;此操作是不可逆的,因此请先导出您需要的任何报告。

### 🧠 数据关联
ShadowHorn 的大脑。
- **分析**:使用 OpenRouter/OpenAI 模型或本地 FLAN 模型分析收集数据中的模式。
- **身份解析**:跨不同平台关联用户名、电子邮件和别名。
- **深度清理模式**:高级过滤,以消除噪音和误报。
**关联模型(通过 OpenRouter,可在设置中配置):**
| 模型 | 提供商 | 成本 | 最佳用途 |
|-------|----------|------|----------|
| DeepSeek V3.1 Nex N1 | Nex AGI | 免费 | Agent 工作流、编码、工具 |
| DeepSeek R1T2 Chimera | TNG | 免费 | 长上下文深度推理 |
| DeepSeek R1T Chimera | TNG | 免费 | 平衡的通用分析 |
| DeepSeek R1 0528 | DeepSeek | 免费 | 具有开放思维链的高阶推理 |
| gpt-oss-120b | OpenAI | 免费 | 重度推理 (MoE, H100-class) |
| gpt-oss-20b | OpenAI | 免费 | 低延迟、单 GPU 部署 |
这些模型可以在运行分析之前的“数据关联”页面上的 UI 中进行选择。如果您根本不想使用 OpenRouter,可以使用**本地 FLAN 模型**进行离线关联(参见[安装](#-installation))。

### 🔍 数据预览
轻量级查看器,用于查看已收集和关联的数据。
- 检查每个平台的原始 OSINT JSON。
- 检查提供给报告和节点可视化的关联文档。

### 🕸️ 节点可视化
由 Cytoscape 提供支持的交互式图形可视化。
- **可视化链接**:查看个人资料、电子邮件和域之间的连接。
- **平台图标**:Snapchat、Twitter、GitHub 等的可视化指示器。
- **交互式图形**:拖动、缩放并探索关系网络。
- **样式**:“兴趣”、“时间线”和“身份”节点的自定义节点样式。

### 📝 情报报告
为利益相关者生成专业级别的报告。
- **自动化叙述**:威胁评估和执行摘要。
- **导出**:下载为高质量 PDF 或 JSON。
- **风险评分**:基于调查结果的自动化风险级别评估。

### ⚙️ 设置
配置您的环境。
- **API 密钥**:管理 OpenRouter、Twitter、GitHub 和 BreachDirectory 的密钥。
- **主题**:在深色和浅色主题之间切换。

## 🔑 API 密钥与免费层级
ShadowHorn 旨在尽可能在免费的 API 层级上运行。只有 BreachDirectory 需要付费订阅。
| API | 成本 | 是否必需? | 作用 |
|-----|------|-----------|-------------|
| **GitHub** | 免费 | 推荐 | 收集仓库、星标、关注者、活动 |
| **Twitter/X** | 免费层级 | 可选 | 读取公开推文和个人资料元数据 |
| **OpenRouter** | 免费层级 | 推荐 | 关联和报告叙述(6 个免费模型) |
| **BreachDirectory** | 付费 | 可选 | 泄露查询和凭证暴露检查 |
**如何获取每个密钥:**
- **GitHub**:登录 GitHub → **Settings → Developer settings → Personal access tokens** → 创建一个 token(只读范围即可)。
- **Twitter/X**:访问 [developer.twitter.com](https://developer.twitter.com) → 创建一个 **Project & App** → 从 Keys & Tokens 选项卡复制 **Bearer Token**。
- **OpenRouter**:前往 [openrouter.ai](https://openrouter.ai) → 登录 → **API Keys** → 创建新密钥。视频演示:[youtu.be/Azkyhcxc1cE](https://youtu.be/Azkyhcxc1cE?si=uhW1wIuEiNxEW_c6)。
- **BreachDirectory**:在 [RapidAPI](https://rapidapi.com/rohan-patra/api/breachdirectory) 上打开 BreachDirectory 列表 → 订阅计划 → 复制您的 **X-RapidAPI-Key**。
所有密钥均通过 UI 中的 **Settings → API Key Configuration** 进行配置,并存储在 MongoDB 中。
## 💻 安装
### Docker(推荐)
运行 ShadowHorn 最简单的方法。三个容器:前端、后端 和 MongoDB。
**前置条件:** [Docker](https://docs.docker.com/get-docker/) 和 [Docker Compose](https://docs.docker.com/compose/install/)
#### 标准构建(仅 OpenRouter)
```
git clone https://github.com/furious-05/ShadowHorn.git
cd ShadowHorn
docker compose build
docker compose up -d
```
在浏览器中打开 `http://localhost:8080`。
#### 带本地 FLAN 的构建(离线关联)
包含 `torch`、`transformers` 和 `sentence-transformers`,用于无需 OpenRouter 的本地模型推理。
```
git clone https://github.com/furious-05/ShadowHorn.git
cd ShadowHorn
INSTALL_LOCAL_AI=true docker compose build --no-cache
GUNICORN_WORKERS=1 GUNICORN_TIMEOUT=600 docker compose up -d
```
#### 镜像大小
| 构建 | 前端 | 后端 | MongoDB | 总计 |
|-------|----------|---------|---------|-------|
| 标准(仅 OpenRouter) | ~73 MB | ~403 MB | ~878 MB | ~1.35 GB |
| 带本地 FLAN | ~73 MB | ~5.6 GB | ~878 MB | ~6.55 GB |
#### 稍后添加本地 FLAN
如果您在没有本地 FLAN 的情况下构建并希望稍后添加它而无需重新构建:
```
docker compose exec backend pip install -r requirements-local-ai.txt
```
这会安装到正在运行的容器中。要使其永久生效,请使用 `INSTALL_LOCAL_AI=true` 重新构建。
#### 有用的 Docker 命令
| 命令 | 效果 |
|---------|--------|
| `docker compose up -d` | 启动所有服务 |
| `docker compose down` | 停止所有服务(保留数据) |
| `docker compose down -v` | 停止所有服务**并擦除数据库** |
| `docker compose logs backend --tail=50` | 查看后端日志 |
| `docker image prune -f` | 删除悬空的构建层 |
### 手动安装
适用于开发或您倾向于单独运行服务的情况。
**前置条件:**
- Python 3.13+
- Node.js 22+
- MongoDB 7(本地或 Atlas)
- Git
#### Windows
```
git clone https://github.com/furious-05/ShadowHorn.git
cd ShadowHorn
# Backend
cd backend
python -m venv venv
.\venv\Scripts\Activate
pip install -r requirements.txt
# 可选:pip install -r requirements-local-ai.txt
# Frontend(新终端,从项目根目录)
cd ..
npm install
```
#### Linux / macOS
```
git clone https://github.com/furious-05/ShadowHorn.git
cd ShadowHorn
# Backend
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 可选:pip install -r requirements-local-ai.txt
# Frontend(新终端,从项目根目录)
cd ..
npm install
```
## 🕹️ 使用
### Docker
在 `docker compose up -d` 之后,打开 `http://localhost:8080`。
**默认凭证:** `shadowhorn` / `ShadowHorn@2026`
首次登录时,系统会提示您设置新密码。
### 手动
在单独的终端中启动后端和前端:
**后端:**
```
cd backend
source venv/bin/activate # Windows: .\venv\Scripts\Activate
python app.py
```
**前端:**
```
npm run dev
```
打开 `http://localhost:5173`。首次启动时,请转到 **Settings → API Key Configuration** 以输入您的 API 密钥。
## 🧭 逐页演练
### 1. 登录
- 打开应用程序 URL 并登录。
- 默认凭证:`shadowhorn` / `ShadowHorn@2026`(首次登录强制更改密码)。
- 身份验证后,会话通过浏览器中的 JWT 维持。
### 2. 仪表盘
- 显示收集器和后端的整体健康状况(GitHub、Twitter 等的 API 状态指示)。
- 显示快速指标:总关联数、收集数、配置文件、最近活动以及 14 天趋势图。
- 一旦您的 API 显示为 **OK**,使用 **Next** 按钮进入 **Data Collection**。
### 3. 设置
- 在首次运行前打开 **Settings** 并填写 API 密钥(Twitter、GitHub、BreachDirectory、OpenRouter)。
- 点击 **Save Keys** 将它们存储在 MongoDB 中。
- 如果需要,您可以稍后编辑并重新保存密钥。
### 4. 数据收集
这是您为单个目标收集 OSINT地方。
- 选择一个**选项卡**:
- **Complete Profiling** – 默认启用所有平台。
- **Selective Profiling** – 允许您切换单个平台。
- 至少填写以下一项:**Username**、**Email** 或 **Full Name**。
- 点击 **Start Processing**。进度模态框将显示正在运行的平台。
- 完成后,数据将存储在 MongoDB 和 `backend/osint_results` 中。
**查询格式:**
- **简单**:只需输入一个值,例如 `furious-05` ——在所有平台中复用。
- **按平台**:使用以 `;` 分隔的 `platform=username` 对,例如 `generic=furious-05;snapchat=furious.snap;reddit=furiousR`。
**推荐的输入模式:**
- 如果您只知道一个**用户名**,请将其粘贴到 Username、Fullname 和 Keyword 中,以便搜索引擎和 Medium 收集器有输入内容。
- 如果您知道更多信息(电子邮件、全名、关键字),请**填写所有字段**以获得更丰富的结果。
### 5. 数据关联
将原始 OSINT 转换为统一的情报配置文件。
- 选择一个**现有标识符**(您之前收集的配置文件)。
- 选择**关联模式**:
- **Fast** – 使用较少上下文的快速摘要。
- **Deep** – 跨所有平台的完整上下文(推荐用于最终报告)。
- **Deep Clean** – 在关联之前单独清理每个平台的数据。
- **Self-defined** – 自定义提示词以引导分析。
- 选择**引擎**:`Auto`、`Local FLAN` 或 `OpenRouter`。
- 选择特定的 **OpenRouter Model** 或保留 Auto。
- 点击 **Start Correlation**。
**最佳实践:** 始终验证数据收集是否最近针对该标识符运行过。最终调查请使用 Deep 模式;快速分诊请使用 Fast。
### 6. 节点可视化
关联配置文件的图形视图。
- 从下拉菜单中选择一个配置文件。
- 使用鼠标或触控板进行**平移/缩放**。
- **点击节点**打开节点详细信息面板,显示平台、账号、简介、指标和链接。
- Intelligence Summary 面板显示关联叙述。
### 7. 数据预览
- 检查所选标识符的原始 **OSINT JSON** 和**关联文档**。
- 选择一个标识符,点击 **Load Data** 查看格式化的 JSON。
- 适用于调试收集器和验证关联输入。
### 8. 情报报告
为利益相关者生成专业报告。
- 从下拉菜单中选择一个标识符。
- 点击 **Generate Report**。后端将组装各个部分:概述、攻击面、泄露发现、时间线和建议。
- 在 UI 中浏览各个部分,或点击 **Download PDF** 获取可共享的报告。
### 9. 数据管理
控制存储数据的清理。
- 选择要清理的内容:收集的 OSINT、关联结果或 OSINT 结果文件。
- 输入**标识符**以针对特定配置文件,或使用 **Clean all data** 进行完全重置。
- 定向清理需要一个标识符——如果未提供标识符,它不会删除所有内容。
### 10. 关于
- ShadowHorn 的目的、功能、工作流程和技术栈概述。
## 🛠️ 故障排除
**GitHub 收集器显示 401 错误**
```
"GitHub": {
"warnings": ["Request failed: 401", ...]
}
```
您的 GitHub token 无效或已过期。在 GitHub → **Settings → Developer settings → Personal access tokens** 中生成一个新 token(具有 `repo` 和 `read:user` 范围),然后在 ShadowHorn Settings 中更新它。
**OpenRouter 关联失败**
- 在 [openrouter.ai](https://openrouter.ai) 验证您的 OpenRouter API 密钥。
- 密钥不会自动过期,但可以被撤销。如果关联因身份验证错误而失败,请在 Settings 中重新检查密钥。
**Twitter 显示 "client-not-enrolled"**
您的 Twitter Developer App 必须在 [Twitter Developer Portal](https://developer.twitter.com) 中附加到一个 **Project**。创建一个项目,将您的应用附加到其中,错误将会解决。
**本地 FLAN OOM (内存不足)**
如果在本地 FLAN 关联期间后端 worker 被终止,说明您的内存不足。确保设置了 `GUNICORN_WORKERS=1`(防止重复加载模型)。机器至少需要 4 GB 的可用 RAM 才能运行 `flan-t5-small`。
**重新构建后仍保持登录状态**
Docker 卷会在容器/镜像重新构建期间保留您的数据库。使用 `docker compose down -v` 擦除数据库并强制使用默认凭证全新启动。
## 🤝 贡献
非常欢迎您的贡献。
- **问题**:使用 GitHub Issues 报告错误、建议新的收集器或请求 UX 改进。
- **拉取请求**:
- Fork 仓库并创建一个功能分支。
- 保持更改集中(每个 PR 对应一个功能或修复)。
- 在本地运行后端和前端以测试您的更改。
- **文档和示例**:对本 README、屏幕截图和使用技巧的改进也是有价值的贡献。
在开始开发大型功能之前,请考虑先开启一个 Issue,以便讨论并对齐想法。
## 💬 社区与支持
加入 Discord 上的 **Shadow HNR** 社区,讨论 OSINT 策略、请求功能或获取支持。
- **#installation-help**:获取工具设置方面的帮助。
- **#feature-requests**:建议新的收集器或功能。
- **#general-chat**:讨论 OSINT 和网络情报。
## ⚖️ 许可证
根据 MIT 许可证分发。有关更多信息,请参见 `LICENSE`。
## ⚠️ 免责声明
**ShadowHorn 仅用于教育和授权研究目的。**
开发人员不承担任何责任,并且对因本程序造成的任何误用或损害不负责。用户有责任确保其活动符合所有适用的地方、州和联邦法律。
由 Shadow HNR 团队使用 💻 和 ☕ 构建
标签:DNS解析, Docker, Docker-Compose, ESC4, ESC8, Flask, MIT开源许可, MongoDB, OSINT, Python, React, Syscalls, Vite, 人工智能分析, 代码仓库监控, 免费安全工具, 威胁情报, 安全调查, 安全防御评估, 实时处理, 开发者工具, 开源安全工具, 开源项目, 情报分析平台, 搜索引擎挖掘, 攻击路径可视化, 数据泄露监控, 无后门, 社交媒体监控, 社会工程学, 网络安全, 自动化数据收集, 请求拦截, 逆向工具, 逆向工程平台, 隐私保护, 黑客工具