TangoisdownHQ/TID-Recon-Dog
GitHub: TangoisdownHQ/TID-Recon-Dog
一个欺骗驱动的多协议蜜罐与威胁情报平台,通过模拟真实服务诱捕攻击者并自动生成结构化 CTI 数据。
Stars: 1 | Forks: 1
```
______ __ __ ______
/\ == \ /\ \ /\ \ /\ ___\
\ \ __< \ \ \ \ \ \ \ \ __\
\ \_\ \_\ \ \_\ \ \_\ \ \_____\
\/_/ /_/ \/_/ \/_/ \/_____/
T 54 A 41 N 4E G 47 O 4F I 49 S 53 D 44 O 4F W 57 N 4E - 2D
R 52 E 45 C 43 O 4F N 4E - 2D
D 44 O 4F G 47
BRAVE NEW WORLD . . . .
𓏺𓏺 𓎆𓎆𓏺𓏺𓏺𓏺𓏺𓏺 𓆼𓆼 𓎆𓎆 𓏺𓏺𓏺𓏺𓏺
-'ALL WARFARE IS BASED ON DECEPTION'-
- - - - - --SUN TZU'--- - -- - - - -
```
# TID-Recon-Dog
**TID-Recon-Dog** 是一个由 OSINT 驱动的欺骗与网络威胁情报平台,旨在**诱捕、追踪和分析**侦察与恶意入侵行为。它通过确定性响应器和可选的**本地 AI 模型**(Qwen3-4B),对外暴露逼真的多协议服务(SSH、HTTP、FTP、PostgreSQL、RTSP、RDP、Telnet、Modbus、SNMP、SMTP),让攻击者能够“登录”到一个充满诱惑且可探索的诱饵环境中——包括伪造的文件系统、管理员/IoT/数据库面板以及摄像头画面——与此同时,他们的每一个操作都会被记录下来。
它能够跨重连保持**针对单个攻击者的记忆**,对其意图进行评分(侦察 → 暴力破解 → 漏洞利用),并将观测结果转化为**第一方威胁情报**:提取的 IOC、**MITRE ATT&CK** 映射,以及 **STIX / MISP / TAXII** 导出,同时支持富化、暗网关联和 SIEM 转发。其操作员控制台还提供了实时指标、响应策略(拦截 / 拖延 / 诱饵 / 消息注入)、全局视图,以及一个基于捕获的流量重新训练模型的 MLOps 循环。你可以通过 Terraform 将其部署到任何地方——**Docker、Kubernetes (Cilium) 或 AWS (EC2 / EKS)**。
📚 **完整文档:[`docs/`](docs/README.md)**(包含架构、托管、强化、CTI、MLOps 和部署)。
## 核心功能
- 为 `http`、`ssh`、`ftp`、`postgres`、`rtsp`、`rdp`、`telnet`、`modbus`、`snmp` 和 `smtp` 运行欺骗性服务
- 使用针对特定服务的响应器,而不是自由格式的运行时 LLM 输出
- 为每个攻击者固定稳定的诱饵角色和状态
- 对攻击者行为进行评分,并将其意图分类为 `recon`(侦察)、`brute_force`(暴力破解)或 `exploitation`(漏洞利用)
- 导出结构化的交互记录、数据集和适配云端的捆绑包
- 提供 CLI/TUI 仪表板,用于实时查看会话并对特定会话进行操作覆盖
## 架构
- `src/services/`:协议监听器和 socket/http 适配器
- `src/responders/`:确定性的单一服务欺骗逻辑
- `src/profiles/personaLibrary.ts`:摄像头 NVR、跳板机、备份服务器、现场网关、PLC、运维数据库和邮件中继角色
- `src/deception_engine/state/attacker_memory.ts`:持久化攻击者记忆、评分、意图分类、GeoIP 富化
- `src/deception_engine/logging/transcript_store.ts`:协议交互记录持久化
- `src/operator/watch.ts`:CLI/TUI 仪表板
- `src/operator/alertHook.ts`:风险升级警报日志 + 可选的 webhook
- `src/utils/connectionThrottle.ts`:针对 TCP 服务的单 IP 连接数上限
- `src/utils/geoip.ts`:带本地缓存的 GeoIP 查询(ip-api.com)
- `src/cloud/bundle.ts`:用于 S3、SQS、Kinesis 和 ECS/Fargate 交接的云端打包捆绑包
- `src/pipeline/evalRunner.ts`:针对 Ollama、Anthropic 或 OpenAI 兼容模型运行评估套件
## 安装
```
npm install
npm run build
```
## 运行
启动完整工具。这会启动所有欺骗性服务并打开操作员 TUI 菜单:
```
npm start
```
也可以直接使用组合启动器:
```
node dist/index.js start tidrecondog
```
如果你想直接使用 shell 命令 `start tidrecondog`,请先对该包进行一次链接:
```
npm link
start tidrecondog
```
仅启动欺骗性服务,不打开 TUI:
```
npm run start:services
```
仅启动选定的服务:
```
node dist/index.js start http ssh rtsp snmp smtp
```
如果你的机器上某个默认监听端口已被占用,请在启动前设置相应的环境变量,例如 `POSTGRES_PORT=15432 npm start`。
打开操作员仪表板:
```
npm run dashboard
```
## CLI 命令
```
node dist/index.js start [all|http|ssh|ftp|postgres|rtsp|rdp|telnet|modbus|snmp|smtp ...]
node dist/index.js start tidrecondog
node dist/index.js sessions
node dist/index.js attackers
node dist/index.js attacker
node dist/index.js dashboard
node dist/index.js profiles
node dist/index.js personas
node dist/index.js export-dataset [output.jsonl] [source1.csv source2.jsonl ...]
node dist/index.js export-transcripts [output.jsonl] [service]
node dist/index.js cloud-bundle [output-dir]
node dist/index.js export-eval-suite [output.jsonl]
node dist/index.js run-eval [suite.jsonl] [responses.jsonl]
node dist/index.js score-eval [suite.jsonl] [output.json]
node dist/index.js control show
node dist/index.js control set default
node dist/index.js control set session
```
## 仪表板命令
在 `watch` / `dashboard` 内:
```
menu
1 / sessions
2 / attackers
3 / controls
4 / profiles
5 / personas
show
attacker
replay
refresh
default
set
quit
```
## 伪造登录面板(面向攻击者的诱饵)
除了 CamWatch 摄像头查看器外,HTTP 监听器还会在扫描器常用的探测路径上提供逼真的产品登录页面。提交的用户名将被记录到攻击者记忆中(并判定为 `brute_force` 意图);登录失败会返回逼真的错误提示,操作员还可以将某个会话切换为 `decoy_success`,从而向攻击者展示一个伪造的已认证仪表板。
| 面板 | 诱饵产品 | 路径 |
|-------|---------------|-------|
| 管理控制台 | OpsCenter Appliance Manager | `/admin`, `/admin/login`, `/administrator`, `/manager`, `/login` |
| 数据库 Web 客户端 | Adminer 4.8.1 (PostgreSQL) | `/adminer.php`, `/adminer`, `/pgadmin`, `/phpmyadmin`, `/db` |
| IoT 网关 | Fieldline FG-2200 gateway | `/gateway`, `/gateway/login`, `/device`, `/iot`, `/cgi-bin/luci` |
面向操作员的服务标签:`ADMIN`、`DB-WEB`、`IOT`(记忆模块会将其标准化归类为 `http` 服务)。定义位于 `src/responders/webPanels.ts`。
## 操作员指标控制台 (Web GUI)
一个只读的 Web 仪表板(采用灰/黑/酒红色调)运行在与攻击者服务**相互隔离的内部**平面上,从而确保部署环境绝对不会因为操作员 UI 而被识别为蜜罐。
- 在执行 `npm start` 和 `start all` 时自动启动(可通过 `OPERATOR_DISABLE=1` 禁用)
- 可针对现有运行时数据独立运行:`npm run serve:dashboard`
- 默认绑定到 `127.0.0.1:9090` —— 可通过 `OPERATOR_HOST` / `OPERATOR_PORT` 设置
- 需要 Bearer Token 进行验证。请设置 `OPERATOR_TOKEN`,否则系统会在启动时生成并打印一次。打开 `http://:/?token=`。
API 端点:
| 路径 | 认证 | 用途 |
|----------------------|------|------------------------------------------|
| `/` | 是 | 仪表板 GUI |
| `/api/overview` | 是 | KPI、风险/意图/国家/服务统计指标 |
| `/api/timeline` | 是 | 按小时统计的活动桶 |
| `/api/feed` | 是 | 最近的交互记录 |
| `/api/attackers` | 是 | 攻击者表格 + `/api/attackers/:id` |
| `/api/sessions` | 是 | 会话快照 |
| `/api/alerts` | 是 | 风险升级警报 |
| `/api/control` (GET/POST) | 是 | 读取/设置默认及单会话操作 |
| `/metrics` | 是 | Prometheus 格式暴露(供 k8s 抓取) |
| `/healthz` `/readyz` | 否 | k8s 存活/就绪探针 |
## 重训练 (MLOps)
蜜罐记录的交互数据将作为 Qwen3-4B 模型 QLoRA 微调的输入(`mlops/tidrc-ml-pipeline/`)。支持按需或按计划进行重训练:
```
npm run retrain # respects the >=10-new-transcripts gate
node dist/index.js retrain --force # retrain now
node dist/index.js retrain --export-only # dataset export only (no GPU)
```
每 8 小时自动执行:可通过本地的 systemd 计时器(`mlops/systemd/`)或 EKS 上的 k8s CronJob(`k8s/mlops/cronjob.yaml`)实现。操作员控制台暴露了 `POST /api/retrain` 和 `GET /api/retrain/status` 接口。完整指南:
[`mlops/RETRAIN.md`](mlops/RETRAIN.md)。
## 网络威胁情报 (CTI)
该系统同时可作为欺骗驱动的 CTI 来源:提取 IOC,将观察到的行为映射到 MITRE ATT&CK,并通过 CLI、API 和 TAXII 2.1 风格的数据源导出 STIX 2.1 / MISP / 黑名单;支持可选的情报富化、威胁情报订阅 → 自动拦截,以及 SIEM 转发(syslog/CEF、webhook、Splunk HEC)。操作员可使用 **CTI** 标签页及命令 `node dist/index.js cti `。
完整指南:[`docs/CTI.md`](docs/CTI.md)。
## 防指纹识别
诱饵环境经过了强化处理,使其看起来与它们所模仿的真实产品无异(HTTP 服务包含 nginx 的 `Server` 标头且不暴露 Express 特征,并使用 nginx 的错误页面和响应抖动;SSH 服务包含 OpenSSH 标识、一致的算法集和稳定的主机密钥)。请参阅 [`docs/HARDENING.md`](docs/HARDENING.md),其中还包含了**部署层面**的指导建议(切忌在单个 IP 上暴露全部 10 种服务)。
## 托管与测试
请参阅 [`docs/HOSTING.md`](docs/HOSTING.md) 了解推荐的暴露方式(在真实端口上使用公网 IP 的 VPS)、防火墙规则以及如何生成测试流量。
## 确定性运行时模型
运行时流程不再依赖于 `src/ai_agents`。现在,每项服务都会调用一个响应器,该响应器会:
- 为攻击者分配一个稳定的角色
- 返回符合协议特征的标语和回复
- 复用特定于该攻击者的用户名、文件、主机名和设备状态
- 记录结构化的请求/响应交互日志
- 绝不输出原始的环境变量、localhost 本地值或不受限制的 shell 输出
## 服务列表
| 服务 | 默认端口 | 协议 | 角色组 |
|----------|-------------|----------|-----------------|
| http | 3000 | TCP/HTTP | camera_nvr |
| ssh | 2222 | TCP | jump_host |
| ftp | 2121 | TCP | backup_server |
| postgres | 5432 | TCP | operations_db |
| rtsp | 8554 | TCP | camera_nvr |
| rdp | 3389 | TCP | jump_host |
| telnet | 2323 | TCP | field_gateway |
| modbus | 1502 | TCP | plc_controller |
| snmp | 16100 | UDP | plc_controller |
| smtp | 2525 | TCP | mail_relay |
使用相应的环境变量覆盖任意端口:`SNMP_PORT=161 SMTP_PORT=25 npm start`。
## 环境变量
| 变量 | 默认值 | 描述 |
|---------------------------|-------------|-------------------------------------------------------|
| `ALERT_WEBHOOK_URL` | (无) | 向此地址 POST 风险升级的 Payload |
| `PERSONA_ROTATE_AFTER_HOURS` | 0 (从不) | 在 N 小时后轮换分配给攻击者的诱饵角色 |
| `MAX_CONNECTIONS_PER_IP` | 25 | 每个 TCP 服务的每个 IP 的并发连接数上限 |
| `EVAL_PROVIDER` | ollama | `ollama` / `anthropic` / `openai` |
| `EVAL_MODEL` | llama3 | 传递给评估提供商的模型名称 |
| `EVAL_API_URL` | (自动) | 为 run-eval 覆盖模型 API 端点 |
| `EVAL_API_KEY` | (无) | run-eval 的 API 密钥(或使用 `ANTHROPIC_API_KEY`) |
| `AI_MODEL_URL` | (无) | 用于 shadow/AI 引擎模式的 OpenAI 兼容聊天端点(参见 [`mlops/INFERENCE.md`](mlops/INFERENCE.md)) |
| `AI_MODEL` | honeypot-qwen| 发送到推理端点的模型名称 |
| `AI_API_KEY` | (无) | 推理端点所需的 Bearer Token(若有要求) |
| `AI_TIMEOUT_MS` | 12000 | 推理请求超时时间 |
| `AI_MAX_TOKENS` | 256 | 每次生成响应的最大 Token 数 |
## 警报 Hook
当攻击者的风险等级提升时(低→中,或任意级别→高),TID-Recon-Dog 会:
1. 向 `runtime/alerts.jsonl` 追一条 JSONL 记录
2. 如果设置了 `ALERT_WEBHOOK_URL`,则会向其发送 POST 请求(非阻塞,尽最大努力送达)
Payload 字段包括:`at`、`event`、`attacker_id`、`source_ip`、`risk`、`previous_risk`、`intent`、`score`、`services`、`recent_events`。
## 评估流水线
```
# 1. 从 service profiles 生成 eval prompts
node dist/index.js export-eval-suite
# 2. 针对 local Ollama model 运行 prompts
EVAL_PROVIDER=ollama EVAL_MODEL=llama3 node dist/index.js run-eval
# 3. 对 responses 进行评分
node dist/index.js score-eval ct/eval/responses.jsonl
# 或者针对 Claude 运行(需要 ANTHROPIC_API_KEY)
EVAL_PROVIDER=anthropic EVAL_MODEL=claude-haiku-4-5-20251001 node dist/index.js run-eval
```
## 云端捆绑包
`cloud-bundle` 会在 `exports/` 目录下写入一个可移植的打包目录,包含:
- `s3/`:日志、交互记录、会话、攻击者数据、控制操作
- `sqs/`:JSONL 消息封装
- `kinesis/`:JSONL base64 记录
- `ecs/`:Fargate 任务定义
这旨在作为后续 AWS 部署的交接产物,而不是一个实时的 AWS 发布工具。
## Docker
构建:
```
docker build -t tid-recon-dog .
```
运行:
```
docker compose up --build
```
容器在 `http://localhost:9090/healthz` 上提供健康检查,并在 `http://127.0.0.1:9090/` 上提供操作员 GUI(Token 会在启动时打印)。
## Kubernetes
Kustomize 清单文件位于 `k8s/` 目录下,使用 `kubectl -k` 进行部署(无需 Helm):
```
# 内部 / 仅限 ClusterIP
kubectl apply -k k8s/base
# 通过 cloud LoadBalancer 在真实知名端口上进行公网暴露
kubectl apply -k k8s/overlays/external
```
每个协议都有自己对应的 `Service`(真实端口 → 容器端口),操作员指标平面保持仅限 `ClusterIP` 访问(绝不对互联网可达),并且 Pod 配备了 `/healthz` + `/readyz` 探针以及 Prometheus `/metrics` 端点。请参阅
[`k8s/README.md`](k8s/README.md) 获取完整的操作指南(包括镜像构建、Secret 创建、仪表板端口转发、设计说明)。
标签:AI风险缓解, BOF, Docker, MITM代理, 威胁情报, 子域名突变, 安全, 安全防御评估, 开发者工具, 插件系统, 本地AI, 欺骗防御, 自动化攻击, 蜜罐, 证书利用, 请求拦截, 超时处理