问了下内部人员阿里云的机房备案白名单技术细节,想到了继续使用 HTTP 并且绕过备案的方法

2014-02-23 15:19:51 +08:00
 lehui99
一直好奇为何自己修改hosts文件可以访问不备案的域名,而做了域名指向后就被TCP Reset了,对阿里云服务器来说这两个情况看到的数据包完全是一样的,阿里云是怎么区分这两种情况的。最近问了下阿里云的内部人员,才搞清楚技术细节。
原来阿里云的机房白名单工作原理是在TCP连接建立(TCP的3步握手成功)后对浏览器发出的第一个数据包进行的检测,而且是黑白名单进行检测,不是仅通过白名单进行检测。检测步骤如下:
================================
1、如果不是HTTP协议则放行。
2、如果不包含Host字段则放行。
3、如果Host字段为IP格式则放行。
4、如果Host字段在白名单内则放行。
5、如果Host字段在黑名单内则发送TCP RST。
6、如果Host字段不在黑名单内则去进行域名解析,放行此次连接(怪不得刚做好域名指向的时候是可以访问的,过了几分钟再访问就永远被Reset了)。如果之后域名解析的结果指向了阿里云,则将此域名加入黑名单,否则不加入黑名单(怪不得本地修改hosts文件永远可以访问没有备案的域名)。
由于只对TCP连接后的第一个数据包进行检测,所以想到了个绕过的办法,就是把Host字段放到第二个数据包内。在不通过代理服务器的情况下能想到的方法就是将HTTP请求弄得很大,这样由于超过了MTU的最大值(Internet上最大MTU通常是1500左右),Host字段就很可能跑到第二个数据包内了。这样既绕过了黑白名单检测,Web服务器又能正确响应请求。
通过在未备案域名的主页后添加一长串参数(比如 http://www.XXXXXX.com/?hfhsdhjdjfdkjdjkf.............. ),参数的长度为1600,果然即使做了域名指向访问未备案的域名也永远不会被Reset。
================================
然后我就想到了个既可以让用户直接访问主页不用输入一长串参数或路径,又能将阿里云当服务器访问未备案域名的方法:
================================
1、将网站所有内容放在很深的子目录内,保证路径长度超过1500(比如12个长度为128字节的目录)。
2、开一个新的子域名(比如 web.XXXXXX.com ),指向阿里云。
3、找一个国外的免费空间做跳转,跳转到指向阿里云的子域名和很深的路径(比如 http://web.XXXXXX.com/fhskjdhfksjdhkf/fhskdjfhsjkdfh........... )。
4、将主域名指向那个免费空间,用户访问主域名自动跳转到阿里云。
================================
试验了一下,果然可行!不用HTTPS就能绕过备案。
BTW,阿里云的黑白名单都是对主域名进行的记录,比如访问了 www.XXXXXX.com 后被检测到了域名指向阿里云,那么黑名单内记录的是 XXXXXX.com 而不是 www.XXXXXX.com ,所以之后即使访问 asdf.XXXXXX.com 也会被Reset。黑名单有时效,过了一段时间如果黑名单内的域名没有被访问就会清除黑名单,之后再被访问就再进行域名解析。有时候阿里云的域名解析失败会延迟几个小时进行再次解析,所以有时候(概率很小)域名指向做了几个小时之后才被Reset。
2104 次点击
所在节点    VPS
18 条回复
est
2014-02-23 15:39:22 +08:00
感谢反馈。相关部门会在1秒钟内补上这个漏洞。
stackoverflow
2014-02-23 15:44:37 +08:00
很赞,可行,但是对用户和搜索引擎都不友好,而且这个漏洞修补得非常容易。

话说是哪位技术人员泄漏的检测策略呀?
lsylsy2
2014-02-23 15:46:46 +08:00
1s改漏洞……
lsylsy2
2014-02-23 15:49:44 +08:00
5、如果Host字段在黑名单内则发送TCP RST。

山寨墙啊
lehui99
2014-02-23 16:49:56 +08:00
@est 1秒。。。。。。


@stackoverflow 不能把别人供出来。。。。。。


@lsylsy2 阿里云不备案现在就是直接Reset的
ovear
2014-02-23 17:34:14 +08:00
似乎对目前几乎所有的白名单都有用。。。啧啧
oott123
2014-02-23 18:18:50 +08:00
…自己搭个 dns 服务器,看看阿里云负责解析域名的 ip 是多少,针对那个 ip 段把 dns 的包 drop 掉,你看这事靠谱么…
lsylsy2
2014-02-23 18:25:08 +08:00
@oott123 re……
oott123
2014-02-23 18:41:57 +08:00
@lsylsy2 没看懂…?re 是什么意思, reply 么?
akira
2014-02-23 18:49:09 +08:00
何必呢,不想备案,丢国外就是
ovear
2014-02-23 18:49:10 +08:00
不可行,dns只能拿到递归dns的地址,如果阿里云使用4个8啊,4个114怎么办
Mihuwa
2014-02-23 19:40:53 +08:00
思路很好。
lehui99
2014-02-23 20:24:26 +08:00
@ovear 国内的白名单机制都是这个原理吗?

@oott123 看11楼的回复,可能不行。
oott123
2014-02-23 23:32:40 +08:00
@ovear 不是有 edns-client-subnet ?
ovear
2014-02-23 23:55:50 +08:00
@oott123 4个114没有实现,其他大部分要求去申请合作才能授权,比如说opendns,4个8都要申请。。
ovear
2014-02-23 23:56:37 +08:00
@lehui99 看样子都是这样的=。= 试了几家了。。
quake0day
2014-02-24 00:05:29 +08:00
赞一下楼主钻研的精神。思路很好。
lehui99
2014-02-24 21:08:56 +08:00
看来国内的机房白名单都能用这种方式绕过啊。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/101469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX