Palo Alto Networks公司旗下网络安全研究部门Unit 42的研究人员近日发现了一类AWS API可被人滥用,从而泄漏任意帐户中的AWS身份及访问管理(IAM)用户和角色等信息。研究人员证实,可以以同样的方式滥用涉及16种不同AWS服务的22个API,并且该漏洞出现在AWS的所有三个分区上(aws、aws-us-gov或aws-cn)。有可能被攻击者滥用的AWS服务包括亚马逊简单存储服务(S3)、亚马逊密钥管理服务(KMS)和亚马逊简单队列服务(SQS)。不怀好意的人有可能获取帐户的花名册,了解组织的内部结构,并针对个人发动针对性攻击。Unit 42的研究人员在最近的一次红队演习中,利用该技术发现的配置不当的IAM角色,闯入了某一客户涉及成千上万工作负载的云帐户。
问题的根本原因在于,AWS后端会主动验证附加到亚马逊简单存储服务(S3)存储桶和客户管理的密钥等资源的所有基于资源的策略。基于资源的策略通常包括Principal(主体)字段,该字段指定允许访问该资源的身份(用户或角色)。如果策略包含不存在的身份,创建或更新该策略的API调用将失败,并显示出错消息。然而可以滥用这项便捷的功能,核查AWS帐户中是否存在身份。对手可以使用不同的主体重复调用这些API,以枚举目标帐户中的用户和角色。此外,目标帐户之所以观察不到枚举,是由于API日志和出错消息仅显示在操纵资源策略的攻击者帐户中。该技术具有“隐蔽”特性,因而很难检测和防止。攻击者可以在不受限制的时间内对随机性或目标AWS帐户执行侦察,不必担心被察觉到。
AWS基于资源的策略
AWS IAM使用多种类型的策略来管理用户、资源和应用程序之间的权限。基于资源的策略是一种附加到AWS服务内资源的策略。每种AWS服务可能有多个资源,而每个资源都可以附加不同的策略。比如说,S3服务可以创建多个存储桶资源,而SQS服务可以创建多个消息队列资源。截至本文发稿时,有26种AWS服务支持基于资源的策略,如表1所示。策略确定了主体可以对附加的资源执行的操作。主体可以是AWS用户、角色或服务。可以执行的操作则取决于服务的类型。
图1:基于资源的策略示意图
图2是附加到S3存储桶的示例性的基于资源的策略。允许两个主体访问存储桶,即帐户123456789012中的用户“Bob”和帐户98765431098中的IAM角色“qa-role”。主体可以对S3存储桶“awsexamplebucket”执行三种操作:GetObject、GetBucketLocation和ListBucket。请注意,主体不必与存储桶位于同一个帐户中,这就意味着策略还可以授予跨帐户访问资源的权限。
图2是策略的最简单形式。一种较复杂的策略可能含有多个语句和条件。为了避免人为错误,AWS会先验证策略中的每个字段,然后才可以将策略运用于资源。验证器确保指定的主体切实存在,而且指定的操作得到服务的支持。在图2中,由于“GetFiles”是未得到支持的操作,因此出现了出错消息。
图2. 示例性的S3存储桶策略(图左)和操作误指定后出现的出错消息(图右)
滥用基于资源的策略API
策略验证是AWS的一项功能,有助于促进用户体验。虽然大多数用户受益于该功能,但对手也可能发现该功能对于在另一个帐户中执行侦察很有用。由于政策验证器检查指定的主体是否存在,因此它让对手有办法逐渐了解目标帐户的花名册。正如我们所表明的那样,对手可能滥用支持基于资源策略的多种AWS服务中的策略验证器。
在基于资源的策略中定义主体时,用户要求AWS验证并授权主体,才能访问AWS帐户中的资源。如果我们提供无效的用户名或角色名称,身份验证将失败。实施安全验证过程的验证最佳实践之一是,出错消息中避免给出针对特定帐户的信息。
AWS策略验证器会在出错消息中无意中泄露针对特定帐户的信息。创建或更新资源策略时,AWS策略验证器会明确表明指定的主体是否存在。攻击者可以利用出错消息来核查目标帐户中是否存在用户或IAM角色。通过用单词表重复该过程,对手可以枚举并发现目标帐户中的现有身份。图3和图4显示了当我们在不同的AWS服务的资源策略中指定不存在的IAM角色时的出错消息。这些策略被拒绝,无法保存。还可以使用AWS API以编程方式执行该过程,因而使枚举具有扩展性。
该技术一个令人不安的特性是,目标或受害者完全观察不到该技术。更改资源策略时,AWS CloudTrail日志和出错消息仅显示在资源所有者或攻击者的帐户中。由于具有“隐蔽”特性,几乎不可能加以检测和防止。
Rhino Security Labs的博客率先介绍了一种类似的技术,他们使用IAM角色信任策略来检查是否存在跨帐户的IAM角色。Unit 42的研究人员确定并证实,可以利用涉及16种AWS服务的至少22个API大做文章,如附录表1所示。这些API的共同点是,它们都将资源策略作为输入,以及策略要有有效的“Principal”字段。
图3:主体不存在的资源策略。AWS SQS(图左)和AWS SNS(图右)
图4. 主体不存在的资源策略。AWS KMS(图左)和AWS Glue(图右)
结论
由于目标帐户中没有可观察到的日志,因此很难检测和防止采用这种技术的身份侦察。然而,良好的IAM安全措施仍可以有效地缓解这种类型的攻击带来的威胁。虽然无法防止攻击者枚举AWS帐户中的身份,但可以加大枚举的难度,而且您可以监测侦察之后所采取的可疑活动。为了缓解该问题,我们建议组织采用以下IAM安全最佳实践:
·删除不活跃的用户和角色,以减小攻击面。
·为用户名和角色名称添加随机字符串,让它们更难被猜中。
·使用身份提供者和联合身份来登录,这样就不会在AWS帐户中创建额外用户。
·记录并监测所有的身份验证活动。
·为每个用户和IAM角色启用双因子身份验证(2FA)。
附录表:
支持基于资源的策略的AWS服务。Unit 42的研究人员发现了涉及16种AWS服务的可能被滥用的22个API。
原标题:AWS 基于资源的策略 API 易泄漏信息:16种服务的22个API受影响