AWS Pentesting

支持 HackTricks

基本信息

在开始 pentesting 一个 AWS 环境之前,你需要了解一些关于 AWS 如何工作的基本知识,以帮助你理解需要做什么,如何发现错误配置以及如何利用它们。

组织层次结构、IAM 和其他基本概念在以下内容中解释:

AWS - Basic Information

学习实验室

模拟攻击的工具:

AWS Pentester/Red Team 方法论

为了审计一个 AWS 环境,了解以下内容非常重要:使用了哪些服务暴露了什么,谁对什么有访问权限,以及内部 AWS 服务和外部服务如何连接。

从 Red Team 的角度来看,攻破 AWS 环境的第一步是设法获取一些凭证。这里有一些获取凭证的想法:

  • github(或类似平台)上的泄漏 - OSINT

  • 社会工程

  • 密码重用(密码泄漏)

  • AWS 托管应用程序中的漏洞

  • 具有访问元数据端点的 Server Side Request Forgery

  • 本地文件读取

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

  • 第三方泄漏

  • 内部员工

  • Cognito 凭证

或者通过攻破暴露的未认证服务

AWS - Unauthenticated Enum & Access

或者如果你在进行审查,你可以直接请求这些角色的凭证

AWS - Permissions for a Pentest

在你设法获取凭证后,你需要知道这些凭证属于谁,以及他们有权访问什么,所以你需要进行一些基本的枚举:

基本枚举

SSRF

如果你在 AWS 内部的机器上发现了 SSRF,请查看此页面以获取技巧:

Whoami

你需要知道的第一件事是你是谁(在哪个账户中以及关于 AWS 环境的其他信息):

# Easiest way, but might be monitored?
aws sts get-caller-identity
aws iam get-user # This will get your own user

# If you have a Key ID
aws sts get-access-key-info --access-key-id=ASIA1234567890123456

# Get inside error message
aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa

# From metadata
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document

请注意,公司可能会使用canary tokens来识别令牌被盗用和使用的情况。建议在使用令牌之前检查它是否是canary token。 更多信息请查看此页面

Org Enumeration

AWS - Organizations Enum

IAM Enumeration

如果你有足够的权限,检查AWS账户内每个实体的权限将帮助你了解你和其他身份可以做什么以及如何提升权限

如果你没有足够的权限来枚举IAM,你可以暴力破解它们来找出它们。 查看如何进行枚举和暴力破解

AWS - IAM, Identity Center & SSO Enum

现在你有了一些关于你凭证的信息(如果你是红队,希望你没有被检测到)。是时候弄清楚环境中使用了哪些服务了。 在以下部分,你可以查看一些枚举常见服务的方法。

Services Enumeration, Post-Exploitation & Persistence

AWS有大量的服务,在以下页面中你会找到基本信息、枚举速查表、如何避免检测、获得持久性以及其他一些后期利用技巧:

AWS - Services

请注意,你不需要手动完成所有工作,下面的帖子中你可以找到一个关于自动化工具部分

此外,在这个阶段你可能会发现更多暴露给未认证用户的服务,你可能能够利用它们:

AWS - Unauthenticated Enum & Access

Privilege Escalation

如果你能至少检查你自己在不同资源上的权限,你可以检查是否能够获得更多权限。你应该至少关注以下权限:

AWS - Privilege Escalation

Publicly Exposed Services

在枚举AWS服务时,你可能会发现一些将元素暴露给互联网的服务(VM/Containers端口、数据库或队列服务、快照或buckets...)。 作为渗透测试员/红队成员,你应该始终检查是否能在这些服务中找到敏感信息/漏洞,因为它们可能为你提供进一步访问AWS账户的途径。

在本书中,你应该找到关于如何发现暴露的AWS服务以及如何检查它们的信息。关于如何在暴露的网络服务中找到漏洞,我建议你搜索特定的服务

Compromising the Organization

From the root/management account

当管理账户在组织中创建新账户时,会在新账户中创建一个新角色,默认名为**OrganizationAccountAccessRole,并赋予AdministratorAccess**策略,使管理账户可以访问新账户。

因此,为了以管理员身份访问子账户,你需要:

  • 攻破管理账户并找到子账户的ID角色的名称(默认情况下为OrganizationAccountAccessRole),允许管理账户以管理员身份访问。

  • 要找到子账户,请转到aws控制台中的组织部分或运行aws organizations list-accounts

  • 你无法直接找到角色的名称,因此检查所有自定义IAM策略并搜索任何允许**sts:AssumeRole**访问先前发现的子账户的策略。

  • 攻破管理账户中具有**sts:AssumeRole权限的主体**,以访问子账户中的角色(即使账户允许管理账户中的任何人进行冒充,作为外部账户,仍然需要特定的sts:AssumeRole权限)。

Automated Tools

Recon

  • aws-recon: 一个用Ruby编写的多线程AWS安全库存收集工具

# Install
gem install aws_recon

# Recon and get json
AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
  • cloudlist: Cloudlist 是一个多云工具,用于从云提供商获取资产(主机名、IP 地址)。

  • cloudmapper: CloudMapper 帮助你分析 Amazon Web Services (AWS) 环境。它现在包含更多功能,包括安全问题审计。

# Installation steps in github
# Create a config.json file with the aws info, like:
{
"accounts": [
{
"default": true,
"id": "<account id>",
"name": "dev"
}
],
"cidrs":
{
"2.2.2.2/28": {"name": "NY Office"}
}
}

# Enumerate
python3 cloudmapper.py collect --profile dev
## Number of resources discovered
python3 cloudmapper.py stats --accounts dev

# Create HTML report
## In the report you will find all the info already
python3 cloudmapper.py report --accounts dev

# Identify potential issues
python3 cloudmapper.py audit --accounts dev --json > audit.json
python3 cloudmapper.py audit --accounts dev --markdow > audit.md
python3 cloudmapper.py iam_report --accounts dev

# Identify admins
## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175
python3 cloudmapper.py find_admins --accounts dev

# Identify unused elements
python3 cloudmapper.py find_unused --accounts dev

# Identify publivly exposed resources
python3 cloudmapper.py public --accounts dev

python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
  • cartography: Cartography 是一个 Python 工具,它将基础设施资产及其之间的关系整合在一个由 Neo4j 数据库驱动的直观图形视图中。

# Install
pip install cartography
## At the time of this writting you need neo4j version 3.5.*

# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt  --neo4j-user neo4j
  • starbase: Starbase 收集来自服务和系统的资产和关系,包括云基础设施、SaaS 应用程序、安全控制等,并将其整合到由 Neo4j 数据库支持的直观图形视图中。

  • aws-inventory: (使用 python2) 这是一个尝试发现账户中所有 AWS 资源的工具。

  • aws_public_ips: 这是一个获取与 AWS 账户关联的所有公共 IP 地址(包括 IPv4/IPv6)的工具。

Privesc & Exploiting

# Install
## Feel free to use venvs
pip3 install pacu

# Use pacu CLI
pacu
> import_keys <profile_name> # import 1 profile from .aws/credentials
> import_keys --all # import all profiles
> list # list modules
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
  • PMapper: Principal Mapper (PMapper) 是一个脚本和库,用于识别 AWS 账户或 AWS 组织中 AWS Identity and Access Management (IAM) 配置的风险。它将账户中的不同 IAM Users 和 Roles 建模为有向图,从而能够检查 privilege escalation 以及攻击者可能采取的其他路径以获取 AWS 中资源或操作的访问权限。你可以在 https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing 中以 _edges.py 结尾的文件名中检查 permissions used to find privesc 路径。

# Install
pip install principalmapper

# Get data
pmapper --profile dev graph create
pmapper --profile dev graph display # Show basic info
# Generate graph
pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml)
pmapper --profile dev visualize --only-privesc # Only privesc permissions

# Generate analysis
pmapper --profile dev analysis
## Run queries
pmapper --profile dev query 'who can do iam:CreateUser'
pmapper --profile dev query 'preset privesc *' # Get privescs with admins

# Get organization hierarchy data
pmapper --profile dev orgs create
pmapper --profile dev orgs display
  • cloudsplaining: Cloudsplaining 是一个 AWS IAM 安全评估工具,可以识别最小权限违规并生成风险优先的 HTML 报告。 它将显示潜在的权限过高的客户、内联和 aws 策略以及哪些主体有权访问它们。(它不仅检查 privesc,还检查其他有趣的权限,推荐使用)。

# Install
pip install cloudsplaining

# Download IAM policies to check
## Only the ones attached with the versions used
cloudsplaining download --profile dev

# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
  • cloudjack: CloudJack 评估 AWS 账户是否存在由于 Route53 和 CloudFront 配置分离而导致的 子域名劫持漏洞

  • ccat: 列出 ECR 仓库 -> 拉取 ECR 仓库 -> 后门它 -> 推送带后门的镜像

  • Dufflebag: Dufflebag 是一个工具,用于 搜索 公共 Elastic Block Storage (EBS) 快照中的秘密**,这些秘密可能是意外留下的。

审计

  • cloudsploit: CloudSploit by Aqua 是一个开源项目,旨在检测 云基础设施账户中的安全风险,包括:Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、Oracle Cloud Infrastructure (OCI) 和 GitHub(它不会查找 ShadowAdmins)。

./index.js --csv=file.csv --console=table --config ./config.js

# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
  • Prowler: Prowler 是一个开源安全工具,用于执行 AWS 安全最佳实践评估、审计、事件响应、持续监控、加固和取证准备。

# Install python3, jq and git
# Install
pip install prowler
prowler -v

# Run
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
  • CloudFox: CloudFox 帮助您在不熟悉的云环境中获得态势感知。它是一个开源命令行工具,旨在帮助渗透测试人员和其他进攻性安全专业人员找到云基础设施中可利用的攻击路径。

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite 是一个开源的多云安全审计工具,可以对云环境进行安全态势评估。

# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help

# Get info
scout aws -p dev
  • cs-suite: Cloud Security Suite (使用 python2.7,看起来没有维护)

  • Zeus: Zeus 是一个强大的工具,用于 AWS EC2 / S3 / CloudTrail / CloudWatch / KMS 最佳加固实践(看起来没有维护)。它只检查系统内默认配置的凭证。

持续审计

  • cloud-custodian: Cloud Custodian 是一个用于管理公共云账户和资源的规则引擎。它允许用户定义策略以实现良好的云基础设施管理,既安全又成本优化。它将许多组织的临时脚本整合成一个轻量且灵活的工具,具有统一的指标和报告。

  • pacbot: Policy as Code Bot (PacBot) 是一个平台,用于持续合规监控、合规报告和云安全自动化。在 PacBot 中,安全和合规策略以代码形式实现。PacBot 发现的所有资源都会根据这些策略进行评估,以衡量策略符合性。PacBot 的自动修复框架提供了通过采取预定义操作自动响应策略违规的能力。

  • streamalert: StreamAlert 是一个无服务器的、实时数据分析框架,使您能够摄取、分析和警报来自任何环境的数据,使用您定义的数据源和警报逻辑。计算机安全团队使用 StreamAlert 每天扫描数TB的日志数据以进行事件检测和响应。

DEBUG: 捕获 AWS cli 请求

# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080

# Capture with burp nor verifying ssl
aws --no-verify-ssl ...

# Dowload brup cert and transform it to pem
curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer
openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem

# Indicate the ca cert to trust
export AWS_CA_BUNDLE=~/Downloads/certificate.pem

# Run aws cli normally trusting burp cert
aws ...

参考资料

支持 HackTricks

Last updated