如何禁用 AWS EC2 元数据?

了解EC2元数据及其安全考量

本文将深入探讨EC2元数据,阐述其重要性,并介绍如何禁用元数据以增强安全防护,特别是防范服务器端请求伪造(SSRF)等攻击。

亚马逊网络服务(AWS)提供的Amazon Elastic Compute Cloud (Amazon EC2) 服务,为用户提供了可扩展的计算资源。 借助Amazon EC2,您可以更高效地开发和部署应用程序,无需进行大量的硬件前期投入。

您可以根据实际需求,灵活地启动所需数量的虚拟服务器。 通过Amazon EC2,用户可以自行设置网络和安全配置,并掌控存储资源。

实例元数据指的是关于正在运行的实例的各种可自定义或管理的信息,包括主机名、事件和安全组等。此外,通过实例元数据,用户还可以访问在实例启动时指定的用户数据。

您可以在配置实例时加入一个简短的脚本或者指定相关参数。利用用户数据,您可以创建通用的AMI,并更改启动时的配置参数。

您可以使用实例元数据选项,对新实例或现有实例进行如下设置:

  • 强制通过IMDSv2发送实例元数据请求。
  • 设置PUT响应的跳数限制。
  • 锁定实例元数据访问。

访问活动EC2实例元数据的方式有两种:IMDSv1和IMDSv2。

实例元数据服务被称为IMDS。这两种方法在实现上有所差异。 IMDSv1采用请求/响应模式,而IMDSv2则基于会话模式。

AWS强烈建议使用IMDSv2,因为它是一种更安全的方法。 默认情况下,AWS开发工具包使用IMDSv2进行调用,您还可以通过IAM策略中的IAM条件键,要求新创建的EC2实例启用IMDSv2。

您可以使用以下IPv4或IPv6 URI查看正在运行的实例中所有类型的实例元数据:

IPv4:

curl http://169.254.169.254/latest/meta-data/

IPv6:

curl http://[fd00:ec2::254]/latest/meta-data/

这些IP地址是链路本地地址,仅在实例内部有效。

访问实例元数据,只能使用169.254.169.254的链路本地地址。 通过URI对元数据的请求是免费的,AWS不会收取任何额外费用。

为何需要禁用元数据

在AWS环境中,SSRF攻击较为常见且广为人知。网络安全公司Mandiant曾发现攻击者利用漏洞扫描工具,自动从公开的在线应用程序中窃取IAM凭证。

对所有EC2实例强制启用IMDSv2,可以显著提升安全性,降低此类风险。 IMDSv2可以显著降低攻击者通过SSRF窃取IAM凭证的可能性。

利用服务器端请求伪造(SSRF)获取对EC2元数据服务的访问权限,是AWS中最常被讲解的漏洞利用技术之一。

大多数EC2实例都可以通过169.254.169.254访问元数据服务。这里包含有关实例的各种有用信息,例如IP地址、安全组名称等。

如果EC2实例附加了IAM角色,元数据服务还会包含用于认证的IAM凭证。 根据使用的IMDS版本以及SSRF攻击的功能,这些凭证可能被窃取。

值得注意的是,拥有EC2实例shell访问权限的攻击者也能够获取这些凭证。

举例来说,假设一个Web服务器在EC2实例的80端口上运行。该Web服务器存在一个简单的SSRF漏洞,允许向任意地址发送GET请求。攻击者可以利用此漏洞向http://169.254.169.254发送请求。

如何禁用元数据

通过禁用实例元数据服务的HTTP端点,无论使用哪个版本的实例元数据服务,都可以阻止对实例元数据的访问。

您可以通过重新启用HTTP端点来随时撤销此操作。 使用modify-instance-metadata-options CLI命令,并将http-endpoint参数设置为disabled,即可禁用实例的元数据。

要禁用元数据,请执行以下命令:

aws ec2 modify-instance-metadata-options --instance-id i-0558ea153450674 --http-endpoint disabled

禁用元数据

如您所见,禁用元数据后,如果尝试访问元数据,会收到“FORBIDDEN”消息。

如果要重新启用元数据,请执行以下命令:

aws ec2 modify-instance-metadata-options --instance-id i-0558ea153450674 --http-endpoint enabled

重新启用元数据

结论

元数据可用于从海量数据存储中提取信息。 但是,它也可能被滥用,在未经知情或同意的情况下泄露个人位置或身份信息。由于它会记录您的每次更改,包括删除和评论,您需要注意其中可能包含您不希望他人看到的信息。 因此,删除元数据对于维护您的在线隐私和匿名性至关重要。

您还可以探索一些有助于您学习AWS的关键术语。