Depuración y solución de problemas de App Control

Nota

Algunas funciones de Control de aplicaciones para empresas solo están disponibles en versiones específicas de Windows. Más información sobre la disponibilidad de características de App Control.

En este artículo se describe cómo depurar y solucionar errores de aplicaciones y scripts al usar App Control para empresas.

1: recopilar datos de diagnóstico de App Control

Antes de depurar y solucionar los problemas de Control de aplicaciones, debe recopilar información de un dispositivo que presente 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 pueda necesitar:

  1. Recopilar datos de diagnóstico generales de App Control y copiarlos en %userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag:

    cidiag.exe /stop
    

    Si CiDiag.exe no está presente en tu versión de Windows, recopila esta información manualmente:

  2. Guarde la información del sistema del dispositivo en la carpeta CiDiag:

    msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
    
  3. Use CiTool.exe para realizar un inventario de la lista de directivas de Control de aplicaciones en el dispositivo. Omita este paso si CiTool.exe no está presente en su versión de Windows.

    citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
    
  4. Exportar los datos de la 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 ignorar.

  5. Copie los archivos de directiva de AppLocker de %windir%System32\AppLocker a la carpeta CiDiag:

    Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore
    
  6. Recopilar información de archivo 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
    
  7. Exportar la directiva de AppLocker vigente:

    Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml
    
  8. Recopilar información de estado y configuración de los 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 de Core App Control

Los eventos de Control de aplicaciones se generan en dos ubicaciones:

  • Registros de aplicaciones y servicios: Microsoft: Windows - CodeIntegrity - Operativo
  • Registros de aplicaciones y servicios: Microsoft - Windows - AppLocker - MSI y script

Dentro del directorio de salida 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 principales de Control de aplicaciones con 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: detallado
  • 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 - Operativo
  • Registros de aplicaciones y servicios: Microsoft: Windows - CAPI2: operativo
  • Registros de aplicaciones y servicios: Microsoft: Windows - DeviceGuard: operativo
  • Registros de aplicaciones y servicios - Microsoft - Windows - PowerShell - *
  • Windows: aplicación
  • Windows: sistema

2: Usar los datos de diagnóstico y de 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.

  1. Compruebe el conjunto de directivas de Control de aplicaciones activas y aplicadas. Confirme que solo están activas las directivas que espera que estén activas. 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 corresponde, 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 de Control de aplicaciones principal que se encuentra en los registros de aplicaciones y servicios: Microsoft - Windows - CodeIntegrity - Operativo. Dentro del directorio de salida de CiDiag, este registro de eventos se denomina CIOperational.evtx.
  2. Revise los eventos de bloque de ejecutables, dll y controladores del registro de eventos principal de Control de aplicaciones que se encuentra en los registros de aplicaciones y servicios - Microsoft - Windows - CodeIntegrity - Operativo. Dentro del directorio de salida de CiDiag, este registro de eventos se denomina CIOperational.evtx. Use la información de los eventos de bloque y sus eventos de detalles de firma 3089 correlacionados para investigar cualquier bloqueo que sea inexplicable o inesperado. Vea el ejemplo de archivo ejecutable bloqueado que se describe más adelante en este artículo como referencia.

  3. Revise los eventos de bloqueo de aplicaciones empaquetadas, instaladores MSI, scripts y objetos COM desde el registro de eventos de cumplimiento de script principal que se encuentra en Registros de aplicaciones y servicios - Microsoft - Windows - AppLocker - MSI y script. Dentro del directorio de salida de CiDiag, este registro de eventos se denomina ALMsiAndScript.evtx. Use la información de los eventos de bloque y sus eventos correlacionados de detalles de firma 8038 para investigar cualquier bloqueo que sea inexplicable o inesperado.

La mayoría de los problemas relacionados con el Control de aplicaciones, incluidos los errores de aplicaciones y scripts, se pueden diagnosticar mediante los pasos anteriores.

Análisis de eventos de un ejecutable bloqueado de ejemplo

Este es un ejemplo de EventData detallado de un evento 3077 típico de bloqueo del modo de aplicación de Control de aplicaciones y uno de sus eventos de información de firma 3089 correlacionados. Las tablas que siguen a cada captura de pantalla de evento describen algunos de los elementos contenidos en los eventos. Después de las descripciones de eventos hay un recorrido paso a paso que explica cómo usar los eventos para comprender por qué se produjo el bloqueo.

Evento 3077: evento de bloqueo disciplinario de App Control

Ejemplo de evento de bloqueo 3077 para PowerShell.exe.

Nombre del elemento Descripción
Sistema - Correlación - [ActivityID] No se muestra en la captura de pantalla
Use el ActivityID de correlación para hacer coincidir un evento de bloque de App Control con uno o más eventos de firma 3089.
Nombre del archivo La ruta de acceso y el nombre del archivo en el disco cuya ejecución fue bloqueada. Dado que el nombre en el disco es mutable, este valor no es el que se usa al crear reglas de archivos de Control de aplicaciones con -Level FileName. En su lugar, vea el elemento OriginalFileName más adelante en esta tabla.
Nombre del proceso La ruta de acceso y el nombre del archivo que intentó ejecutar el archivo bloqueado. También se denomina proceso primario.
Nivel de firma solicitado El nivel de autorización de firma de Windows el código necesario para poder ejecutarse. Consulte Nivel de firma solicitado y validado.
Nivel de firma validado El nivel de autorización de firma de Windows que se le dio 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 El hash SHA1 Authenticode para el archivo bloqueado.
SHA256 Hash El hash SHA256 Authenticode para el archivo bloqueado.
Hash plano SHA1 El hash de archivo plano SHA1 para el archivo bloqueado.
SHA256 Hash plano El hash de archivo plano SHA256 para el archivo bloqueado.
PolicyName El nombre descriptivo de la directiva de Control de aplicaciones que provocó el evento de bloqueo. Se muestra un evento de bloqueo 3077 independiente (o un evento de bloqueo de auditoría 3076) para cada directiva que impide que se ejecute el archivo.
PolicyId El valor de id. descriptivo de la directiva de Control de aplicaciones que provocó el evento de bloqueo.
PolicyHash El hash SHA256 Authenticode del binario de directiva de Control de aplicaciones que provocó el evento de bloque.
Nombre de archivo original El 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 archivos de Control de aplicaciones con -Level FileName.
Nombre interno 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 con -Level FileName -SpecificFileNameLevel InternalName.
Descripción del archivo 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 con -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 con -Level FileName -SpecificFileNameLevel ProductName.
FileVersion El valor VersionEx de la directiva que se usa para aplicar el control de versiones sobre las directivas firmadas.
PolicyGUID El PolicyId de la directiva de Control de aplicaciones que provocó el evento de bloqueo.
UserWriteable Un valor booleano que indica si el archivo estaba en una ubicación que el usuario pueda escribir. Esta información es útil para diagnosticar problemas cuando se permiten reglas de FilePath.
PackageFamilyName Nombre de familia de paquete de la aplicación empaquetada (MSIX) que incluye el archivo bloqueado.

Evento 3089: evento de información de firma de control de aplicaciones

Ejemplo 3089 de evento de información de firma para PowerShell.exe.

Nombre del elemento Descripción
Sistema - Correlación - [ActivityID] Use la correlación ActivityID para hacer coincidir un evento de firma de App Control con su evento de bloque.
TotalSignatureCount El 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 El valor hash que Control de aplicaciones usó para coincidir con el archivo. Este valor debe coincidir con uno de los cuatro hashes mostrados en el evento de bloque 3077 o 3076. Si no se encontró ninguna firma para el archivo (TotalSignatureCount = 0), solo se mostrará el valor hash.
SignatureType El tipo de firma.
ValidatedSigningLevel El nivel de autorización de firma de Windows que se 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 de Control de aplicaciones. Consulta VerificationError.
PublisherName El valor de nombre común (CN) del certificado de hoja.
Nombre del emisor El valor CN del certificado más alto disponible en la cadena de certificados. Este nivel suele ser un certificado por debajo de la raíz.
EditorTBSHash El hash TBS del certificado de hoja.
EmisorTBSHash El hash de TBS del certificado más alto disponible en la cadena de certificados. Este nivel suele ser un certificado por debajo de la raíz.

Tutorial paso a paso de los eventos de ejemplo 3077 y 3089

Ahora veamos cómo usar los datos de eventos en los eventos de ejemplo 3077 y 3089 para comprender por qué la directiva de Control de aplicaciones bloqueó este archivo.

Comprender qué archivo se está bloqueando y el contexto del bloqueo

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ó ejecutarlo. Tenga en cuenta esta información de contexto para determinar si el bloque es esperado y deseado.

En el ejemplo, el archivo que se está bloqueando es PowerShell.exe, que forma parte de Windows y normalmente se espera que se ejecute. Sin embargo, en este caso, la directiva se basó en la plantilla de directiva de Windows en modo S, que no permite que los hosts de script se ejecuten como una forma de limitar la superficie expuesta a ataques. Para el modo S, este evento de bloque es un éxito. Pero supongamos que el autor de la política no estaba al tanto de esa restricción cuando eligió la plantilla, y tratemos este bloque como inesperado.

Determinar por qué Control de aplicaciones rechazó el archivo

De nuevo en lo que respecta al evento 3077, vemos que el nivel de firma solicitada de 2 significa que el código debe pasar la directiva de control de aplicaciones. Pero el nivel de firma validado de 1 significa que el código se trató como si no estuviera firmado. "Sin firmar" podría significar que el archivo realmente sin firmar, firmado pero con un certificado no válido o firmado pero sin ningún certificado permitido por la directiva de Control de aplicaciones.

Ahora, inspeccionemos los eventos 3089 correlacionados para el archivo bloqueado. En el ejemplo, estamos examinando solo la primera firma (índice de firma 0) encontrada 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. El VerificationError de 21 significa que la firma no pasó la directiva de Control de aplicaciones.

Es importante revisar la información de cada evento 3089 correlacionado, ya que cada firma puede tener un ValidatedSigningLevel y un VerificationError diferentes.

Importante

Observe cómo el nivel de firma validado en el evento 3077 se interpreta de forma muy diferente desde el nivel ValidatedSigningLevel en el evento 3089.

En el caso del evento 3077, el nivel de firma validado nos indica cómo Windows trató realmente el binario.

En el caso del evento 3089, por otro lado, ValidatedSigningLevel nos indica el nivel máximo potencial que podría recibir la firma. Debemos usar el VerificationError para entender por qué se rechazó la firma.

3: Resolver problemas comunes

Después de analizar los datos de diagnóstico de App Control, puede tomar medidas para resolver el problema o realizar más pasos de depuración. A continuación se presentan algunos problemas comunes y pasos que puede intentar para resolver o aislar aún más el problema raíz:

Problema: Se bloqueó un archivo que desea permitir

  • Use datos de los registros de eventos principales de Control de aplicaciones para agregar reglas que permitan el archivo bloqueado.
  • Vuelva a implementar el archivo o la aplicación con un instalador administrado si la directiva confía en instaladores administrados.

Problema: Hay una directiva activa que no es esperada

Esta condición puede existir si:

  • Se ha quitado una directiva, pero el sistema no se ha reiniciado.
  • Una directiva se quitó parcialmente, pero todavía existe una copia de la directiva en la partición del sistema o de EFI.
  • Una directiva con PolicyId {A244370E-44C9-4C06-B551-F6016E563076} (formato de directiva única) se copió en la ubicación de directivas de formato de varias directivas antes de la activación, lo que dio como resultado un binario de directiva duplicado en el disco. Compruebe si hay archivos SiPolicy.p7b y {A244370E-44C9-4C06-B551-F6016E563076}.cip en las particiones System y EFI.
  • Una directiva se implementó incorrectamente en el dispositivo.
  • Un actor malintencionado 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 las directivas de Control de aplicaciones para la directiva identificada.

Problema: se está produciendo un error de aplicación no controlado y no se observan eventos de control de aplicaciones

Algunas aplicaciones modifican su comportamiento cuando una directiva de Control de aplicaciones 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 scripts.

Intente aislar la causa raíz mediante las siguientes acciones:

  • Comprueba los demás registros de eventos enumerados en la sección 1 de este artículo para ver si hay eventos que se correspondan con errores inesperados de la aplicación.
  • Reemplace temporalmente la directiva de Control de aplicaciones por otra directiva que deshabilite la aplicación de scripts y vuelva a probar.
  • Reemplace temporalmente la directiva de Control de aplicaciones por otra directiva que permita todos los objetos COM y vuelva a probar.
  • Reemplace temporalmente la directiva de Control de aplicaciones por otra directiva que relaje otras reglas de directiva y vuelva a probar.

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 de Control de aplicaciones que bloquea la aplicación incluya la opción de habilitar el instalador administrado.
  • Compruebe que la directiva de AppLocker efectiva $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 de AppLocker: EXE y DLL para el proceso del instalador administrado con PolicyName = MANAGEDINSTALLER. Si, en su lugar, ve un evento con 8003 u 8004 con PolicyName = MANAGEDINSTALLER, compruebe las reglas de 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 tengan el atributo de origen extendido del instalador administrado. Si no es así, vuelva a implementar los archivos con el instalador administrado y vuelva a comprobarlo.
  • Pruebe la instalación de una aplicación diferente con 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 permitiera Intelligent Security Graph (ISG) no funciona

Para depurar problemas con ISG, pruebe estos pasos:

  • Compruebe que la directiva de Control de aplicaciones que está bloqueando la aplicación incluya la opción de 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.
  • Utilice 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 comprobarlo.
  • Comprueba si la aplicación encuentra una limitación conocida con ISG.

Problema: el Antivirus de Microsoft Defender está en modo pasivo después de habilitar el Control de aplicaciones o el ISG

Cuando habilita el Control de aplicaciones con ISG o Control inteligente de aplicaciones, Antivirus de Microsoft Defender se puede ejecutar en modo pasivo o híbrido. Este estado es un comportamiento esperado, no un error. Control de aplicaciones usa la información de reputación proporcionada por Defender como parte de sus decisiones de ejecución de código. Este estado no cambia cómo Defender se comporta en el sistema. Cualquier protección antivirus en tiempo real sigue siendo proporcionada por la solución antivirus elegida.

Para comprobar el modo operativo de Defender, ejecute el siguiente comando en PowerShell y revise el AMRunningMode valor:

Get-MpComputerStatus | Select-Object AMRunningMode

Espere un valor de modo pasivo o modo híbrido si habilitó intencionadamente App Control con ISG o Smart App Control activado. Solo necesita investigar si no habilitó App Control con ISG o Smart App Control y no espera este modo, o si tampoco tiene un antivirus de terceros. En ese caso, compruebe qué directivas de Control de aplicaciones están activas y revise Antivirus de Microsoft Defender y Control de aplicaciones.

4: Informar de problemas a Microsoft, si procede

Si después de seguir las instrucciones cubiertas en este artículo cree que ha identificado un problema de producto, notifíquelo a Microsoft.

  • Los clientes con soporte técnico Microsoft Premier deben registrar una solicitud de servicio a través de los canales normales.
  • Todos los demás clientes pueden informar de los problemas directamente al equipo de producto de Control de aplicaciones a través del Centro de opiniones sobre Windows. Seleccione la categoría Seguridad & privacidad: control de aplicaciones para asegurarse de que el problema se enruta correctamente al equipo de producto de App Control.

Al notificar problemas, asegúrate de proporcionar la siguiente información: