RedSideSecurity/TeleSink

GitHub: RedSideSecurity/TeleSink

TeleSink 通过搭建伪造的 Telegram Bot API 服务器,在无需逆向去混淆的情况下直接从恶意软件样本中提取 bot token 和 chat ID,并诱骗样本持续通信以捕获外泄数据。

Stars: 1 | Forks: 0

# TeleSink **用于恶意软件分析的 Telegram C2 sinkhole —— 无需解密样本即可提取 bot token 和 chat ID。** 许多常见的窃密木马和 RAT 会使用 Telegram 作为它们的 C2:它们会调用位于 `https://api.telegram.org/bot/` 的 Telegram Bot API。Bot token 和 `chat_id` 是整个操作的关键 —— 但它们通常隐藏在多层混淆之后,因此静态提取它们可能会非常痛苦。 TeleSink 完全跳过了逆向工程。它信任一个一次性的证书,将 `api.telegram.org` 重定向到 localhost,并搭建了一个**伪造的 Telegram Bot API 服务器**,它的响应足够逼真,让恶意软件能够持续通信 —— 同时从第一个请求中直接提取 token、chat ID 以及样本尝试外泄的任何数据。 ![TeleSink 运行截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/1dc0888148115853.jpg) ## 工作原理 1. **每次运行生成新证书** —— 为 `api.telegram.org` 生成自签名的 TLS 证书(包含 `*.telegram.org`, `core.telegram.org` 的 SAN),每次都会生成新的 RSA 密钥和序列号。 2. **信任证书** —— 通过 `certutil -addstore -f Root` 将证书安装到 Windows 受信任的根证书存储区中。 3. **劫持 DNS** —— 重写 hosts 文件,将 `api.telegram.org → 127.0.0.1`,然后刷新 DNS 缓存。 4. **Sinkhole C2** —— 在 `:443` 上运行一个 HTTPS 服务器,它会: - 从 URL 路径解析出 `bot`,并从查询字符串 / JSON body / form body 中提取 `chat_id`, - 打印捕获的凭证并将其记录到磁盘, - 回复**逼真的 Bot API JSON**(`getMe`、`getUpdates`、`sendMessage`、`sendDocument` 等),让样本相信 C2 处于活动状态,并继续执行其 check-in / 数据外泄行为, - 保存所有上传的文件(`sendDocument` / `sendPhoto` 外泄的文件)。 ## 环境要求 - Windows 分析虚拟机(推荐使用 Flare VM),必须**以管理员身份运行**(因为证书安装 + 编辑 hosts 文件 + 绑定 443 端口需要管理员权限)。 - Python 3.8+ - `pip install cryptography` ## 用法 ``` # 1. 安装依赖 pip install cryptography # 2. 设置 sinkhole 并开始监听(以管理员身份运行) python telesink.py # 3. 在 VM 中引爆 malware 样本 # -> token + chat_id 在它 phone home 的那一刻被打印和记录 # 4. 完成后,撤销此工具更改的所有内容 python telesink.py --cleanup ``` ### 选项 | 标志 | 描述 | |------|-------------| | `--port PORT` | HTTPS 监听端口(默认为 `443`)。 | | `--no-setup` | 跳过证书/hosts 设置;仅运行服务器(复用现有的运行配置)。 | | `--cleanup` | 移除添加的 hosts 条目和证书,然后退出。 | | `--forward` | **MITM 模式** —— 将请求转发到*真实的* Telegram(默认关闭)。 | ## 输出 所有内容都会保存在脚本旁边的 `telesink_run/` 文件夹中: | 文件 | 内容 | |------|----------| | `telesink_creds.json` | 捕获的 bot token、bot ID、chat ID、时间戳。 | | `telesink_capture.jsonl` | 完整的请求日志 —— method、path、headers、query、body。 | | `uploads/` | 样本尝试通过 `sendDocument`/`sendPhoto` 外泄的文件。 | | `telesink_cert.pem` / `telesink_key.pem` | 为本次运行生成的证书/密钥。 | | `telesink_state.json` | 证书指纹/序列号,供 `--cleanup` 进行精准移除时使用。 | `--cleanup` **仅**移除本次运行添加的证书(通过 SHA-1 指纹匹配)以及带有 `# TELESINK` 标记的 hosts 行 —— 它不会触碰您的根证书存储区或 hosts 文件中的任何其他内容。捕获/凭证日志将被保留。 ## 在没有真实恶意软件的情况下进行测试 `test_sample.exe` 是一个**良性的 Telegram C2 模拟器**,包含在内用于测试 —— 它使用一个**伪造的、不存在的 bot token 和 chat ID**,精准模拟了真实窃密木马/RAT 的行为(`getMe` → `sendMessage` → `getUpdates`)。它绝不会联系真实的 Telegram:因为 hosts 文件将 `api.telegram.org` 指向了 `127.0.0.1`,所以每个请求都会落到你本地的 TeleSink 上。 ``` python telesink.py # terminal 1 — start the sinkhole test_sample.exe # terminal 2 — run the benign "malware" ``` 你应该会看到 TeleSink 捕获了伪造的 token(`8123456789:AAH-FAKEtoken…`)和 chat ID(`1122334455`)。 这个 exe 只是包含的源代码的 PyInstaller 打包版本 —— 你可以自己检查或重新构建它: ``` build_exe.bat # -> dist\test_client.exe ``` ## 下一步 —— 分析捕获的 bot 一旦 TeleSink 为你提供了 **bot token** 和 **chat ID**,你就可以使用 [@0x6rss](https://github.com/0x6rss) 开发的 [**matkap**](https://github.com/0x6rss/matkap) 进一步分析 —— 这是一个 Telegram bot 威胁狩猎工具,它可以: - 通过遍历消息 ID 来转发/转储 bot 的历史消息(保存到其 `captured_messages/` 目录中),让你能够恢复操作者已经从受害者那里窃取的内容; - 通过 FOFA 和 URLScan 在互联网上搜索相同的泄露 bot token / chat ID,从而 pivots 到相关的基础设施和攻击活动。 不想在本地运行?在 [matkap.cti.monster](https://matkap.cti.monster/) 还有一个**托管版本** —— 直接将捕获的 token / chat ID 粘贴到浏览器中即可,无需任何设置。 典型工作流:**TeleSink** 从样本中提取 token + chat ID → 将它们输入到 **matkap**(本地版或[在线工具](https://matkap.cti.monster/))中,以拉取 bot 的消息记录并基于 IOC 进行 pivot。 ## 清理 ``` python telesink.py --cleanup ``` 移除 hosts 条目,通过指纹删除受信任的证书,并刷新 DNS。捕获的凭证和日志将被保留。 ## 局限性 - **Certificate pinning** 会击败受信任根证书的技巧。常见的 Telegram 窃密木马很少进行 pinning;但更高级的样本可能会。(握手失败会在控制台中显示作为提示。) - 伪造的 `getUpdates` 目前返回的是空队列。计划在未来推出 command-injection 功能(将操作者的命令反馈给样本,以映射其完整能力)。 ## 路线图 - [ ] 用于能力映射的 `getUpdates` command-injection - [ ] Cert-pinning / 握手失败检测 - [ ] 可选的 80 端口 → 443 端口捕获 - [ ] 一流的 Linux 沙箱模式 *RedSide Security 工具集的一部分。*
标签:DAST, Python, 底层编程, 恶意软件分析, 无后门, 流量劫持, 网络信息收集, 逆向工具