etern1ty-crypto/HONEY-MIND

GitHub: etern1ty-crypto/HONEY-MIND

基于 Rust 和 Tokio 异步运行时的低交互 TCP 蜜罐,通过模拟 SSH、HTTP、Telnet 等协议表层捕获攻击者扫描和凭据提交行为,输出结构化 JSONL 日志与 Prometheus 监控指标。

Stars: 0 | Forks: 0

[![Rust](https://img.shields.io/badge/rust-stable_(1.75+)-orange?style=flat-square&logo=rust&logoColor=white)](https://www.rust-lang.org) [![License: MIT](https://img.shields.io/badge/license-MIT-green?style=flat-square)](LICENSE) [![Tests](https://img.shields.io/badge/tests-29_passing-brightgreen?style=flat-square)]() [![Prometheus](https://img.shields.io/badge/metrics-prometheus-E6522C?style=flat-square&logo=prometheus&logoColor=white)]() [![Tokio](https://img.shields.io/badge/async-tokio-blue?style=flat-square)]() **🇷🇺 [Русский](#-описание) · 🇬🇧 [English](#-overview)**
## 🇬🇧 概述 `minotaur` 是一个用 Rust 编写的低交互型 TCP 蜜罐。它监听已配置的端口,模拟足够的协议表层以诱使扫描器提交(横幅、凭据、请求路径),并写入结构化的 JSONL 会话日志和 Prometheus 指标。 ### 支持的协议 | 协议 | 模拟 | 捕获内容 | |:---|:---|:---| | **SSH** | `SSH-2.0-…` 服务器标识字符串 | 客户端横幅(libssh、paramiko、Go x/crypto…)+ 原始字节 | | **HTTP** | `HTTP/1.x` 响应(404,可配置) | 请求行、Host、User-Agent、完整请求头 | | **Telnet** | 登录/密码提示(3次尝试) | 用户名、密码、已过滤的 IAC 字节 | | **Raw** | 可选横幅,随后持续读取直到关闭 | 捕获所有端口上的任意 TCP 流量 | ### 核心特性 - **结构化 JSONL 日志** — 时间戳、UUID、协议、源/目的地址、持续时间、hex + ASCII 预览、已解析的事件 - **Prometheus `/metrics`** — 连接数、字节数、活动会话、持续时间直方图(按协议分类) - **基于 IP 的速率限制** — 60秒滑动窗口,可配置的每分钟限制 - **全局会话上限** — 基于 `Semaphore` 的并发会话限制 - **优雅关闭** — 通过 `CancellationToken` 处理 `SIGINT`/`SIGTERM` - **运行时零外部依赖** — 单个静态二进制文件 ### 快速开始 ``` # Build cargo build --release # Configure cp config.example.toml minotaur.toml # 编辑 minotaur.toml 以设置端口、协议、Banners # Validate config ./target/release/minotaur --config minotaur.toml validate-config # Run ./target/release/minotaur --config minotaur.toml run # 对于端口 < 1024(请勿以 root 身份运行!) sudo setcap 'cap_net_bind_service=+ep' target/release/minotaur ``` ### 配置示例 ``` [logging] output = "honeypot.jsonl" stdout = false buffer_size = 1024 [metrics] enabled = true bind = "127.0.0.1:9090" [server] max_concurrent_sessions = 1024 session_timeout_seconds = 60 rate_limit_per_ip_per_min = 120 [[endpoint]] bind = "0.0.0.0:2222" protocol = "ssh" banner = "SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u3" [[endpoint]] bind = "0.0.0.0:8080" protocol = "http" server_header = "nginx/1.18.0" http_status = 404 [[endpoint]] bind = "0.0.0.0:2323" protocol = "telnet" banner = "Welcome to Ubuntu 22.04 LTS" [[endpoint]] bind = "0.0.0.0:6379" protocol = "raw" banner = "-NOAUTH Authentication required.\r\n" ``` ### 架构 ``` ┌──────────────────────────────────────────┐ │ minotaur (1 process) │ │ │ TCP ──┐ │ ┌──────────┐ │ │ │ │ Endpoint │──┐ │ TCP ──┼─accept├──▶│ listeners│ │ ┌──────────────┐ │ │ │ │ (per │ └──▶│ protocol │ │ TCP ──┘ │ │ port) │ │ handler task │ │ │ └──────────┘ │ (1 per conn) │ │ │ ▲ └──────┬───────┘ │ │ │ check rate-limit │ SessionState│ │ │ acquire semaphore │ │ │ ┌───┴──────┐ ▼ │ │ │ ratelimit│ ┌─────────────┐ │ │ └──────────┘ │ Logger task │──▶ JSONL file │ ┌──────────┐ │ (bounded ch)│──▶ stdout │ │ metrics │ └─────────────┘ │ │ │ hyper / │◀── /metrics scrape │ │ │ hyper-util│ │ │ └──────────┘ │ └──────────────────────────────────────────┘ ``` ### 会话记录示例 ``` { "ts": "2026-05-11T18:53:36.212Z", "session_id": "eb1ba5f6-13f0-44d2-9cf8-e2c2773600b8", "protocol": "http", "src": "203.0.113.4:54836", "dst_port": 8080, "duration_ms": 12, "bytes_received": 91, "events": [{ "type": "http_request", "method": "GET", "path": "/wp-admin", "host": "target.example", "user_agent": "Mozilla/5.0 (compatible; Scanner)" }], "close_reason": "server_closed" } ``` ### 测试 ``` # Unit + integration 测试(约 29 个测试) cargo test # End-to-end smoke test cd examples/e2e && cargo run ``` 测试涵盖了配置解析、JSONL 序列化、速率限制器、Prometheus 导出器、各协议处理程序以及端到端 TCP 集成。 ### 它不做什么 - **非高交互型** — 没有真实的 SSH 传输、没有 shell、没有真实的 HTTP 应用 - **无 eBPF/XDP** — 纯 `tokio::net::TcpListener` 用户空间套接字 - **无反指纹** — 提供默认的逼真设置,但没有抖动/TLS 塑形 - **无攻击响应** — 仅记录日志,不进行阻断或反击 - **无日志转发** — 请使用 `fluentbit`、`vector` 或您自己的 Sidecar ### 技术栈 ![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge&logo=rust&logoColor=white) ![Tokio](https://img.shields.io/badge/tokio-async-blue?style=for-the-badge) ![Prometheus](https://img.shields.io/badge/prometheus-E6522C?style=for-the-badge&logo=prometheus&logoColor=white) ## 🇷🇺 描述 `minotaur` — это low-interaction TCP-ханипот на Rust. Слушает настроенные порты, эмулирует минимум протокола для того, чтобы сканеры «засветились» (баннеры, логины, HTTP-запросы), и записывает структурированные JSONL-логи + Prometheus-метрики. ### 协议支持 | Протокол | Эмуляция | Что захватывает | |:---|:---|:---| | **SSH** | `SSH-2.0-…` идентификация сервера | Баннер клиента + сырые байты | | **HTTP** | HTTP/1.x ответ (404, настраиваемый) | URL, Host, User-Agent, заголовки | | **Telnet** | Login/Password (3 попытки) | Логины, пароли, IAC-очистка | | **Raw** | Опциональный баннер + чтение до закрытия | Любой TCP трафик | ### 关键功能 - **JSONL логи** — timestamp, UUID, протокол, src/dst, длительность, hex + ASCII - **Prometheus `/metrics`** — подключения, байты, активные сессии, гистограммы - **Rate-limiting** — скользящее окно 60с на IP - **Graceful shutdown** — `SIGINT`/`SIGTERM` через `CancellationToken` - **Один статический бинарник** — без зависимостей в runtime ### 快速开始 ``` # Build cargo build --release # Configure cp config.example.toml minotaur.toml # Validate config ./target/release/minotaur --config minotaur.toml validate-config # Run ./target/release/minotaur --config minotaur.toml run # 测试(约 29 个测试) cargo test ```
### 许可证 MIT — 详情请参见 [LICENSE](LICENSE)。
标签:IP 地址批量处理, JSONL, MIT开源许可, PE 加载器, Rust, SSH, TCP/IP网络, Telnet, Tokio, 低交互蜜罐, 入侵检测系统, 协议仿真, 可视化界面, 威胁情报, 子域名枚举, 安全数据湖, 密码管理, 开发者工具, 异步编程, 插件系统, 攻击行为分析, 欺骗技术, 监控与度量, 端口监听, 系统安全, 网络安全, 网络安全防御, 网络流量分析, 网络流量审计, 自定义请求头, 蓝军防御, 蜜罐, 规避防御, 证书利用, 通知系统, 隐私保护