osintph/darkweb-scanner
GitHub: osintph/darkweb-scanner
自托管威胁情报平台,集成暗网爬虫、Telegram 监控、勒索软件追踪和基础设施侦察功能,一键 Docker 部署。
Stars: 102 | Forks: 19
# 🔍 暗网扫描器 — 网络威胁情报平台
一个自托管的、开源的威胁情报平台,专为菲律宾和东南亚安全环境构建。可抓取 .onion 网络、监控 Telegram 频道、追踪勒索软件组织、分析威胁行为者画像,并每日推送情报摘要 —— 所有功能均可通过单次 Docker 部署完成。
**许可证:AGPL v3**
## ⚡ 快速部署
```
curl -fsSL https://raw.githubusercontent.com/osintph/darkweb-scanner/main/deploy.sh -o /tmp/deploy.sh && sudo bash /tmp/deploy.sh
```
适用于 Ubuntu 22.04/24.04、Debian 以及大多数基于 Debian 的发行版。该脚本将安装 Docker、克隆代码库、配置 Tor、生成密钥、设置带 SSL 的 Nginx,并自动启动所有服务。
**使用真实域名和 SSL 证书:**
```
DOMAIN=scanner.yourdomain.com SSL_EMAIL=you@example.com \
curl -fsSL https://raw.githubusercontent.com/osintph/darkweb-scanner/main/deploy.sh -o /tmp/deploy.sh && \
sudo bash /tmp/deploy.sh
```
## 🧩 功能特性
- **暗网爬虫 (Dark Web Crawler)** — 基于 Tor 的异步 .onion 站点爬虫,支持可配置的关键词监控和实时告警
- **频道监控器 (Channel Monitor)** — 交互式仪表板标签页,可按需抓取任何 Telegram 频道,自动将消息翻译成英文,并将结果打包为 ZIP 下载(包含 HTML 报告 + 媒体文件)
- **Telegram 抓取器 (Telegram Scraper)** — 使用与爬虫相同的引擎,监控公开 Telegram 频道中的关键词命中情况
- **项目 (Projects)** — 限定范围的监控任务,支持按项目设置关键词、目标域名、实体和命中追踪
- **IP 调查 (IP Investigation)** — 并行查询 AbuseIPDB 和 VirusTotal,包含地理位置、ASN 和历史记录
- **基础设施侦察 (Infrastructure Recon)** — 类似 DNSDumpster 的概览(服务器地图、ASN/托管分布、实时 HTTP 服务 Banner 和技术指纹识别)、完整的被动 + 主动 DNS 侦察、主动子域爆破(100 条词表)、30 个常见服务的 TCP 端口扫描、实时 HTTP/HTTPS 目录枚举(70 条路径词表)、证书透明度、区域传送尝试、SPF/DMARC/DKIM 邮件安全评分、交互式子域节点图以及单 IP 端口热力图 —— 尽在仪表板之中
- **Web Check** — 针对任意域名的按需 OSINT 分析:SSL、Headers、开放端口、技术栈、WHOIS 等 —— 可通过 `webcheck.osintph.info` 访问
- **勒索软件追踪器 (Ransomware Tracker)** — 实时追踪活跃的勒索软件组织,重点关注东南亚/菲律宾地区
- **威胁行为者画像 (Threat Actor Profiles)** — 与东南亚相关的结构化 APT 和网络罪犯档案
- **每日摘要 (Daily Digest)** — 每日清晨发送的邮件,包含 CISA KEV、OTX Pulses、abuse.ch Feeds 和精选 RSS —— 通过 Mailgun 发送
- **认证 (Authentication)** — bcrypt 密码、TOTP 2FA、可选的 Google/GitHub OAuth、基于角色的访问控制
- **多用户 (Multi-user)** — 管理员和普通用户角色,支持按用户的项目所有权
## 🚀 部署
### 系统要求
- 全新的 Linux 服务器(推荐 Ubuntu 22.04/24.04)
- 最低 1GB RAM,推荐 2GB
- 开放 80 和 443 端口
- 一个域名(可选,但推荐用于可信 SSL)
### 部署后首次设置
1. 访问 `https://YOUR_SERVER_IP/register` 并创建您的管理员账户
2. 编辑您的配置:
```
nano ~/darkweb-scanner/.env
nano ~/darkweb-scanner/config/keywords.yaml
nano ~/darkweb-scanner/config/seeds.txt
```
3. 重启以应用配置更改:
```
cd ~/darkweb-scanner && docker compose restart dashboard
```
### Web Check(手动步骤 — 不包含在 deploy.sh 中)
Web Check 作为独立服务运行,必须在主平台部署后手动设置。完整说明请参阅 [docs/deployment.md](docs/deployment.md#web-check-integration)。
```
# 简短版本
cd /root
git clone https://github.com/lissy93/web-check.git
cd web-check && BASE_URL=/ yarn install && yarn build
cd /root/darkweb-scanner && docker compose up -d webcheck
```
然后为 `webcheck.YOURDOMAIN` 申请 SSL 证书并重载 Nginx —— 完整步骤请参阅部署文档。
### 更新
```
cd ~/darkweb-scanner
git pull
docker compose build --no-cache
docker compose up -d
```
## ⚙️ 配置
所有配置均位于 `.env` 文件中。**切勿提交此文件。**
### 基础变量
| 变量 | 描述 |
|----------|-------------|
| `DASHBOARD_SECRET_KEY` | Flask 会话密钥 — 请修改此项 |
| `TOR_CONTROL_PASSWORD` | 由部署脚本自动生成 |
| `DATABASE_URL` | SQLite(默认)或 PostgreSQL |
### 威胁情报源
| 变量 | 描述 |
|----------|-------------|
| `OTX_API_KEY` | AlienVault OTX — 在 otx.alienvault.com 免费获取 |
| `ABUSEIPDB_API_KEY` | AbuseIPDB — 免费层:1,000 次查询/天 |
| `VIRUSTOTAL_API_KEY` | VirusTotal — 免费层:4 次请求/分钟 |
### 每日摘要 (Mailgun)
| 变量 | 描述 |
|----------|-------------|
| `MAILGUN_API_KEY` | Mailgun API 密钥 |
| `MAILGUN_DOMAIN` | 您的 Mailgun 发送域名 |
| `MAILGUN_FROM` | 发件人地址 |
### Telegram 抓取器
| 变量 | 描述 |
|----------|-------------|
| `TELEGRAM_API_ID` | 来自 my.telegram.org/apps |
| `TELEGRAM_API_HASH` | 来自 my.telegram.org/apps |
| `TELEGRAM_PHONE` | 带国家代码的手机号码 — Channel Monitor 标签页必需 |
| `TELEGRAM_CHANNELS` | 逗号分隔的频道用户名(不带 @) — 由后台抓取器使用 |
## 📡 频道监控器
**Channel Monitor** 标签页允许您直接从仪表板按需抓取任何公开的 Telegram 频道 —— 无需 CLI。它将获取消息、自动检测语言并翻译成英文、下载媒体文件(图片和视频),并将所有内容打包成可下载的 ZIP。
### 设置
将以下内容添加到您的 `.env`(使用现有 Telegram 抓取器的相同凭据):
```
TELEGRAM_API_ID=12345678
TELEGRAM_API_HASH=abcdef1234567890abcdef1234567890
TELEGRAM_PHONE=+639XXXXXXXXX
```
`TELEGRAM_PHONE` 是唯一的新变量 —— 您的手机号码需包含国家代码(例如菲律宾为 `+63`)。
### 首次认证
Telegram 首次需要交互式登录。在服务器上运行一次此命令:
```
cd ~/darkweb-scanner
docker compose exec dashboard python3 -c "
import asyncio
from telethon import TelegramClient
import os
from dotenv import load_dotenv
load_dotenv('/app/.env')
async def auth():
c = TelegramClient('/app/data/channel_monitor/channel_monitor', int(os.environ['TELEGRAM_API_ID']), os.environ['TELEGRAM_API_HASH'])
await c.start(phone=os.environ['TELEGRAM_PHONE'])
print('Auth OK:', (await c.get_me()).username)
await c.disconnect()
asyncio.run(auth())
"
```
出现提示时,输入发送到您 Telegram 应用的 OTP。会话将保存到 `/app/data/channel_monitor/channel_monitor.session` 并在重启后保留 —— 您只需执行一次此操作。
### 使用标签页
1. 点击导航栏中的 **📡 Channel Monitor**
2. 输入频道用户名(例如 `irna_1931`)、邀请链接或 `@handle`
3. 配置选项:
- **Message Limit** — 获取的消息数量(0 = 全部)
- **Last N Days** — 仅获取最近 N 天的消息
- **Force Source Language** — 覆盖自动检测(适用于混合语言频道)
- **Max Video Size** — 跳过大于此大小的视频(MB)。设为 0 可跳过所有视频
- **Min Free Disk** — 如果服务器磁盘空间低于此阈值则中止(GB)
- **Skip English translation** — 如果消息已经是英文,则跳过翻译步骤
4. 点击 **▶ Start Scan** — 输出将在控制台面板中实时流式显示
5. 完成后,点击 **⬇ Download ZIP** 以获取:
- `messages.html` — 完整的渲染报告,包含原始文本、英文翻译和内嵌媒体
- `messages.json` — 原始结构化数据
- `media/` — 所有下载的图片和视频
### 注意事项
- 仅支持**公开**频道
- 扫描在后台线程中运行 —— 您可以导航到其他页面后再回来
- 任务历史记录在当前服务器会话期间保存在内存中;容器重启后会重置
- 输出文件存储在服务器上的 `/app/data/channel_monitor/{job_id}/` 下
### 依赖项
Channel Monitor 需要两个额外的 Python 包(已添加到 `pyproject.toml`):
```
deep-translator>=1.11
langdetect>=1.0
```
复制更新后的文件后,重建容器以安装它们:
```
cd ~/darkweb-scanner
docker compose build --no-cache dashboard
docker compose up -d
```
### 告警
| 变量 | 描述 |
|----------|-------------|
| `ALERT_WEBHOOK_URL` | Slack 或 Discord Webhook URL |
| `SMTP_HOST` / `SMTP_PORT` | 用于邮件告警的 SMTP 服务器 |
| `SMTP_USER` / `SMTP_PASSWORD` | SMTP 凭据 |
| `ALERT_EMAIL_FROM` / `ALERT_EMAIL_TO` | 告警邮件地址 |
## 📁 项目结构
```
config/
keywords.yaml # keyword monitoring rules
seeds.txt # .onion seed URLs for the crawler
docs/ # feature documentation
src/darkweb_scanner/
crawler.py # async Tor crawler
scanner.py # keyword matching engine
storage.py # SQLAlchemy models and storage layer
feeds.py # OTX, CISA, abuse.ch, RSS feeds
digest.py # daily email digest
dns_crawler.py # DNS recon + subdomain brute-force + port scan + dir enum
ip_lookup.py # IP investigation module
telegram_scraper.py # Telegram channel scraper (keyword hit pipeline)
channel_monitor.py # Telegram channel monitor (on-demand scrape + translate)
threat_actors.py # threat actor profile data
ransomware_data.py # ransomware group data
dashboard/
app.py # Flask application factory
auth_routes.py # login, register, TOTP, OAuth
dashboard_routes.py # all API and dashboard routes
channel_monitor_routes.py # Channel Monitor API routes + job runner
templates/
index.html # single-page dashboard UI
docker/
app/Dockerfile
tor/Dockerfile
nginx/ # nginx with auto SSL entrypoint
deploy.sh # zero-prerequisite deployment script
```
## 🔧 常用命令
```
# 从 ~/darkweb-scanner 运行
make scan # run a crawl (foreground)
make check-tor # verify Tor connectivity
make stats # show scan statistics
make hits # show recent keyword hits
make logs # tail all container logs
make stop # stop all containers
```
## 🗺️ 路线图
- 泄露数据搜索(集成 HIBP)
- 通过仪表板上传自定义端口扫描词表
- 计划/周期性 DNS 侦察任务
- 移动端界面
- 扩展东南亚/菲律宾威胁行为者画像和关键词覆盖范围
## 📄 许可证
根据 GNU Affero General Public License v3.0 (AGPL-3.0-only) 授权。
您可以自由使用、修改和分发本软件。如果您将修改后的版本作为网络服务运行,则必须向该服务的用户提供源代码。
完整文本请参阅 [LICENSE](LICENSE) 文件。
### v0.9.1
- Keyword Generator 中的项目下拉菜单现在可在标签页加载时正确填充
### v1.0.0
- Infrastructure Recon:DNS 标签页中新增主动子域爆破、TCP 端口扫描和目录枚举功能
标签:Atomic Red Team, ESC4, .onion爬虫, OSINT, Telegram监控, Unix, 关键词告警, 勒索软件追踪, 品牌保护, 域名监控, 威胁情报, 安全运营, 实时处理, 密码管理, 开发者工具, 扫描框架, 攻击者画像, 数字足迹, 数据可视化, 数据泄露检测, 暗网监控, 测试用例, 网络安全, 自托管, 请求拦截, 逆向工具, 隐私保护