🏢Active DirectoryComplianceMonitoringAccounts

Alcance de la puntuación de cumplimiento AD: cinco deducciones

Contraste cinco deducciones de la puntuación AD con pruebas de directiva del dominio y adminCount. Un 100 no demuestra el cumplimiento global.

Younes AZABARPor Younes AZABAR11 min de lectura
Alcance de la puntuación de cumplimiento AD: cinco deducciones

Alcance de la puntuación de cumplimiento AD: qué puede demostrar la cifra

El alcance de la puntuación de cumplimiento AD determina qué puede respaldar una cifra en una auditoría. En la implementación de etc-collector revisada el 4 de octubre de 2026, la puntuación parte de 100 y resta puntos por cuatro valores de la directiva de contraseñas del dominio y un recuento de usuarios habilitados con adminCount=1. No agrega todos los hallazgos ni evalúa un marco de cumplimiento completo.

Una puntuación de 100 significa que ninguna de estas cinco condiciones de deducción se activó con las entradas suministradas. No certifica Active Directory, no demuestra que se hayan recopilado todos los objetos pertinentes ni establece que se hayan superado los controles independientes. Antes de usar la cifra en un informe, reconstruya sus entradas y las pruebas de su recopilación.

Este análisis está fijado a la revisión del collector 6a04c34b5ce01d3abf747c1d1c2f671eaa1d5e85, en concreto a public/internal/audit/detectors/ad/compliance/score.go, desde Detect() en la línea 23. Los ejemplos siguientes son cálculos derivados de ese código, no mediciones de un dominio real. No se ejecutaron comandos de Windows en un entorno para este artículo.

Cómo funcionan las cinco deducciones

Con un DomainInfo no nulo, cada condición se evalúa de forma independiente. La quinta entrada se deriva de la colección Users suministrada. Estos son umbrales del producto; utilizarlos para reproducir un resultado no establece que sean la referencia aprobada por la organización.

Entrada consumida por el detectorCondición de deducciónPuntos restadosClave de deducción
MinPwdLengthInferior a 1410weak_password_length
PwdHistoryLengthInferior a 245weak_password_history
LockoutThresholdSuperior a 10 o igual a 05weak_lockout_policy
MaxPwdAge, en días enteros del collectorSuperior a 90 o igual a 05weak_password_age
Número de usuarios suministrados con Disabled=false y AdminCount=trueSuperior a 2010excessive_admins

La igualdad importa: una longitud de 14, un historial de 24, un umbral de bloqueo de 10, una antigüedad máxima de 90 días y un recuento de 20 no activan sus deducciones respectivas. El contador cuenta una vez cada objeto que cumple los criterios; no calcula una proporción de administradores respecto a usuarios.

Si DomainInfo es nulo, el detector omite las cuatro condiciones de directiva y resta 15 bajo no_domain_info. Después evalúa la misma condición de recuento de usuarios. Por tanto, un objeto nulo constituye una rama de cálculo distinta, no cuatro fallos de directiva confirmados.

Demostrar el rango alcanzable

Con DomainInfo presente, la mayor deducción posible es 10 + 5 + 5 + 5 + 10 = 35. La menor es cero. Por tanto, las puntuaciones van de 65 a 100, en incrementos de cinco puntos. Estas condiciones nunca alcanzan el límite defensivo de cero.

Sin DomainInfo, la puntuación es 85 cuando el recuento de usuarios que cumplen los criterios es como máximo de 20, o 75 cuando supera 20. No puede tomar otros valores en esa rama.

Por ejemplo, la activación de las cuatro condiciones de directiva con un recuento de 20 produce 75; un recuento de 21 produce 65. Un objeto de dominio nulo con un recuento de 20 produce 85. Estos casos hipotéticos explican por qué una cifra aparentemente mejor puede acompañar a pruebas de directiva más débiles.

El hallazgo incluye bandas de interpretación como 50-69 y 0-49. Solo 65 es alcanzable en la primera; la segunda es completamente inalcanzable. Los valores inferiores a 65 no pueden surgir de este cálculo por sí solo. Esas etiquetas de visualización no amplían la cobertura del detector ni convierten su banda superior en un veredicto de cumplimiento.

Detección: contrastar las entradas con lecturas independientes

Empiece por el dominio, el controlador de dominio elegido, la hora de recopilación y el alcance del inventario. Una lectura independiente reciente desde otro DC o una base de búsqueda más restringida puede describir pruebas distintas. Registre esas diferencias antes de tratar una discrepancia como un error del detector.

Microsoft documenta Get-ADDefaultDomainPasswordPolicy como un comando que recupera la directiva predeterminada de un dominio. Este ejemplo de solo lectura usa sus parámetros documentados -Identity y -Server. Sustituya el dominio y el DC ilustrativos por los destinos revisados:

Get-ADDefaultDomainPasswordPolicy -Identity 'example.com' -Server 'dc01.example.com'

Conserve el objeto devuelto completo y compare la longitud mínima, el historial de contraseñas, el umbral de bloqueo y la antigüedad máxima con las entradas del collector. Preserve las unidades de duración: el proveedor convierte el intervalo de antigüedad máxima del directorio en días enteros. No compare directamente un intervalo bruto del directorio o una cadena de duración formateada con el entero 90.

El collector lee estos atributos de directiva del objeto del dominio. No usa el objeto de configuración de contraseñas resultante (PSO) de cada usuario para esta puntuación. Microsoft documenta Get-ADUserResultantPasswordPolicy para esa cuestión distinta a nivel de cuenta. Mantenga esas pruebas fuera de la puntuación reproducida en lugar de sustituir las entradas del dominio por la directiva de un usuario seleccionado.

Leer adminCount sin cambiar el nombre de la población

La definición de Microsoft del atributo adminCount describe un objeto cuyas ACL han sido reforzadas por el sistema debido a su pertenencia directa o transitiva a un grupo administrativo. Eso describe un historial de protección; no es una consulta de pertenencia actual a Domain Admins.

El proveedor convierte la cadena LDAP exacta "1" en el booleano de usuario AdminCount=true. Después, el detector excluye a los usuarios deshabilitados. Aunque la descripción y el texto del alcance del hallazgo dicen «Domain Admins count», el predicado real nunca resuelve ese grupo. Preserve la distinción al explicar el resultado.

Use los parámetros documentados de búsqueda y propiedades de Get-ADUser para conservar los registros de usuario subyacentes:

Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Server 'dc01.example.com' -Properties adminCount,Enabled

Este es un ejemplo adaptado de la documentación, no un inventario ejecutado. A partir de los registros devueltos, contraste los usuarios habilitados cuyo adminCount bruto sea igual a 1 con la población que cumple los criterios del collector. Conserve las identidades de los objetos y las excepciones, no solo el total final. Un atributo ausente, una base restringida o un límite de recopilación requiere matices antes de interpretar un recuento bajo.

Crear una hoja de cálculo y procedencia

Para una auditoría real, complete el registro siguiente con valores observados. «Recopilación confirmada» significa que la respuesta y los atributos necesarios se leyeron correctamente para el alcance indicado; una estructura no nula por sí sola no lo demuestra.

EntradaFuente del collectorPruebas necesarias para confirmar la recopilaciónCálculo que reproducir
Longitud mínimaminPwdLength del dominio mapeado a MinPwdLengthIdentidad del objeto del dominio, atributo devuelto, análisis correcto, DC y horaRestar 10 cuando sea inferior a 14
HistorialpwdHistoryLength del dominio mapeado a PwdHistoryLengthLas mismas pruebas de identidad del dominio, atributo y análisisRestar 5 cuando sea inferior a 24
Umbral de bloqueolockoutThreshold del dominioRespuesta del atributo y pruebas del análisis; matizar cualquier ceroRestar 5 cuando sea superior a 10 o cero
Antigüedad máximamaxPwdAge del dominio convertido a días enterosValor bruto, resultado de la conversión y unidades; matizar cualquier ceroRestar 5 cuando sea superior a 90 o cero
Población adminCount habilitadaUsers suministrado, adminCount analizado e indicador de deshabilitaciónBase de búsqueda, población/filtro, límites, atributos devueltos e identidades de los objetosRestar 10 cuando el recuento supere 20

Añada a cada fila el valor real, el resultado de la recopilación, el valor independiente y la deducción resultante. Cuando no haya pruebas disponibles, escriba «desconocido» en la columna de pruebas y preserve la entrada numérica que consumió el código. No sustituya silenciosamente la entrada por un valor supuesto.

Corrección: resolver las lagunas de evidencia antes de cambiar la directiva (Remediation)

Primero, contraste el cálculo. Conserve la puntuación del hallazgo, su mapa de deducciones, las estadísticas de usuarios y la revisión del collector. Recalcule el resultado con las entradas suministradas e identifique si el objeto del dominio estaba presente, era parcial o era nulo. Esto distingue una discrepancia aritmética de una observación incompleta.

Después, matice la recopilación. Un cero puede representar un valor configurado o un valor ausente/sin analizar en este proveedor. Obtenga la respuesta pertinente del dominio y una lectura independiente en el DC registrado. Para los usuarios, contraste el alcance y los límites de búsqueda con la población prevista. Una llamada GetUsers correcta es una prueba necesaria, pero no demuestra por sí sola que un inventario limitado intencionadamente cubra todo el dominio.

Si la recopilación está incompleta, resuelva el problema específico de recopilación y ejecute una nueva auditoría. Conserve el resultado anterior como observación incompleta. No describa el paso de 85 a 100 tras recuperar información del dominio como cuatro controles de directiva corregidos sin pruebas de la directiva antes y después.

Identifique entonces la referencia de la organización, su edición, su responsable y sus excepciones. Nuestra comparación de los predicados ANSSI y CIS de directiva de contraseñas explica por qué distintos controles pueden discrepar sobre atributos coincidentes. Las cinco deducciones de esta puntuación son un cálculo separado del producto; no son una tercera referencia de un marco de cumplimiento.

Para una carencia de configuración confirmada, aplique el cambio de directiva aprobado mediante el proceso de administración establecido, conserve su registro de cambio, repita la lectura independiente y vuelva a auditar el mismo alcance. Para una discrepancia en adminCount, investigue por separado los objetos reales y las pertenencias privilegiadas actuales. Borrar el marcador únicamente para reducir el contador no demuestra que los privilegios o la protección de las ACL sean correctos.

Por último, adjunte pruebas de controles independientes. Nuestra correspondencia de los requisitos de cumplimiento de AD y Azure con controles de identidad identificados aporta contexto para ese trabajo. El registro de eventos, las protecciones de protocolos, la gobernanza de acceso y los controles de Entra necesitan sus propios resultados. Esta puntuación no inspecciona esos controles ni puede suplir sus lagunas de evidencia.

Cómo detecta EtcSec este caso

COMPLIANCE_SCORE es el único detector tratado aquí. Su Detect() lee DomainInfo y Users, aplica las cinco condiciones anteriores y siempre devuelve un hallazgo Info con Count=1, incluso con una puntuación de 100. Count 1 designa el hallazgo de puntuación que se devuelve, no un usuario afectado ni un control fallido.

Los detalles incluyen score, maxScore=100, deductions, totalUsers, enabledUsers y adminCount. Los totales de usuarios describen la colección suministrada. No demuestran una cobertura completa del directorio.

Las rutas del proveedor explican los límites:

  • public/internal/providers/ldap/client.go:569 crea un objeto de información del dominio antes de consultar RootDSE y el dominio. Las respuestas fallidas o vacías pueden dejar un objeto parcial con valores cero. Los cuatro valores de directiva proceden del objeto del dominio, no de un PSO resultante por usuario.
  • public/internal/providers/ldap/parser.go:155 define el AdminCount del usuario mediante la comparación exacta de cadenas adminCount == "1". Su función auxiliar de enteros devuelve cero para valores ausentes e ignora los errores de análisis de enteros.
  • public/internal/audit/engine.go:512 trata un error devuelto por GetDomainInfo como no fatal y suministra información de dominio nula. Esa rama produce 85 antes de la deducción opcional de 10 puntos por adminCount. En cambio, la ruta de error anterior de GetUsers interrumpe la recopilación.
  • Los valores alcanzables del cálculo son 65–100 con un objeto de dominio, o 75/85 sin él. Un objeto no nulo no demuestra que la recopilación de atributos haya sido correcta, y las bandas de interpretación inferiores a 65 son inalcanzables para este detector.

Todas las referencias de código anteriores están fijadas a la revisión examinada. Presente la salida como un indicador parcial del producto respaldado por entradas debidamente matizadas. Una puntuación de 100 establece únicamente que estas cinco condiciones de deducción no se activaron; el cumplimiento global y la certificación requieren controles y pruebas definidos de forma independiente.

Explore las páginas de identidad que apoyan este tema