>科技>>正文

模拟攻击者利用“域前置”(Domain Fronting)技术逃避审查

原标题:模拟攻击者利用“域前置”(Domain Fronting)技术逃避审查

前情提要

今年3月份,FireEye公司曾发表过一篇报道:《APT29 Domain Fronting with TOR》,里边描述了一种攻击者经常使用的逃避审查机制的技术 Domain Fronting。本文重点介绍一下“域前置”(Domain Fronting,也被意译为“域名幌子”)技术的基本原理和适用场景,国内在这方面的资料不多,抛砖引玉,欢迎大家交流讨论。

“域前置”技术的工作原理

“域前置”技术是一种审查规避技术,主要用于隐蔽通信中的远程端点。“域前置”发生在应用层,主要适用了HTTPS协议进行通信,通信中的远程端点原本是被禁止的,通过使用“域前置”技术,让检测器误认为是一个其他的合法地址,进而绕过检测。核心思想是在不同的通信层使用了不一样的域名。在一个HTTPS请求中,通信外层使用了一个域名:DNS请求和TLS SNI (Server Name Indication);而在通信内层,则使用了另一个域名:HTTP Host Header,这个域名由于在HTTPS加密之下,所以对检测器而言是不可见的。如下图所示:

图1:域前置在通信的不同层使用了不同的域名:对于检测器可见的明文层(DNS请求和TLS SNI)中使用了一个被允许的域名(allowed.example);对于检测器不可见的HTTP层,使用了一个真实的、隐蔽的域名(forbidden.example)。

对于检测器而言,很难在通信流量中判断一个域名是否使用了“域前置/域名幌子”,要么放行、要么完全禁止,只能二选一,这就导致了昂贵的附带损害。域前置技术易于部署和使用,并不需要特殊的网络中介。研究人员发现,域前置技术在CDN等重要的基础设施和Google的各类网络服务中尤其适用。

“ Cobalt Strike + Google host”

接下来,重点解释一下如何使用 Cobalt Strike 实施基于 Google hosts (如 google.com, mail.google.com 等)的“域前置” 攻击。攻击者早在几年前就开始利用 google.com 实施“域前置” 攻击,利用高信誉的网站将通信中的远程终端隐蔽化,这对于攻击者而言很有价值,因为它能够高效的破坏现有的网络分析能力。

尽管有办法对域前置采集指纹,但是终端的恶意软件在通信时会使用一些高信誉的域名(例如https://www.google.com)与C2服务器进行通信。

根据我们的了解,目前针对域前置的最常见的检测方法是在配置一个中间人HTTPS 代理,通常被称为 “SSL Termination”,它的作用是解密和检测通信中所有的加密流量。当然了这种方法也存在一定的风险。此外,Google的域名支持 HSTS 协议,只有个别几个厂商才有能力针对目标为Google 域名进行SSL通信的解密。(有关HSTS协议的含义,请查阅文末的「名词解释」)。最常用的Google产品(包括但不限于)的域名信息如下:

图2:常用的Google域名信息

添加 Cobalt Strike 监听器

我们假定使用 Cobalt strike 作为一个C2 服务器,当然了也可以使用其他的攻击平台(如 Metasploit, Empire, Pupy 等)。

首先,我们需要添加一个 Cobalt Strike 监听器

  • 为监听器选择 “windows/beacon_https/reverse_https” 有效载荷;

  • 设置Host 值;

  • 设置端口号;

图3: 配置一个 Cobalt Strike 监听器

设置Google域名地址为用于任务中的前置地址:

图4:设置前置域名的信息

部署 GAE

Google 应用程序引擎(Google App Engine,GAE)是一个云平台,允许用户构建和部署自制的Web 和 移动应用程序,它相当于一个介于应用程序和云基础设施之间的抽象层。

我们将使用 GAE 作为C2服务器和受害者主机之前的转向器,使用 Google 前置域名重定向发往 google.com 域名的请求,这一过程的示意图如下所示:

图5:利用 GAE 作为攻击中的转向器

接下来,需要将一些代码部署到 GAE中(注册地址:https://cloud.google.com/appengine/)。创建了一个项目,然后新建一个目录来存储改项目。

$. mkdir myproject

$. cd myproject

这时候,App引擎目录下会包含两个文件:app.yaml 和 main.py。其中,App.yaml文件的信息如下所示:

图6:App.yaml文件代码信息

Main.py的代码如下所示:

图7:Main.py文件代码(https://gist.github.com/redteam-cyberark/90fe4a3bc0caa582fc563ec503e5444c

其中,有几点内容需要重点解释一下。

首先,顶部的一个变量可以用于设置你的CobaltStrike IP 地址或域名,这个CobaltStrike IP 地址对终端分析器而言是隐藏的。

图8:设置CobaltStrike IP 地址或域名

需要指出的是,可以在 Cobaltstrike 和 Google App之间添加第二个转向器,但是它的设置更为复杂,对攻击者而言并没有什么实用价值,只有Google 员工才能查看从 GAE到 C2之间的流量。

Main.py文件末尾的APP路由信息比较容易理解。

任何发往 APPSpot 域名的保护 URI的请求都会被发送到 CobaltStrike,在流量过滤(比如基于User-Agent, originating IP, or URI)方面不太理想,这些对于防御方而言都是阻碍。

最后一点需要指出的是应用程序处理请求的方式。包括 GET 和 POST两类,详情参见图7(Main.py文件代码)中间的部分。

这部分代码实现的功能,包括确保发送到appspot应用程序的请求都被转发到 CobaltStrike 实例上,还确保请求中的 HTTP header 信息和 POST 请求的 body信息都被转发。这使得应用程序具有足够的通用性,可以适用于不同配置的 C2 服务器。

部署的代码:

$. gcloud app deploy

验证重定向

在部署完代码并设置好监听器之后,可以通过运行一个快速测试来验证是否能够正常工作。

在 CobaltStrike 上打开Web Log (View > Web Log),向 GAE app 发送一个 eURL 请求,代码示例如下:

$. curl -i –H “Host: [appname].appengine.com” –user-agent “Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0)” https://mail.google.com/hi_there

验证上述请求是否显示在 Web View 日志中,正常的话,您应该会收到一个 200 OK 的空返回,CobaltStrike 上有一个 404 错误。

图9:验证重定向测试中CobaltStrike上收到的信息

至此,表明重定向的工作可以正常执行了。

更新 C2 的配置文件

最后一步是设置 C2 服务器的配置文件。这里我们提供了一个简单的例子:

图10、图11: C2配置文件的示例(https://github.com/redteam-cyberark/Google-Domain-fronting/blob/master/webbug_getonly_GAE.profile

这里,有几个关键问题值得特别关注一下:

  • 在上图中标红的部分(header )那一行中,修改“Host”为你自己的appspot 域名;

  • 不需要在配置中添加任何证书信息,应用程序的通信使用Google的HTTPS证书,应用程序到C2之间的HTTPS通信将被代理;

  • 元数据 http-get部分和 http-post client/server的输出部分被转化成了url编码,虽然不确定这样做是否是必须的。Netbios最好也使用适当的编码。

重启CobaltStrike使新配置生效。

从现在开始,你可以尝试拿 www.google.com, mail.google.com 或 docs.google.com 这些域名做幌子了。

【更多资料】

域前置技术并不是一个新型的技术,本文的编写也是建立在其他人辛勤工作的基础上,对此感兴趣的可以阅读以下文献:

https://www.bamsoftware.com/papers/fronting/

https://blog.cobaltstrike.com/2017/02/06/high-reputation-redirectors-and-domain-fronting/

https://www.securityartwork.es/2017/01/24/camouflage-at-encryption-layer-domain-fronting/

https://www.securityartwork.es/2017/01/24/camouflage-at-encryption-layer-domain-fronting/

https://www.securityartwork.es/2017/01/31/simple-domain-fronting-poc-with-gae-c2-server/

【名词解释】

*资料来自网络

HSTS代表HTTP Strict Transport Security ,是国际互联网工程组织IETE正在推行一种新的Web安全协议,它是一种帮助网站将用户从不安全的HTTP版本重定向到安全的HTTPS版本的机制。如果你访问的网站启用了HSTS,那么浏览器将会记住这一标记,确保未来每次访问该网站都会自动定向到HTTPS,不会在无意中访问不安全的HTTP。

HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

*文章来源:cyberark转载请注明来自MottoIN.返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
投诉
免费获取
今日推荐