AWS - KMS Enum

Support HackTricks

KMS - Servicio de Gestión de Claves

AWS Key Management Service (AWS KMS) se presenta como un servicio gestionado, simplificando el proceso para que los usuarios crean y gestionen claves maestras de cliente (CMKs). Estas CMKs son fundamentales en la encriptación de datos de usuario. Una característica notable de AWS KMS es que las CMKs están predominantemente aseguradas por módulos de seguridad de hardware (HSMs), mejorando la protección de las claves de encriptación.

KMS utiliza criptografía simétrica. Esto se utiliza para encriptar información en reposo (por ejemplo, dentro de un S3). Si necesitas encriptar información en tránsito, debes usar algo como TLS.

KMS es un servicio específico de región.

Los administradores de Amazon no tienen acceso a tus claves. No pueden recuperar tus claves y no te ayudan con la encriptación de tus claves. AWS simplemente administra el sistema operativo y la aplicación subyacente; depende de nosotros administrar nuestras claves de encriptación y cómo se utilizan esas claves.

Claves Maestras de Cliente (CMK): Pueden encriptar datos de hasta 4KB de tamaño. Se utilizan típicamente para crear, encriptar y desencriptar las DEKs (Claves de Encriptación de Datos). Luego, las DEKs se utilizan para encriptar los datos.

Una clave maestra de cliente (CMK) es una representación lógica de una clave maestra en AWS KMS. Además de los identificadores de la clave maestra y otros metadatos, incluyendo su fecha de creación, descripción y estado de la clave, una CMK contiene el material de clave que se utiliza para encriptar y desencriptar datos. Cuando creas una CMK, por defecto, AWS KMS genera el material de clave para esa CMK. Sin embargo, puedes optar por crear una CMK sin material de clave y luego importar tu propio material de clave en esa CMK.

Hay 2 tipos de claves maestras:

  • CMKs gestionadas por AWS: Utilizadas por otros servicios para encriptar datos. Se utilizan por el servicio que las creó en una región. Se crean la primera vez que implementas la encriptación en ese servicio. Rotan cada 3 años y no es posible cambiarlas.

  • CMKs gestionadas por el cliente: Flexibilidad, rotación, acceso configurable y política de clave. Habilitar y deshabilitar claves.

Encriptación de Sobre en el contexto del Servicio de Gestión de Claves (KMS): Sistema de jerarquía de dos niveles para encriptar datos con la clave de datos y luego encriptar la clave de datos con la clave maestra.

Políticas de Clave

Estas definen quién puede usar y acceder a una clave en KMS.

Por defecto:

  • Da al cuenta de AWS que posee la clave KMS acceso total a la clave KMS.

A diferencia de otras políticas de recursos de AWS, una política de clave KMS no otorga automáticamente permiso a la cuenta o a cualquiera de sus usuarios. Para otorgar permiso a los administradores de la cuenta, la política de clave debe incluir una declaración explícita que proporcione este permiso, como esta.

  • Sin permitir la cuenta("AWS": "arn:aws:iam::111122223333:root") los permisos de IAM no funcionarán.

  • Permite que la cuenta use políticas de IAM para permitir el acceso a la clave KMS, además de la política de clave.

Sin este permiso, las políticas de IAM que permiten el acceso a la clave son ineficaces, aunque las políticas de IAM que niegan el acceso a la clave siguen siendo efectivas.

  • Permite reducir el riesgo de que la clave se vuelva inmanejable al dar permiso de control de acceso a los administradores de la cuenta, incluyendo al usuario raíz de la cuenta, que no puede ser eliminado.

Ejemplo de política predeterminada:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

Si la cuenta está permitida ("arn:aws:iam::111122223333:root"), un principal de la cuenta todavía necesitará permisos de IAM para usar la clave KMS. Sin embargo, si el ARN de un rol, por ejemplo, está específicamente permitido en la Política de Clave, ese rol no necesita permisos de IAM.

Detalles de la Política

Propiedades de una política:

  • Documento basado en JSON

  • Recurso --> Recursos afectados (puede ser "*")

  • Acción --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (permisos)

  • Efecto --> Permitir/Denegar

  • Principal --> arn afectado

  • Condiciones (opcional) --> Condición para otorgar los permisos

Concesiones:

  • Permite delegar tus permisos a otro principal de AWS dentro de tu cuenta de AWS. Necesitas crearlos usando las APIs de AWS KMS. Se puede indicar el identificador de CMK, el principal beneficiario y el nivel requerido de operación (Decrypt, Encrypt, GenerateDataKey...)

  • Después de que se crea la concesión, se emiten un GrantToken y un GrantID

Acceso:

  • A través de política de clave -- Si esto existe, esto tiene precedencia sobre la política de IAM

  • A través de política de IAM

  • A través de concesiones

Administradores de Clave

Administrador de clave por defecto:

  • Tienen acceso para gestionar KMS pero no para cifrar o descifrar datos

  • Solo se pueden agregar usuarios y roles de IAM a la lista de Administradores de Clave (no grupos)

  • Si se utiliza un CMK externo, los Administradores de Clave tienen el permiso para importar material de clave

Rotación de CMKs

  • Cuanto más tiempo se deja la misma clave en su lugar, más datos se cifran con esa clave, y si esa clave es comprometida, entonces mayor será el área de impacto de los datos en riesgo. Además de esto, cuanto más tiempo esté activa la clave, aumenta la probabilidad de que sea comprometida.

  • KMS rota las claves de cliente cada 365 días (o puedes realizar el proceso manualmente cuando quieras) y las claves gestionadas por AWS cada 3 años y este tiempo no se puede cambiar.

  • Las claves más antiguas se retienen para descifrar datos que fueron cifrados antes de la rotación

  • En un compromiso, rotar la clave no eliminará la amenaza, ya que será posible descifrar todos los datos cifrados con la clave comprometida. Sin embargo, los nuevos datos se cifrarán con la nueva clave.

  • Si el CMK está en estado de deshabilitado o pendiente de eliminación, KMS no realizará una rotación de clave hasta que el CMK sea reactivado o se cancele la eliminación.

Rotación manual

  • Se necesita crear un nuevo CMK, luego, se crea un nuevo CMK-ID, por lo que necesitarás actualizar cualquier aplicación para referenciar el nuevo CMK-ID.

  • Para facilitar este proceso, puedes usar alias para referenciar un key-id y luego solo actualizar la clave a la que se refiere el alias.

  • Necesitas mantener claves antiguas para descifrar archivos antiguos cifrados con ellas.

Puedes importar claves desde tu infraestructura de claves local.

Otra información relevante de KMS

KMS se cobra por el número de solicitudes de cifrado/descifrado recibidas de todos los servicios por mes.

KMS tiene una completa auditoría e integración de cumplimiento con CloudTrail; aquí es donde puedes auditar todos los cambios realizados en KMS.

Con la política de KMS puedes hacer lo siguiente:

  • Limitar quién puede crear claves de datos y qué servicios tienen acceso para usar estas claves

  • Limitar el acceso de los sistemas a cifrar solo, descifrar solo o ambos

  • Definir para habilitar a los sistemas a acceder a claves a través de regiones (aunque no se recomienda, ya que una falla en la región que aloja KMS afectará la disponibilidad de los sistemas en otras regiones).

No puedes sincronizar o mover/copiar claves entre regiones; solo puedes definir reglas para permitir el acceso entre regiones.

Enumeración

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

Privesc

Post Exploitation

Persistence

Referencias

Apoya a HackTricks

Last updated