
Scannt AWS IAM-Konfigurationen auf Shadow-Administratoren, indem es falsch konfigurierte Deny-Richtlinien erkennt, die Aktionen von Benutzern auf Gruppen nicht einschränken, und so die Erkennung und Behebung von Privilegieneskalation ermöglicht.
Scannen Sie Ihre AWS IAM-Konfiguration auf Schattenadministratoren in AWS IAM, basierend auf falsch konfigurierten Deny-Richtlinien, die Benutzer in Gruppen nicht betreffen, entdeckt vom Lightspin Security Research Team.
Das Tool erkennt die Fehlkonfigurationen in den folgenden IAM-Objekten:
Managed Policies
Users Inline Policies
Groups Inline Policies
Roles Inline Policies
Die AWS IAM-Auswertungslogik für Deny-Richtlinien, die auf Gruppen angewendet werden, funktioniert nicht so, wie die meisten Sicherheitsingenieure es von anderen Autorisierungsmechanismen gewohnt sind.
Angenommen, eine Richtlinie mit einer Gruppenressource hat eine explizite Deny. In diesem Fall betrifft dies nur Gruppenaktionen und nicht Benutzeraktionen, was Organisationen für Fehlkonfigurationen und Schwachstellen öffnet, wenn sie annehmen, der Prozess sei derselbe wie z.B. bei Active Directory.
Beispiel für eine angreifbare JSON-Richtlinie:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
In diesem Beispiel soll die Richtlinie alle IAM-Aktionen verweigern, die von Benutzern, Gruppen oder Rollen, an die diese Richtlinie angehängt ist, gegenüber der Gruppe namens managers durchgeführt werden.
Tatsache ist, dass eine einfache IAM-Aktion wie iam:ChangePassword funktionieren würde, da die Deny-Richtlinie unwirksam ist.
Link zum vollständigen Sicherheitsforschungsblog
AWS IAM unterscheidet klar zwischen Benutzerobjektaktionen und Gruppenobjektaktionen.
Die folgende Liste enthält die Benutzerobjektaktionen, die das Tool über Deny-Richtlinien scannt, die Gruppen betreffen (zusätzlich zu Wildcard):
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"]
Viele der oben genannten Benutzerobjektaktionen können leicht zu einer Privilegienausweitung oder zur Kompromittierung des Kontos führen, z.B. durch Zurücksetzen des Admin-Passworts, Deaktivieren der Root-Konto-MFA usw.
Red-Shadow ist mit Python 3 und Boto3 erstellt.
Das Tool benötigt:
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
Die Ergebnisse decken jedes IAM-Objekt auf, das in AWS anfällig für solche Autorisierungsumgehungen ist.
Beispiel für die Ausgabe der Ergebnisse:
++ 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
In dieser Konsolenausgabe sehen wir, dass unsere ProtectManagers-Deny-Richtlinie unwirksam und anfällig für Angriffe wie die oben genannte Privilegienausweitung ist.
Um die IAM-Sicherheitslücke zu validieren und die Ausnutzung durchzuführen, führen Sie den folgenden Ablauf aus:
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 BobAttackerNutzen wir die Schwachstelle aus mit:
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
Privilegienausweitung abgeschlossen!
Sobald Sie die Richtlinien gefunden haben, die anfällig für die Autorisierungsumgehung sind, gibt es zwei mögliche Wege, die Schwachstelle zu beheben und die Richtlinie zu korrigieren:
OPTION 1: Definieren Sie alle relevanten Benutzer im Ressourcenfeld anstelle von Gruppen, um unwirksame IAM-Aktionen zu vermeiden, und verweigern Sie alle Gruppenaktionen, wie im folgenden Beispiel:
{
"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"
}
]
}
OPTION 2: Verwenden Sie eine Bedingung in der Richtlinie mit iam:ResourceTag wie im folgenden Beispiel:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
Diese Forschung wurde vom Lightspin Security Research Team durchgeführt. Für weitere Informationen kontaktieren Sie uns unter [email protected].
Dieses Repository ist verfügbar unter der Apache License 2.0.