近期,我一直在研讨CloudFront域名绑架相关的问题。尽管这并不是一种新出现的安全问题,但其重要性清楚明了:
1. CloudFront的某些默许行为不行直观,某些规范DNS装备会误导用户并让他们以为自己存在安全问题的域名现已装备正确了。
2. 在曩昔的一年里,过错装备的S3 Bucket现已成为了一个十分严峻的问题,其他的AWS安全问题也日益突出。
3. 因为过错装备的域名将导致严峻的问题出现,进犯者会将其视作要点进犯方针。
很明显,这方面的安全问题关于那些没有深入研讨过相关内容的人来说,肯定是不明显的。尽管HackerOne上有一些相关论题的评论,但我以为仍是有很多人没有意识到这些问题的严峻性的。
布景材料
CloudFront是亚马逊Web服务(AWS)供给的一种内容分发网络(CDN),CloudFront用户需求创立CloudFront Distribution来保管其他来历的内容(例如S3 bucket),每一个CloudFront Distribution给用户供给了一个仅有的终端节点来指向他们的DNS记载(例如d111111abcdef8.cloudfront.net)。一切域名所运用的特定Distribution需求记载在一个CNAME域中。当CloudFront节点接纳到了一个恳求之后,它并不会主动将相应Distribution中的内容出现出来。相反,CloudFront运用了恳求中的HOST头来判断去运用哪一个Distribution。这意味着下面两件工作:
1. 假如HOST头跟CNAME域中的域名不匹配,恳求将失利。
2. 任何其他的CloudFront Distribution假如包含了HOST头中的指定域名,它将接纳到恳求并对其进行正常呼应。
这样一来,将会导致域名被绑架。
比如
域名test.disloops.com是一条只想disloops.com的CNAME记载。
disloops.com域名运用了一个CloudFront Distribution。
因为test.disloops.com没有添加到Distribution备用域名的CNAME域之中,发送至test.disloops.com的恳求将会失利。
其他用户能够创立一个CloudFront Distribution并将test.disloops.com添加到备用域名CNAME域中,并完成域名绑架。
这也就意味着,CloudFront所绑定的仅有节点跟仅有Distribution就没有任何含义了:
研讨剖析
我专门编写了一个名叫CloudFrunt的Python脚本来主动化地扫描存在此缝隙的域名:
1. 可接受域名列表;
2. 经过dnsrecon寻觅更多的相关域名;
3. 挑选出指向CloudFrontIP地址空间的域名;
4. 测验方针域名是否存在过错装备问题;
5. (可选)将它们添加到CloudFront Distribution之中;
脚本获取:【点我获取】
现在,咱们现已发现了90500个仅有的域名地址,与之绑定的IP地址大约有一百万个。所以我创立了一个EC2实例来对它们进行测验,并以并行的方法用CloudFrunt来对它们进行扫描。
成果剖析
脚本运行了几天之后,我发现了2000多个新的CloudFront Distribution域名