Visual Studio arranca con normalidad en casa, luego el mismo portátil se une al túnel corporativo y cada inicio se queda medio minuto en la pantalla de bienvenida. Quite la directiva y la demora se va con ella; quite el túnel y ocurre lo mismo. Ambas observaciones son ciertas, por eso los dos componentes se culpan mutuamente. La pregunta decisiva es si una consulta de revocación de certificado espera una ruta que solo ofrece el túnel, o si no encuentra ninguna.

Mida la descarga, no el arranque

Una directiva WDAC, implementada como archivo SiPolicy.p7b firmado, decide qué imágenes pueden ejecutarse en la máquina. La integridad de código valida la cadena de firmas de una imagen antes de su ejecución, y esa validación puede incluir una pregunta de revocación. La respuesta depende del punto de distribución de CRL o del respondedor OCSP que el certificado nombra en su interior.

Son peticiones de red normales, así que su coste depende de dónde viva el respondedor. Cuando solo es accesible a través del túnel, o su nombre solo se resuelve mediante un servidor DNS detrás del túnel, la validación espera a que el túnel esté listo. Visual Studio carga al arrancar un gran número de ensamblados y extensiones firmados, y un pequeño retraso por imagen se convierte en una parada visible. Nada está mal formado y la directiva se comporta exactamente como está configurada, por eso quitar la directiva parece corregirlo.

Cada imagen firmada puede desencadenar una llamada de red

Empiece con un binario firmado que ya esté en el disco y pida a la plataforma que lo verifique con el mismo comportamiento de descarga que usa un arranque. Ejecute el comando una vez en el túnel y otra fuera de él, y luego compare las líneas de descarga en lugar del veredicto final.

certutil -verify -urlfetch C:\Tools\Contoso.Editor.dll
nslookup ocsp.contoso.example
Test-NetConnection ocsp.contoso.example -Port 80

La salida enumera la cadena, las direcciones CRL y OCSP y si cada descarga tuvo éxito. Un respondedor que agota el tiempo en el túnel y responde fuera de él es la prueba que necesita, y pesa mucho más que una impresión de lentitud. Si la descarga tiene éxito lentamente, anote la dirección para que el siguiente paso pueda probar ese host directamente.

Resuelva el nombre del host del respondedor y pruebe la accesibilidad fuera de la aplicación, porque un nombre que no se resuelve nunca lo arreglará un ajuste del cliente. El registro operativo de CodeIntegrity aporta la otra mitad de la prueba, vinculando un evento de validación con la marca de tiempo del arranque lento.

Reduzca la demora sin quitar el control

Desactivar la directiva o cambiarla a modo de auditoría hace desaparecer la demora y elimina el control que desplegó la organización, así que considérelo la reparación equivocada. Las opciones más estrechas son un cambio de enrutamiento para que el respondedor sea accesible a través del túnel, una exclusión en el túnel dividido para los hosts del respondedor, una corrección de DNS cuando el nombre se resuelve a una dirección inalcanzable, o un proxy de caché compatible para los datos de revocación. Cada una tiene un propietario distinto: el equipo de PKI posee la accesibilidad del respondedor, el equipo de red posee la división del túnel y el equipo de punto final posee la directiva.

Excluir cada host de revocación del túnel no es automáticamente seguro, ya que un respondedor interno puede ser interno a propósito. Confirme la exclusión con el equipo que gestiona la PKI antes de escribir una regla que envíe en silencio las comprobaciones de certificados a la internet pública. Un cambio hecho sin esa confirmación es del tipo que se revierte en la siguiente actualización de la directiva.

Verifique un arranque en frío tras el cambio

Mida un arranque en frío en ambos estados y guarde los números, porque un arranque en caliente no demuestra casi nada una vez que los ensamblados están en caché. Repita el arranque desde una sesión nueva para que la ruta de carga de las extensiones se ejerza de nuevo.

Get-WinEvent -LogName Microsoft-Windows-CodeIntegrity/Operational -MaxEvents 40 |
  Where-Object { $_.TimeCreated -gt (Get-Date).AddMinutes(-10) }
Get-ChildItem C:\Windows\System32\CodeIntegrity\CiPolicies\Active
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

Una configuración reparada sigue contactando con el respondedor, o usa una ruta de caché que su equipo de PKI aprobó, y el registro muestra que la validación se completa en lugar de agotarse. Confirme que una aplicación firmada recientemente todavía arranca, porque una directiva que lo permite todo no es una reparación correcta. Compruebe también la carpeta de la directiva activa y el estado de aplicación, para que se sepa que la directiva que depura es la que se ejecuta. Mantenga la cadena de certificados, la dirección del respondedor y las marcas de tiempo de arranque en el mismo tíquet, porque una renovación suele mover el respondedor y deja obsoleta la regla de exclusión o DNS.

Artículos relacionados