hacktricks/windows-hardening/active-directory-methodology/ad-certificates.md

14 KiB

Certificados AD

Información básica

Partes de un certificado

  • Sujeto - El propietario del certificado.
  • Clave pública - Asocia el sujeto con una clave privada almacenada por separado.
  • Fechas de inicio y finalización - Definen la duración durante la cual el certificado es válido.
  • Número de serie - Un identificador para el certificado asignado por la CA.
  • Emisor - Identifica quién emitió el certificado (comúnmente una CA).
  • SubjectAlternativeName - Define uno o más nombres alternativos que el sujeto puede tener. (Ver abajo)
  • Restricciones básicas - Identifica si el certificado es una CA o una entidad final, y si hay alguna restricción al usar el certificado.
  • Usos extendidos de claves (EKUs) - Identificadores de objetos (OID) que describen cómo se usará el certificado. También conocido como Uso mejorado de claves en el lenguaje de Microsoft. Los OID EKU comunes incluyen:
    • Firma de código (OID 1.3.6.1.5.5.7.3.3) - El certificado es para firmar código ejecutable.
    • Sistema de archivos cifrado (OID 1.3.6.1.4.1.311.10.3.4) - El certificado es para cifrar sistemas de archivos.
    • Correo electrónico seguro (1.3.6.1.5.5.7.3.4) - El certificado es para cifrar correo electrónico.
    • Autenticación de cliente (OID 1.3.6.1.5.5.7.3.2) - El certificado es para la autenticación en otro servidor (por ejemplo, en AD).
    • Inicio de sesión con tarjeta inteligente (OID 1.3.6.1.4.1.311.20.2.2) - El certificado es para su uso en la autenticación con tarjeta inteligente.
    • Autenticación de servidor (OID 1.3.6.1.5.5.7.3.1) - El certificado es para identificar servidores (por ejemplo, certificados HTTPS).
  • Algoritmo de firma - Especifica el algoritmo utilizado para firmar el certificado.
  • Firma - La firma del cuerpo del certificado realizada con la clave privada del emisor (por ejemplo, de una CA).

Nombres alternativos de sujetos

Un nombre alternativo de sujeto (SAN) es una extensión X.509v3. Permite que se vinculen identidades adicionales a un certificado. Por ejemplo, si un servidor web aloja contenido para varios dominios, cada dominio aplicable podría ser incluido en el SAN para que el servidor web solo necesite un certificado HTTPS.

Por defecto, durante la autenticación basada en certificados, AD mapea los certificados a las cuentas de usuario basándose en un UPN especificado en el SAN. Si un atacante puede especificar un SAN arbitrario al solicitar un certificado que tenga un EKU que habilite la autenticación del cliente, y la CA crea y firma un certificado usando el SAN suministrado por el atacante, el atacante puede convertirse en cualquier usuario del dominio.

CAs

AD CS define los certificados de CA en cuatro ubicaciones en el contenedor CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com> que difieren en su propósito:

  • El contenedor Certification Authorities define los certificados de CA raíz de confianza. Estas CAs están en la parte superior de la jerarquía del árbol PKI y son la base de la confianza en los entornos de AD CS. Cada CA se representa como un objeto AD dentro del contenedor donde la objectClass se establece en certificationAuthority y la propiedad cACertificate contiene los bytes del certificado de la CA. Windows propaga estos certificados de CA a la tienda de certificados de Autoridades de Certificación Raíz de Confianza en cada máquina con Windows. Para que AD considere un certificado como confiable, la cadena de confianza del certificado debe terminar eventualmente con uno de los CA raíz definidos en este contenedor.
  • El contenedor Enrolment Services define cada CA empresarial (es decir, CAs creadas en AD CS con el rol de CA empresarial habilitado). Cada CA empresarial tiene un objeto AD con los siguientes atributos:
    • Un atributo objectClass a pKIEnrollmentService
    • Un atributo cACertificate que contiene los bytes del certificado de la CA
    • Un atributo dNSHostName que establece el host DNS de la CA
    • Un campo certificateTemplates que define las plantillas de certificado habilitadas. Las plantillas de certificado son un "modelo" de configuración que la CA utiliza al crear un certificado, e incluyen cosas como los EKUs, los permisos de inscripción, la caducidad del certificado, los requisitos de emisión y la configuración de la criptografía. Discutiremos las plantillas de certificado con más detalle más adelante.

{% hint style="info" %} En los entornos de AD, los clientes interactúan con las CAs empresariales para solicitar un certificado basado en la configuración definida en una

Derechos de inscripción de plantillas de certificados

  • El ACE otorga a un principal el derecho extendido de inscripción de certificados. El ACE bruto otorga al principal el derecho de acceso RIGHT_DS_CONTROL_ACCESS45 donde el ObjectType se establece en 0e10c968-78fb-11d2-90d4-00c04f79dc5547. Este GUID corresponde al derecho extendido de inscripción de certificados.
  • El ACE otorga a un principal el derecho extendido de autoinscripción de certificados. El ACE bruto otorga al principal el derecho de acceso RIGHT_DS_CONTROL_ACCESS48 donde el ObjectType se establece en a05b8cc2-17bc-4802-a710-e7c15ab866a249. Este GUID corresponde al derecho extendido de autoinscripción de certificados.
  • Un ACE otorga a un principal todos los derechos extendidos. El ACE bruto habilita el derecho de acceso RIGHT_DS_CONTROL_ACCESS donde el ObjectType se establece en 00000000-0000-0000-0000-000000000000. Este GUID corresponde a todos los derechos extendidos.
  • Un ACE otorga a un principal FullControl/GenericAll. El ACE bruto habilita el derecho de acceso FullControl/GenericAll.

Derechos de inscripción de CA empresarial

El descriptor de seguridad configurado en el CA empresarial define estos derechos y es visible en la instantánea MMC del certificado certsrv.msc al hacer clic derecho en el CA → Propiedades → Seguridad.

Esto finalmente termina configurando el valor del registro de seguridad en la clave HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<NOMBRE DE CA> en el servidor CA. Hemos encontrado varios servidores AD CS que otorgan a los usuarios de bajo privilegio acceso remoto a esta clave a través del registro remoto:

Los usuarios de bajo privilegio también pueden enumerar esto a través de DCOM utilizando el método GetCASecurity de la interfaz COM ICertAdminD2. Sin embargo, los clientes normales de Windows deben instalar las Herramientas de administración remota del servidor (RSAT) para usarlo, ya que la interfaz COM y cualquier objeto COM que la implemente no están presentes en Windows de forma predeterminada.

Requisitos de emisión

Podrían existir otros requisitos para controlar quién puede obtener un certificado.

Aprobación del administrador

La aprobación del administrador del certificado de CA resulta en que la plantilla de certificado establece el bit CT_FLAG_PEND_ALL_REQUESTS (0x2) en el atributo msPKI-EnrollmentFlag del objeto AD. Esto pone todas las solicitudes de certificado basadas en la plantilla en el estado pendiente (visible en la sección "Solicitudes pendientes" en certsrv.msc), lo que requiere que un administrador de certificados apruebe o deniegue la solicitud antes de que se emita el certificado:

Agentes de inscripción, firmas autorizadas y políticas de aplicación

Este número de firmas autorizadas y la política de aplicación. El primero controla el número de firmas requeridas en el CSR para que el CA lo acepte. El último define los OID de EKU que el certificado de firma de CSR debe tener.

Un uso común para estas configuraciones es para agentes de inscripción. Un agente de inscripción es un término de AD CS dado a una entidad que puede solicitar certificados en nombre de otro usuario. Para hacerlo, el CA debe emitir al agente de inscripción una cuenta de certificado que contenga al menos el EKU de agente de solicitud de certificado (OID 1.3.6.1.4.1.311.20.2.1). Una vez emitido, el agente de inscripción puede firmar CSR y solicitar certificados en nombre de otros usuarios. El CA emitirá al agente de inscripción un certificado como otro usuario solo bajo el siguiente conjunto no exhaustivo de condiciones (implementado principalmente en el módulo de política predeterminado certpdef.dll):

  • El usuario de Windows que se autentica en el CA tiene derechos de inscripción en la plantilla de certificado de destino.
  • Si la versión del esquema de la plantilla de certificado es 1, el CA requerirá que los certificados de firma tengan el OID de agente de solicitud de certificado antes de emitir el certificado. La versión del esquema de la plantilla se especifica en la propiedad msPKI-Template-Schema-Version del objeto AD.
  • Si la versión del esquema de la plantilla de certificado es 2:
    • La plantilla debe establecer la configuración "Este número de firmas autorizadas" y el número especificado de agentes de inscripción debe firmar el CSR (el atributo AD mspkira-signature de la plantilla define esta configuración). En otras palabras, esta configuración especifica cuántos agentes de inscripción deben firmar un CSR antes de que el CA siquiera considere emitir un certificado.
    • La restricción de emisión de "Política de aplicación" de la plantilla debe establecerse en "Agente de solicitud de certificado".

Solicitar certificados

  1. Usando el Protocolo de inscripción de certificados de cliente de Windows

Enumeración de AD CS

Al igual que para la mayoría de AD, toda la información cubierta hasta ahora está disponible mediante la consulta de LDAP como un usuario autenticado en el dominio, pero de lo contrario sin privilegios.

Si queremos enumerar los CAs empresariales y sus configuraciones, se puede consultar LDAP utilizando el filtro LDAP (objectCategory=pKIEnrollmentService) en la base de búsqueda CN=Configuration,DC=<dominio>,DC=<com> (esta base de búsqueda corresponde con el contexto de nomenclatura de Configuración del bosque de AD). Los resultados identificarán el nombre DNS del servidor CA, el nombre del CA en sí, las fechas de inicio y finalización del certificado, varias banderas, plantillas de certificados publicadas y más.

Herramientas para enumerar certificados vulnerables:

  • Certify es una herramienta en C# que puede enumerar información útil de configuración e infraestructura sobre entornos AD CS y puede solicitar certificados de diversas maneras.
  • Certipy es una herramienta en python para poder enumerar y abusar de los Servicios de Certificado de Active Directory (AD CS) desde cualquier sistema (con acceso al DC) que pueda generar una salida para BloodHound creada por Lyak (buena persona, mejor hacker).
# https://github.com/GhostPack/Certify
Certify.exe cas #enumerate trusted root CA certificates, certificates defined by the NTAuthCertificates object, and various information about Enterprise CAs
Certify.exe find #enumerate certificate templates
Certify.exe find /vulnerable #Enumerate vulenrable certificate templater

# https://github.com/ly4k/Certipy
certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
certipy find -vulnerable [-hide-admins] -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 #Search vulnerable templates

certutil.exe -TCAInfo #enumerate Enterprise CAs
certutil -v -dstemplate #enumerate certificate templates

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥