Tamaño del token de Kerberos y problemas de su crecimiento

Recientemente me he enfrentado a un problema bastante interesante cuando algunos usuarios no pueden autenticarse en algunos servicios de dominio debido al tamaño excesivo del token de Kerberos. En este artículo, intentaremos considerar las peculiaridades de construir el token Kerberos, cómo un usuario puede definir su tamaño y cómo extender el búfer para almacenarlo.

En nuestro caso, el problema se ha manifestado de esta forma. Algunos usuarios no han podido acceder a algunos servicios implementados. En particular, ha habido un error al intentar conectarse a la granja de RDS (error «Acceso denegado»).

En los registros de los servidores de Escritorio remoto, se ha escrito el error Id. De evento 6:

El paquete SSPI de kerberos generó un token de salida de tamaño 21043 bytes, que era demasiado grande para caber en el búfer de token de tamaño 12000 bytes, proporcionado por el ID de proceso 4.
El token SSPI de salida es demasiado grande probablemente debido a que el usuario usuario @ dominio es miembro de un gran número de grupos.
Se recomienda minimizar el número de grupos a los que pertenece un usuario. Si el problema no puede corregirse mediante la reducción de las membresías de grupo de este usuario, comuníquese con el administrador del sistema para aumentar el tamaño máximo del token, que en términos generales se configura en toda la máquina a través del siguiente valor de registro: HKLM SYSTEM CurrentControlSet Control Lsa Kerberos Parameters MaxTokenSize.

Al intentar conectarse a SQL Server, apareció el siguiente error en el registro de eventos:

Id. De evento: 40960

El sistema de seguridad detectó un error de autenticación para el servidor XXXXXX. El código de falla del protocolo de autenticación Kerberos era «{Buffer Too Small}
El búfer es demasiado pequeño para contener la entrada. No se ha escrito información en el búfer (0xc0000023).

La verificación de los derechos para acceder a estos recursos no ha mostrado ningún problema. Durante la inspección adicional, se reveló la siguiente dependencia: todos los usuarios que enfrentaban el problema eran miembros de muchos grupos de seguridad de Active Directory (más de 200, incluidos los subgrupos). Así, llegamos a la conclusión de que el problema se produce por el sobredimensionamiento del ticket Kerberos que se utiliza para autenticar a los usuarios.

El tamaño del token de Kerberos

El tamaño del tocken de Kerberos depende de lo siguiente:

Kerberos usa el búfer para almacenar los datos de autenticación y transfiere su tamaño a las aplicaciones que usan Kerberos. El parámetro del sistema MaxTokenSize define el tamaño del búfer. El tamaño del búfer es importante, ya que algunos protocolos, como RPC o HTTP, lo usan para configurar el bloque de memoria para la autenticación. Si el tamaño de los datos de autenticación del usuario es mayor que el valor en MaxTokenSize, la autenticación falla. Esto puede explicar los errores de autenticación al acceder a IIS, mientras se conserva el acceso a los archivos de los recursos de la red.

De forma predeterminada, el tamaño del búfer de Kerberos (MaxTokenSize) es

  • 12 KB en Windows 7 y Windows Server 2008R2
  • Extendido a 48 KB en Windows 8 y Windows Server 2012

Por lo tanto, si un usuario es miembro de muchos grupos, todas las descripciones de los grupos no caben en 12 KB, y al intentar acceder a algunos recursos, aparece el error de autenticación.

Consejo. Existe un límite estricto para la cantidad de grupos de AD a los que puede pertenecer un usuario. Este límite es de 1015 grupos. Si hay más grupos, se produce el siguiente error cuando un usuario inicia sesión: El sistema no puede iniciar sesión debido al siguiente error: Durante un intento de inicio de sesión, el contexto de seguridad del usuario acumuló demasiados ID de seguridad. Vuelva a intentarlo o consulte al administrador del sistema.

Cómo obtener el tamaño actual del ticket Kerberos

Windows no tiene las convenientes herramientas integradas que permiten obtener el tamaño del token de Kerberos para un determinado usuario.

Para conocer el tamaño actual del ticket, use un script de Powershell de terceros CheckMaxTokenSize.ps1 (por Tim Springston – Microsoft). Este script permite obtener el tamaño actual del token para un usuario elegido, el número de grupos de seguridad en los que está incluido, el número de SID almacenados en el usuario SIDHistory y si la cuenta es de confianza para la delegación.

Para utilizar este script, descárguelo siguiendo el enlace anterior y guárdelo como CheckMaxTokenSize.ps1

Deshabilitar la verificación de secuencia de comandos:

Set-ExecutionPolicy RemoteSigned

Vaya al directorio que contiene el script:

Y obtenga el tamaño del ticket de Kerberos para el usuario jsmith:

.CheckMaxTokenSize.ps1 -Principals 'jsmith' -OSEmulation $true -Details $true

La secuencia de comandos solicita que se especifique el entorno para el que se debe calcular el tamaño del token de usuario. Hay dos variantes:

1 – para Windows 7 / Windows Server 2008 R2 o anterior (tamaño de token 12 KB)

4 – para Windows 8 / Windows Server 2012 o posterior (tamaño de token 48 KB)

Presione 1 y luego ENTER. En algún tiempo (3-4 minutos), el guión devolverá la siguiente información:

Detalles del token para el usuario jsmith
*********************************
El dominio del usuario es CORP.
El tamaño total estimado del token es 22648.
Para el acceso a los DC y los recursos delegables, el tamaño total estimado de la delegación de tokens es 45269.
El valor efectivo de MaxTokenSize es: 12000
Problema detectado. El token era demasiado grande para una autorización coherente. Modifique el tamaño máximo por KB http://support.microsoft.com/kb/327825 y considere la posibilidad de reducir las pertenencias a grupos directos y transitivos.
* Detalles del token para jsmith *
Hay 957 grupos en el token.
Hay SID en el SIDHistory de los usuarios.
Hay 248 SID en los atributos SIDHistory de los grupos de usuarios.
Hay 248 SIDHistories en total para usuarios y grupos de los que el usuario es miembro.
1088 son grupos de seguridad de ámbito global de dominio.
37 son grupos de seguridad locales de dominio.
86 son grupos de seguridad universales dentro del dominio de los usuarios.
0 son grupos de seguridad universales fuera del dominio de los usuarios.
> Detalles del grupo incluidos en el archivo de salida en C: Windows temp TokenSizeDetails.txt
Detalles de SIDHistory incluidos en el archivo de salida en C: Windows temp TokenSizeDetails.txt

Gran tamaño de token de Kerberos

Así que hemos definido que el usuario jsmith es miembro de 957 grupos de seguridad de dominio, y el tamaño de su ticket Kerberos es 22648, que es casi 2 veces más que el tamaño de token de Kerberos estándar en Windows 7 / Windows Server 2008 R.

Por lo tanto, para resolver el problema de autenticación, debe reducir el tamaño del token de usuario o ampliar el tamaño del búfer en todos los sistemas de servidor, en los que aparece el problema de autenticación Kerberos.

Cómo reducir el token de Kerberos de usuario

Si es posible, intente reducir el tamaño del token Kerberos del usuario de la siguiente manera:

Cómo aumentar el tamaño del token de Kerberos

Si no puede reducir el tamaño del ticket de Kerberos del usuario, puede aumentar el tamaño del búfer para él. Para hacerlo, hay una configuración de registro especial: MaxTokenSize.

Microsoft no recomienda establecer MaxTokenSize en más de 64 KB. En el caso general, se recomienda ampliar el límite a 48 KB (el límite para Windows 8/2012). Para aumentar el búfer:

  1. Abra el Editor del registro y vaya a HKEY_LOCAL_MACHINE System CurrentControlSet Control Lsa Kerberos Parameters.
  2. Crear un nuevo DWORD (32 bits) Valor parámetro con el nombre MaxTokenSize Registro MaxTokenSize
  3. Especifique el valor necesario para el tamaño máximo de búfer (hemos especificado 48,000, ya que el tamaño de los tokens de usuario no excede este valor)
  4. Reinicie su sistema.

Esto debe realizarse en todos los sistemas de servidor en los que se produzcan problemas de autenticación.

Si los problemas de autenticación aparecen en los sitios de IIS, también deberá ampliar el tamaño del encabezado HTTP a 64 KB (0000ffff). De forma predeterminada, el tamaño máximo del encabezado es de 16 KB. Para hacerlo, debe realizar los siguientes cambios en el registro en los servidores IIS (también es necesario reiniciar):
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParametersMaxFieldLength
DWORD:0000ffff

HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParametersMaxRequestBytes
DWORD:0000ffff

En Windows 8 y Windows Server 2012 ha aparecido una nueva política que permite establecer el MaxTokenSize máximo: Establecer el tamaño máximo de búfer de token de contexto SSPI de Kerberos. Se encuentra en Configuración de la computadora -> Políticas -> Plantillas administrativas -> Sistema -> Kerberos.

Política: establece el tamaño máximo de búfer de token de contexto SSPI de Kerberos

Además, hay otra política útil Advertencia para tickets de Kerberos grandes que permite configurar la visualización de notificaciones del ticket sobredimensionado en el registro del sistema.

Advertencia para tickets de Kerberos grandes

Una vez habilitada la política, cuando se excede el tamaño del umbral del ticket, el Evento 31 se escribirá en el registro con el siguiente mensaje de texto:

Se emite un ticket para el servicio ldap / ”DC Name” / ”DomainName” para la cuenta “AccountName” @ ”DomainName”. El tamaño de la parte encriptada de este ticket es 22648 bytes, que es cercano o mayor que el umbral de tamaño del ticket configurado (12000 bytes). Este ticket o cualquier ticket adicional emitido a partir de este ticket puede dar lugar a fallas de autenticación si la aplicación del cliente o del servidor asigna búferes de token SSPI delimitados por un valor cercano al valor de umbral.

El tamaño del ticket está determinado en gran medida por el tamaño de los datos de autorización que lleva. El tamaño de los datos de autorización está determinado por los grupos a los que pertenece la cuenta, los datos de reclamaciones para los que está configurada la cuenta y los grupos de recursos resueltos en el dominio de recursos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *