NullRabbitLabs/minerva-hdn
GitHub: NullRabbitLabs/minerva-hdn
基于 TCP 时序统计指纹的蜜罐检测工具,通过分析响应时间模式区分真实服务与模拟器。
Stars: 0 | Forks: 0
# minerva-hdn
基于 TCP 时序样本的蜜罐检测。
当你扫描网络时,某些主机是蜜罐——设计用来伪装成真实服务但实际上会记录并上报你活动的系统。minerva-hdn 通过分析其 TCP 响应时间的统计指纹来帮助识别它们。
真实服务的时序变化源于 CPU 调度、网络抖动和应用处理。蜜罐模拟器(Cowrie、Dionaea 等)往往会产生暴露其合成来源的时序模式:不自然的统一响应、缓慢的初始握手后紧跟快速回复,或者暗示脚本化行为的双峰分布。
minerva-hdn 接收针对单个 host:port 的往返时间测量列表(单位为 ms),并返回判定结果、概率评分以及驱动该决策的具体指标("tells")。
```
{"verdict": "likely_honeypot", "probability": 0.8, "tells": ["High timing variance (CV=1.29)", "Bimodal timing distribution"], "target": "10.0.0.1:443"}
```
判定结果:`likely_real` (p < 0.3),`inconclusive` (0.3–0.7),`likely_honeypot` (p > 0.7)。
### 检测信号
| 信号 | 含义 |
|--------|---------------|
| 高变异系数 (CV > 0.4) | 时序方差相对于均值不成比例——与真实 OS 网络栈行为不一致 |
| 首次响应缓慢 | 首个数据包显著慢于后续数据包——暗示模拟代码中的延迟初始化 |
| 双峰分布 | 存在较大间隙的两个 distinct 时序聚类——暗示两条不同的代码路径在响应,典型的脚本模拟器特征 |
每个信号的评分会累加并上限为 1.0。运行双峰检查至少需要五个样本。
## 安装
```
pip install -e ".[dev]" # dev (tests included)
pip install -e ".[server]" # HTTP API
pip install -e ".[mcp]" # MCP server
pip install -e ".[server,mcp]" # everything
```
## 用法
### CLI
```
# Pipe JSON array
echo '[12.3, 45.1, 11.9, 200.4, 13.2]' | minerva-hdn analyze
# Explicit flags
minerva-hdn analyze --samples 12.3 45.1 11.9 200.4 13.2
minerva-hdn analyze --samples 12.3 45.1 11.9 --target 10.0.0.1:443
```
输出始终为 JSON。退出码:`0` = 成功,`1` = 错误。如果少于 5 个样本会向 stderr 发出警告(双峰检查禁用)。
### HTTP API
```
minerva-serve --host 0.0.0.0 --port 8080
```
```
POST /analyze
{"samples": [...], "host": "10.0.0.1", "port": 443}
→ {"verdict": "...", "probability": 0.82, "tells": [...]}
POST /analyze/batch
{"targets": [{"host": "...", "port": 443, "samples": [...]}, ...]}
→ {"assessments": [{"target_host": "...", "target_port": 443, "verdict": "...", ...}]}
GET /health
→ {"status": "ok"}
```
### MCP server
```
minerva-mcp # stdio — spawned by MCP client
minerva-mcp --transport sse --port 8080 # HTTP/SSE — Docker service
```
暴露一个工具:`analyze_honeypot(samples_ms, target_host, target_port)`。
## 手动测试
### 1. 独立运行 minerva-hdn
```
# CLI
minerva-hdn analyze --samples 12.3 45.1 11.9 200.4 13.2
# HTTP server
minerva-serve --host 0.0.0.0 --port 8080 &
# Single target
curl -s -X POST localhost:8080/analyze \
-H 'Content-Type: application/json' \
-d '{"samples": [12.3, 45.1, 200.4, 13.2, 11.9], "host": "10.0.0.1", "port": 443}' | jq .
# Batch (what the orchestrator calls)
curl -s -X POST localhost:8080/analyze/batch \
-H 'Content-Type: application/json' \
-d '{"targets": [{"host":"10.0.0.1","port":443,"samples":[12.3,45.1,200.4]},{"host":"10.0.0.2","port":22,"samples":[1.1,1.2,1.1]}]}' | jq .
# Health check
curl -s localhost:8080/health
kill %1
```
### 2. 单元测试(无需基础设施)
```
pytest -v
```
## 设计
minerva-hdn 是**无状态**的——像 nmap 一样,它接收输入并返回结果。没有数据库,没有消息队列。持久化完全由调用者负责。
这使得它易于作为库嵌入、通过 HTTP 调用,或通过 MCP 由 AI 代理驱动——而无需引入基础设施依赖。
## 开发
```
pytest --cov=src # tests with coverage
```
## 背景
Minerva-HDN 是 [NullRabbit](https://nullrabbit.ai) 平台的开源蜜罐检测组件——面向验证者基础设施和去中心化网络的自主防御。
Minerva 消费由 [Limpet](https://github.com/NullRabbitLabs/limpet-trs)(NullRabbit 的 eBPF/XDP 网络扫描器)产生的时序样本。它们共同构成了扫描层:Limpet 以纳秒级 RTT 精度发现开放端口,Minerva 判断这些服务是真实的还是合成的。
分析结果会输入到 NullRabbit 专有的威胁分析和行为基线系统。关于自主防御行动背后的治理框架,请参阅:
标签:BOF, Dionaea, Python, Python脚本, Shellcode执行, TCP协议分析, 云存储安全, 分布检测, 反蜜罐, 威胁情报, 安全规则引擎, 密码管理, 开发者工具, 插件系统, 文档结构分析, 无后门, 时间指纹识别, 服务指纹, 欺骗防御, 统计分析, 网络延迟, 网络扫描, 网络行为分析, 蜜罐检测, 逆向工具