dmille6/tpot2cti
GitHub: dmille6/tpot2cti
将 T-Pot 蜜罐采集的原始安全事件持续转化为 STIX 2.1 结构化威胁情报图谱并导入 OpenCTI,使分析师能够以图谱方式关联和追踪攻击行为。
Stars: 0 | Forks: 0
# tpot2cti
**将 T-Pot 蜜罐数据转化为 OpenCTI 中的 STIX 2.1 威胁情报图谱。**
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://github.com/telekom-security/tpotce)
[](https://github.com/OpenCTI-Platform/opencti)
[](#project-status)
[](tests/)
## 这是什么?
`tpot2cti` 是连接您的 **T-Pot 蜜罐** 与
**OpenCTI** 威胁情报平台的桥梁。它作为一小套容器运行在全新安装的 OpenCTI 旁边,
通过 SSH 连接到您的 T-Pot,
并将原始蜜罐事件持续转化为丰富的 STIX 2.1 实体关系图,分析师可以借此进行数据透视、
与 ISAC 共享,并桥接到 MISP。
**使用 tpot2cti 之前:**
T-Pot 提供了出色的蜜罐捕获功能。您将获得包含数百万条扁平事件的 Elasticsearch + Kibana 仪表板。
搜寻“这名攻击者在我所有的传感器上都做了什么?”需要手动进行跨索引查询。
**使用 tpot2cti 之后:**
每个攻击者 IP、捕获的文件、命令和指纹都会成为 OpenCTI 图谱中的一等实体。会话具有相关性。
sighting(目击)被计数。附加了地理和 ASN 上下文。数据是
**原生 STIX 2.1** 格式 —— 这意味着它可以以行业 ISAC、ISAO 和其他威胁情报平台原生使用的格式进行共享。
## 为什么会有这个项目
T-Pot 在捕获方面表现出色。OpenCTI 在威胁情报图存储和分析师工作流方面表现优异。
中间缺失的是一个了解 T-Pot 20 多种蜜罐事件类型并从中生成建模良好的 STIX 数据的导入器。这个项目就是为此而生的。
我们考虑过但并未采取的其他方案:
- **直接增强 T-Pot 的 Kibana。** 很诱人(无需添加新基础设施),但这会将您排除在 STIX 生态系统之外。
- **使用 MISP 而不是 OpenCTI。** 更简单,但图谱功能较小。
我们选择 OpenCTI 是因为其丰富的实体关系;tpot2cti 未来可以作为配套的 connector 添加 MISP 桥接。
- **自定义 UI。** 构建另一个威胁情报 UI 简直是个泥潭。
OpenCTI 很成熟,维护良好,也是社区已经熟知的工具。
## 您将获得什么
经过大约 10 分钟的设置后,分析师打开 OpenCTI 就会看到:
- **每个攻击者 IP** 都是一个 STIX `IPv4-Addr` observable(可观测对象),并附带国家/地区(`Location` SDO)、ASN(`Autonomous-System` SDO),以及他们参与的每次蜜罐会话的 `Sighting`(目击记录)。
- **每个捕获的恶意软件样本** 都是一个 `StixFile` observable(以 SHA-256 为键),关联回投放它的攻击者及其下载该文件的 URL。
- **Cowrie 命令序列** 成为包含其运行的完整命令行的 `Process` observable。
- **工具指纹**(HASSH、JA3、JA3S、HTTP-header-hash)作为 `Cryptographic-Key` observable —— 让您能够对使用相同工具集的攻击者进行聚类。
- **MITRE ATT&CK 对齐** —— 带有 ATT&CK 元数据的 Suricata 警报将成为具有适当 STIX 关系的 `AttackPattern` SDO。
- **每日凭证摘要** —— 每个传感器尝试次数排名前 100 的用户名/密码组合,作为 STIX `Note`(避免用单个凭证 observable 淹没 OpenCTI)。
- **原生 STIX 导出** —— 与行业 ISAC 共享您的蜜罐情报,将其导入 MISP,或馈送到任何支持 STIX 的工具中。
## 架构
```
┌─────────────────┐ ┌──────────────────────────────────┐
│ T-Pot 24.04 │ │ Your tpot2cti host │
│ (your sensor) │ │ (4c / 16-32 GB / 128 GB) │
│ │ │ │
│ - ES :64298 │◄──── SSH tunnel ──────┤ ┌─ tpot-tunnel (autossh) ─┐ │
│ - SSH :64295 │ │ │ forwards localhost:64298 ──┐ │ │
│ │ │ └────────────────────────────┘ │ │
└─────────────────┘ │ │ │
│ ┌─ OpenCTI stack ──────────┐ │ │
│ │ (cloned + run unmodified │ │ │
│ │ from OpenCTI's repo) │◄─┘ │
│ └──────────────────────────┘ │
│ │
│ ┌─ tpot2cti (our connector) ─┐ │
│ │ reads T-Pot ES via tunnel, │ │
│ │ emits STIX to OpenCTI │ │
│ └─────────────────────────────┘ │
│ │
│ Optional (compose profiles): │
│ ├─ tpot2cti-credentials (DuckDB)│
│ └─ tpot2cti-vault (SFTP samples)│
└──────────────────────────────────┘
```
三个部分:
1. **OpenCTI** —— 从上游官方 Docker 仓库部署,完全未修改。
2. **tpot2cti** —— 我们的导入器,附加到 OpenCTI 的 Docker 网络中。
3. **一条 SSH 隧道** —— autossh 容器,将 T-Pot 的 ES 转发给我们的导入器。
可选插件(默认关闭):
- **`tpot2cti-credentials`** —— 将完整的凭证对存储在本地 DuckDB 中,以便进行更深入的离线分析(核心模块中包含排名前 100 的摘要;这是为需要海量数据的分析师提供的完整数据流)。
- **`tpot2cti-vault`** —— 通过 SFTP 将 T-Pot 中的恶意软件样本字节传输到内容寻址存储中,以防未来的富化 connector 需要实际的二进制文件。
## v1.0 中支持的内容
### 解析的蜜罐类型
T-Pot 24.04 自带的每种蜜罐类型 —— 外加一个**回退解析器**,它可以捕获任何无法识别的内容,因此您绝不会默默地丢失数据。
专用解析器涵盖:Cowrie (SSH/Telnet)、Suricata、Dionaea、
Honeytrap、Heralding、ConPot (ICS/SCADA)、H0neytr4p (HTTP)、Dicompot
(DICOM 医疗)、Medpot (HL7)、Mailoney (SMTP)、CiscoASA、ADBhoney、
ElasticPot、RedisHoneypot、IppHoney、Miniprint、Tanner、Wordpot、
SentryPeer (SIP/VoIP)、Fatt (被动指纹识别)、NGINX、Honeyaml、
Router。
如果 T-Pot 增加了新的蜜罐类型,在有人贡献专用解析器之前,
回退解析器会将其作为 `Sighting` + `Note` 捕获到 OpenCTI 中。没有任何遗漏。
### 不在 v1.0 范围内
为了保持项目精简和设置简短,以下是 **v1.0 中明确不包含** 的内容:
- ❌ 威胁情报富化(GeoIP、AbuseIPDB、VirusTotal 等)
- ❌ 基于 LLM 的分析 / playbook 分类
- ❌ 沙箱分类(VirusTotal Sandbox、Hatching Triage、CrowdStrike 等)
- ❌ 多租户支持(每个 T-Pot 使用一个部署)
- ❌ 预构建的 Docker 镜像(从源码构建)
- ❌ Kubernetes(仅限 docker-compose)
- ❌ 针对攻击者的主动响应(只读)
这些功能中的许多将在 v1.0 之后作为可选的配套 connector 推出 —
请参阅[路线图](#roadmap)。
## 要求
- **硬件:** 4 核,16 GB 内存(建议 32 GB),128 GB 磁盘
- **操作系统:** Ubuntu 22.04 LTS 或 24.04 LTS
- **软件:** Docker Engine 24+、Docker Compose 插件、git、ssh
- **您的 T-Pot:** 24.04 版本,且 SSH 端口 64295 可从此机器访问
- **网络:** 允许出站 TCP 访问您 T-Pot 的 SSH 端口
您需要自行提供并维护您的 T-Pot 安装。我们不提供 T-Pot 设置方面的帮助
— 为此,请参阅 [T-Pot 项目](https://github.com/telekom-security/tpotce)。
## 快速开始
```
# 1. Clone tpot2cti
git clone https://github.com//tpot2cti.git
cd tpot2cti
# 2. 运行交互式设置
./setup.sh
```
`setup.sh` 将:
1. 检查先决条件(Docker、内存、磁盘)
2. 提示输入您的 T-Pot 主机、SSH 用户/端口、操作员组织名称
3. 询问要启用哪些可选功能(凭证分析、恶意软件保管库)
4. 将 OpenCTI 的官方 Docker 仓库克隆到 `./opencti/` 中(固定版本)
5. 生成所有密钥(管理员密码、RabbitMQ 凭证、connector UUID)
6. 填充两个 `.env` 文件(我们的 + OpenCTI 的,共享管理员 token)
7. 为 T-Pot 隧道生成 SSH 密钥,并暂停以便您将其添加到 T-Pot 的 `authorized_keys` 中
8. 测试隧道
9. 启动 OpenCTI(这需要 3-5 分钟 — 这是 OpenCTI 自身的启动过程)
10. 启动 tpot2cti(附加到 OpenCTI 的 Docker 网络)
完成后,OpenCTI 将运行在 **http://localhost:8080**,并在设置结束时打印出管理员密码。
第一次 T-Pot 摄取周期在 15 分钟内开始;您可以通过以下方式查看进度:
```
docker compose -p tpot2cti logs -f tpot2cti
```
### 更新
```
./update.sh # Pull latest tpot2cti, rebuild our containers
./update.sh --opencti # Also bump OpenCTI to the new pinned version
```
### 卸载/拆除
```
./teardown.sh # Stop both stacks (keep data)
./teardown.sh --purge # Stop and remove all data (with confirmation)
```
## 在 OpenCTI 中的展示效果
典型的分析师工作流:
1. 导航到 **Observations → Observables → IPv4-Addr**
2. 按 Sighting 计数排序,以找出参与度最高的攻击者
3. 点击一个 IP → 查看其 Location、ASN、所有 Sighting、所有相关的 Files
4. 点击一个 File → 查看是哪些攻击者投放了它、他们使用了什么 URL 来获取它,以及它与哪些 AttackPatterns 相关联
5. 点击一个 AttackPattern → 查看指示该技术的所有 observable
## 配置
大多数用户完全不需要改动这个 —— `setup.sh` 会写入合理的默认值。
高级用户可以编辑 `.env` 进行调整:
| 变量 | 默认值 | 作用 |
|---|---|---|
| `TPOT2CTI_INTERVAL` | `PT15M` | 循环间隔(ISO 8601 持续时间) |
| `TPOT2CTI_INITIAL_LOOKBACK_HOURS` | `0` | 首次运行时从 N 小时前进行回填;0 = 从当前时间全新开始 |
| `TPOT2CTI_DEFAULT_TLP` | `AMBER+STRICT` | 应用于所有生成的实体的 TLP 标记 |
| `OPERATOR_ORG_NAME` | `T-Pot Operator` | 您的 STIX Identity(作为所有数据的创建者出现) |
| `TPOT2CTI_IGNORE_TYPES` | (空) | 要跳过的、以逗号分隔的蜜罐类型 |
完整列表请参阅 [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md)。
## 文档
- [`docs/SETUP.md`](docs/SETUP.md) — 详细安装指南
- [`docs/SSH_TUNNEL.md`](docs/SSH_TUNNEL.md) — SSH 隧道配置 + 故障排除
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — STIX 对象模型 + 关系图
- [`docs/PARSERS.md`](docs/PARSERS.md) — 各蜜罐解析器参考
- [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md) — 完整的 env-var + YAML 参考
- [`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md) — T-Pot + OpenCTI 版本矩阵
- [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) — 常见问题 + 修复方法
- [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) — 如何贡献
- [`V1_SPEC.md`](V1_SPEC.md) — 完整的 v1.0 规范说明
## 路线图
核心导入器有意识地保持专注。未来的配套
connector(每个都是其独立的可选 Docker compose 服务)将**在不修改核心的情况下**分层增加额外功能:
| 配套组件 | 用途 | 状态 |
|---|---|---|
| `tpot2cti-malwarebazaar` | 通过本地 CSV 镜像 + TLSH 模糊匹配进行恶意软件家族归属 | 计划中 |
| `tpot2cti-firehol` | 针对 14 个拦截列表进行 IP 信誉检测 | 计划中 |
| `tpot2cti-otx` | AlienVault OTX pulse 查询 | 计划中 |
| `tpot2cti-abuseipdb` | AbuseIPDB 信誉评分 | 计划中 |
| `tpot2cti-misp` | 双向 MISP 桥接 | 计划中 |
| `tpot2cti-mitreattack` | 自动导入 MITRE ATT&CK STIX feed | 计划中 |
| `tpot2cti-discord` | 每日摘要 webhook | 可能会做 |
每一个都遵循相同的架构模式 —— 附加到 OpenCTI 的 Docker 网络中,在适用的地方通过相同的隧道读取 T-Pot ES,通过 pycti 写入 OpenCTI。任何人都可以贡献一个。
## 项目状态
**Beta 版** —— 正在针对单一生产级 T-Pot 部署积极开发中。对于 v1.0 规范来说功能完备,但尚未打 1.0 的标签。
### 兼容性
| tpot2cti | T-Pot | OpenCTI |
|---|---|---|
| v1.0.x | 24.04.x | 6.x.y(在 `setup.sh` 中固定了特定标签) |
每个 tpot2cti 版本都会针对确切的某一个 OpenCTI 版本进行测试。请参阅
[`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md) 了解我们测试的内容。
## 许可证
[GNU Affero General Public License v3.0](LICENSE) (AGPLv3)。
您可以将 tpot2cti 用于任何目的 —— 商业、非商业、
内部、托管。该许可证要求您部署的任何修改也必须
在 AGPLv3 下发布,包括 SaaS 部署。
这使得该项目保持真正的开源,并防止任何人将代码剥离为闭源产品。
如果您正在考虑为您的组织修改 tpot2cti,
请考虑将这些更改回馈给社区。当大家共同分享时,整个社区都是赢家。
## 问题、议题、想法
- 🐛 **发现 Bug?** 带上日志和重现步骤开启一个 issue
- 💡 **有功能想法?** 在提交 PR 之前开启一个讨论 —— 我们希望保持核心精简
- 🤝 **想要贡献?** 请参阅 [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md)
- 🔒 **安全问题?** 请参阅 [`SECURITY.md`](SECURITY.md) 了解负责任的漏洞披露流程
*tpot2cti 不附属于 Telekom Security(T-Pot 的维护者)
或 OpenCTI / Filigran(OpenCTI 的维护者)。我们怀着极大的感激之情使用这两个项目。
所有商标分别归其各自的所有者所有。*
标签:OpenCTI, Python, STIX, 威胁情报, 安全数据集成, 开发者工具, 无后门, 版权保护, 蜜罐, 证书利用, 请求拦截, 逆向工具