域前置
今早上在fofa上找博客看,发现某一博客中介绍了域前置,感觉还挺有意思的,于是大概了解了一下。
什么是域前置?
维基百科中这样描述:
- 域前置(Domain fronting)是一种隐藏连接真实端点的一种技术。在应用层上运作时,域前置使用户能通过HTTPS连接到被屏蔽的服务,而表面上像是在与另一个完全不同的站点通信。
- 此技术的原理为在不同通信层使用不同的域名。在查询DNS请求和连接TLS服务器名称指示(SNI)中使用无害的域名来初始化连接(在查询DNS请求和连接TLS服务器时,流明文传输),而实际要连接的域名则是在创建好TLS通道后再发出,使真实域名不明文暴露。
我的认识:其实还是加密通信的一种,只不过将使用了第三方的TLS通道做自己的事,有点像“借尸还魂”,用可信的域名TLS通道传输了非该可信域名的信息。举个很简单的例子:正常情况下,我用我的手机和A进行通话,A来电显示是我的手机号。在域前置中,我本来想给B打电话,但是我怕B知道我的手机号,于是我先给A打电话,我的手机和基站建立通话连接后,我再告诉基站我其实要给B打电话,这时候基站和B的手机建立了通信,B接到电话以后,来电显示上是A的手机号。
原理
域前置的核心技术是CDN。因为CDN大多都是复用的,1台CDN会同时负责对多个网站进行加速,如a.com
和b.com
都是由22.33.22.33
这个CDN进行加速的,当我浏览器访问a.com
和b.com
其实都是访问的22.33.22.33
这个IP,那么问题来了,CDN如何分辨访问是哪个域名的呢?通过HTTP请求包中的Host头,而Host头又是极其容易伪造的,所以这就有了可乘之机。
应用
目前域前置技术主要有如下几个应用方向:
- 绕过墙
- 隐藏真实攻击IP
如何检测
- 因为在建立TLS通道时使用的是正常域名,所以无法在建立通道时检测
- 当建立好TLS通道后,传输过程全程加密,无法检测其真实内容
- 综上:目前看来,除非是封禁掉整个CDN的IP池,否则无法完全禁止
疑问
- 域前置是否和V2ray的伪装HTTP流量类似?(正在查询V2ray相关资料)
更新
有关域前置与V2ray的疑问基本已经解决了
今天早上看了一下V2ray伪装HTTP流量的文章,我大概理解了V2ray的伪装HTTP流量,V2ray和域前置其实是两种完全不相关的技术,V2ray其实只是对V2流量进行了本地转发,与CDN无关,域前置更像是一种CDN的漏洞(因为CDN目前没有更好的方法来分辨Host头的真实性或者说某些CDN不对无害的域名进行CNAME或TXT解析校验)
简单说一下V2ray伪装HTTP流量,V2ray伪装HTTP是将V2流量在本地通过Nginx转发到HTTP服务上,然后通过HTTP服务传回到客户端,在这个过程中,HTTP和HTTPS流量都是可以传的,相当于重新对V2的流量数据进行了封装,与域前置必须使用HTTPS流量就有所不同了,而且域前置并没有对数据进行重新封装,但是在实际使用V2ray时,一般不会使用HTTP做转发,HTTP是明文传输的,所以更容易被监听、修改。
《我对域前置的理解与思考》链接:https://xdym11235.com/archives/52.html
具体版权规定详见侧栏版权说明页面