elm1nst3r/GHOST-osint-crm
GitHub: elm1nst3r/GHOST-osint-crm
一款专为OSINT调查设计的全栈开源情报管理系统,提供人员追踪、实体关系可视化、全球情报地图及无线网络情报整合等核心功能,帮助调查团队告别Excel表格高效管理案件线索。
Stars: 387 | Forks: 58
# 👻 GHOST - 全球人类操作与监视追踪系统
## OSINT 调查 CRM
一个专为严肃情报收集而构建的全栈 OSINT 调查管理系统,配备现代化、专业的界面。
## 🎯 核心功能
### 🧑💼 人员管理
- **基于角色的分类**:嫌疑人、证人、重点人员、关联人、受害者
- **全面追踪**:地址、电话号码、电子邮件、社交媒体账号
- **旅行历史**:人员活动的轨迹与分析
- **案件关联**:将人员与特定调查联系起来
- **状态追踪**:活跃、非活跃、调查中、已洗清嫌疑
- **自定义字段**:使用自定义数据字段扩展人员档案
- **高级搜索**:带过滤器的多参数搜索
### 🔗 实体网络可视化
- **交互式关系图**:使用 ReactFlow 进行可视化网络映射
- **多实体支持**:人员、企业、地点、电话、电子邮件
- **连接类型**:家庭、商业、犯罪、社交、已知关联
- **拖放界面**:直观的节点操作
- **实时更新**:实时关系映射
- **网络过滤**:聚焦于特定的实体类型和关系
### 🗺️ 全球情报地图
- **地理编码定位**:使用数据库缓存自动对地址进行地理编码
- **聚合标记**:针对大型数据集进行性能优化的聚合处理
- **人员-地点关联**:可视化追踪人员活动轨迹
- **交互式弹窗**:点击查看详细的地点信息
- **地图过滤**:按人员、日期范围或地点类型进行过滤
### 📡 无线网络情报 (WiGLE 集成)
- **手动网络录入**:通过综合表单手动添加无线网络
- **KML 导入**:导入 WiGLE 战争驾驶数据
- **网络追踪**:SSID、BSSID、加密方式、信号强度、密码
- **WiFi 7 支持**:全面支持 WiFi 7 频段 (2.4GHz, 5GHz, 6GHz)
- **多实体关联**:将网络与多个人物和企业关联
- **人员关联**:将无线网络与调查工作联系起来
- **地图可视化**:无线网络以 WiFi 图标的形式显示在全球地图上
- **地图切换**:在地图上显示/隐藏无线网络
- **高级过滤**:按信号强度、加密方式、KML 文件来源进行过滤
- **位置预览**:详情视图中的交互式地图
- **灵活验证**:仅 SSID 为必填项,BSSID 和位置可选
### 🛠️ 工具与资源库
- **OSINT 工具清单**:调查工具目录
- **分类**:社交媒体、背景调查、数据挖掘、监视
- **URL 管理**:一键访问工具
- **使用说明**:文档与技巧
- **搜索与过滤**:快速发现工具
### ✅ 任务管理
- **调查待办事项**:与案件和人员相关联
- **优先级**:低、中、高、紧急
- **状态追踪**:待处理、进行中、已完成
- **案件分配**:按调查工作组织任务
### 📊 案件管理
- **多案件支持**:管理多项调查工作
- **状态追踪**:自定义案件状态和数据类型
- **案件-人员关联**:将人员与案件联系起来
- **时间线追踪**:调查时间表
- **交叉引用**:查看案件之间的相互联系
### 🏢 商业情报
- **企业追踪**:公司及组织
- **员工映射**:追踪人员信息
- **商业关系**:链接到人员和其他企业
- **地址与联系方式管理**:完整的企业档案
### 🌓 现代化 UI/UX
- **纯色背景**:具有适当对比度的专业、易读界面
- **深色模式**:全面的深色模式支持,并优化了文本可读性
- **响应式布局**:适用于桌面端和平板电脑
- **专业配色**:符合商业审美的设计
- **平滑动画**:灵感源自 Apple 的交互体验
- **增强可读性**:所有文本元素在浅色和深色模式下均具有适当的对比度
- **居中可视化**:关系图在加载时能正确居中显示
## 🚀 快速开始
运行 GHOST 最简单的方法是使用 Docker:
```
# Clone repository
git clone
cd GHOST-osint-crm
# 使用安全的随机凭证生成 .env
printf "DB_PASSWORD=$(openssl rand -base64 24)\nSESSION_SECRET=$(openssl rand -base64 32)\nDB_USER=postgres\nDB_NAME=osint_crm_db\nDB_HOST=db\nDB_PORT=5432\nNODE_ENV=development\nPORT=3001\nFRONTEND_URL=http://localhost:8080\n" > .env
# 启动所有服务
docker compose up --build -d
```
**创建您的第一个管理员用户:**
```
# 在 containers 运行之后
docker exec osint-crm-backend node scripts/createAdminSimple.js [email]
# 示例:
docker exec osint-crm-backend node scripts/createAdminSimple.js admin MyStr0ngPass!
```
密码必须至少为 12 个字符。系统会拒绝常见的弱密码。
**访问应用程序:**
- 前端:http://localhost:8080
- 后端 API:http://localhost:3001
- 健康检查:http://localhost:3001/api/health
## 📋 前置条件
- **Docker 和 Docker Compose**(推荐)
- **或手动安装:**
- Node.js 18+
- PostgreSQL 15+
- npm 或 yarn
## 🔧 手动安装
### 前端
```
cd frontend
npm install
npm start
```
前端运行在 `http://localhost:3000`
### 后端
```
cd backend
npm install
# 配置环境
cp .env.example .env
# 使用您的数据库凭证编辑 .env
# 启动 server
npm start
```
后端运行在 `http://localhost:3001`
### 数据库
```
# 创建数据库
createdb osint_crm_db
# 运行 Migrations(从 backend 目录执行)
psql -U postgres -d osint_crm_db < migrations/create_wireless_networks.sql
```
## 📁 项目结构
```
GHOST-osint-crm/
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── utils/ # API utilities
│ │ └── index.css # Tailwind styles
│ ├── public/ # Static assets
│ └── nginx.conf # Nginx configuration
├── backend/ # Node.js/Express API
│ ├── server.js # Main server file
│ ├── migrations/ # Database migrations
│ └── public/uploads/ # File uploads
├── docker compose.yml # Docker configuration
└── .env.example # Environment template
```
## 🎮 使用指南
### 开始一项新调查
1. 在 Cases (案件) 部分创建一个**案件**
2. **添加人员**及所有相关详细信息
3. 在 Entity Network (实体网络) 视图中**映射关联**
4. 在 Global Map (全球地图) 上**追踪地点**
5. **导入无线网络**(如果使用 WiGLE 数据)
6. **分配任务**以追踪调查进度
### 无线网络情报
**手动录入:**
1. 前往 Wireless Networks (无线网络) 部分
2. 点击 "Add Network" (添加网络) 按钮
3. 输入网络详细信息(SSID 为必填,其余为可选)
4. 选择关联的人员/企业
5. 保存并在地图上查看
**KML 导入:**
1. 从 WiGLE 应用/网站导出 KML
2. 前往 Wireless Networks (无线网络) 部分
3. 点击 "Import KML" (导入 KML)
4. 上传您的 KML 文件
5. 网络将显示在地图和表格中
6. 将网络与正在调查的人员相关联
**地图视图:**
- 在全球地图上切换开启/关闭无线网络
- 点击 WiFi 图标查看网络详细信息
- 根据各种标准过滤网络
### 实体网络映射
1. 导航至 "Entity Network" (实体网络) 部分
2. 查看交互式关系图
3. 按实体类型和关系进行过滤
4. 点击节点查看详细信息
5. 在实体之间添加连接
## ⚡ 性能说明
**优化目标:**
- 最多支持 5,000 条人员记录
- 最多支持 10,000 个无线网络
- 地图上最多支持 1,000 个地点
- 最多支持 500 个关系节点
**功能特性:**
- 数据库级地理编码缓存
- 地图标记聚合
- 已具备分页准备(未来的增强功能)
- 支持懒加载
## 🔐 安全注意事项
**在所有环境中均为必需:**
- ⚠️ **SESSION_SECRET** — 必填,最少 32 个字符。如果缺失,应用将在启动时退出。
openssl rand -base64 32
- ⚠️ **DB_PASSWORD** — 没有默认值。必须在启动前在 `.env` 中进行设置。
openssl rand -base64 24
**生产环境加固:**
- ⚠️ **使用强 DB_PASSWORD** — 弱密码(`changeme`、`password` 等)会在启动时被拒绝
- 🔒 **PostgreSQL 默认不暴露给主机网络** — 仅在 Docker 网络内部可用
- 🔒 **Session cookies 使用 `SameSite=Strict` 和 `HttpOnly`** — 通过设置 `NODE_ENV=production` 来启用 `secure: true`
- 🔒 **切勿提交 `.env` 文件** — 包含敏感凭证
- 🔒 **在生产环境中使用 HTTPS** — 配置带有 SSL/TLS 的反向代理
- 🔒 **将 `backend/public/uploads/` 排除在版本控制之外** — 用户生成的内容
- 🔒 **数据收集需遵守当地法律** — 遵守隐私法规
## 📜 许可证
本项目基于 **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License** 授权。
**您可以自由地:**
- ✅ 用于个人调查
- ✅ 用于教育目的
- ✅ 用于研究
- ✅ 进行修改和改进
- ✅ 与他人分享
**在以下条件下:**
- 📝 **署名** — 给予适当的信誉
- 🚫 **非商业性使用** — 未经许可不得用于商业用途
- 🔄 **相同方式共享** — 以相同的许可证共享修改内容
**商业用途需要获得作者的明确许可。**
如需商业授权,请联系:hurdles.remand_9g [at] icloud.com
## 🙈 法律免责声明
本工具仅用于**合法的 OSINT 调查目的**。用户需对以下事项负责:
- 遵守所有适用的法律法规
- 尊重隐私权和数据保护法
- 合乎道德和负责任地使用本工具
- 为调查工作获取适当的授权
作者不对本软件的误用负责。
## 🆘 支持与故障排除
**常见问题:**
### 问题:“Table 'users' does not exist”
此问题已在 v2.1.0 中修复。现在会自动创建 users 表。
```
# 重建 containers 以应用修复
docker compose down -v
docker compose up --build
```
### 问题:应用程序在生产环境中无法启动
请检查您是否已设置所需的环境变量:
```
# 验证 .env 文件包含:
DB_PASSWORD=
SESSION_SECRET=<32+-character-secret>
FRONTEND_URL=http://localhost:8080
```
### 问题:Docker 中出现权限被拒绝错误
后端现在以非 root 用户 (nodejs:1001) 身份运行。请确保上传目录具有正确的权限:
```
chmod -R 777 backend/public/uploads/
```
### 常规故障排除步骤:
1. **检查服务健康状况:**
docker compose ps
# 所有服务均应显示 (healthy)
2. **查看日志:**
docker compose logs backend
docker compose logs frontend
docker compose logs db
3. **检查健康检查端点:**
curl http://localhost:3001/api/health
4. **验证数据库连接:**
docker exec osint-crm-db psql -U postgres -d osint_crm_db -c "SELECT COUNT(*) FROM users;"
5. **彻底重启:**
docker compose down -v # 警告:删除所有数据
docker compose up --build
6. **检查浏览器控制台** 以查找前端错误
7. **在 GitHub 上提交 issue**,包含以下内容:
- 来自日志的错误信息
- 复现步骤
- Docker 版本
- 操作系统
## 💬 反馈
我们非常欢迎您的反馈、意见和提出建议!请提交 issue 或直接联系。
## 🛠️ 技术栈
**前端:**
- React 18
- Tailwind CSS
- Leaflet (地图)
- ReactFlow (图表)
- Lucide Icons
**后端:**
- Node.js / Express
- PostgreSQL 15
- xml2js (KML 解析)
- papaparse (CSV 解析)
**基础设施:**
- Docker & Docker Compose
- Nginx (反向代理)
## 📋 近期更改
### 版本 2.4.0 (2026 年 5 月)
- 🔒 **安全加固** — 解决了 15 个漏洞:锁定未经身份验证的路由,修复了 sort 参数中的 SQL 注入,移除了 Docker 控制端点,使用 `SameSite=Strict` 加固了 session cookie
- 🔒 **密钥管理** — `SESSION_SECRET` 和 `DB_PASSWORD` 现在为必填项,且没有备用默认值;如果缺失,应用将在启动时退出
- 🔒 **Docker 加固** — 在 compose 中配置了生产环境 `NODE_ENV`,PostgreSQL 默认不再暴露给主机网络
- 🔒 **阻止 SVG 上传** — logo 上传仅限于 jpeg/png/gif 格式
- 🔒 **无线网络密码脱敏** — API 响应中排除了密码,并在地图弹窗中进行了掩码处理
- 🐛 **修复了无线网络路由冲突** — `/stats` 端点不再被 `/:id` 处理程序捕获
- 🐛 **修复了别名搜索** — 更正了 SQL 查询中的变量遮蔽 bug
- 🐛 **修复了地点分页** — `hasMore` 现在能正确反映活动过滤器
- 🐛 **修复了 KML 重新导入** — 空 BSSID 存储为 NULL 而不是空字符串
- 🐛 **修复了导入后的企业所有者链接** — `owner_person_id` 现在已能正确重新映射
- 🐛 **修复了 CSV 导入** — 使用 papaparse 替换了原先简单的 `split(',')`;现在可以正确处理带引号的字段和嵌入的逗号
- 🐛 **导入容错性** — 一条错误的不再导致整个导入操作回滚
- 🐛 **旅行历史日期验证** — 无效日期现在返回 400 错误,而不是数据库错误
- 🐛 **地理编码超时** — Nominatim 请求现在有 8 秒的超时限制
- ✨ **改进了审计日志** — 现在会记录对地点、连接和 OSINT 数据字段的更改
- ✨ **高级搜索结果上限** — 结果限制为 500 行,以防止内存问题
### 版本 2.2.0 (2026 年 1 月)
- 🛜 **手动无线网络录入** - 通过综合表单手动添加网络
- 🗺️ **地图上的无线网络** - 网络以 WiFi 图标显示在全球地图上
- 📡 **WiFi 7 支持** - 全面支持 WiFi 7 频段
- 🔗 **多实体关联** - 将网络与多个人物和企业关联
- 🎨 **深色模式改进** - 修复了所有组件中的文本可读性问题
- 📊 **关系图增强** - 改进了居中效果和标题可读性
- ✨ **UI 细节打磨** - 采用纯色背景以提升可读性
- 🔧 **灵活的验证** - 网络录入仅需 SSID
### 版本 2.1.0 (2026 年 1 月)
- 🔒 **关键安全改进** - 生产环境验证
- 🐛 **修复了 users 表创建问题** - 不再需要手动迁移
- ⚡ **性能优化** - 添加了数据库索引
- 🎯 **可选电子邮件字段** - 管理员用户不强制要求填写电子邮件
- 🛡️ **Docker 安全** - 实现了非 root 用户运行
- 🏥 **健康检查** - 监控所有服务以确保可靠性
- 📝 **优雅关机** - 容器停止时进行适当的清理
有关完整详情,请参阅 [CHANGELOG.md](CHANGELOG.md)。
用 ❤️ 为 OSINT 社区构建。
**版本:** 2.4.0
**最后更新:** 2026 年 5 月 15 日
标签:CRM, DNS解析, ESC4, GIS, GitHub, Human Intelligence, MITM代理, OSINT, ReactFlow, WiGLE, 人员追踪, 侦查工具, 全球定位, 关系图谱, 关系网络可视化, 地理信息系统, 基线检查, 嫌疑人追踪, 实时处理, 开源情报调查, 开源项目, 情报分析, 情报收集, 情报管理, 无线网络情报, 案件管理, 测试用例, 漏洞研究, 目标画像, 目标追踪, 私家侦探, 系统分析, 网络分析, 网络诊断, 自定义脚本, 请求拦截, 调查管理系统, 轨迹追踪, 非商业用途