duranruizsantiago-lang/honeypot-network
GitHub: duranruizsantiago-lang/honeypot-network
一套多协议蜜罐网络系统,通过模拟六种服务捕获攻击行为并映射MITRE ATT&CK技术,实现自动化威胁情报提取与可视化分析。
Stars: 0 | Forks: 0
```
██╗ ██╗ ██████╗ ███╗ ██╗███████╗██╗ ██╗███╗ ██╗███████╗████████╗
██║ ██║██╔═══██╗████╗ ██║██╔════╝╚██╗ ██╔╝████╗ ██║██╔════╝╚══██╔══╝
███████║██║ ██║██╔██╗ ██║█████╗ ╚████╔╝ ██╔██╗ ██║█████╗ ██║
██╔══██║██║ ██║██║╚██╗██║██╔══╝ ╚██╔╝ ██║╚██╗██║██╔══╝ ██║
██║ ██║╚██████╔╝██║ ╚████║███████╗ ██║ ██║ ╚████║███████╗ ██║
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝
```
[](https://go.dev)
[](https://react.dev)
[](https://www.typescriptlang.org)
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://www.docker.com)
[](https://attack.mitre.org/)
*这是一个快速概览。安全理论、架构和完整的演练在[学习模块](#learn)中。*
## 功能
- 模拟 6 种服务:SSH(带 25+ 命令的伪造 shell)、HTTP(伪造的 WordPress/phpMyAdmin)、FTP(PASV 文件捕获)、SMB(negotiate)、MySQL(wire protocol)、Redis(RESP)
- 捕获攻击者的每次交互:凭据、命令、文件上传、扫描模式、工具指纹
- 通过单事件和滑动窗口检测,将行为映射到 8 种战术下的 27 种 MITRE ATT&CK 技术
- 提取 IOC(IP、URL、域名、user-agents、凭据),并进行置信度评分和去重
- 将威胁情报导出为 STIX 2.1 bundles 和防火墙 blocklists(iptables、nginx deny、纯文本、CSV)
- 以 asciicast v2 格式记录 SSH 会话,可通过 xterm.js 在浏览器中重放
- 通过 WebSocket 将事件实时流式传输到 React 仪表板,包含攻击地图、MITRE 热力图和会话重放
## 快速开始
```
git clone https://github.com/duranruizsantiago-lang/honeypot-network.git
cd honeypot-network
cp .env.example .env
docker compose -f dev.compose.yml up -d
```
仪表板将在 `http://localhost:3000` 加载。连接到 SSH honeypot 以查看你的第一个捕获会话:
```
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 │
└─────────────────────────────────┘
```
## 服务
| Service | Port | Protocol | Interaction Depth |
|---------|------|----------|-------------------|
| SSH | 2222 | x/crypto/ssh | 带文件系统的完整 shell,25+ 命令,会话记录 |
| HTTP | 8080 | net/http | 伪造的 WordPress/phpMyAdmin,扫描器检测,漏洞路径陷阱 |
| FTP | 2121 | Raw TCP | AUTH + PASV 数据通道,文件上传捕获(1MB 上限) |
| SMB | 4450 | Raw TCP | NetBIOS framing + negotiate response,SMB1/SMB2 检测 |
| MySQL | 3307 | Raw TCP | 二进制 wire protocol greeting,认证捕获,查询处理 |
| 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 | Description |
|----------|-------------|
| `GET /api/health` | 包含版本和传感器 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 bundle 导出 |
| `GET /api/iocs/export/blocklist` | Blocklist 导出(纯文本、iptables、nginx、csv) |
| `WS /ws/events` | 实时事件流 |
## MITRE ATT&CK 覆盖范围
Hive 检测跨越 8 种战术的 27 种技术:
| Tactic | Techniques |
|--------|------------|
| 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 Brute Force,60 秒内出现 3 个以上不同服务 -> T1046 Network Service Discovery)。
## 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 配置文件或环境变量进行设置:
| Variable | Default | Description |
|----------|---------|-------------|
| `HIVE_SENSOR_ID` | `hive-01` | 传感器标识符 |
| `HIVE_SSH_ENABLED` | `true` | 启用 SSH honeypot |
| `HIVE_SSH_PORT` | `2222` | SSH 监听端口 |
| `HIVE_HTTP_ENABLED` | `true` | 启用 HTTP honeypot |
| `HIVE_HTTP_PORT` | `8080` | HTTP 监听端口 |
| `HIVE_FTP_ENABLED` | `true` | 启用 FTP honeypot |
| `HIVE_FTP_PORT` | `2121` | FTP 监听端口 |
| `HIVE_SMB_ENABLED` | `true` | 启用 SMB honeypot |
| `HIVE_SMB_PORT` | `4450` | SMB 监听端口 |
| `HIVE_MYSQL_ENABLED` | `true` | 启用 MySQL honeypot |
| `HIVE_MYSQL_PORT` | `3307` | MySQL 监听端口 |
| `HIVE_REDIS_ENABLED` | `true` | 启用 Redis honeypot |
| `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 host key 路径 |
| `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
```
## 学习
| Module | Topic |
|--------|-------|
| [00 - 概述](learn/00-OVERVIEW.md) | 前置条件、快速开始、项目结构 |
| [01 - 概念](learn/01-CONCEPTS.md) | Honeypot 理论、协议仿真、MITRE ATT&CK、IOC 类型 |
| [02 - 架构](learn/02-ARCHITECTURE.md) | 事件驱动设计、数据流、设计模式 |
| [03 - 实现](learn/03-IMPLEMENTATION.md) | SSH shell 仿真、MySQL wire protocol、FTP 状态机 |
| [04 - 挑战](learn/04-CHALLENGES.md) | 添加 Telnet/SMTP、部署到 VPS、ML 异常检测 |
## 常见问题
**重复启动时出现 SSH host key 错误**
```
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 端口上运行。
## 关于本项目
这是我网络安全作品集的一部分。展示了:
- **网络安全:** 多协议 honeypot 部署,Raw TCP 协议仿真
- **威胁情报:** MITRE ATT&CK 映射,IOC 提取,STIX 2.1 导出
- **后端工程:** 事件驱动的 Go 架构,并发服务模拟,实时 WebSocket 流式传输
- **攻击者行为分析:** 会话记录,凭据捕获,工具指纹识别
- **操作安全:** 防火墙 blocklist 生成,GeoIP 丰富,法律合规文档
## 法律免责声明
本工具专为授权的安全研究和教育目的而设计。在您不拥有或无法控制的网络上部署 honeypot 可能会违反当地法律法规。部署之前:
- 确保您已获得网络所有者的授权
- 检查您的云服务提供商的可接受使用政策(部分提供商禁止使用 honeypot)
- 请注意,honeypot 会收集攻击者数据,其中可能包含受隐私法规(GDPR、CCPA)约束的个人信息
- 不得将捕获的数据用于攻击目的
- 如果在公网 IP 上部署,请了解您正在邀请来自潜在恶意行为者的连接
作者对滥用本软件的行为不承担责任。
## License
AGPL 3.0 — 见 [LICENSE](LICENSE)
标签:EVTX分析, Go, PE 加载器, PostgreSQL, React, Ruby工具, Syscalls, 威胁情报, 开发者工具, 搜索引擎查询, 攻防研究, 测试用例, 网络安全, 蜜罐, 证书利用, 请求拦截, 隐私保护