avikengineer007/Honeypot-Threat-Intel_harvester

GitHub: avikengineer007/Honeypot-Threat-Intel_harvester

一个轻量级的 SSH/HTTP 诱捕系统,能实时捕获攻击者交互行为并自动提取结构化威胁情报,同时通过哈希链审计日志保障数据防篡改。

Stars: 0 | Forks: 0

# Honeypot + Threat Intel Harvester 一个轻量级的 SSH/HTTP honeypot,能够捕获真实的攻击者交互,自动提取结构化的 IOC,对攻击者的 TTP 进行分类,并将其公开为可查询的 threat-intel feed —— 并提供了一个可选的集成 hook,可接入 [Sentrywatch](../sentrywatch/) 的 IP reputation 系统。 ## 架构 ``` ┌────────────────────┐ ┌─────────────────────┐ │ SSH Honeypot │ │ HTTP Honeypot │ │ (simulated shell, │ │ (bait endpoints, │ │ no real exec) │ │ common CVE paths) │ └────────┬───────────┘ └──────────┬────────────┘ │ │ └───────────┬───────────────┘ ▼ ┌──────────────────────┐ │ Session Store │ │ (SQLite, raw logs) │ └──────────┬───────────┘ ▼ ┌──────────────────────┐ │ IOC Extractor │ │ (deterministic │ │ regex/parsers) │ └──────────┬───────────┘ ▼ ┌──────────────────────┐ │ TTP Classifier │◄── Claude (advisory only, │ (rule-first) │ unclassified residue) └──────────┬───────────┘ ▼ ┌──────────────────────┐ │ Threat-Intel Store │ │ (IOCs + TTP labels) │ └────────┬─────────────┘ ┌─────────┴──────────┐ ▼ ▼ ┌─────────────────┐ ┌──────────────────┐ │ Export │ │ Sentrywatch Hook │ │ (JSON/CSV/STIX) │ │ (off by default) │ └─────────────────┘ └──────────────────┘ │ ▼ ┌─────────────────┐ │ Terminal UI │ │ (rich-based) │ └─────────────────┘ ``` ## 遏制优先设计 每一个设计决策都始于这样一个问题:*如果攻击者向我们发送了意外内容会怎样?* ### 零真实执行 SSH honeypot 提供了一个令人信服的伪造 shell —— 攻击者可以输入 `ls`、`cat /etc/passwd`、`wget http://...` —— 但**没有任何命令会被传递给宿主机操作系统**。`_execute_fake_cmd()` 调度器是一个纯 Python dict 查找,具有硬编码的字符串响应。没有 `os.system()`,没有 `subprocess`,也没有 `eval()`。`SandboxGuard.assert_zero_host_exec()` 方法的存在专门用于在测试中记录并验证这一不变性。 ### 边界处的输入清理 所有攻击者输入在存储之前都会通过 `SandboxGuard.sanitize_input()` 进行处理: - ANSI 转义序列被剥离(防止在 TUI 中发生终端注入) - 过滤不可打印字节(仅存储标准空格 + ASCII 32–126) - 输入在持久化之前被限制在安全长度内 ### 速率限制 `SandboxGuard.is_rate_limited()` 对每个 IP 实施滑动窗口连接限制(默认:50 个连接 / 60 秒)。攻击者无法以无限制的速率耗尽线程或填满数据库。 ### 审计完整性 每个会话、IOC 提取、分类和导出事件都会被写入一个 **SHA-256 哈希链审计日志**。可以使用 `python main.py audit-verify` 验证该链条。篡改任何存储的事件都会破坏链条。 ### 遏制测试 `tests/test_isolation.py` 显式地向 `_execute_fake_cmd()` 发射常见的命令注入和容器逃逸 payload,并断言它们返回安全的字符串 —— 永远不会触发真实的宿主机执行。 ## 确定性规则与 LLM 咨询 分类器遵循与 Sentrywatch 的 Decision Engine 相同的理念:**确定性规则始终优先运行;LLM 只处理规则无法解释的部分。** | TTP 类别 | 检测逻辑 | |---|---| | `credential_stuffing` | ≥3 个不同的 AUTH_ATTEMPT 事件 | | `known_cve_probe` | 请求路径/payload 匹配 CVE 特征库 | | `web_shell_attempt` | POST/PUT + 可执行 payload 特征(`eval(`、`base64_decode` 等) | | `recon_scan` | 已知的扫描器 User-Agents(nmap、masscan、nikto、zgrab 等) | | **`unclassified`** | 不匹配任何规则 → Claude 咨询二次处理 | `unclassified` 类别是一个**刻意的设计选择**。承认一个会话存在歧义,总比强行将其归入某个类别更正确。Claude 对这些会话的输出结果为: - 明确标记为 `method: llm_advisory`(在 TUI 中以斜体/暗色显示 —— 绝不看起来像规则结果) - 根据 LLM 自身的评估,以 `confidence: low/medium/high` 存储 - 在 Sentrywatch 推送阈值计算中,绝不视为权威数据 ## Sentrywatch 集成 可选的 Sentrywatch hook 会将高严重性的 IP 作为**预置的负面 reputation 条目**写入 Sentrywatch 的 `ip_reputation` 表中。关键设计属性如下: 1. **默认关闭** —— 配置中的 `sentrywatch_hook_enabled = False`。未经操作员意图,任何数据都不会跨越边界。 2. **阈值控制** —— 仅推送高于 `sentrywatch_severity_threshold`(默认:70/100)的 IP。 3. **仅限数据,不涉及决策** —— 该 hook 写入 reputation 分数。它从不调用 Sentrywatch 的 Decision Engine 或直接触发拦截。Sentrywatch 自身的确定性逻辑仍然控制着是否对 IP 进行拦截。 4. **经过审计** —— 每次推送都会连同 IP、分数和目标数据库路径一起记录在哈希链审计日志中。 这保留了一个原则,即**没有任何自动化系统会信任另一个自动化系统来触发强制执行** —— 数据在它们之间流动,但执行权限保持单一和确定性。 ## 快速开始 ### 安装 ``` pip install -r requirements.txt ``` ### 运行(带 Terminal UI) ``` python main.py run ``` 在 `:2222` 上启动 SSH honeypot,并在 `:8080` 上启动 HTTP honeypot。按 **1–6** 切换视图,按 **q** 退出。 ### 无界面运行(无 TUI) ``` python main.py run --no-tui ``` ### 查询捕获的数据 ``` # 列出 Top 攻击者 IP python main.py query # 查找特定 IP python main.py query --ip 192.168.1.100 ``` ### 导出 threat-intel feed ``` # JSON feed(默认) python main.py export --format json --output feed.json # CSV python main.py export --format csv --output feed.csv # STIX 2.1-lite bundle python main.py export --format stix --output feed.stix.json ``` ### 验证审计日志完整性 ``` python main.py audit-verify # → [OK] 审计日志 hash-chain 已验证(N 个事件验证完整)。 ``` ### 将高严重性 IP 推送到 Sentrywatch ``` # 必须先在 config 中启用 hook python main.py sentrywatch-push ``` ### 显示活动配置 ``` python main.py config ``` ## 配置 所有配置都位于 [`config.py`](config.py) 中,作为一个 Pydantic model,支持环境变量覆盖。 | 设置 | 默认值 | 描述 | |---|---|---| | `ssh_host` / `ssh_port` | `0.0.0.0:2222` | SSH honeypot 绑定地址 | | `http_host` / `http_port` | `0.0.0.0:8080` | HTTP honeypot 绑定地址 | | `ssh_banner` | OpenSSH 8.9p1 | 向扫描器展示的 SSH 版本字符串 | | `ssh_hostname` | `prod-db-master-01` | 伪造 shell 提示符中显示的主机名 | | `http_server_header` | nginx/1.18.0 | HTTP 响应中的 Server header | | `bait_endpoints` | 12 个常见路径 | 吸引探测的 CVE/CMS 路径 | | `cve_signatures` | 8 个 CVE 模式 | 确定性 CVE 检测规则 | | `sentrywatch_hook_enabled` | `False` | 必须显式启用 | | `sentrywatch_severity_threshold` | `70` | Sentrywatch 推送的分数阈值 | | `anthropic_api_key` | `$ANTHROPIC_API_KEY` | Claude API key(可选) | ## Terminal UI 视图 | 按键 | 视图 | 描述 | |---|---|---| | `1` | **实时仪表板** | 实时会话 feed、热门 IP、服务状态栏 | | `2` | **会话详情** | 最近会话的完整记录、IOC、TTP 分类 | | `3` | **Threat-Intel 浏览器** | IP 摘要表格 + IOC artifact feed | | `4` | **TTP 分解** | 带有 ASCII 条形图的 TTP 聚合分布 | | `5` | **审计日志** | 哈希链验证状态 + 事件表 | | `6` | **配置** | 活动配置和诱骗 endpoint 列表(只读) | LLM 咨询分类的会话始终以**暗色斜体黄色**显示,以区别于粗体绿色的确定性规则结果。 ## 运行测试 ``` pytest tests/ -v ``` 测试覆盖率包括: - `test_isolation.py` —— 遏制:针对伪造 shell 的命令注入 payload,ANSI 清理 - `test_ioc_ttp.py` —— 所有四个确定性 TTP 规则(credential stuffing、CVE probe、web shell、recon scan)+ IOC 提取 - `test_severity.py` —— 评分公式边界情况、TTP 危险排序、上限、边际效益递减 - `test_export_audit.py` —— STIX/CSV 导出验证、Sentrywatch DB 集成、哈希链篡改检测 ## 数据库 Schema 位于 `data/honeypot.db` 的 SQLite 数据库包含五个表:`sessions`、`iocs`、`ttp_classifications`、`ip_intel_summary`、`audit_log`。完整 schema 请参见 [TRD §5](../docs/)。 ## 项目结构 ``` Honeypot+Threat Intel Harvester/ ├── main.py # CLI entry point (run / query / export / audit-verify) ├── config.py # Pydantic config model ├── requirements.txt ├── conftest.py # pytest sys.path setup ├── core/ │ ├── models.py # Pydantic data models & enums │ ├── database.py # SQLite CRUD layer (DatabaseManager) │ ├── audit.py # SHA-256 hash-chained audit logger │ └── isolation.py # SandboxGuard (rate limiting, input sanitization) ├── services/ │ ├── manager.py # HoneypotManager (starts/stops both services) │ ├── ssh_honeypot.py # Paramiko-based SSH honeypot with fake shell │ └── http_honeypot.py # aiohttp-based HTTP honeypot with bait endpoints ├── analytics/ │ ├── ioc_extractor.py # Regex-based IOC extraction │ ├── ttp_classifier.py # Rule-first classifier with Claude fallback │ └── severity.py # Deterministic 0-100 severity score calculator ├── feed/ │ ├── exporter.py # JSON / CSV / STIX-lite export │ └── sentrywatch.py # Optional push to Sentrywatch ip_reputation ├── ui/ │ ├── app.py # HoneypotTUIApp (Rich Live + keyboard navigation) │ └── views/ │ ├── live_dashboard.py # View 1: real-time session + IP feed │ ├── session_detail.py # View 2: full session deep-dive │ ├── intel_browser.py # View 3: IP summary + IOC artifact table │ ├── ttp_breakdown.py # View 4: TTP distribution metrics │ ├── audit_viewer.py # View 5: audit log + chain verification │ └── config_view.py # View 6: read-only config display ├── tests/ │ ├── test_isolation.py │ ├── test_ioc_ttp.py │ ├── test_severity.py │ └── test_export_audit.py └── data/ └── honeypot.db # SQLite store (auto-created on first run) ```
标签:CISA项目, Python, SQLite, 威胁情报, 安全数据可视化, 开发者工具, 无后门, 蜜罐, 证书利用, 逆向工具