原创作者:腾讯云鼎实验室 ruiqiang
前言
在针对云上业务的的攻击事件中,很多攻击者将攻击脆弱的元数据服务作为攻击流程中重要的一个环节并最终造成了严重的危害。
以2019年的美国第一资本投资国际集团(CapitalOne)信息泄露事件举例,根据《ACase Study of the Capital One Data Breach》报告指出,攻击者利用CapitalOne部署在AWS云上实例中的SSRF漏洞向元数据服务发送请求并获取角色的临时凭证,在获取角色临时凭据后将该角色权限下的S3存储桶中的数据复制到攻击者的本地机器上,最终导致这一严重数据泄露事件的产生,这一事件影响了北美超过1亿人。CapitalOne 的股价在宣布数据泄露后收盘下跌 5.9%,在接下来的两周内总共下跌了 15%。
Capital One信息泄露事件攻击原理图,可参见图:
CapitalOne信息泄露事件攻击原理图
在介绍元数据服务带来的安全挑战之前,我们先来简单介绍一下元数据服务以及角色的概念。
01元数据服务以及角色介绍
元数据服务
元数据即表示实例的相关数据,可以用来配置或管理正在运行的实例。用户可以通过元数据服务在运行中的实例内查看实例的元数据。
以AWS举例,可以在实例内部访问如下地址来查看所有类别的实例元数据:
http://169.254.169.254/latest/meta-data/
169.254.169.254属于链路本地地址(Link-localaddress),链路本地地址又称连结本地位址,是计算机网络中一类特殊的地址,它仅供于在网段,或广播域中的主机相互通信使用。这类主机通常不需要外部互联网服务,仅有主机间相互通讯的需求。IPv4链路本地地址定义在169.254.0.0/16地址块。
而在具体的技术实现上,云厂商将元数据服务运行在Hypervisor(虚拟机管理程序)上。当实例向元数据服务发起请求时,该请求不会通过网络传输,也永远不会离开这一台计算机。基于这个原理,元数据服务只能从实例内部访问。
可以PING云厂商所提供的元数据服务域名,以查看其IP地址
从上图可见,元数据服务属于链路本地地址。
从设计上来看,元数据服务看起来很安全,那为什么说元数据服务脆弱呢?
由于元数据服务部署在链路本地地址上,云厂商并没有进一步设置安全措施来检测或阻止由实例内部发出的恶意的对元数据服务的未授权访问。攻击者可以通过实例上应用的SSRF漏洞对实例的元数据服务进行访问。
因此,如果实例中应用中存在SSRF漏洞,那么元数据服务将会完全暴露在攻击者面前。
在实例元数据服务提供的众多数据中,有一项数据特别受到攻击者的青睐,那就是角色的临时访问凭据。这将是攻击者由SSRF漏洞到获取实例控制权限的桥梁。
访问管理角色
既然攻击涉及到访问管理角色的临时凭据,我们首先看下访问管理角色是什么:
访问管理的角色是拥有一组权限的虚拟身份,用于对角色载体授予云中服务、操作和资源的访问权限。用户可以将角色关联到云服务器实例。为实例绑定角色后,将具备以下功能及优势: