服务
关于
CloudProse博客
安全和IAM

为IAM用户改进改进的AWS Force MFA策略

乔什·冯·绍姆堡精选
乔什·冯·绍姆堡 | 2017年9月13日

2017年9月13日,星期三

更新: 自撰写本文以来,AWS已 更新了他们的政策 to align with our enhancements and also mitigate a vulnerability. Use the JSON from the AWS docs for your ForceMFA policy. In the updated policy, AWS has also moved the API call for iam:DeactivateMFADevice to a different statement ID, as the 预先vious policy would 所有 ow an attacker with a compromised API key to deactivate the MFA device without MFA authentication.

此外,还存在一个竞态条件漏洞,利用该漏洞,访问密钥被泄露的攻击者可以针对AWS API运行脚本,以连续尝试激活攻击者自己的MFA设备。当然,如果已经激活了MFA设备,这将不起作用,但是如果用户需要更换MFA设备并有意停用MFA,则攻击者可以通过连续运行的脚本获得MFA对用户帐户的访问(即,该脚本将在用户有机会之前为攻击者创建新的MFA设备。不能缓解这种攻击,但是您可以期待即将发布的博客文章,介绍如何适当地监视CloudTrail,以便可以识别这种折衷并可以旋转访问密钥!要详细了解这些漏洞,您可以查看Scott Piper的帖子 这里 .

你们中的许多人都要求这样做,因此我们对已经 已改善 强制MFA策略。 该策略现在包含适当的权限,以允许用户创建自己的访问密钥。当然,他们需要使用配置为执行此操作的MFA登录。这篇文章末尾的GitHub链接将指导您从我们的最新提交中获得更新的策略。

在Trek10,无论何时遇到新客户,我们执行的第一项安全检查之一就是确保所有用户都在利用 多因素身份验证(MFA). Customers often ask if there is a way to force 所有 users to use MFA. While there is no simple checkbox for this, there is an IAM policy that can be applied to 所有 users, which strips away 所有 IAM permissions (except those needed to configure MFA) until a user logs in with an MFA 码. 对于希望确保对AWS管理控制台和API的访问安全的客户,此策略是我们的主要建议之一。

幸运的是,您无需从头开始编写此策略!而且我们也都没有……AWS发布了 博客文章 去年夏天描述了如何实施此IAM政策。这已成为在整个组织中强制执行MFA的标准策略。将此策略应用于没有任何IAM权限的用户时效果很好,但是如果将其应用于已经具有AdministratorAccess或IAMFullAccess的用户,则存在较小的安全风险。作为AWS的MSP和咨询合作伙伴,我们的大多数新客户已经拥有许多具有完全AdministratorAccess功能的用户。鉴于此,我们决定扩展Force_MFA策略,以减轻将其应用于具有AdministratorAccess权限的用户时仍然存在的安全风险。

在此博客文章中,我将首先分解AWS Force通过使用每个语句ID(SID)的MFA策略,然后我将描述我们所做的更改,以涵盖将此策略应用于已经拥有完整IAM权限的用户的用例。记住,原力的目的MFA策略是剥夺用户的所有权限,除非他们使用MFA登录,但它仍应为用户提供足够的权限登录到控制台,以便能够配置MFA(仅针对其帐户)。

 { "Sid": "AllowAllUsersToListAccountsAndGetPasswordPolicyForReset", "Effect": "Allow", "Action": [ "iam:ListAccountAliases", "iam:GetAccountPasswordPolicy", "iam:ListUsers" ], "Resource": [ "*" ] }

使用此SID,用户可以在单击IAM服务时访问IAM权限以查看帐户别名,并可以在控制台中列出所有用户。如果没有ListUsers,则用户将无法单击其ID进行更改,例如重置密码或配置MFA。它还使用户可以访问帐户的密码策略,这是重置密码所必需的。

<pre><code>{“ Sid”:“ AllowIndividualUserToSeeTheirAccountInformation”,“ Effect”:“ Allow”,“ Action”:[“ iam:ChangePassword”,“ iam:CreateLoginProfile”,“ iam:DeleteLoginProfile”,“ iam:GetAccountPasswordPolicy”,“ iam:GetAccountSummary “,” iam:GetLoginProfile“,” iam:UpdateLoginProfile“],”资源“:[” arn:aws:iam :: ACCOUNT-ID-WITHOUT-HYPHENS:user / $ {aws:username}“]}</code></pre>

This SID gives the user a number of different permissions required to view 所有 of their account information and change their password. Notice that the resource is different than in the above SID. Here, we can limit the resource to just one specific user — i.e., user/${aws:username}, whereas in the 预先vious SID, the actions defined must apply across the account — i.e., ”*“.

$ {aws:username}是所谓的策略变量。评估IAM策略时,已认证用户的IAM ID会替换策略变量。

<pre><code>{“ Sid”:“ AllowIndividualUserToListTheirMFA”,“ Effect”:“ Allow”,“ Action”:[“ iam:ListVirtualMFADevices”,“ iam:ListMFADevices”],“ Resource”:[“ arn:aws:iam :: ACCOUNT- ID-WITHOUT-HYPHENS:mfa / *“,” arn:aws:iam :: ACCOUNT-ID-WITHOUT-HYPHENS:user / $ {aws:username}“]}</code></pre>

该SID为用户提供了查看其MFA设备的适当权限。您可以将其视为经过身份验证的用户在MFA上的只读访问权限。

<pre><code>{“ Sid”:“ AllowIndividualUserToManageThierMFA”,“ Effect”:“ Allow”,“ Action”:[“ iam:CreateVirtualMFADevice”,“ iam:DeactivateMFADevice”,“ iam:DeleteVirtualMFADevice”,“ iam:EnableMFADevice”,“ iam:ResyncMFADevice “],”资源“:[” arn:aws:iam :: ACCOUNT-ID-WITHOUT-HYPHENS:mfa / $ {aws:username}“,” arn:aws:iam :: ACCOUNT-ID-WITHOUT-HYPHENS: user / $ {aws:username}“]}</code></pre>

该SID允许用户实际配置其(和仅其)MFA设备。这是对经过身份验证的用户的MFA配置的写权限。

<pre><code>{“ Sid”:“ DoNotAllowAnythingOtherThanAboveUnlessMFAd”,“ Effect”:“ Deny”,“ NotAction”:“ iam:*”,“ Resource”:“ *”,“ Condition”:{“ Null”:[[aws:MultiFactorAuthAge“ :“ true”]}}</code></pre>

In this SID, we thought it would be best to make an improvement based on our particular use case. The above SID uses the NotAction element to deny 所有 possible API actions other than the the one listed (“iam:*”). There is also a condition to this SID. The condition says that the SID should only be in effect if aws:MultiFactorAuthAge = true is null — i.e., only evaluate the SID if the user has not configured MFA. (Note that the aws:MultiFactorAuthAge key is not 预先sent if MFA is not enabled; hence, the Null portion of the condition.)

如果将策略应用于没有权限执行IAM操作的用户,则此SID可以很好地工作。作为咨询和MSP合作伙伴,当我们支持新客户时,我们通常将此策略应用于已经附加了完全AdministratorAccess权限的用户ID。这意味着拒绝“ NotAction:”“ iam:*”不够严格,因为用户随后将具有从AdministratorAccess策略中应用的所有iam:*权限。

总之,如果将此策略应用于具有管理员权限的用户,则如果他们不想这样做,则实际上不会强迫该用户配置MFA。用户具有IAM权限,可以简单地从其ID中删除Force_MFA策略,而无需配置MFA。用户也可以只创建一个新的完全管理员用户,而无需配置MFA。为了减轻这种风险,我们决定用下面的两个SID替换最后一个SID,这会真正删除所有权限(无论用户是否已经拥有完整的管理员),直到配置了MFA。

<pre><code>{“ Sid”:“ DenyEverythingExceptForBelowUnlessMFAd”,“ Effect”:“ Deny”,“ NotAction”:[“ iam:ListVirtualMFADevices”,“ iam:ListMFADevices”,“ iam:ListUsers”,“ iam:ListAccountAliases”,“ iam:CreateVirtualMFADevice ,“ iam:DeactivateMFADevice”,“ iam:DeleteVirtualMFADevice”,“ iam:EnableMFADevice”,“ iam:ResyncMFADevice”,“ iam:ChangePassword”,“ iam:CreateLoginProfile”,“ iam:DeleteLoginProfile”,“ iam:GetAccountPasswordPolicy”, “ iam:GetAccountSummary”,“ iam:GetLoginProfile”,“ iam:UpdateLoginProfile”],“资源”:“ *”,“条件”:{“空”:[“ aws:MultiFactorAuthAge”:“ true”]}}</code></pre>

该SID与它要替换的原始SID非常相似,除了我们将iam:*操作分解为仅所需的特定操作。这意味着所有其他IAM操作都将被拒绝。

 { "Sid": "DenyIamAccessToOtherAccountsUnlessMFAd", "Effect": "Deny", "Action": [ "iam:CreateVirtualMFADevice", "iam:DeactivateMFADevice", "iam:DeleteVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:ChangePassword", "iam:CreateLoginProfile", "iam:DeleteLoginProfile", "iam:GetAccountSummary", "iam:GetLoginProfile", "iam:UpdateLoginProfile" ], "NotResource": [ "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:mfa/${aws:username}", "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}" ] } 

此SID将所有特定于用户的操作限制为仅由使用NotResource进行身份验证的用户所允许。 NotResource元素意味着SID将应用于除已定义的资源之外的所有资源。在这种情况下,是经过身份验证的用户。 SID明确拒绝可能从AdministratorAccess策略授予的任何操作。请记住,明确拒绝将始终覆盖所有允许。请注意,有些人可能认为最后一个SID确实没有必要,因为一旦管理员用户启用了MFA,他们就可以访问这些操作。如果攻击者获得了对该帐户的访问权限,则攻击者当然可以将MFA配置为获得对这些操作的访问权限。我认为,攻击者可能没有意识到要获得完整的管理员访问权限就需要MFA,因此此SID中仍然存在价值,因此攻击者无法登录并开始对IAM帐户执行这些破坏性操作(例如删除访问密钥)。

有关AWS安全性的问题/意见?欢迎随时与我们联系 [email protected].

作者
乔什·冯·绍姆堡精选
乔什·冯·绍姆堡