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, 云资产可视化, 威胁情报, 安全, 安全监控, 密码管理, 开发者工具, 攻防研究, 网络测绘, 蜜罐, 证书利用, 请求拦截, 超时处理, 逆向工具