出品|MS08067实验室(www.ms08067.com)

千里百科

Domain Fronting基于HTTPS通用规避技术,也被称为域前端网络攻击技术。这是一种用来隐藏Metasploit,Cobalt Strike等团队控制服务器流量,以此来一定程度绕过检查器或防火墙检测的技术,如Amazon ,Google,Akamai 等大型厂商会提供一些域前端技术服务。

下列将会使用Amazon 提供CloudFront (CDN)服务举例。

背景

在虚拟主机中搭建多个网站服务,为了方便我们区分它们,可以 IP+Port名称 等方式去访问它们,但是如果是SSL/TLS的话。根据HTTPS的工作原理,浏览器在访问一个HTTPS站点时,先与服务器建立SSL连接。

建立连接的第一步就是请求服务器的证书。而服务器在发送证书时,是不知道浏览器访问的是哪个域名的,所以不能根据不同域名发送不同的证书。因此就引入一个扩展叫SNI,SNI是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展,做法就是在 Client Hello 中补上 Host 信息。

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

此技术的原理为在不同通信层使用不同的域名。在明文的DNS请求和TLS服务器名称指示(SNI)中使用无害的域名来初始化连接,而实际要连接的被封锁域名仅在创建加密的HTTPS连接后发出,在Host头中携带了另一个恶意C2域名(Host头对于检查器是不可见的,但是对于接收HTTPS请求的前端服务器是可见的)。

演示

在Amazon CloudFront是一种内容交付网络服务。它为用户提供了一个全局分布式缓存,用于托管在其服务器上的文件。这减少了客户服务器上的负载,并允许CDN提供来自与请求者数据中心的缓存内容,当客户端连接到CloudFront的时候,其根据HOST头来判断客户端想要请求的域名,在做域前置攻击时候,只要在CloudFront中挑选一个受信任域名,如"https://docs.telemetry.mozilla.org",看起来是一个合法白名单域名,将他做为前置域名来躲避防火墙审查。

在Amazon CloudFront申请一个账户并建立一个CloudFront,在"Origin Domain Name"写入自己的C&C控制器域名如Godsong.test,其他设置按自己需求来。

申请完毕之后会自动分发一个随机域名 xxx.cloudfront.net样式,将颁发的随机域名指向真实C2服务器,用户访问此域名时候会解析到真实的C&C服务器。

域名前置因为使用了合法前置域名做诱饵,在使用HTTPS链接时,DNS请求的也都是合法域名,而在HOST中请求修改请求指向为我们C&C服务器,相当于请求合法域名之后把流量转发到了中转web上。

在CloudFront为我分配了一个域名,此域名转发到我的C&C地址上,在原始C&C服务器Web存放了一个名为6.txt记事本,地址为https://www.godsong.test/6.txt。

访问Aws颁发的域名https://d305blu4121c3m.cloudfront.net/6.txt,能返回原始流量转发说明测试成功。

使用合法白名单作为前置域名,修改Host指向为我们的C&C域名。

wget -U demo -q -O- docs.telemetry.mozilla.org/6.txt --header
"Host:d305blu4121c3m.cloudfront.net"

如下图就成功利用Mozilla白名单域名技术来隐藏真实恶意流量。

在实际应用中,可以使用Cobalt Strike ,Empire, Metasploit等工具修改其配置文件来控制流量传输,下文使用Cobalt Strike演示,设置一个Profile扩展并且指定Host头为d305blu4121c3m.cloudfront.net。

创建一个监听器,主机写Cloudfront.net分发域名,监听80端口。

Beacon传输器使用白名单域名如下:

在恶意程序运行后,使用Wireshark 抓取传输流量数据包。如图所示,可以看到相关请求如下,以此方法来隐藏真实C&C服务器地址,在Wireshark 中查看传输流量包Host头也同样指向我们Cloudfront服务器,一定程度上隐蔽了真实攻击机地址。

总结:Domain Fronting技术因为我们看到的域只是前端服务器域,很难区分那个是正常域名或恶意域名,但实际上恶意流量都要进入被控端服务器,这样的话就会在被控服务器上产生一些恶意指纹,网络数据包的大小和时间,以此方法来观察恶意特征检测等等。

参考文献

[1]https://www.sans.org/cyber-security-summit/archives/file/summit-archive-1542139101.pdf

图2,图6引用此文

[2]http://www.ert7.com/service/knowledge/3999.html

转载请联系作者并注明出处!

Ms08067安全实验室专注于网络安全知识的普及和培训。团队已出版《Web安全攻防:渗透测试实战指南》,《内网安全攻防:渗透测试实战指南》,《Python安全攻防:渗透测试实战指南》,《Java代码安全审计(入门篇)》等书籍。

团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。

官方网站:https://www.ms08067.com/

扫描下方二维码加入实验室VIP社区

加入后邀请加入内部VIP群,内部微信群永久有效!

【安全研究】Domain fronting域名前置网络攻击技术的更多相关文章

  1. 基于国内某云的 Domain Fronting 技术实践

    发布时间:2019-12-16 11:30:53 一.简介 Domain Fronting,中文译名 “域前置” 或 “域名前置”,是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术 ...

  2. 网络攻击技术:SQL Injection(sql注入)

    网络攻击技术开篇——SQL Injection   1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码 ...

  3. 微信内转发APP及h5类域名怎么做到防封防拦截,微信域名防红技术原理

    我们常常遇到自己正规的网站链接,无端被微信拦截,大家都为这问题苦恼不已.但凡想使用微信来推广产品或者从事活动营销的用户,就一定会遇到域名被微信拦截甚至封停的情况.域名没被封过,那你的营销人生肯定是不完 ...

  4. 微信屏蔽APP分享链接的解决方案原理,剖析微信域名防封技术

    为什么很多商家在微信封域名如此严格的情况下,还会挤破头皮去做微信营销和推广呢?又有些人问,为什么别人的域名长时间推广都没事,自己的链接在微信内一推就被拦截呢?这里你可能需要注意一点事,事出无常必有妖. ...

  5. 关于学习Vue的前置工作/技术储备

    关于学习Vue的前置工作/技术储备 1.GitBatch 2.Sublime Text 3.Node-----npm 命令 本人用的idea GitBatch: GitBatch是一个可以编写shel ...

  6. SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术]

    SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术] http://www.docin.com/p-265530271.html

  7. 成倍提高服务器的负载能力:浅谈Jexus的ASP.NET前置缓存技术

    一.什么是“ASP.NET前置缓存”     ASP.NET前置缓存,是Jexus特色功能之一,是指Jexus把开发者指定的ASP.NET网页某一时刻的内容,缓存到专用的高速缓冲区中,在指定的时间内, ...

  8. 网络攻击技术开篇——SQL Injection

    本文转自: http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库 ...

  9. (domain)域名协议

    https://jingyan.baidu.com/article/2c8c281df0afd00008252aa7.html

随机推荐

  1. 翻译:《实用的Python编程》01_05_Lists

    目录 | 上一节 (1.4 字符串) | 下一节 (1.6 文件) 1.5 列表 本节介绍 Python 原始数据类型列表(list). 列表是一种有序的集合. 创建列表 使用方括号 [] 来定义列表 ...

  2. 使用 js 实现一个中文自动转换成拼音的工具库

    使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...

  3. JPG学习笔记4(附完整代码)

    #topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, ...

  4. Python算法_盛最多水的容器(04)

    给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  5. 纯CSS实现内容放大缩小效果

    先搭架子 再实现第一个内容 填充更多内容 拆掉border,查看最终效果 html代码 <!-- 服务 --> <div class="service"> ...

  6. JS数字每三位加逗号的最简单方法

    <script> function thousands(num){ var str = num.toString(); var reg = str.indexOf("." ...

  7. 换人!golang面试官:连怎么避免内存逃逸都不知道?

    问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape.noescape可以在逃逸分析中隐藏一个指针.让这个指针在逃逸分析中不会被检测为逃逸. // n ...

  8. ALGO基础(一)—— 排序

    ALGO基础(一)-- 排序 冒选插希快归堆,以下均为从小到大排 1 冒泡排序 描述: 比较相邻的元素.如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一 ...

  9. Spring-04 Bean的自动装配

    Spring-04 Bean的自动装配 Bean的自动装配 1.自动装配说明 自动装配是使用spring满足bean依赖的一种方法. spring会在应用上下文中为某个bean寻找其依赖的bean. ...

  10. Python爬虫学习笔记(四)

    Request: Test1(基本属性:POST): 代码1: import requests # 发送POST请求 data = { } response = requests.post(url, ...