1. 应该注意什么
首先,识别攻击向量或错误配置的最简单方法是执行完整枚举。这包括所有资源、权限和配置。
然而,并非所有事情都值得同样关注。应该更加关注可以从中窃取访问凭证的服务或可能导致特权升级的 IAM 资源。
此外,你必须知道你的目标。如果您正在执行云安全配置审查,那么您应该关注可以改进的任何内容,例如静态或传输中的加密、正确的日志记录实践等。然而,如果您正在进行渗透测试/红队,则前面提到的方面将不感兴趣,重点应该放在实际利用上。
2.前提条件
执行发现和枚举的理想方法是对目标帐户中的所有资源进行只读访问。
为此,有两种选择:
- 客户端提供了一个具有全局只读权限的角色,我们将从我们的帐户中承担该角色
- 客户端提供对目标帐户中具有全局只读权限的用户的访问权限
从这些选项中,对双方来说更简单的一种是基于角色的方法。对于第二个选项,我们需要接收一组访问密钥,以便从 AWS CLI 和自动化工具执行检查。
还有一种情况是,客户想要模拟内部威胁并为我们提供与另一个帐户相同级别的访问权限,在这种情况下,我们可能同时拥有读取和写入权限。
3 手动发现和枚举
3.1枚举一切
一个好的方法,尤其是当您还想提高您的 AWS 知识时,是使用 AWS CLI 从字面上枚举所有内容。
你怎么能做到这一点?好吧,AWS CLI 命令具有以下结构:
aws [options] <command> <subcommand> [parameters]
# For example:
aws --region eu-central-1 ec2 describe-instances --instance-ids $instance_id
每个命令和子命令都有很好的文档,可以help
在命令末尾附加访问。
# get general help, list global parameters and list services
aws help
# get subcommands available to a certain service
aws ec2 help
# get details about parameters available,
# examples and more for a certain subcommand
aws ec2 describe-instance help
因此,如果您是 AWS 新手并且不知道从哪里开始,只需键入aws help
并查看可用服务列表。
AWS CLI 的服务列表
接下来,选择一项服务或一次只取一项服务并开始枚举。每个指向枚举子命令的服务都有 3 个关键字可用:describe、list 和 get。例外是 s3 服务,它使用 ls 作为枚举的子命令。
尽管如此,只需选择一项服务并点击aws service help
. 现在,查找包含“describe”、“list”和“get”的子命令。让我们用 Lambda 函数做一个例子。
Lambda 枚举命令
在上面的屏幕截图中,我们获得了可用于枚举 Lambda 服务的命令列表。请注意,某些子命令需要已经收集的信息才能进行枚举。例如,通过运行,list-functions
我们将获得 lambda 函数列表。基于此信息,我们可以使用其他命令(如get-policy
.
简化该过程的一个技巧是直接运行子命令。如果您缺少参数,AWS CLI 将返回错误并指定您应该提供哪些强制参数。
子命令的强制参数
此过程非常耗时,但有助于您更好地了解 AWS 必须提供什么、您应该列举什么以及您可以在下一次参与中优先考虑哪些常见服务。
最后要记住的是,某些 AWS 资源依赖于区域,这意味着如果您在 eu-central-1 上配置了 AWS CLI,并且该资源是在 us-east-1 中创建的,那么您将无法识别它没有提及正确的区域。
在本文的第二部分,我们将根据服务的重要性和错误配置可能带来的风险,提供最有用的枚举命令列表。
3.2 CIS基准
您可以使用 CIS 基准测试一些最常见和最感兴趣的服务,以了解目标正在使用什么。
尽管如果您对 AWS 的经验有限,这些资源更适合执行云配置审查,但这将帮助您入门。该基准对学习特别有用,因为它详细说明了风险,但也提供了补救解决方案。
参考:
- CIS Amazon Web Services Foundations Benchmark v1.4.0
- CIS AWS 最终用户计算服务基准 v1.0.0
- CIS Amazon Web Services 三层 Web 架构 Benchmark v1.0.0
3.3 AWS 资源组和标签编辑器
目前,AWS 没有用于查看所有使用的资源和服务的中央仪表板。但是,如果您有权访问 Web 控制台,则可以使用服务 AWS 资源组和标签编辑器来枚举账户中的所有资源。下一个屏幕截图说明了这一点:
使用标签编辑器进行枚举
优点是:
- 您可以一次搜索所有区域
- 您可以一次搜索所有服务
- 您将获得一个包含所有已识别资源的可导出列表
但缺点是:
- 搜索结果将在一次搜索中识别最多 500 个项目
- 你会得到很多不感兴趣的结果
为了克服这些缺点,您应该调整资源类型,以便您只获得感兴趣的资源并且保持低于 500 个结果的限制。一个不错的功能是 CSV 导出,它可以帮助您更有效地处理和分析结果。
4. 工具
有多种工具可用于枚举,每种工具都适用于特定场景。我将向您介绍 3 种让我的生活更轻松的工具,以及一些我相信您会喜欢将它们添加为书签的提及。
4.1 ScoutSuite
网址:https ://github.com/nccgroup/ScoutSuite
这是我最喜欢的一个,它还支持 Azure 和 GCP。这些工具列举了最重要的资源,例如 IAM、EC2、Lambda 函数、EKS、Secrets、S3 等。
除此之外,它还会在网页上显示结果,从而可以轻松浏览已识别的资源并检查其配置。
更好的是,它标记了某些错误配置并将它们与 CIS 基准相关联。当您必须查看具有大量资源的多个 AWS 账户或服务时,该工具特别有用。
4.2 pacu
网址:https ://github.com/RhinoSecurityLabs/pacu
这是一个类似于 Metasploit 的开发框架。它具有多个用于枚举的模块,但是,使该工具与众不同的是,一旦您可以访问云环境,就可以利用它。
它有一些很酷的模块,例如后门 EC2 实例、检查权限提升向量等等。
4.3 iam_enumeration
网址:https ://github.com/andresriancho/enumerate-iam
此脚本可用于确定您拥有哪些权限。假设您设法泄露了一组访问凭据,现在您正试图确定与它们关联的权限。该工具正是这样做的。但是,它不会尝试编写操作,这意味着它不会发现所有权限。
Pacu 也有一个 IAM 枚举模块,但比这个脚本更受限制。
4.4 Rhino Security privilege escalation scripts
网址:https://github.com/RhinoSecurityLabs/AWS-IAM-Privilege-Escalation ,https ://github.com/RhinoSecurityLabs/Security-Research/blob/master/tools/aws-pentest-tools/aws_escalate.py
我喜欢 Rhino Security(Pacu 的作者)所做的研究。请务必看他们的博客,了解有关云安全的一些优质研究。他们有两篇关于 AWS 权限提升向量的文章,其中解释并举例说明了 20 多个权限提升向量。
更重要的是,他们创建了一个脚本,该脚本将检查是否有可能在您的权限上下文中执行任何已知向量。
4.5 PMapper
网址:https ://github.com/nccgroup/PMapper
这是用于分析 IAM 资源(角色、用户、权限等)的工具。好处是它可以生成一个可以分析的图表,以便查看谁可以承担什么角色,什么策略附加到什么服务等等。
5. 手动与自动
自动:
- 快速地
- 主要基于“一个命令”检查
- 当范围很大时很有用
- 可能会提供误报
- 不包括跨账户分析
手动:
- 需要更多时间
- 识别复杂的错误配置和攻击向量
- 识别逻辑问题
- 识别可能带来安全风险的弱点
- 适合跨账户分析
6. 最后的想法
我们了解了在执行云配置审查时有哪些方法,无论您是在进行手动审查、使用工具还是两者兼而有之。为获得最佳结果,建议将手动配置审查和自动化枚举相结合。使用工具来捕捉一些容易实现的成果,感受环境,然后手动完成其余的工作。
原文链接:https://securitycafe.ro/2022/11/01/aws-enumeration-part-1/