Skip to content

Latest commit

 

History

History
278 lines (166 loc) · 11.2 KB

permisos-de-iam.md

File metadata and controls

278 lines (166 loc) · 11.2 KB
description
Lab: IAM vulnerable

Permisos de IAM

La mayoría de los Administradores de AWS son conscientes de que los 4 permisos (IAM:CreateAccessKey IAM:CreateLoginProfile IAM:UpdateLoginProfile IAM:AddUserToGroup) son peligrosos de otorgar a cualquier usuario, ya que cada uno de ellos permite una forma de elevación de privilegios. En rara ocasiones, encontraremos políticas que permitan a un usuario con pocos privilegios cambiar explícitamente una contraseña para un usuario con muchos privilegios. Sin embargo, este tipo de configuraciones incorrectas ocurren, a menudo porque las políticas mal definidas tienen consecuencias inesperadas.

{% embed url="https://github.com/ramimac/aws-customer-security-incidents" %}

Un ejemplo sobre esta categoría es el uso de “listas negras” por medio de NotActions. Todos los permisos no incluidos en la lista negra están permitidos implícitamente.

El uso de una lista negra en lugar de un enfoque de lista blanca podría dejar la puerta abierta para que los usuarios aumenten sus privilegios.

A continuación se muestran ejemplos de elevación de privilegios con el uso de los permisos vulnerables de IAM

IAM:CreateAccessKey

Un atacante con el permiso iam:CreateAccessKey en otros usuarios puede crear un ID de clave de acceso y una clave de acceso secreta que pertenezca a otro usuario en el entorno de AWS.

{% hint style="danger" %} Solamente con el privilegio iam:CreateAccessKey es posible realizar la explotación {% endhint %}

Laboratorio para probar este tipo de escalamiento:

{% embed url="https://github.com/BishopFox/iam-vulnerable" %} Lab: IAM - Vulnerable | Escenario: privesc4 {% endembed %}

Configuración inicial

Punto de entrada: privesc4-CreateAccessKey-user, con la siguientes políticas:

Políticas del usuario "privesc4-CreateAccessKey-user"

Autenticar desde AWS CLI y configurar las llaves de acceso en terminal para realizar la explotación:

{% hint style="info" %} Nota: con el --profile <ProfileName> permite crear nuevos perfiles para trabajar con diferentes cuentas, para este laboratorio de usara el perfil privesc4 y lab1test {% endhint %}

Enumeración

Siempre listar el whoiam:

aws sts get-caller-identity --profile privesc4

Listado del rol:

aws iam list-attached-user-policies --user-name privesc4-CreateAccessKey-user

Listar las información de ARN de la política del usuario a auditar:

{% code overflow="wrap" %}

aws iam get-policy-version --policy-arn arn:aws:iam::num:policy/privesc4-CreateAccessKey --version-id v1

{% endcode %}

Explotación

Si se intenta añadir al usuario directamente al grupo de administradores no se podrá, generará un error

{% code overflow="wrap" %}

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile privesc4

{% endcode %}

Pero como el usuario privesc4-CreateAccessKey-user tiene la política de crear llaves de acceso de cualquier usuario ("Resource" : "*"), entonces se puede crear llaves para un usuario administrador:

{% code overflow="wrap" %}

aws iam create-access-key --user-name Administrator --profile privesc4

{% endcode %}

{% hint style="info" %} Es importante saber el nombre del usuario a generar la llave en el parámetro --user-name <Name>

Se podrían conocer los usuarios por medio de enumeración de IAM o por algun diccionario. {% endhint %}

Finalmente asumes el rol de administrador o el usuario comprometido:

Y utilizar el comando de iam add-user-to-group para añadir al usuario privesc4-CreateAccessKey-user al grupo de administradores con el perfil --profile hack-admin:

{% code overflow="wrap" %}

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile hack-admin

{% endcode %}

Siendo parte del grupo de administradores es game over.

IAM:CreateLoginProfile

Un atacante con el permiso iam:CreateLoginProfile en otros usuarios puede crear una contraseña para iniciar sesión en la consola de AWS en cualquier usuario que no tenga ya un perfil de inicio de sesión configurado.

{% embed url="https://github.com/BishopFox/iam-vulnerable#supported-privilege-escalation-paths" %} Lab: IAM - Vulnerable | Escenario: privesc5 {% endembed %}

Configuración Inicial

Usuario de entrada: privesc5-CreateLoginProfile-user con la siguiente política:

Configurar un perfil en AWS CLI

aws sts get-caller-identity --profile privesc5

Explotación

Como en el caso anterior, después de hacer enumeración y encontrar el usuario administrador o el usuario interesante a escalar y tomando en cuenta el permiso iam:CreateLoginProfile, se puede realizar el siguiente comando para generar una nueva contraseña:

{% code overflow="wrap" %}

aws iam create-login-profile --user-name <UserToHack> --password Password123! --no-password-reset-required --profile privesc5

{% endcode %}

{% hint style="warning" %} Si el usuario tiene doble factor de autenticación, este método de ataque no va a funcionar. {% endhint %}

{% hint style="danger" %} Con estos permisos, se puede cambiar la contraseña de cualquier usuario, generando una disrupción del servicio, se tiene que tener cuidado en auditorias. {% endhint %}

Finalmente sabiendo la contraseña y la cuenta, para saber el ID de la cuenta o la cuenta raíz solo se toma del valor del comando aws sts get-caller-identity en el campo "Account": "12 Dígitos":

{% hint style="danger" %} El ID (12 dígitos) de la cuenta raíz, es un valor sensible. {% endhint %}

Login por web con usuario comprometido

Con acceso al panel de administración web, es game over.

IAM:UpdateLoginPorfile

Como el anterior caso, este permiso como su nombre indica, permite cambiar la contraseña utilizada para iniciar sesión en la consola web de AWS, para cualquier usuario que ya tenga un perfil de inicio de sesión configurado.

{% embed url="https://github.com/BishopFox/iam-vulnerable#supported-privilege-escalation-paths" %} Lab: IAM - Vulnerable | Escenario: privesc6 {% endembed %}

Configuración Inicial

Usuario de entrada: privesc6-UpdateLoginProfile-user con la siguiente política:

Configurar Credenciales de acceso, ya sea creandolas desde la web como en los casos anteriores o desde un usuario administrador el siguiente comando:

{% code overflow="wrap" %}

aws sts assume-role --role-arn arn:aws:iam::651927172911:role/privesc6- UpdateLoginProfile-role --role-session-name privesc6

{% endcode %}

Luego copiar el Access Key y el SecretAccessKey en aws configure --profile privesc6

Explotación

Si se intenta agregar el usuario privesc6 directamente al grupo de administradores local, generar un error:

{% code overflow="wrap" %}

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc6-UpdateLoginProfile-user -- profile privesc6

{% endcode %}

Se tiene que hacer uso del permiso update-login-profile :

{% code overflow="wrap" %}

aws iam update-login-profile --user-name Spartan- Administrador --password Password321! --no-password- reset-required --profile privesc6

{% endcode %}

{% hint style="danger" %} Al realizar un cambio o actualización de la contraseña de cualquier usuario, puede generar una disrupción del servicio y generar una alerta. {% endhint %}

Finalmente ingresar por medio web como el anterior caso

IAM:AddUserToGroup

Un atacante con el permiso iam:AddUserToGroup puede utilizarlo para añadirse a un grupo IAM existente en la cuenta de AWS.

{% embed url="https://github.com/BishopFox/iam-vulnerable#supported-privilege-escalation-paths" %} Lab: IAM - Vulnerable | Escenario: privesc13 {% endembed %}

Configuración Inicial

Usuario del laboratorio: privesc13-AddUserToGroup-user

Permiso de añadir un usuario a cualquier grupo

{% hint style="info" %} Por sí solo, este permiso no es malo, se tiene que especificar a que grupo se puede añadir usuarios ("Resource": "arn:sts:somegroup") y no dejar el permiso demasiado abierto ("Resource": "*") {% endhint %}

Como en los caso anteriores, se tiene que crear credenciales de acceso y configurar con aws configure --profile privesc13

Explotación

La explotación de este caso es bastante sencilla, se busca enumerar los grupos existentes y proceder a añadirse a si mismo al grupo seleccionado, por ejemplo el grupo de administradores locales:

{% code overflow="wrap" %}

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc13-AddUserToGroup-user -- profile privesc13

{% endcode %}