Depuración y solución de problemas de WDAC
Nota
Algunas funcionalidades de Windows Defender Application Control solo están disponibles en versiones específicas de Windows. Obtenga más información sobre la disponibilidad de características Windows Defender Application Control.
En este artículo se describe cómo depurar y solucionar errores de aplicación y script al usar Windows Defender Control de aplicaciones (WDAC).
1- Recopilación de datos de diagnóstico WDAC
Antes de depurar y solucionar problemas de WDAC, debe recopilar información de un dispositivo que muestra el comportamiento del problema.
Ejecute los siguientes comandos desde una ventana de PowerShell con privilegios elevados para recopilar la información de diagnóstico que puede necesitar:
Recopile datos de diagnóstico WDAC generales y cópielos en %userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag:
cidiag.exe /stop
Si CiDiag.exe no está presente en la versión de Windows, recopile esta información manualmente:
- Archivos binarios de directiva WDAC de las particiones del sistema de Windows y EFI
- Registros de eventos WDAC
- Registros de eventos de AppLocker
- Otros registros de eventos que pueden contener información útil de otras aplicaciones y servicios de Windows
Guarde la información del sistema del dispositivo en la carpeta CiDiag:
msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
Use CiTool.exe para hacer un inventario de la lista de directivas WDAC en el dispositivo. Omita este paso si CiTool.exe no está presente en la versión de Windows.
citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
Exporte los datos de clave del Registro de AppLocker a la carpeta CiDiag:
reg.exe query HKLM\Software\Policies\Microsoft\Windows\SrpV2 /s > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\Software\Policies\Microsoft\Windows\AppidPlugins /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\System\CurrentControlSet\Control\Srp\ /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt
Nota
Es posible que vea un error que indica que el sistema no pudo encontrar la clave o el valor del Registro especificados. Este error no indica un problema y se puede omitir.
Copie los archivos de directiva de AppLocker de %windir%System32\AppLocker en la carpeta CiDiag:
Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore
Recopile información de archivos para los archivos de directiva de AppLocker recopilados en el paso anterior:
Get-ChildItem -Path $env:windir\System32\AppLocker\ -Recurse | select Mode,LastWriteTime,CreationTime,Length,Name >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerPolicyFiles.txt
Exporte la directiva efectiva de AppLocker:
Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml
Recopilar información de estado y configuración de servicios de AppLocker:
sc.exe query appid > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query appidsvc >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query applockerfltr >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt
Registros de eventos WDAC principales
Los eventos WDAC se generan en dos ubicaciones:
- Registros de aplicaciones y servicios: Microsoft - Windows - CodeIntegrity - Operational
- Registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - MSI y script
En el directorio de salida de CiDiag, estos registros de eventos se denominan CIOperational.evtx y ALMsiAndScript.evtx, respectivamente.
Otros registros de eventos de Windows que pueden ser útiles
A veces, es posible que pueda complementar la información contenida en los registros de eventos WDAC principales con la información que se encuentra en estos otros registros de eventos. CIDiag.exe no recopila las que se muestran en cursiva.
- Registros de aplicaciones y servicios: Microsoft - Windows - CodeIntegrity - Verbose
- Registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - EXE y DLL
- Registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - Implementación de aplicaciones empaquetadas
- Registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - Ejecución de aplicaciones empaquetadas
- Registros de aplicaciones y servicios: Microsoft - Windows - AppID - Operational
- Registros de aplicaciones y servicios: Microsoft - Windows - CAPI2 - Operational
- Registros de aplicaciones y servicios: Microsoft - Windows - DeviceGuard - Operational
- Registros de aplicaciones y servicios : Microsoft - Windows - PowerShell - *
- Windows: aplicación
- Windows: sistema
2- Usar los datos de diagnóstico y registro para identificar problemas
Después de recopilar la información de diagnóstico necesaria de un dispositivo, está listo para comenzar el análisis de los datos de diagnóstico recopilados en la sección anterior.
Compruebe el conjunto de directivas WDAC que están activas y aplicadas. Confirme que solo las directivas que espera que estén activas están activas actualmente. Tenga en cuenta las directivas de bandeja de entrada de Windows que también pueden estar activas. Puede usar cualquiera de estos métodos:
- Revise la salida de CiTool.exe -lp, si procede, que se guardó en el directorio de salida de CIDiag como CiToolOutput.json. Consulte Uso de Microsoft Edge para ver el archivo JSON con formato.
- Revise todos los eventos de activación de directivas del registro de eventos WDAC principal que se encuentra en Registros de aplicaciones y servicios: Microsoft - Windows - CodeIntegrity - Operational. Dentro del directorio de salida CIDiag, este registro de eventos se denomina CIOperational.evtx.
Revise los eventos de bloque para archivos ejecutables, dll y controladores del registro de eventos WDAC principal que se encuentra en registros de aplicaciones y servicios: Microsoft - Windows - CodeIntegrity - Operational. Dentro del directorio de salida CIDiag, este registro de eventos se denomina CIOperational.evtx. Use información de los eventos de bloque y sus eventos de detalles de firma 3089 correlacionados para investigar los bloques que no se explican o son inesperados. Consulte el ejemplo de ejecutable bloqueado que se describe más adelante en este artículo para obtener referencia.
Revise los eventos de bloque para aplicaciones empaquetadas, instaladores msi, scripts y objetos COM del registro de eventos de cumplimiento de scripts principal que se encuentra en registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - MSI y Script. Dentro del directorio de salida CIDiag, este registro de eventos se denomina ALMsiAndScript.evtx. Use información de los eventos de bloque y sus eventos de detalles de firma 8038 correlacionados para investigar los bloques que no se explican o son inesperados.
La mayoría de los problemas relacionados con WDAC, incluidos los errores de aplicación y script, se pueden diagnosticar mediante los pasos anteriores.
Análisis de eventos para un archivo ejecutable bloqueado de ejemplo
Este es un ejemplo de EventData detallado de un evento de bloque de modo de cumplimiento WDAC típico 3077 y uno de sus eventos de información de firma correlacionados 3089. Las tablas que siguen cada captura de pantalla de evento describen algunos de los elementos contenidos en los eventos. Siguiendo las descripciones de eventos es un tutorial paso a paso que explica cómo usar los eventos para comprender por qué se produjo el bloque.
Evento 3077: evento de bloque de cumplimiento wdac
Nombre del elemento | Descripción |
---|---|
Sistema - Correlación - [ActivityID] |
No se muestra en la captura de pantalla Use activityID de correlación para hacer coincidir un evento de bloque WDAC con uno o más eventos de firma 3089. |
Nombre de archivo | La ruta de acceso y el nombre del archivo en el disco que se bloqueó para ejecutarse. Dado que el nombre del disco es mutable, este valor no es el que se usa al crear reglas de archivo WDAC con -Level FileName . En su lugar, vea el elemento OriginalFileName más adelante en esta tabla. |
Nombre del proceso | Ruta de acceso y nombre del archivo que intentó ejecutar el archivo bloqueado. También se denomina proceso primario. |
Nivel de firma solicitado | Nivel de autorización de firma de Windows que el código necesario pasar para poder ejecutarse. Consulte Nivel de firma solicitado y validado. |
Nivel de firma validada | Nivel de autorización de firma de Windows que se ha dado al código. Consulte Nivel de firma solicitado y validado. |
Estado | Código de estado de Windows NT. Puede usar certutil.exe -error <status> para buscar el significado del código de estado. |
SHA1 Hash | Hash SHA1 Authenticode para el archivo bloqueado. |
SHA256 Hash | Hash SHA256 Authenticode para el archivo bloqueado. |
Hash plano SHA1 | Hash de archivo plano SHA1 para el archivo bloqueado. |
Hash plano SHA256 | Hash de archivo plano SHA256 para el archivo bloqueado. |
PolicyName | Nombre descriptivo de la directiva WDAC que provocó el evento de bloque. Se muestra un evento de bloque 3077 independiente (o evento de bloque de auditoría 3076) para cada directiva que bloquea la ejecución del archivo. |
PolicyId | Valor de identificador descriptivo de la directiva WDAC que provocó el evento de bloque. |
PolicyHash | Hash SHA256 Authenticode del binario de directiva WDAC que provocó el evento de bloque. |
OriginalFileName | Nombre de archivo inmutable establecido por el desarrollador en el encabezado de recurso del archivo bloqueado. Este valor es el que se usa al crear reglas de archivo WDAC con -Level FileName . |
InternalName | Otro valor inmutable establecido por el desarrollador en el encabezado de recurso del archivo bloqueado. Puede sustituir este valor por OriginalFileName en las reglas de archivo por -Level FileName -SpecificFileNameLevel InternalName . |
FileDescription | Otro valor inmutable establecido por el desarrollador en el encabezado de recurso del archivo bloqueado. Puede sustituir este valor por OriginalFileName en las reglas de archivo por -Level FileName -SpecificFileNameLevel FileDescription . |
ProductName | Otro valor inmutable establecido por el desarrollador en el encabezado de recurso del archivo bloqueado. Puede sustituir este valor por OriginalFileName en las reglas de archivo por -Level FileName -SpecificFileNameLevel ProductName . |
FileVersion | El valor VersionEx de la directiva se usa para aplicar el control de versiones sobre las directivas firmadas. |
PolicyGUID | PolicyId de la directiva WDAC que provocó el evento de bloque. |
UserWriteable | Valor booleano que indica si el archivo estaba en una ubicación que se puede escribir por el usuario. Esta información es útil para diagnosticar problemas cuando se permite mediante reglas de FilePath. |
PackageFamilyName | Nombre de familia del paquete de la aplicación empaquetada (MSIX) que incluye el archivo bloqueado. |
Evento 3089: evento de información de firma WDAC
Nombre del elemento | Descripción |
---|---|
Sistema - Correlación - [ActivityID] | Use activityID de correlación para hacer coincidir un evento de firma WDAC con su evento de bloque. |
TotalSignatureCount | Número total de firmas detectadas para el archivo bloqueado. |
Firma | Recuento de índices, a partir de 0, de la firma actual que se muestra en este evento 3089. Si el archivo tenía varias firmas, encontrará otros eventos 3089 para las otras firmas. |
Hash | Valor hash que WDAC usó para hacer coincidir el archivo. Este valor debe coincidir con uno de los cuatro hashes que se muestran en el evento de bloque 3077 o 3076. Si no se encontró ninguna firma para el archivo (TotalSignatureCount = 0), solo se muestra el valor hash. |
SignatureType | Tipo de firma. |
ValidatedSigningLevel | Nivel de autorización de firma de Windows que cumplió la firma. Consulte Nivel de firma solicitado y validado. |
VerificationError | El motivo por el que esta firma en particular no pudo pasar la directiva WDAC. Consulte VerificationError. |
PublisherName | Valor de nombre común (CN) del certificado hoja. |
IssuerName | Valor CN del certificado más alto disponible en la cadena de certificados. Este nivel suele ser un certificado debajo de la raíz. |
PublisherTBSHash | Hash TBS del certificado hoja. |
IssuerTBSHash | Hash DE TBS del certificado más alto disponible en la cadena de certificados. Este nivel suele ser un certificado debajo de la raíz. |
Tutorial paso a paso de los eventos de ejemplo 3077 y 3089
Ahora vamos a ver cómo usar los datos de eventos en los eventos de ejemplo 3077 y 3089 para comprender por qué la directiva WDAC bloqueó este archivo.
Comprender qué archivo se está bloqueando y el contexto de bloque
En referencia al evento 3077, busque la información que identifica la directiva, el archivo que se está bloqueando y el proceso primario que intentó ejecutarla. Tenga en cuenta esta información de contexto para determinar si se espera y se desea el bloque.
En el ejemplo, el archivo que se bloquea es PowerShell.exe, que forma parte de Windows y normalmente se espera que se ejecute. Sin embargo, en este caso, la directiva se basaba en la plantilla de directiva Windows en modo S, que no permite que los hosts de script se ejecuten como una manera de limitar la superficie expuesta a ataques. En el modo S, este evento de bloque es correcto. Pero supongamos que el autor de la directiva no era consciente de esa restricción cuando eligió la plantilla y trate este bloque como inesperado.
Determinar por qué WDAC rechazó el archivo
Una vez más, al hacer referencia al evento 3077, vemos que el nivel de firma solicitado de 2 significa que el código debe pasar la directiva WDAC. Pero el nivel de firma validada de 1 significa que el código se ha tratado como si no estuviera firmado. "Sin firmar" podría significar que el archivo estaba realmente sin firmar, firmado pero con un certificado no válido, o firmado pero sin ningún certificado permitido por la directiva WDAC.
Ahora, vamos a inspeccionar los eventos 3089 correlacionados para el archivo bloqueado. En el ejemplo, solo se examina la primera firma (índice de firma 0) que se encuentra en un archivo que tenía varias firmas. Para esta firma, ValidatedSigningLevel es 12, lo que significa que tiene una firma de producto de Microsoft Windows. VerificationError de 21 significa que la firma no pasó la directiva WDAC.
Es importante revisar la información de cada evento 3089 correlacionado, ya que cada firma puede tener un valor de ValidatedSigningLevel y VerificationError diferentes.
Importante
Observe cómo el nivel de firma validada en el evento 3077 se interpreta de forma muy diferente de ValidatedSigningLevel en el evento 3089.
En el caso del evento 3077, El nivel de firma validada nos indica cómo el binario fue realmente tratado por Windows.
En el caso del evento 3089, por otro lado, ValidatedSigningLevel nos indica el posible nivel máximo que podría recibir la firma. Debemos usar VerificationError para comprender por qué se rechazó la firma.
3- Resolución de problemas comunes
Una vez analizados los datos de diagnóstico wdac, puede realizar pasos para resolver el problema o realizar más pasos de depuración. Estos son algunos problemas y pasos comunes que puede intentar resolver o aislar aún más el problema raíz:
Problema: Se bloqueó un archivo que desea permitir
- Use los datos de los registros de eventos WDAC principales para agregar reglas para permitir el archivo bloqueado.
- Vuelva a implementar el archivo o la aplicación mediante un instalador administrado si la directiva confía en los instaladores administrados.
Problema: una directiva está activa y es inesperada
Esta condición puede existir si:
- Se quitó una directiva, pero el sistema no se ha reiniciado.
- Se quitó parcialmente una directiva, pero todavía existe una copia de la directiva en la partición Sistema o EFI.
- Una directiva con PolicyId {A244370E-44C9-4C06-B551-F6016E563076} (formato de directiva única) se copió en la ubicación de la directiva de formato de varias directivas antes de la activación, lo que da lugar a un binario de directiva duplicado en el disco. Compruebe si hay archivos SiPolicy.p7b y {A244370E-44C9-4C06-B551-F6016E563076}.cip en las particiones Sistema y EFI.
- Una directiva se implementó incorrectamente en el dispositivo.
- Un atacante con acceso de administrador ha aplicado una directiva para provocar la denegación de servicio en algunos procesos críticos.
Para resolver este problema, siga las instrucciones para quitar directivas WDAC para la directiva identificada.
Problema: se produce un error de aplicación no controlada y no se observan eventos WDAC
Algunas aplicaciones modifican su comportamiento cuando una directiva WDAC en modo de usuario está activa, lo que puede dar lugar a errores inesperados. También puede ser un efecto secundario de la aplicación de scripts para las aplicaciones que no controlan correctamente los comportamientos de cumplimiento implementados por los hosts de script.
Intente aislar la causa principal mediante las siguientes acciones:
- Compruebe los demás registros de eventos que aparecen en la sección 1 de este artículo para ver los eventos correspondientes a los errores inesperados de la aplicación.
- Reemplace temporalmente la directiva WDAC por otra directiva que deshabilite la aplicación de scripts y vuelva a probarla.
- Reemplace temporalmente la directiva WDAC por otra directiva que permita todos los objetos COM y vuelva a probar.
- Reemplace temporalmente la directiva WDAC por otra directiva que relaje otras reglas de directiva y vuelva a probarla.
Problema: Una aplicación implementada por un instalador administrado no funciona
Para depurar problemas con el instalador administrado, pruebe estos pasos:
- Compruebe que la directiva WDAC que bloquea la aplicación incluye la opción para habilitar el instalador administrado.
- Compruebe que la directiva efectiva de AppLocker $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml es correcta, como se describe en Permitir automáticamente aplicaciones implementadas por un instalador administrado.
- Compruebe que los servicios de AppLocker se están ejecutando. Esta información se encuentra en $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt creado en la sección 1 de este artículo.
- Compruebe que existe un archivo de AppLocker denominado MANAGEDINSTALLER. APPLOCKER existe en la carpeta CiDiag creada anteriormente. Si no es así, repita los pasos para implementar y habilitar la configuración de AppLocker del instalador administrado.
- Reinicie el proceso del instalador administrado y compruebe que se observa un evento 8002 en el registro de eventos AppLocker - EXE y DLL para el proceso del instalador administrado con PolicyName = MANAGEDINSTALLER. Si en su lugar ve un evento con 8003 o 8004 con PolicyName = MANAGEDINSTALLER, compruebe las reglas managedInstaller en el XML de directiva de AppLocker y asegúrese de que una regla coincida con el proceso del instalador administrado.
- Use fsutil.exe para comprobar que los archivos escritos por el proceso del instalador administrado tienen el atributo extendido de origen del instalador administrado. Si no es así, vuelva a implementar los archivos con el instalador administrado y vuelva a comprobarlos.
- Pruebe la instalación de una aplicación diferente mediante el instalador administrado.
- Agregue otro instalador administrado a la directiva de AppLocker y pruebe la instalación con el otro instalador administrado.
- Compruebe si la aplicación encuentra una limitación conocida con el instalador administrado. Si es así, debe autorizar la aplicación mediante otros medios.
Problema: Una aplicación que esperaba que Intelligent Security Graph (ISG) permita no funciona
Para depurar problemas con ISG, pruebe estos pasos:
- Compruebe que la directiva WDAC que bloquea la aplicación incluye la opción para habilitar el gráfico de seguridad inteligente.
- Compruebe que los servicios de AppLocker se están ejecutando. Esta información se encuentra en $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt creado en la sección 1 de este artículo.
- Use fsutil.exe para comprobar que los archivos tienen el atributo extendido de origen isg. Si no es así, vuelva a implementar los archivos con el instalador administrado y vuelva a comprobarlos.
- Compruebe si la aplicación encuentra una limitación conocida con ISG.
4- Notificar problemas a Microsoft, si procede
Si después de seguir las instrucciones de este artículo cree que ha identificado un problema de producto, informe del problema a Microsoft.
- Los clientes con soporte técnico Premier de Microsoft deben registrar una solicitud de servicio a través de canales normales.
- Todos los demás clientes pueden notificar problemas directamente al equipo del producto WDAC a través del Centro de comentarios de Windows. Seleccione la categoría Seguridad & Privacidad- Control de aplicaciones para asegurarse de que el problema se enrute correctamente al equipo del producto WDAC.
Al notificar problemas, asegúrese de proporcionar la siguiente información:
- Todos los datos de diagnóstico wdac descritos anteriormente.
- Si es posible, los archivos bloqueados.
- Instrucciones claras para reproducir el problema.