DNS Over HTTPS for Cobalt Strike
作者:Kyle Avery
红队技术专家
引言
近年来,红队行动中C2基础设施的搭建变得越来越复杂。这对安全社区而言是积极的进展,意味着厂商和专业从业者已从既往成功攻击技术中吸取经验,并在网络中实施了有效防护措施。
DNS over HTTPS(DoH)是一个未被充分重视的命令与控制通道。本文将展示如何通过Cobalt Strike利用DoH技术,实现无需第三方账户或基础设施配置、使用有效SSL证书加密流量,并将通信伪装至信誉良好的域名。
现有技术
攻击者和攻防安全专家长期使用不同的重定向器方案。早期重定向器多为配置了预设转发规则的Apache/Nginx服务器。
重定向器不仅能提升基础设施韧性,还能绕过依赖域名分类的防御机制。例如当内容分发网络(CDN)对开发者更开放后,攻击者转向使用这些平台——它们通常提供有效域名甚至SSL证书,极大减少了攻击者工作量。
后来出现的"域名伪装"技术曾被广泛使用,但近年来CDN厂商开始严查此类行为。微软甚至会在行动中直接禁用Azure订阅。
近期我开始采用Azure应用服务和Cloudflare Workers等云服务进行流量重定向。这些服务具备传统CDN优势且监控力度较低,但随时可能面临与CDN同等的监管强度。
DNS over HTTPS
传统DNS信标相对容易被检测。我从未在实战中使用Cobalt Strike DNS监听器,一直依赖HTTPS监听器与重定向器方案。
DoH信标无需账户或重定向器配置即可提供可信域名和有效SSL证书,进一步缩短操作准备时间并消除账户封禁风险。
技术核心:Cobalt Strike的DoH实现
该技术最初由Austin Hudson在Twitter提出,其开源工具TitanLdr通过钩取Cobalt Strike Beacon的导入地址表(IAT),将传统DNS查询API(DNSQuery_A)替换为向dns.google(8.8.8.8/8.8.4.4)发送DoH请求的函数。
TitanLdr的DNSQuery_A钩子具有通用性,可支持多个DoH服务器。经测试以下域名均可直接使用:
- dns.quad9.net
- mozilla.cloudflare-dns.com
- cloudflare-dns.com
- doh.opendns.com
- ordns.he.net
使用TitanLdr
原始版本TitanLdr(https://github.com/secidiot/TitanLdr)仅支持单一DNS提供商,可通过修改hooks目录下DnsQuery_A.c文件第111行更换服务器。
我开发的分支版本(https://github.com/kyleavery/TitanLdr)支持多DoH服务器,每次回调会从硬编码列表中随机选择。修改位置为DnsQuery_A.c第116行。
编译需要Linux主机安装NASM和MinGW,执行make命令生成必要文件。导入Titan.cna Aggressor脚本后即可配置DNS监听器(具体配置参考Cobalt Strike文档)。
信标运行后,仅首次需要DNS解析DoH服务器地址,后续所有通信均为加密HTTPS流量。
技术局限性
DoH信标虽优于传统HTTPS信标,但仍存在明显缺陷:
- 传输相同信息需要更多数据包(DNS TXT记录上限255字符)
- 无法控制服务器域名和路径。组织可通过封锁知名DoH服务器(如dns.google)的443/TCP出口流量进行防御,该措施比屏蔽*.azurewebsites.net等CDN域名更易实施
检测可能性
现有检测机制存在盲区:
- 基于域名信誉的HTTPS恶意流量检测对信誉良好的DoH域名失效
- 基于请求频次的DNS恶意流量检测对非DNS协议的DoH通信失效
传统DNS监控结合SSL解密或是解决方案,但目前尚无成熟工具实现该方案。最有效的防御可能是封锁未使用的知名DoH服务器出口流量。多数企业网络仍使用传统DNS(尤其是Active Directory环境中的本地DNS服务器),无需放行dns.google等域名的HTTPS流量。
总结展望
本文未穷尽所有可用DoH服务器,用户可自建DoH服务器(甚至部署在CDN后)创造技术变体。虽然TitanLdr仅支持Cobalt Strike,但其DoH实现可移植到其他C2框架。
该技术并非万能解决方案,但作为战术工具箱的补充值得尝试。欢迎通过Twitter @kyleavery_ 交流探讨。
致谢
- Austin Hudson提出的DoH用于C2的构想及其TitanLdr项目
- 传统HTTPS信标重定向技术参考: https://ajpc500.github.io/c2/Using-CloudFlare-Workers-as-Redirectors/ https://github.com/bashexplode/cs2webconfig