前情提要

今年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字段,用户将不再允许忽略警告。

模拟攻击者利用“域前置”(Domain Fronting)技术逃避审查(重定向、CDN)相关推荐

  1. 黑客利用域前置技术攻击缅甸政府并隐藏恶意活动

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 思科Talos 的研究人员发现攻击者正在利用合法域名使用域名前置技术隐藏命令和控制流量,攻击缅甸政府.该合法域名是缅甸政府用于路由受攻击者控制服 ...

  2. 一文搞明白域前置(Domain Fronting)技术

    目录 前言 一.概述 1.简介 2.简单示例 (1)使用 curl 演示域前置 (2)使用 wget演示域前置 3.影响范围 二.原理 1.挑战与应对 (1)按内容阻塞 (2)按地址阻塞 (3)主动探 ...

  3. 隐藏你的C2(使用域前置技术隐藏C2服务器,以及使用iptables策略来保护服务器)

    文章目录 隐藏C2 CDN域前置 CDN 访问流程 配置CDN 效果 隐藏C2 配置CS Profile 上线CS 总结 iptables保护C2 流量转发 修改默认端口 推荐阅读 之前有一篇文章写过 ...

  4. 域前置,水太深,偷学六娃来隐身

    前言 又是平静的一天,吉良吉影只想过平静的生活. 哦,对不起拿错剧本了. 重保期间,RT 使用了多种方法来攻击资产, 其中不乏低级的方法. 1. 给客服 MM 传恶意文件,威胁不运行就投诉的,伪造&l ...

  5. 【红队APT】反朔源隐藏C2项目CDN域前置云函数数据中转DNS转发

    文章目录 域前置-CDN隐藏C2真实IP 防止被溯源 什么是域前置 条件 原理 ==完整复现== 域前置溯源 DNS协议-域名记录解析 云函数-腾讯云操作 云函数如何溯源 端口转发-Iptables ...

  6. 域前置Cobalt Strike逃避IDS审计

    域前置Cobalt Strike逃避IDS审计 域前置简介 域前置(Domain Fronting)基于HTTPS通用规避技术,也被称为域前端网络攻击技术. 这是一种用来隐藏Metasploit.Co ...

  7. div模拟textarea文本域轻松实现高度自适应——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com 本文地址: http://www.zhangxinxu.com/wordpress/?p=1362 一.关于t ...

  8. 警告:攻击者利用 SonarQube 漏洞盗取国内多个机构的大量源码!

    作者 | KubeSphere云原生 来源 | https://mp.weixin.qq.com/s/6dg51fKgLjSQTjmyFWl4DA 2021 年 10 月 22 日,国外知名媒体 cy ...

  9. F5设备中存在一个Ticketbleed漏洞,可被远程攻击者利用

    本文讲的是F5设备中存在一个Ticketbleed漏洞,可被远程攻击者利用, F5 Networks BIG-IP设备中存在一个严重漏洞,漏洞编号为CVE-2016-9244.该漏洞被命名为Ticke ...

最新文章

  1. 亲 , Zookeeper了解一下 : 概述
  2. c 语言socket粘包,C# Socket粘包处理讲解示例
  3. const变量的使用方法。。
  4. MapRdeuceYarn的工作机制(YarnChild是什么)
  5. 生成四位验证码php,PHP生成四位整数验证码图片及使用例子
  6. python进阶书籍的推荐-Python 入门到进阶书籍推荐
  7. windows远程下载
  8. Python 把较长的一行代码分成多行的技巧
  9. 上学要迟到了【最短路转化】
  10. scare机器人如何手眼标定_基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...
  11. SmartGit破解使用的个人方法
  12. python手机销售系统结论于心得_python实现手机销售管理系统
  13. Ubuntu 14.04 + nginx + php + mysql + phpmyadmin环境搭建,详细操作
  14. Mysql备份策略-完成备份+增量备份shell
  15. C# 访问mongodb数据库
  16. 基于docker1.7.03.1单机上部署hadoop2.7.3分布式集群
  17. 在java中获取X.509证书微缩图的方法
  18. 数字时代带给孩子们的只有“冰冷”的科技吗?_数字体验_新浪博客
  19. 音质好的蓝牙耳机有哪些?音质好的蓝牙耳机测评
  20. 亚利桑那大学在线计算机硕士,亚利桑那大学计算机工程硕士排名第33(2020年TFE Times排名)...

热门文章

  1. 吴恩达机器学习笔记三之逻辑回归
  2. 写作有困扰?不知道用什么词?不知道怎么解释不一致的结果?这个网站来帮你。
  3. 风湿病年鉴 | scRNA-seq研究揭示骨关节炎患者的半月板退变新机制
  4. 纪念诺贝尔生理医学奖获得者 Sydney Brenner (1927-2019)
  5. Mac电脑 + Windows机械键盘?功能键映射了解一下
  6. HTML中用弹性布局设置位置,HTML的flex弹性布局
  7. 第七章 递推与递归 第3课 攀天梯(ladder) --《聪明人的游戏:信息学探秘.提高篇》
  8. 36产生用户恶情绪和报复情绪的原因
  9. STM32F103+CubeMX-Keil上移植RTX5实时系统
  10. RTX5 | 软件定时器02 - 创建一个软件定时器(连续运行)