rudramodi27/honeypot-suite
GitHub: rudramodi27/honeypot-suite
一个生产级多协议蜜罐平台,为 SOC/CERT 团队提供攻击行为捕获、MITRE ATT&CK 映射、YARA 恶意软件检测和 STIX 2.1 威胁情报导出能力。
Stars: 0 | Forks: 0
# 高级蜜罐套件 v1.0
一个多协议蜜罐平台,用于捕获、分类和导出攻击者行为,供 SOC 团队、CERT 或自动化检测管道作为威胁情报使用。
它模拟 SSH、HTTP、FTP、MySQL、Redis、SMTP、DNS、HTTPS、Elasticsearch 和一个管理面板诱饵,然后使用 GeoIP/ASN 数据丰富每个连接,将观察到的行为映射到 MITRE ATT&CK 技术,使用 YARA 扫描上传的文件,并通过实时 Web 仪表板和 REST API 公开所有内容。调查结果可以导出为 STIX 2.1 bundles,以便与 CERT、ISAC 或任何兼容 TAXII 的平台共享。
## 为什么会有这个项目
大多数学生/业余爱好者的蜜罐项目仅停留在“将攻击者 IP 记录到文本文件中”的阶段。本项目是按照实际 SOC 工具的标准构建的:使用真正的数据库而不是依赖可 grep 的日志;使用浏览器仪表板而不是绑定到单台机器的桌面 GUI;使用行业标准检测(YARA、MITRE ATT&CK)而不是临时的字符串匹配;以及下游平台可以真正接收的威胁情报导出格式(STIX 2.1)。
## 架构
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐
│ SSH Honeypot│ │HTTP Honeypot│ │ FTP Honeypot│ │ Decoy Services │
│ (paramiko) │ │ (fake portal)│ │ (fake FS) │ │ MySQL/Redis/SMTP │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └────────┬─────────┘
│ │ │ │
└────────────────┴────────────────┴──────────────────┘
│
logger.log() / alert_system.trigger()
mitre_attack.map_and_log()
│
┌───────────┴────────────┐
│ SQLAlchemy / SQLite │ ← database.py
│ (events, alerts, IPs, │
│ sessions, MITRE, malware)│
└───────────┬────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌───────┴────────┐ ┌─────────┴─────────┐ ┌─────────┴─────────┐
│ Web Dashboard │ │ YARA Scanner │ │ STIX Exporter │
│ Flask+SocketIO │ │ (malware/payload │ │ (2.1 bundles for │
│ REST + live feed│ │ detection) │ │ CERT/SIEM sharing)│
└─────────────────┘ └───────────────────┘ └─────────────────────┘
```
原始服务文件(`ssh_honeypot.py`、`http_honeypot.py`、`ftp_honeypot.py`、`decoy_services.py`、`mitre_attack.py`、`alert_system.py`)的核心逻辑保持不变。`run.py` 在启动时修补了三个集成点 —— `logger.log()`、`alert_system.trigger()`、`mitre_attack.map_and_log()` —— 以便额外写入数据库并推送到实时仪表板,而无需更改代码库中的每个调用位置。
## v2.0 的新特性
| 领域 | v1.0(原版) | v2.0(此次升级) |
|---|---|---|
| UI | Tkinter 桌面 GUI,仅限单台机器 | 基于浏览器的仪表板,支持网络上的任何设备 |
| 存储 | 每个服务使用 JSON line 日志 | 通过 SQLAlchemy 使用 SQLite(可替换为 Postgres),支持索引查询 |
| 恶意软件检测 | Magic bytes + 16 个 base64 混淆的正则表达式模式 | YARA 规则引擎 —— 包含 18 条覆盖 webshell、reverse shell、漏洞利用(Log4Shell、ShellShock)、挖矿木马和持久化的行业标准规则 |
| MITRE ATT&CK | 26 个已知扫描工具中有 5 个映射到 T1595(已审计的差距,已修复) | 所有 26 个扫描器签名均已映射;覆盖差距在 `mitre_attack.py` 中已修复 |
| 威胁共享 | 无 | STIX 2.1 bundle 导出(TLP 标记,兼容 TAXII) |
| 部署 | 在带有显示器的桌面上运行 `python main.py` | `docker-compose up -d`,无头模式,健康检查,非 root 容器 |
| 配置 | 各文件中硬编码的端口/值 | 单一 `config.yaml` + 用于 Docker/CI 的环境变量覆盖 |
| 测试 | 无 | 29 个 pytest 测试,涵盖 DB、YARA、STIX、config 层 |
| CI/CD | 无 | GitHub Actions:多版本测试矩阵、Docker 构建冒烟测试、依赖项 CVE 扫描 |
## 快速开始
### Docker(推荐)
```
cp .env.example .env # fill in secrets/API keys (all optional except dashboard secret)
docker-compose up -d
docker-compose logs -f honeypot
```
仪表板:`http://localhost:5000`(默认登录名 `admin` / `admin` —— **请务必修改**,参见下方的安全说明)。
### 本地 Python
```
pip install -r requirements.txt
# yara-python 需要 libyara;在 Ubuntu/Debian 上:
# sudo apt install libssl-dev && pip install yara-python
python run.py --init-db # create the database
python run.py # start everything
```
Flags:
- `--no-dashboard` —— 无头模式,仅运行服务(无 Web UI)
- `--dashboard-only` —— 仅运行 Web UI,不绑定蜜罐监听端口
- `--export-stix` —— 从当前 DB 内容生成 STIX bundle 并退出
- `--debug` —— 详细的 Flask 调试模式
## 配置
所有配置都位于 `config.yaml` 中 —— 包括端口、仪表板凭据、威胁情报 API 密钥、告警通道、YARA 开关、STIX TLP 级别。使用 `HONEYPOT__SECTION__KEY` 环境变量约定(双下划线分隔,与 `docker-compose.yml` 中的用法一致),无需编辑文件即可覆盖任何值:
```
export HONEYPOT__DASHBOARD__PORT=8080
export HONEYPOT__SERVICES__SSH__PORT=2200
```
## 安全说明(将其暴露到互联网前请阅读)
- **修改仪表板密码。** 生成哈希值并将其放入 `config.yaml`(`dashboard.password_hash`)或 `DASHBOARD_PASSWORD_HASH` 环境变量中:
python -c "from werkzeug.security import generate_password_hash; print(generate_password_hash('yourpassword'))"
- **将 `dashboard.secret_key` 更改**为随机的 32 字节值 —— 切勿发布占位符。
- **以低权限运行蜜罐监听端口**,或者使用 Docker 的 `cap_add: NET_BIND_SERVICE`(已在 `docker-compose.yml` 中配置),而不是以 root 身份运行整个进程。
- **将仪表板置于 TLS 之后**(nginx 反向代理,已包含脚手架但在 `docker-compose.yml` 中被注释掉),然后再将其暴露到受信任的内部网络之外。
- 这是一个蜜罐:假定它捕获的任何内容(上传的文件、攻击者 payload)都是恶意的。恶意软件样本会被保存但绝不会被执行(`malware_capture.py`);数据库中默认 `is_quarantined=True`。
- 诱饵服务端口默认 >1024(3306、6379、2525、5353、8443、8081、9200),因此容器不需要 root 权限;仅在您了解暴露风险权衡的情况下,才将其重新映射为特权等效端口(53、443、25)。
## 数据库 schema
六个表(`database.py`):`attack_events`(每个连接/命令)、`alerts`(来自 `alert_system` 的按严重性分类的检测)、`ip_intel`(每个 IP 缓存的 GeoIP/ASN/滥用评分)、`sessions`(完整的 SSH/FTP 会话记录)、`mitre_events`(ATT&CK 技术映射)、`malware_samples`(每个捕获的上传文件的哈希值、YARA 匹配项、文件类型)。默认使用 SQLite(零运维,适合单节点);对于多写入器/大型部署,将 `database.url` 替换为 `postgresql://` DSN —— 该 schema 与引擎无关。
## STIX 导出
```
python run.py --export-stix
# 或者通过 dashboard:“STIX Export”按钮,或者 POST /api/export/stix
```
生成一个带有 TLP 标记的 STIX 2.1 bundle(`exports/stix_bundle_*.json`),其中包含用于恶意 IP 和恶意软件哈希的 `indicator` 对象、用于观察到的 MITRE 技术的 `attack-pattern` 对象、用于链接它们的 `relationship` 对象,以及一个摘要 `report` 对象 —— 随时可以推送到 TAXII 2.1 服务器或附加到 CERT 通告中。
## 测试
```
pytest tests/ -v --cov=. --cov-report=html
```
涵盖数据库层、YARA 检测(webshell、Log4Shell、SQLi、reverse shell)、STIX bundle 结构以及带有环境变量覆盖的配置加载的 29 个测试。
## 基础设施加固 (v1.1)
一次单独的加固过程增加了网络隔离、systemd/容器安全上下文、RBAC/IAM、secrets 管理、带有 WORM 归档的集中式日志记录、IDS 规则、自动化恶意软件分析、签名的 CI 发布以及 SSH tarpit。有关完整的细分说明,请参阅 **`hardening/README.md`** —— 关键是,要明确哪些部分在此环境中进行了真正的端到端测试,而哪些部分虽然经过了审查但尚未针对实时基础架构进行验证(没有可用于测试的 K8s 集群、Vault 服务器、AWS 账户或 ELK 堆栈;该文档逐个文件地准确说明了哪些是已验证的,哪些是未验证的)。
## 项目布局
```
config.yaml Master configuration
config_loader.py YAML + ENV override loader
database.py SQLAlchemy models + query helpers
yara_scanner.py YARA rule engine (18 built-in rules)
stix_export.py STIX 2.1 bundle builder
web_dashboard.py Flask + SocketIO dashboard and REST API
run.py Entry point — orchestrates services + DB + dashboard
ssh_honeypot.py [original] paramiko-based fake SSH shell
http_honeypot.py [original] fake admin portal, SQLi/upload traps
ftp_honeypot.py [original] fake filesystem over FTP
decoy_services.py [original] MySQL/Redis/SMTP/DNS/HTTPS/ES banners
mitre_attack.py [original, gap-fixed] ATT&CK technique mapping
alert_system.py [original] severity-classified alert engine
logger.py [original] structured JSON event logger
tests/test_core.py pytest suite for the new modules
Dockerfile / docker-compose.yml Container deployment
.github/workflows/ci.yml GitHub Actions pipeline
```
## 已知的局限性 / 诚实的警告
- `database.py` 中的 `AttackEvent.country`/`asn` 是从 `logger.py` 中的 `_geoip()` 离线 IP 范围启发式方法填充的,而不是完整的 MaxMind GeoIP2 数据库 —— 对主要托管范围准确,但对住宅 ISP 不精确。在生产级地理定位中,可替换为 `geoip2` + `.mmdb` 文件(依赖项已在 `requirements.txt` 中注释)。
- `ip_enrichment.py` 的异步 enrichment 写入 `cache/ip_cache.json` 而不是新的 `ip_intel` SQL 表 —— 它们尚未统一。如果您进一步扩展此项目,弥合这一差距是顺理成章的下一步。
- 为了简单起见,Flask 开发服务器运行时使用了 `allow_unsafe_werkzeug=True`;对于实验室/内部网络之外的任何环境,请将其置于 `docker-compose.yml` 中的 nginx/TLS 脚手架之后。
- `docker_sandbox.py`(Docker 中的 Cowrie 会话隔离)需要 `docker` Python 包和一个挂载的 Docker socket —— 在 `config.yaml` 中默认禁用(`sandbox.enabled: false`),因为它需要大多数 CI/云环境默认不会授予的特权访问权限。
## 许可 / 用法
仅授权用于研究、教育和防御性安全用途。请勿针对您不拥有或未获得明确监控许可的系统或网络进行部署。
标签:Cloudflare, MITRE ATT&CK, YARA, 云资产可视化, 威胁情报, 安全, 安全监控, 密码管理, 开发者工具, 攻防研究, 网络测绘, 蜜罐, 证书利用, 请求拦截, 超时处理, 逆向工具