最新消息:非无江海志,潇洒送日月

基于浏览器隐藏www子域名的攻击与子域名泛解析劫持攻击

网络安全 江海志 401687浏览 0评论

Chrome 决定在版本70中隐藏地址栏里的www域名头部。虽说从用户角度来说,www加不加通常没区别,但从技术上来说,www和非www根本不是一个域,换句话说,它们完全是两个网站;这两个网站可能由同一个人控制,也可能由不同的人控制。如果是后者,隐藏www就会出现问题。

一个实际的例子是,www.net.cn是万网的域名,然而它和net.cn完全无关——net.cn是中国版的net根域名。这看起来也没什么安全问题;毕竟net.cn不是一个承载业务的域名,弄混也没关系;而且域名提供商也不会把www.xxx.yyy和xxx.yyy卖给不同的人。但遇上泛域名这种东西,事情就变得麻烦了。

世界上有很多提供泛域名的网站,用户可以随意注册一个子域名,并在该子域名下托管网站(通常是博客)。举个例子,我的github账号是jianghaizhi,那么jianghaizhi.github.io这个域名属于我。如果有另一个人拥有www.jianghaizhi.github.io,那么他的网站和我的网站地址在Chrome 70里看起来是一样的。幸好在github.com上无法注册带”.”的账号,我还是安全的。

Github安全不代表所有向用户提供子域名的网站都安全。我正在使用的一个博客网站就可以申请多级子域名,下图是攻击的例子。可以看到,攻击者的网站是www.someone.blogdomain.com,但在地址栏里只显示someone.blogdomain.com。

Add an imageSelect an image from your computerBrowseType caption (optional)

如果说博客网站提供的默认域名只是为了方便使用,用户还可以绑定自己的域名规避的话,更为严重的可能是针对将自有域名泛解析到第三方服务的攻击。比如AWS S3的静态网站托管功能,很多企业用它托管静态网站。其验证逻辑是,用户创建名为mydomain.com的存储桶,并且mydomain.com解析到了aws s3 endpoint的话,就可以用mydomain.com访问该桶存储的网站。在这个过程中,AWS并不关心mydomain.com是否为用户所有。

设想这样一个场景:某公司拥有xxx.com域名,并且拥有多个业务网站:a.xxx.com,b.xxx.com。为了方便管理,公司将*.xxx.com泛解析到了AWS S3 endpoint,并在S3中创建名为a.xxx.com和b.xxx.com的存储桶,放置静态网站。攻击者发现了公司将泛解析指向公共S3 endpoint,于是在同一个AWS区域创建www.a.xxx.com存储桶。此时,访问www.a.xxx.com会显示攻击者的静态网站,并且其域名在Chrome里会显示为a.xxx.com。

那么,是不是只要将泛解析指向云服务就是不安全的呢?也并不是。无论域名拥有者是谁,将泛解析指向多个用户公用的服务器地址就有可能出现问题;指向单个用户私有的服务器地址则是安全的。比如,将用户将自己的域名泛解析到AWS ALB上就没有问题:ALB是用户私有的,可以保证ALB提供的服务一定是该用户所有;而将域名泛解析到S3 Endpoint非常危险,因为所有AWS用户共享相同的S3 Endpoint,子域名可能被其他用户使用;这不止限于前缀是www的子域名。你可以在 A guide to subdomain takeovers 查看关于子域名攻击的更多方式。

转载请注明:江海志の博客 » 基于浏览器隐藏www子域名的攻击与子域名泛解析劫持攻击

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 特别要注意,将 *.example.com 解析到某 IP,会使 level4.level3.example.com 也指向那个 IP 吗。 通常的 DNS 服务商会这么实现,让多级别泛解析同时生效。
    江海志6年前 (2018-09-17)回复