目录

  • 前言
  • 一、概述
    • 1、简介
    • 2、简单示例
      • (1)使用 curl 演示域前置
      • (2)使用 wget演示域前置
    • 3、影响范围
  • 二、原理
    • 1、挑战与应对
      • (1)按内容阻塞
      • (2)按地址阻塞
      • (3)主动探测
    • 2、局限性
  • 三、应用
    • 1、软件
    • 2、事件
    • 3、实践:使用Cobalt Strike上线powershell
      • (1)域名
      • (2)CDN
      • (3)C2证书
      • (4)C2.profile配置
      • (5)启动C2
      • (6)配置CS
  • 结语

前言

最近开始研究隧道相关,如前做了个整理——内网渗透系列:内网穿透(隧道)学习,现在学下比较新比较前沿的技术,本篇是Domain Fronting,即域前置技术

Domain Fronting 是 Fifield David 等研究人员在2015年提出的一种基于CDN的隐蔽通信方法,该方法至今仍被广泛应用于真实APT攻击和红蓝对抗中

一些资料:

  • 论文:https://www.icir.org/vern/papers/meek-PETS-2015.pdf
  • wiki:https://zh.wikipedia.org/zh-hans/%E5%9F%9F%E5%89%8D%E7%BD%AE
  • 新闻:APT29 Domain Fronting With TOR

一、概述

1、简介

域前置(Domain fronting):一种隐藏连接真实端点来规避互联网审查的技术。在应用层上运作时,域前置使用户能通过HTTPS连接到被屏蔽的服务,而表面上像在与另一个完全不同的站点通信

此技术的原理为在不同通信层使用不同的域名:

  • 在明文的DNS请求和TLS服务器名称指示(SNI)中使用无害的域名来初始化连接、公布给审查者
  • 实际要连接的“敏感”域名仅在建立加密的HTTPS连接后发出,使其不以明文暴露给网络审查者

这种举动在被封锁的站点与无害站点为同一个大型服务提供商时较为可行,例如由内容分发网络提供的服务。此时审查者通常很难区分被伪装流量与合法流量的特点,迫使审查者选择放行所有看似无害的流量,或者选择彻底封锁此域的流量。而彻底封锁可能带来显著的附加损害。

2、简单示例

(1)使用 curl 演示域前置

# curl DNS 查询 fastly.net 并和其建立 HTTPS 连接,服务器名称指示当然是 fastly.net,
# 但是 HTTP 头 的 Host 是 www.bbc.com。
# 这里 www.bbc.com 被 fastly.net 前置,屏蔽 www.bbc.com 而允许 fastly.net,
# 这种审查可以被域前置绕过。
curl https://fastly.net -H "Host: www.bbc.com" -s | grep -o '<title>.*</title>'
# curl 向维基媒体服务器 91.198.174.192 建立 HTTPS 连接,使用 www.mediawiki.org 作为服务器名称指示,
# 但是 HTTP 头的 Host 是 zh.wikipedia.org。
# 这里 zh.wikipedia.org 被 www.mediawiki.org 前置,屏蔽 zh.wikipedia.org 而允许 www.mediawiki.org,
# 这种审查可以被域前置绕过。
curl https://www.mediawiki.org/wiki/域前置 --connect-to ::91.198.174.192 -H "Host: zh.wikipedia.org" -s | grep -o '<title>.*</title>'

(2)使用 wget演示域前置

$ wget -q -O - https://www.google.com/ --header 'Host: maps.google.com' | grep -o '<title>.*</title>'
# 结果如下
<title>Google Maps</title>

3、影响范围

不完全统计,有以下这些:

  • 目前兼容域前置的CDN有 Automattic、Fastly、Incapsula、Microsoft Azure、StackPath。

  • 不少网站未使用CDN,但是其HTTP服务器接受无SNI或不同SNI连接,因此使用者也可以使用域前置绕过对于它们的检测SNI的屏蔽。

  • 谷歌网页服务器也兼容域前置

二、原理

Domain Fronting的工作原理如下图所示:

  • 用户用合法的域名allow.com向DNS请求CDN的IP,然后向CDN发起请求,这一步自然是没有任何问题的
  • 因为在处理HTTPS请求时,CDN会首先将它解密,并根据HTTP Host的值做请求转发,所以用户想要访问一个非法网站forbidden.com,可以使用一个CDN上的合法的域名allow.com作为SNI,然后使用forbidden.com作为HTTP Host与CDN进行HTTPS通信
  • 由于HTTP Host只能被转发看到,而审查者是看不到的,故CDN会放过这条请求,并将HTTP请求根据HTTP Host重新封装,发往forbidden.com的服务器
  • 这种情况下,客户端实际通信的对象是forbidden.com,但在流量监控设备看来,客户端是在与allow.com通信,即客户端将流量成功伪装成了与allow.com通信的流量

1、挑战与应对

基于代理的规避主要面临三个挑战:按内容阻塞、按地址阻塞和主动探测

(1)按内容阻塞

有时称为深度包检查(deep packet inspection,DPI),检查数据包和payload,例如查找被禁止的协议或关键字

应对策略:

  • 看起来不像审查员阻止的任何东西:如obfuscatedopenssh及其后续字符串——obfs2、obfs3、scramblessuit和obfs4,都是通过对底层流重新加密来工作的,这样就不存在明文组件,甚至在握手和密钥交换中也不存在明文组件
  • 看起来像审查员允许的东西:fteproxy使用格式转换加密将数据编码为与给定正则表达式匹配的字符串,例如HTTP的正则表达式近似值;StegoTorus使用各种专用编码器将流量转换为覆盖协议;Code Talker Tunnel(前身为SkypeMorph)模拟Skype视频通话;FreeWave将流编码为声音信号,并通过VoIP将其发送给代理;Dust使用加密来隐藏静态字节模式,然后对数据包长度和字节频率等统计特征进行整形,以匹配指定的分布

(2)按地址阻塞

地址阻止审查禁止与某些地址(例如IP地址和域名)的所有通信,这是一个困难的挑战

1、BridgeDB

Tor保留一部分中继作为秘密“桥梁”,其地址不为公众所知。BridgeDB是秘密网桥的数据库,它仔细地分配地址,因此很容易学习一些网桥,但很难列举所有的网桥。BridgeDB使用CAPTCHA和其他速率限制措施,在短时间内,总是将相同的网桥返回给相同的请求者,从而防止通过简单的重复查询进行枚举。BridgeDB还能够分配模糊网桥(目前为obfs3、obfs4、scramblescoit和fteproxy)的地址,从而向其他缺乏IP阻塞的抗DPI系统授予IP阻塞阻力

2、CensorSpoofer

将上游和下游数据通道解耦,客户端通过低带宽的隐蔽通道(如电子邮件)将数据发送给审查代理,代理通过UDP通道发回数据,一直欺骗其源地址,使数据包看起来来自其他“虚拟”主机。于是,审查员没有IP地址可阻止,因为代理的真实地址从未出现在线路上。客户机和服务器面临的挑战是,在一个可靠的隐蔽上行通道上达成一致,该通道必须保持畅通,客户机必须与虚拟主机进行可信的UDP会话,例如VoIP呼叫

3、flashproxy

通过将web用户作为临时代理来抵抗地址阻塞。每个基于JavaScript的代理只在用户停留在网页上的时间内持续,因此代理池是不断变化的。如果其中一个被阻塞,很快就会有另一个来替换它。flashproxy的地址阻塞方法与域前置相反:flashproxy使用许多廉价的、一次性的、可单独阻塞的代理,域前置只在难以阻塞的网络基础设施上使用几个高价值的前置域。

flashproxy使用浏览器的缺点是客户端必须能够接收TCP连接;特别是它不能落后于网络地址转换(NAT),这限制了flash代理的实用性。flash代理协议的一部分要求客户端在一个名为rendezvous的进程中发送少量不可阻止的数据。自2013年以来,默认的会合机制一直通过google app engine使用域名前置。Flash代理本身并没有做什么来防御DPI。经过审查的客户端和基于浏览器的代理之间的连接使用WebSocket,这是一种在HTTP上运行的元协议,但是在WebSocket框架内部是基于TLS的普通Tor协议

(3)主动探测

主动或按需发送自己的代理请求(主动探测),以响应观察到的流量,并将由此找到的任何代理列入黑名单。主动探测是一种识别代理服务器的精确方法,即使协议在网络上很难被检测到,它也可以被视为减少意外过度锁定的一种方法

2、局限性

Domain Fronting流量的一个显著特点是SNI和Host不相等。企业的防守方可以部署HTTPS流量解密设备,并对比流量中的SNI和Host是否相等,如果不相等则说明是该流量是Domain Fronting流量。这也是MITRE ATT&CK中建议的检测方式。

并且,随着该技术不断在真实网络攻击中被使用,云厂商也逐渐意识到了Domain Fronting的危害,目前Cloudflare、AWS CloudFront、Google Cloud CDN等厂商也都纷纷禁用了这种隐蔽通信方法

三、应用

1、软件

  • 最早使用域名前置进行规避的是GoAgent,这是一个基于google app engine的工具,曾在中国广泛使用。GoAgent的用户将代理代码的个人副本上传到appengine,在appspot.com的子域上运行。为了访问appspot.com,GoAgent通过Google的IP地址,使用没有SNI的“无域”模型。GoAgent不使用额外的通用代理;相反,它直接从appengine服务器获取url。因此,GoAgent不支持HTTP和HTTPS以外的协议,HTTPS的端到端安全性也会丢失,因为web页面在被重新加密回客户端之前以明文形式存在于appengine服务器上
  • Signal加密即时通讯应用程式在 2016-2018 年内置了域前置来规避在埃及,阿曼,卡塔尔和阿拉伯联合酋长国的屏蔽
  • Telegram 为应对 Roskomnadzor的屏蔽曾使用 亚马逊云计算服务 进行域前置
  • Tor浏览器 使用一种称为 meek 网桥的域前置实现来规避审查,如下图所示:

2、事件

  • Cloudflare在2016年的一些修改让基于其CDN的域前置不再工作

  • Google于2018年4月宣布将在Google应用服务引擎禁用域前置,称这从未是Google有意支持的一项功能。亚马逊公司也在不久后决定停用CloudFront上的域前置兼容,表示这已被视为违反亚马逊网路服务系统(AWS)服务条款

  • Tor早前也使用Google和亚马逊的云服务进行域前置以保护用户活动,在两者相继关闭域前置兼容后,Tor将域前置服务转移到尚未决定关闭该兼容的Microsoft Azure服务

  • FireEye曾报道称,与俄罗斯相关的黑客组织APT29使用该技术从目标网络中窃取数据。Cyber​​Ark等公司则详细介绍了恶意软件如何利用该技术控制僵尸网络。

  • 在2018年7月左右的互联网工程任务组(IETF)会议上,苹果公司、Cloudflare和Mozilla的工程师在一项名为“加密服务器名称指示(ESNI)”的新协议上取得了进展,该协议将能解决TLS SNI暴露给窃听者的问题。但是,该协议的定稿和部署可能仍需数年

3、实践:使用Cobalt Strike上线powershell

需要资源:

  • Cobalt Strike 4.0
  • VPS(cs服务器)
  • 域名
  • CDN
  • 国外代理

(1)域名

https://www.freenom.com/


要挂代理,然后把个人信息的地址设置成代理的地址,要不可能申请不成功

(2)CDN

https://dash.cloudflare.com/


登陆CDN,添加站点为刚刚申请的域名


添加A记录,指向VPS的IP地址

类型   名称      内容                  TTL     代理状态
A       test    10.1.1.111(VPS地址)     自动      已代理

那么这个地址就是 test.xxxxx.tk


找到自己的域名——管理域名——nameservers

选择使用自己的域名解析:Use custom nameservers (enter below)

Nameserver 1、2 都写CDN提供的地址


为了实时受到我们的命令的响应:我们需要修改缓存规则:

(3)C2证书


下载证书,生成成功保存下来


在VPS上生成CS可用的配置文件,使用以下命令重新生成cobalstrike.store:

openssl pkcs12 -export -in server.pem -inkey server.key -out spoofdomain.p12 -name 域名 -passout pass:密码

例子:

openssl pkcs12 -export -in com.pem -inkey com.key -out spoofdomain.p12 -name test.xxxxx.tk -passout pass:zzz123456

使用以下命令创建证书:

keytool -importkeystore -deststorepass 密码 -destkeypass 密码 -destkeystore new.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass 密码 -alias 域名

例子

keytool -importkeystore -deststorepass zzz123456 -destkeypass zzz123456 -destkeystore new.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass zzz123456 -alias test.xxxxx.tk

最终生成 new.store 文件,(为cobalstrike.store的替代品)

(4)C2.profile配置

github.com/FortyNorthSecurity/C2concealer


将生成的这个随机数.profile复制到cs目录下

(5)启动C2

用c2lint 检查下,下面这样就是通过:

./c2lint ca730a6d.profile


修改teamserver配置

vim teamserver

修改最后一行的内容

javax.net.ssl.keyStore=./new.store (证书生成的new.store文件地址)   -Djavax.net.ssl.keyStorePassword=zzz123456(上面证书的那个密码)


启动

./teamserver 192.168.1.1 password123456 ./C2.profile

(6)配置CS

监听器


配置一个powershell上线,注意要勾选SSL

成功

结语

过了遍域前置技术,不是很新了,但是还是能用

参考:

  • Domain fronting域名前置网络攻击技术
  • SSL通信和域前置
  • 模拟攻击者利用“域前置”(Domain Fronting)技术逃避审查
  • 利用CDN、域前置、重定向三种技术隐藏C2的区别
  • CS通过(CDN+证书)powershell上线详细版
  • Proxy: Domain Fronting

一文搞明白域前置(Domain Fronting)技术相关推荐

  1. 一文搞明白Python并发编程和并行编程

    目录 前言 一.基础知识 1.并行和并发 (1)定义 (2)联系 2.进程.线程和协程 (1)定义 (2)联系 3.生成器 (1)yield (2)send, next (3)yield from 4 ...

  2. 一文搞明白GIT——Git原理解析与常用命令

    工作中经常用git,但是不少命令经常使用出现各种各样的问题,也不太理解其中的原理.今天专门总结一下git的原理,理解原理之后想实现什么样的功能直接找相应的命令即可.如有错误和不足,欢迎指正! 一. 工 ...

  3. nginx转发请求_Nginx为什么高效?一文搞明白Nginx核心原理

    Nginx 的进程模型 Nginx 服务器,正常运行过程中: 多进程:一个 Master 进程.多个 Worker 进程 Master 进程:管理 Worker 进程 对外接口:接收外部的操作(信号) ...

  4. 无法检查指定的位置是否位于cfs上_(干货分享)一文搞明白 节气门位置传感器的作用、故障类型与症状、诊断方法...

    1 位置节气门位置传感器(ThrottlePositionSensor,TPS),位于节气门体上,其安装形式因节气门结构的不同而有所差异:对于传统的机械拉索式节气门,节气门位置传感器通常以一个独立元件 ...

  5. 【RNN基础】——一文搞明白RNN

    目录 1.定义 2.有了CNN,为什么需要RNN? 3.RNN的主要应用领域有哪些呢? 4.RNN的计算过程 5.标准RNN前向输出流程 6.RNN的建模方式 1.一对多(vector-to-sequ ...

  6. 面试中的项目介绍怎么介绍?从哪些方面介绍?一文搞明白(大数据方向,其他方向可借鉴)

    面试中,我们肯定会被问到的一个问题就是,你介绍一下你的项目,那到底怎么描述才是面试官满意的呢,我这里整理了几个问题 通用问题 大家的项目肯定是不一样的,但是这些问题就是可以共同使用,用于项目介绍 1. ...

  7. 一文搞明白整型提升,截断等相关概念【C语言】

    首先看一道题目: 如下程序输出的结果是: int main() {char a = 0xb6;short b = 0xb600;int c = 0xb6000000;if(a==0xb6)printf ...

  8. 一文搞明白二重积分以及三重积分的对轮换对称性

    下面的是二重积分的轮换对称性

  9. 流媒体服务器(16)—— 一文搞明白直播和点播的区别

    目录 ​ 前言 正文 直播 点播 不同点

最新文章

  1. 2021年大数据Flink(十):流处理相关概念
  2. 快速目标检测--Object detection at 200 Frames Per Second
  3. ActFramework 小贴士 - 获得应用版本
  4. 撸个注解有什么难的 请看这里
  5. 操作系统-并发:死锁和饥饿
  6. 【转】微服务实践(五):微服务的事件驱动数据管理
  7. javabean与json转换(fastjson与jackson两个版本)
  8. CentOS 7上安装 MongoDB数据库 4.0.0最新版
  9. 机器人 知乎碧桂园_碧桂园:机器人不独行
  10. [haoi2011]向量
  11. easyui tree json php,easyui tree json
  12. 更改Maven本地仓库
  13. 瑞利衰落信道容量及瑞利衰落条件下中断容量对AWGN容量的占比
  14. Arduino实现语音实时播报当前温湿度
  15. Ubuntu 重置密码
  16. 如何获取android手机mac地址,Android手机如何获取Mac地址
  17. 方便地边看便翻译原版pdf文章(wps)
  18. 宝塔面板修改默认的放行端口8888为8001并且生效
  19. 微软新版Windows定价过高 遭韩国政府调查
  20. Python3的桌面程序开发利器:Eric6的环境搭建、使用

热门文章

  1. 简单理解蒙特卡洛算法
  2. Android--BottomSheet实现可拉伸控件
  3. 阅读 | 《逻辑工作法》学习笔记
  4. JavaScript一_HTML
  5. 什么是「文本基因计划」?
  6. Hello Qt——QMake用户指南
  7. python 海象运算符_科学网—[转载]海象运算符 := - 龚云国的博文
  8. 解决WINDOS文件夹需要管理员权限无法删除,高级安全设置无法更改所者权限,点击变灰色
  9. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(二)-使用gateway-management-ui
  10. 证明与计算(7): 有限状态机(Finite State Machine)