8
月
在社区成长 8 月
LEVEL 50
100 XP
在AWS 中,小的配置疏忽可能会导致巨大的安全漏洞。本实验演示了攻击者如何利用看似无害的设置,通过滥用EC2 实例元数据服务(IMDS) 来访问敏感数据,最终获得更高的权限。这凸显了正确的IAM 角色管理和实例安全控制的重要性。
创建EC2 实例
创建IAM 角色
分配给EC2 实例并连接到Amazon Linux 的IAM 角色
安装Apache 服务器和PHP
第2: 部分枚举和利用使用Python 脚本枚举配置文件
枚举EC2 实例
SSRF漏洞利用
IAM 角色(ec2-admin) 权限提升
AnalysisRecommendations 结论
AWS IMDS: AWS IMDS 支持两个版本: IMDSv1(不需要令牌)和IMDSv2(需要令牌)。 AWS 建议仅使用提高安全性所需的令牌强制执行IMDSv2。
具有有限权限的IAM user: Igt_sanjeet
Instance: Igt_server
具有管理访问策略的IAM role: ec2_admin(分配给实例)
为用户提供用户名(例如lgt_sanjeet)并按
设置权限以将lgt_sanjeet 用户的权限配置为直接从权限选项附加策略。
在查看和创建页面上,验证用户详细信息和分配的权限,然后单击创建用户。
转到IAM 用户,然后从列表中单击用户lgt_sanjeet。
选择用户lgt_sanjeet 后,单击“安全凭证”下的“创建访问密钥”。
然后,选择“命令行界面(CLI)”作为用例
选中确认框,然后单击“下一步”继续创建访问密钥。
现在下载包含访问密钥ID 和秘密访问密钥的.csv 文件。确保这些凭据的安全。
在实例类型部分中,选择微型(符合免费套餐条件)。在密钥对(登录)部分中,单击创建新密钥对以生成用于连接到您的实例的密钥。
在创建密钥对窗口中,在密钥对名称字段中输入lgt-server。将密钥对类型保留为RSA,并将私钥文件格式保留为.pem。单击创建密钥对,然后下载并安全存储密钥文件以供将来的SSH 访问。
在网络设置部分中,选择创建安全组并选择允许SSH 流量,单击编辑
在安全组规则下,将类型设置为所有TCP,将源类型设置为任意位置(0.0.0.0/0)。
在高级详细信息部分中,域加入目录和IAM 实例配置文件应保持未选中状态,因为本实验不需要它们。
在元数据设置中,将元数据可访问设置为启用。在元数据版本下,选择V1 和V2(令牌可选)。对于允许元数据中的标签,选择启用。
目录
关于SSRF 和IMDSLab 设置部分1: IAM 实验室设置创建具有受限访问权限的IAM 用户创建EC2 实例
创建IAM 角色
分配给EC2 实例并连接到Amazon Linux 的IAM 角色
安装Apache 服务器和PHP
第2: 部分枚举和利用使用Python 脚本枚举配置文件
枚举EC2 实例
SSRF漏洞利用
IAM 角色(ec2-admin) 权限提升
AnalysisRecommendations 结论
关于 SSRF 和 IMDS
SSRF:
当应用程序在未经适当验证的情况下从用户提供的URL 获取数据时,就会发生服务器端请求伪造(SSRF)。攻击者可以提供恶意URL,欺骗服务器向内部或外部资源发出请求,从而可能泄露机密、数据库或文件。IMDS:
所有主要云提供商(AWS、Azure、GCP)都有自己的IMDS 实施,这是一个通用的云概念。想法是相同的,实例可以查询元数据,如果配置的话,还可以获取临时凭证。如果攻击者可以访问元数据服务(例如,通过SSRF),则风险也类似:他们有可能窃取凭据。三大云提供商均在链路本地IP 169.254.169.254 上运行其实例元数据服务(IMDS)。AWS IMDS: AWS IMDS 支持两个版本: IMDSv1(不需要令牌)和IMDSv2(需要令牌)。 AWS 建议仅使用提高安全性所需的令牌强制执行IMDSv2。
第 1 部分:IAM 实验室设置
本实验使用附加了管理员IAM 角色的Amazon Linux EC2 实例和具有有限访问权限的IAM 用户lgt_sanjeet 来模拟通过EC2 元数据服务进行权限升级。具有有限权限的IAM user: Igt_sanjeet
Instance: Igt_server
具有管理访问策略的IAM role: ec2_admin(分配给实例)
创建访问受限的 IAM 用户
在左侧导航窗格中的“访问管理”下,选择“用户”。在“用户”页面上,单击“创建用户”。
为用户提供用户名(例如lgt_sanjeet)并按
设置权限以将lgt_sanjeet 用户的权限配置为直接从权限选项附加策略。
在查看和创建页面上,验证用户详细信息和分配的权限,然后单击创建用户。
转到IAM 用户,然后从列表中单击用户lgt_sanjeet。
选择用户lgt_sanjeet 后,单击“安全凭证”下的“创建访问密钥”。
然后,选择“命令行界面(CLI)”作为用例
选中确认框,然后单击“下一步”继续创建访问密钥。
现在下载包含访问密钥ID 和秘密访问密钥的.csv 文件。确保这些凭据的安全。
创建 EC2 实例
在AWS 管理控制台中,导航到EC2 并选择实例。单击启动实例,然后在名称和标签部分中输入lgt_server。在应用程序和操作系统映像(Amazon 系统映像)部分中,选择Amazon Linux。
在实例类型部分中,选择微型(符合免费套餐条件)。在密钥对(登录)部分中,单击创建新密钥对以生成用于连接到您的实例的密钥。
在创建密钥对窗口中,在密钥对名称字段中输入lgt-server。将密钥对类型保留为RSA,并将私钥文件格式保留为.pem。单击创建密钥对,然后下载并安全存储密钥文件以供将来的SSH 访问。
在网络设置部分中,选择创建安全组并选择允许SSH 流量,单击编辑
在安全组规则下,将类型设置为所有TCP,将源类型设置为任意位置(0.0.0.0/0)。
安全警告:
允许来自任何地方的所有TCP 会将实例上的每个端口公开到Internet。这只能在受控实验室环境中用于测试。
在高级详细信息部分中,域加入目录和IAM 实例配置文件应保持未选中状态,因为本实验不需要它们。
在元数据设置中,将元数据可访问设置为启用。在元数据版本下,选择V1 和V2(令牌可选)。对于允许元数据中的标签,选择启用。