AWS Pentesting
基本信息
在开始 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 环境的其他信息):
请注意,公司可能会使用canary tokens来识别令牌被盗用和使用的情况。建议在使用令牌之前检查它是否是canary token。 更多信息请查看此页面。
Org Enumeration
AWS - Organizations EnumIAM Enumeration
如果你有足够的权限,检查AWS账户内每个实体的权限将帮助你了解你和其他身份可以做什么以及如何提升权限。
如果你没有足够的权限来枚举IAM,你可以暴力破解它们来找出它们。 查看如何进行枚举和暴力破解:
AWS - IAM, Identity Center & SSO Enum现在你有了一些关于你凭证的信息(如果你是红队,希望你没有被检测到)。是时候弄清楚环境中使用了哪些服务了。 在以下部分,你可以查看一些枚举常见服务的方法。
Services Enumeration, Post-Exploitation & Persistence
AWS有大量的服务,在以下页面中你会找到基本信息、枚举速查表、如何避免检测、获得持久性以及其他一些后期利用技巧:
AWS - Services请注意,你不需要手动完成所有工作,下面的帖子中你可以找到一个关于自动化工具的部分。
此外,在这个阶段你可能会发现更多暴露给未认证用户的服务,你可能能够利用它们:
AWS - Unauthenticated Enum & AccessPrivilege Escalation
如果你能至少检查你自己在不同资源上的权限,你可以检查是否能够获得更多权限。你应该至少关注以下权限:
AWS - Privilege EscalationPublicly 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安全库存收集工具。
cloudlist: Cloudlist 是一个多云工具,用于从云提供商获取资产(主机名、IP 地址)。
cloudmapper: CloudMapper 帮助你分析 Amazon Web Services (AWS) 环境。它现在包含更多功能,包括安全问题审计。
cartography: Cartography 是一个 Python 工具,它将基础设施资产及其之间的关系整合在一个由 Neo4j 数据库驱动的直观图形视图中。
starbase: Starbase 收集来自服务和系统的资产和关系,包括云基础设施、SaaS 应用程序、安全控制等,并将其整合到由 Neo4j 数据库支持的直观图形视图中。
aws-inventory: (使用 python2) 这是一个尝试发现账户中所有 AWS 资源的工具。
aws_public_ips: 这是一个获取与 AWS 账户关联的所有公共 IP 地址(包括 IPv4/IPv6)的工具。
Privesc & Exploiting
SkyArk: 发现扫描的 AWS 环境中最有特权的用户,包括 AWS Shadow Admins。它使用 powershell。你可以在 https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1 中的
Check-PrivilegedPolicy
函数中找到特权策略的定义。pacu: Pacu 是一个开源的 AWS exploitation framework,设计用于对云环境进行进攻性安全测试。它可以枚举、发现配置错误并利用它们。你可以在 https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134 中的
user_escalation_methods
字典中找到特权权限的定义。注意,pacu 只检查你自己的 privescs 路径(而不是整个账户范围)。
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 路径。
cloudsplaining: Cloudsplaining 是一个 AWS IAM 安全评估工具,可以识别最小权限违规并生成风险优先的 HTML 报告。 它将显示潜在的权限过高的客户、内联和 aws 策略以及哪些主体有权访问它们。(它不仅检查 privesc,还检查其他有趣的权限,推荐使用)。
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)。
Prowler: Prowler 是一个开源安全工具,用于执行 AWS 安全最佳实践评估、审计、事件响应、持续监控、加固和取证准备。
CloudFox: CloudFox 帮助您在不熟悉的云环境中获得态势感知。它是一个开源命令行工具,旨在帮助渗透测试人员和其他进攻性安全专业人员找到云基础设施中可利用的攻击路径。
ScoutSuite: Scout Suite 是一个开源的多云安全审计工具,可以对云环境进行安全态势评估。
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 请求
参考资料
Last updated