Cloud RedTeam视角下元数据服务攻防实践

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 纵观云上的攻击事件,以及近期的一些热点事件,大家不难发现,元数据服务攻击事件频繁的发生。在云产业不断发展壮大的当今,元数据服务已经成为了攻击者攻击流程中的一个重要的环节。

文章首发于:火线 Zone-云安全社区

作者:高瑞强

高瑞强,腾讯安全云鼎实验室,目前从事云上攻防安全相关的研究工作。

今天分享的主题是《Cloud RedTeam 视角下元数据服务攻防实践》。

image.png

纵观云上的攻击事件,以及近期的一些热点事件,大家不难发现,元数据服务攻击事件频繁的发生。在云产业不断发展壮大的当今,元数据服务已经成为了攻击者攻击流程中的一个重要的环节。我们从攻击者的视角来分析攻击流程中元数据服务所面临的风险,也可以更好地迎战元数据服务带来的安全挑战。

image.png

今天分享的议题由四个部分组成。

元数据服务概览
安全事件回顾
针对元数据服务攻击
ATT&CK矩阵和元数据服务

image.png
image.png

给大家简单举一个例子,介绍一下什么叫做云服务器实例元数据。大家可以设想一下,在租用云厂商所提供的云服务器服务后,首先需要选购机型、选购地区、选购配置的时长或者是计费方式,当购买成功之后,就会为用户生成一个云服务器的实例。

这个实例有自己的属性,常见的可以举例,实例ID它自身绑定了一些角色信息,也会有一些安全组信息的绑定情况,包括大家日常可见的实例,自身有内网IP、外网IP、地域信息,这些就是我们所说的云服务器实例的元数据。

那元数据是怎么查询或者使用的呢?用户可以通过元数据服务接口,在运行的实例内查询实例的元数据。具体是在云服务器实例的接口上,通过元数据服务查询的请求来查询相应的元数据相关的数据。

image.png

在这些实例的属性中,从攻击者的角度来看,最关心的便是与实例绑定的角色。

角色是云厂商所提供访问管理中的一个功能模块,可以使用访问管理功能中可以新建一个角色,用这个角色来管理这些或者说进行授权、进行操纵这些云资源。

各个云厂商提供角色功能,可以细粒度化的控制配置。在为这个角色配置权限之后,可以将这个角色绑定在云服务器实例上,然后在云服务器实例中就可以用到这个角色,通过它的临时凭据,来操作这个云服务。

也就是图上的流程图,其实就是创建角色,配置权限以及绑定实例。同理,如果用户想使用这个元数据的角色信息,它可以简单的在自己的这台实例上,通过元数据服务接口查询即可。

image.png

那么一些市面上比较常见的云厂商,它的元数据服务接口地址到底是什么样子的?

aws地址:

http://169.254.169.254/latest/meta-data/

Google Cloud地址:

http://metadata/computeMetadata/v1/

Azure地址:

http://169.254.169.254/metadata/instance?api-version=2017-04-02

Oracle Cloud地址:

http://169.254.169.254/opc/v1/instance/

image.png

这个地址的学名叫做链路本地地址,链路本地地址又称连结本地位址,是计算机网络中一类特殊的地址,它仅供于在网段,或广播域中的主机相互通信使用;这类主机通常不需要外部互联网服务,仅有主机间相互通讯的需求。链路本地地址在IPv4链路本地地址定义在169.254.0.0/16这个地址块,因此大家看到所涉及的这些云厂商,地址都是链路本地地址。

image.png

为什么要选用这个链路本地地址作为元数据服务接口提供的地址?

它的特性有点如下,实例元数据服务使用链路本地地址提供服务;当实例向元数据服务发起请求时,该请求不会通过网络传输,也永远不会离开这一台计算机;基于这个原理,元数据服务理论上只能从实例内部访问。

但是从这个攻击事件上来看,其实数据是有可能被泄露出去的。具体怎么泄露的,一起来看一个历史上的经典案例。

image.png
image.png

大约在2019年的时候,美国的Capital One银行发生了一起相当严重的数据泄露事件,北美大约有1亿人受到了这次事件的影响,上亿条信用卡数据、十余万社保号码被泄露出来。

这个事件,不仅给这个银行的用户带来了沉重的打击,也给银行自身带来了相当严重的影响,银行的股价在收盘的时候下跌了5.9%,在两周之内下跌了15%。

攻击者发现,Capital One银行的web应用部署于AWS云服务器上。此外,攻击者发现Capital One应用程序中存在了一个SSRF漏洞。

如果在传统的攻防中,如果一个应用存在SSRF漏洞,虽然漏洞比较严重,但是也并不会产生如此严重的影响。这个就是传统漏洞与云上结合所带来的更深远的影响。

攻击者通过SSRF漏洞发起了内网请求,然后成功地访问到了这台云服务器实例上的元数据服务接口,并且它通过这个接口成功地读到了一个角色,并且通过这个角色拿到了这个角色的临时凭据。

这个角色就是Capital One银行在云服务器上部署了他的代码,它很有可能也租用了亚马逊云的对象存储服务,就是所谓的aws存储桶,然后他把用户数据存在了亚马逊云的存储桶中。

这就导致一个问题,攻击者拿到的这个角色,恰恰是Capital One银行的应用程序,用来调用他在亚马逊云上的对象存储的角色。因此,攻击者把这个历史凭据保存到了本地,并且成功的把存储桶中所有的用户数据复制下载到本地,造成了一个相当严重的影响。

image.png
image.png

元数据服务风险,它存在于两个方面,一个是平台侧、一个是用户侧。

image.png

针对于用户侧的攻击,攻击者通过目标部署在云服务器实例上的应用程序的漏洞。比如说SSRF、RCE、任意文件读取等漏洞。通过这些漏洞来访问服务器的元数据服务接口,并且获得相应的数据用以后续的攻击。

image.png

细化介绍一下常见的攻击者所采用的攻击流程。

步骤一:获取利用点。攻击者会使用一些常规的漏洞探测方式,比如漏洞扫描、手动测试这些方式,发现部署在云上应用中的脆弱点。

image.png

步骤二:攻击者发现了这个脆弱点之后,他将会尝试访问云上的元数据服务接口,如果一旦发现这个元数据服务接口是可以访问的,他将会尝试获取与实例绑定的角色名称。

我们这里以SSRF漏洞进行举例,看看攻击者是如何通过SSRF漏洞获取到与实例绑定的角色名称。

我们假设http://x.x.x.x/?url=http://169.254.169.254/latest/meta-data/iam/info 网站上它存在一个SSRF漏洞,并且有回显,它存在url参数,后面我们构造一个payload来访问这个元数据服务,并且通过这个地址获取角色名称。

image.png

步骤三:当获取角色名称之后,我们通过名称信息进一步的获取角色的临时凭据,攻击者可以继续通过SSRF漏洞来访问元数据服务接口,获取角色历史凭据,通过的payload跟上一个获得的角色名称很类似,但是这里是相当于我们把角色名称传入来获取此角色的历史凭据。如图所见,这个历史凭据,也可以成功的返回回来。

这里临时凭据,他有个特点,一般都会是TmpSecretld或者TmpSecretKey,而且他一般都跟着一个token,为什么大家的主凭据没有token而历史凭据有token?

因为主凭据相当于是拥有这个账号的所有权,等同于你的账号权限,但是临时凭据,他需要标识这条凭据的存活时间、权限策略,所以说它有一个token用来标识凭据的这些信息。

image.png

步骤四:在获取到角色的名字、角色的临时凭据了,还需要猜测一下,或者说来确定一下这个角色,他的权限策略是什么?也通过这个权限策略制定后续的攻击行为,我们怎么获得角色的权限策略?有两个比较常见的方式。

方式1:通过名称初步猜测角色用途。比如说一个业务,他应用到角色来访问存储桶,他很有可能为角色命名和存储桶相关的名字,比如说他用这个角色来操作云服务器,它可能会为这个角色命名一个跟云服务器比较关联的名字,方便后续的管理和使用。

方式2:通过“访问管理”API接口获取角色详情。但是有个前提,这个角色他的权限是可以操作访问管理的权限,才可以进行这一步的操作。

image.png

步骤五:在搞清楚角色用途后,可以进行凭据后的后利用,根据角色的权限不同,可以攻击对象存储服务、攻击云服务器实例、攻击访问管理等等。

接下来,举几个案例具体看一下。

image.png

第一个案例:窃取存储桶中的用户数据。在所有的云资源中,攻击者往往对目标的数据更加感兴趣,如果攻击者获取的临时凭据拥有云数据库服务或云存储服务等服务的操作权限,攻击者将会尝试窃取目标数据 。

具体可以怎么做?还是以亚马逊云举例子,AWS其实提供了相应的一些命令行工具,或者说一些可视化工具用来简化操作,攻击者就可以借用这些工具配置临时凭据,并且利用存储桶工具将存储桶的内容下载到本地。

Capital One银行的数据泄露案例,后续官方调查取证的时候,发现攻击者用的就是这个思路。

image.png

第二个案例:在云服务器实例中运行命令。借助通过元数据服务接口窃取到的凭据,借助AWS CLI所提供的命令行工具,攻击者可以在实例中执行反弹shell命令,由此进入实例。

参考上图,比如说在这个参数中配置好凭据,或者在参数中直接执行命令。

image.png

第三个案例:在云服务器实例中写入后门。这个步骤其实是在攻击阶段中的持久化阶段很有效果。云服务商一般会提供一个叫userdate的字段,或者说一个功能,其实这个功能是为了方便使用者在Windows实例也好,Linux实例也好,在它开机启动的时候加载用户的脚本,然后攻击者可以通过将userdata中写入后门,然后当实例下次重启的时候,你到后门就可以生效,或者说就进行持久化操作。

image.png

第四个案例:利用访问管理创建新用户。还是通过这个凭据,我们可以通过访问管理的功能,创建一个用户,命名为Bob,并且为Bob创建一个权限策略,比如说他拥有管理员权限,并且复制Bob上,但是这个攻击他会有一个前提,就是你获取的临时凭据,获取的角色,他必须有相应的访问管理的权限才可以操作。

image.png

介绍完这个用户侧的一些风险,我们接下来看产品测的一些风险,云产品中也会应用到元数据服务。因此,元数据安全挑战也会被带入到云产品中。

image.png

举一个比较有代表性的案例,Web应用托管服务,Web应用托管服务是一种常见的平台即服务产品,可以用来运行并管理web类、移动类和API类的应用程序。

image.png

还是以亚马逊云举例,Web应用托管服务可以让用户将Web应用直接上传到托管服务中,当代码上传到托管服务中,Web托管服务将用户代码存储到对象存储服务中。

所以说与之前的攻击流程相似,攻击者也是可以利用SSRF漏洞,访问到云服务器,通过云服务器获取到相应的元数据,并且通过拿到的对象存储的角色,以及对象存储的权限来访问存储桶。

image.png

我们再看平台测更多的安全风险,除了给大家介绍的aws下的安全风险,平台测他其实还有更危险的一个安全风险,如果这个平台测没有配置好,这个角色的权限将会导致一个什么问题?

比如说平台测的产品,它的功能特别强大,它可能会使用云服务器、对象存储、容器服务等一系列的云上服务,那他的角色的权限将会拥有如下的这些服务的权限,攻击者获取到这个角色之后,可以轻松的操作,或者说控制这些云资产,而且可以将攻击面直接扩散到其他产品中。

image.png
image.png

大家可以看到上面图片,这个是云鼎实验室推出的云安全攻防矩阵,在攻防矩阵的阶段中,可能会出现到刚才给大家介绍的实例元数据服务的利用情况,相当于一个技术攻击,纵观整个矩阵,可以发现云服务器的元数据服务,也是攻击者所常用的攻击切入点。

关于这个矩阵,在腾讯安全云鼎实验室官网:

https://cloudsec.tencent.com/#/home

可以在官网中可以看到更多关于矩阵的详情。

image.png

云原生安全攻防全景图,这个攻防全景图从五个大部分来描述了一下云原生的安全攻防的一个场景。主要是从容器基础设施、云原生应用安全、云原生安全工具、云厂商产品安全风险、容器编排平台的攻防技术来描述的。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
开发者
用D3制作矩形式树状结构图(Treemapping)并设计动画效果
矩形式树状结构图一般可以简称为Treemapping。Treemapping的各种制作方法网络上已经流行了许久,但是鲜有人在此之上有创作新意的,我在此基础上制作了一些动画效果供大家参考
1417 0
|
1月前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
1190 64
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
7月前
|
人工智能 运维 安全
从“裸奔”到“金钟罩”:AI身份凭据安全的进化之路
构建身份权限安全,护航企业数据合规
1838 37
|
5月前
|
存储 JSON 数据库
StarRocks 4.0:FlatJSON,让 JSON 查询像列存一样高效
StarRocks 4.0 已正式发布!这一版本带来了多项关键升级。本篇聚焦 JSON 查询性能的系统性提升——通过全新的 FlatJSON 列式存储与执行优化机制,StarRocks 4.0 让 JSON 在实时分析场景中具备接近原生列存的性能。
|
7月前
|
存储 监控 图形学
《深挖Unity开发痛点:从动画状态机崩溃到资源加载异常的实战排障指南》
本文结合开放世界冒险游戏开发实例,聚焦Unity开发中三类高频复杂Bug展开分析。在Switch平台,Addressables加载场景后NPC动画状态机失效,因资源加载后未建立强引用致控制器被回收,通过静态列表存储引用解决;动态植被材质在多平台闪烁或丢失,源于共享材质冲突与Shader变体加载问题,经独立材质实例化及预烘焙变体优化;角色跳跃穿斜坡,因物理检测帧间隔长、速度超阈值,调整检测模式与帧率后修复。文中还提炼“现象分类-环境隔离-工具监控-原理溯源”排查法,强调引擎底层认知与跨平台规范的重要性。
353 9
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
373 11
|
SQL 安全 Go
【Go语言专栏】Go语言中的安全审计与漏洞修复
【4月更文挑战第30天】本文介绍了Go语言中的安全审计和漏洞修复实践。安全审计包括代码审查、静态分析、运行时分析、渗透测试和专业服务,借助工具如`go vet`、`staticcheck`、`gosec`等。修复漏洞的方法涉及防止SQL注入、XSS攻击、CSRF、不安全反序列化等。遵循最小权限原则、输入验证等最佳实践,结合持续学习,可提升Go应用安全性。参考[Go安全工作组](https://github.com/golang/security)和[OWASP Top 10](https://owasp.org/www-project-top-ten/)深入学习。
624 0
|
云安全 弹性计算 安全
云上攻防:实例元数据、控制台接管
随着企业上云趋势增强,云安全成为焦点。云服务提供高效的数据存储和计算能力,但也带来数据保护和访问控制的新挑战。攻击者常利用云服务漏洞,威胁企业数据安全。本文探讨云上攻防关键领域,如元数据泄露、AKSK安全、控制台接管等,提出防御措施,帮助企业应对云安全风险。
971 2
云上攻防:实例元数据、控制台接管
|
iOS开发 索引 MacOS
mac文件搜索工具
【10月更文挑战第11天】
1700 2