
AWS IAM設定をスキャンして、グループに対するユーザーアクションを制限できない誤設定された拒否ポリシーを検出することでシャドウ管理者を特定し、権限昇格の検出と修復を可能にします。
Lightspinのセキュリティリサーチチームが発見した、グループのユーザーに影響を与えない誤って設定された拒否ポリシーに基づいて、AWS IAMのシャドウ管理者をスキャンします。
このツールは、以下のIAMオブジェクトにおける設定ミスを検出します。
Managed Policies
Users Inline Policies
Groups Inline Policies
Roles Inline Policies
グループに適用される拒否ポリシーのAWS IAM評価ロジックは、多くのセキュリティエンジニアが他の認証メカニズムで慣れている方法とは異なります。
グループリソースを持つポリシーに明示的な拒否があると仮定します。その場合、これはグループアクションにのみ影響し、ユーザーアクションには影響しません。そのため、たとえばActive Directoryと同じプロセスであると想定すると、組織は設定ミスや脆弱性にさらされることになります。
脆弱なJSONポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
この例では、ポリシーは、そのポリシーがアタッチされたユーザー、グループ、またはロールが managers というグループに対して行うすべてのIAMアクションを拒否する必要があります。
実際には、 iam:ChangePassword のような単純なIAMアクションは、拒否ポリシーが無効であるため機能します。
AWS IAMでは、ユーザーオブジェクトのアクションとグループオブジェクトのアクションが明確に分離されています。
以下のリストは、ツールがグループに影響を与える拒否ポリシーに対してスキャンするユーザーオブジェクトアクション(ワイルドカードを除く)です。
AWS_USER_ACTIONS = ["iam:CreateUser",
"iam:GetUser",
"iam:UpdateUser",
"iam:DeleteUser",
"iam:GetUserPolicy",
"iam:PutUserPolicy",
"iam:DeleteUserPolicy",
"iam:ListUserPolicies",
"iam:AttachUserPolicy",
"iam:DetachUserPolicy",
"iam:ListAttachedUserPolicies",
"iam:SimulatePrincipalPolicy",
"iam:GetContextKeysForPrincipalPolicy",
"iam:TagUser",
"iam:UpdateSSHPublicKey",
"iam:UntagUser",
"iam:GetSSHPublicKey",
"iam:ListUserTags",
"iam:DeleteSSHPublicKey",
"iam:GetLoginProfile",
"iam:GetAccessKeyLastUsed",
"iam:UpdateLoginProfile",
"iam:UploadSigningCertificate",
"iam:DeleteLoginProfile",
"iam:ListSigningCertificates",
"iam:CreateLoginProfile",
"iam:UpdateSigningCertificate",
"iam:EnableMFADevice",
"iam:DeleteSigningCertificate",
"iam:ResyncMFADevice",
"iam:ListServiceSpecificCredentials",
"iam:ListMFADevices",
"iam:ResetServiceSpecificCredential",
"iam:DeactivateMFADevice",
"iam:CreateServiceSpecificCredential",
"iam:ChangePassword",
"iam:UpdateServiceSpecificCredential",
"iam:CreateAccessKey",
"iam:DeleteServiceSpecificCredential",
"iam:ListAccessKeys",
"iam:PutUserPermissionsBoundary",
"iam:UpdateAccessKey",
"iam:DeleteUserPermissionsBoundary",
"iam:DeleteAccessKey",
"iam:ListGroupsForUser",
"iam:ListSSHPublicKeys",
"iam:UploadSSHPublicKey"]
上記のユーザーオブジェクトアクションの多くは、管理者のパスワードリセット、ルートアカウントのMFA無効化など、権限昇格やアカウント侵害に容易につながる可能性があります。
Red-ShadowはPython 3とBoto3で構築されています。
このツールには以下が必要です。
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
結果は、AWSにおいてこのような権限回避の脆弱性があるIAMオブジェクトを明らかにします。
出力例:
++ Starting Red-Shadow ++
++ AWS IAM Vulnerability Scanner
++ Red Shadow scans for shadow admins in AWS IAM based on misconfigured deny policies not affecting users in groups
Step 1: Searching for IAM Group misconfigurations in managed policies
Found potential misconfiguration at arn:aws:iam::123456789999:policy/ProtectManagers
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 2: Searching for IAM Group misconfigurations in Users inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 3: Searching for IAM Group misconfigurations in Groups inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 4: Searching for IAM Group misconfigurations in Roles inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Done
このコンソール出力から、ProtectManagers拒否ポリシーが無効であり、上記の権限昇格などの攻撃に対して脆弱であることがわかります。
IAM脆弱性を検証し、悪用を実行するには、次のフローを実行できます。
aws iam create-group --group-name managersaws iam attach-group-policy --group-name managers --policy-arn arn:aws:iam::aws:policy/AdministratorAccessaws iam create-user --user-name JohnAdminaws iam add-user-to-group --user-name JohnAdmin --group-name managers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
aws iam create-policy --policy-name ProtectManagers --policy-document file://policy.jsonaws iam create-group --group-name backend-devaws iam create-user --user-name BobAttackeraws iam add-user-to-group --user-name BobAttacker --group-name backend-devaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/ProtectManagers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "iam:CreateAccessKey",
"Resource": "*"
}
]
}
aws iam create-policy --policy-name devCreateAccessKeys --policy-document file://policy_iam.jsonaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/devCreateAccessKeysaws iam list-attached-group-policies --group backend-devaws iam create-access-key --user-name BobAttacker次のコマンドを使用して脆弱性を悪用しましょう。
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
権限昇格完了!
権限回避の脆弱性があるポリシーを見つけた場合、脆弱性を修復してポリシーを修正するには2つの方法があります。
オプション1: 無効なIAMアクションを回避するために、グループの代わりにリソースフィールドに関連するすべてのユーザーを定義し、すべてのグループアクションを拒否します。例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySpecificUserActions",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": [
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]"
]
},
{
"Sid": "DenyAllGroupActions",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
オプション2: ポリシーで iam:ResourceTag を使用した条件を使用します。例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
この研究はLightspinのセキュリティリサーチチームによって実施されました。 詳細については、[email protected]までお問い合わせください。
このリポジトリは Apache License 2.0 の下で利用可能です。