利用Domain Borrowing对抗流量检测设备

原创
2023/09/12 22:09
阅读数 70

背景

Domain Borrowing是腾讯安全玄武实验室的安全研究员 Tianze Ding 和 Junyu Zhou 在Black Hat Asia 2021演讲中分享介绍的一种使用 CDN 隐藏 C2 流量以规避审查的新方法。借用在某些 CDN 实现中发现的一些技巧,将它们链接在一起以“借用”域及其有效的 HTTPS 证书来隐藏我们的 C2 流量,特别是当我们的 C2 流量的 SNI 和 HOST 相同时。

自研究议题的后一个星期我们就应用到了日常的攻防演练和红队评估项目中去,效果不错,以后不打算参与攻防演练和红队评估中去了,所以跟大家分享一下,希望可以帮助到读者。

对抗,什么叫对抗?我们首先得先要知道蓝队和安全设备是怎么定义一个流量为正常或恶意的以及目前上常用的流量隐藏方法都有什么不足。

怎么定义一个流量为正常或恶意?

这里我们可以分为2个部分来分析:

1.相对于安全设备来说判断一个流量是否为恶意的通用方法为:

基于黑名单:

  • 使用已知的恶意IP地址、域名、URL或文件哈希值的黑名单进行比对。如果流量中的信息与黑名单中的任何一项匹配,可以将其定义为恶意;

异常行为:

  • 监测流量中的异常行为,如频繁的连接尝试、大规模数据传输、不明确的协议或端口扫描;

威胁情报:

  • 使用威胁情报服务来获取有关已知威胁的信息,包括恶意IP地址、域名、URL和恶意文件的哈希值。如果流量与已知威胁相关联,可以将其定义为恶意;

等等。其中利用Domain Borrowing对抗可以为基于黑名单和威胁情报。

2.对于蓝队来说,一般都为拿捕捉到的域名/IP去查微步等等这些威胁情报来判断是不是恶意的域名,然后进行封闭和溯源操作。但是在微步中存在一些官方标记为白名单的域名,对于这样利用Domain Borrowing劫持一些官方标记为白名单的域名用来对抗威胁情报和防止溯源操作。

常用的流量隐藏方法都有什么不足?

目前在国内攻防演练和红队评估中常用来隐藏C2真实IP和伪造通信流量的方法有加CDN(但域名是自己的)、Domain Fronting和云函数。

1.加CDN

加CDN也是常见的红队来隐藏C2真实IP的方法,但是仅仅加个CDN域名还是红队的资产,一样存在被溯源分析的风险,同时域名基本没有信任度给捕捉加入威胁情报之后一定会给设备自动封闭。

2.Domain Fronting

Domain Fronting是Fifield David等研究人员在2015年提出的一种基于CDN的隐蔽通信方法,该方法至今仍被广泛应用于真实APT攻击和红蓝对抗中。主要利用了CDN转发HTTP请求时的特性。

利用了CDN转发HTTP请求时的特性可以在前端伪造任何域名,但是也存在一个致命的缺点流量的SNI和HOST不相同和没有办法伪造有效的SSL,目前设备基本都可以自动检测到,目前Cloudflare、AWS CloudFront、Google Cloud CDN等厂商也都纷纷禁用了这种隐蔽通信方法。

3.云函数

云函数没有什么好说的,就是一个转发,但是域名太明显了,一看就知道是使用云函数,直接分析封闭即可。

我们到底需要什么?

如果想要对抗设备,我们需要劫持一个白名单的域名并拿到对应的SSL和隐藏真正的C2 IP,这样在设备中看来是跟正常域名通信,在蓝队中看来域名是正规组织企业的不敢乱封,同时查微步也是白名单。例如红雨滴团队@ 奇安信威胁情报中心 在2022-08-03捕捉的样本“借助码云,仿冒微软,回连某电视台网站的RT样本分析”中提到

C2:

post.i.api.***tv.cn(主域名***tv.cn是属于某广播电视台的正常域名,疑似被攻击者控制)

基本上溯源到这一步就很难溯源下去了。那么主域名***tv.cn是属于某广播电视台的正常域名被攻击者控制了吗,我认为并不是。

我们需要怎么做?

目前利用Domain Borrowing即可以,通过Domain Borrowing技术我们搭建一套没有什么缺点流量的C2,下面以上面样本“借助码云,仿冒微软,回连某电视台网站的RT样本分析”中的post.i.api.***tv.cn,主域名***tv.cn是属于某广播电视台的正常域名为例演示下红队是如何劫持post.i.api.***tv.cn和获取对应的证书。

一般情况下如果我们需要在CDN平台为某个域名启用CDN,我们需要把CDN的CNAME域名添加到域名的DNS中,但是我们在国内的某个云平台中发现有一些CDN用户设置了CDN的CNAME域名添加到域名的DNS中,例如设置了“*.domain.com”,就是说为所有子域名启用CDN。但是该CDN平台并没有做域名的归属权。简单来说就是:

用户A需要为xxx.com主域名和子域名启用CDN,为了方便把*.xxx.com的CNAME域名添加到域名的DNS中。

那么用户B就可以直接在这个CDN平台中使用你的xxx.com子域名。

1.我们需要找一个使用这个云CDN客户的域名,可以CDN的节点IP来反查这些域名优先劫持白名单域名,例如某广播电视台的域名:

然后我们直接添加子域名到我们的CDN后台即可。

到目前我们劫持了一个白名单(高信誉)的域名,并成功通过域名链接到了我们的服务器,下一步我们需要获取这个域名的对应的有效SSL证书。

目前市面上申请证书可以通过文件验证和DNS验证,文件验证是把规定的文件上传到服务器,然后验证方通过从域名读到这个验证文件为验证通过,然后发放对应域名的SSL证书和Key;

所以我们申请post.i.api.***tv.cn通过文件验证申请SSL证书即可。

那么到目前为止我们劫持了一个白名单(高信誉)的域名和配置了对应的SSL证书,恶意流量通过这个域名SSL加密连接到我们的C2,基本上无论是在设备中还是蓝队看来基本没有问题。

同时我们可以通过在CDN和在C2通过Nginx中设置一个流量过滤只允许目标的流量连接到C2,同时也可以把C2的真正端口通过Nginx反向代理出来,C2的真正端口设置为只允许127.0.0.1访问,那么基本上溯源到真正的服务器比较难。

本文分享自微信公众号 - 黑白天实验室(li0981jing)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部