Depuração e solução de problemas do WDAC

Observação

Alguns recursos do Windows Defender Application Control só estão disponíveis em versões específicas do Windows. Saiba mais sobre a disponibilidade do recurso Windows Defender Controle de Aplicativo.

Este artigo descreve como depurar e solucionar problemas de falhas de aplicativo e script ao usar Windows Defender WDAC (Controle de Aplicativo).

1 – Coletar dados de diagnóstico do WDAC

Antes de depurar e solucionar problemas do WDAC, você deve coletar informações de um dispositivo que exibe o comportamento do problema.

Execute os seguintes comandos de uma janela do PowerShell elevada para coletar as informações de diagnóstico necessárias:

  1. Colete dados gerais de diagnóstico do WDAC e copie-os para %userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag:

    cidiag.exe /stop
    

    Se CiDiag.exe não estiver presente em sua versão do Windows, colete essas informações manualmente:

  2. Salve as informações do sistema do dispositivo na pasta CiDiag:

    msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
    
  3. Use CiTool.exe para fazer inventário da lista de políticas WDAC no dispositivo. Ignore esta etapa se CiTool.exe não estiver presente na versão do Windows.

    citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
    
  4. Exportar dados da chave do registro AppLocker para a pasta 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
    

    Observação

    Você pode ver um erro de que o sistema não foi capaz de encontrar a chave ou o valor do registro especificado. Esse erro não indica um problema e pode ser ignorado.

  5. Copie todos os arquivos de política do AppLocker de %windir%System32\AppLocker para a pasta CiDiag:

    Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore
    
  6. Colete informações de arquivo para os arquivos de política do AppLocker coletados na etapa 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 a política efetiva do AppLocker:

    Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml
    
  8. Coletar informações de estado e configuração de serviços do 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
    

Logs de eventos WDAC principais

Os eventos WDAC são gerados em dois locais:

  • Logs de aplicativos e serviços – Microsoft – Windows – CodeIntegrity – Operacional
  • Logs de aplicativos e serviços – Microsoft – Windows – AppLocker – MSI e Script

No diretório de saída ciDiag, esses logs de eventos são chamados CIOperational.evtx e ALMsiAndScript.evtx, respectivamente.

Outros logs de eventos do Windows que podem ser úteis

Às vezes, você pode ser capaz de complementar as informações contidas nos principais logs de eventos WDAC com informações encontradas nesses outros logs de eventos. CIDiag.exe não coleta os mostrados em itálicos.

  • Logs de aplicativos e serviços – Microsoft – Windows – CodeIntegrity – Verbose
  • Logs de aplicativos e serviços – Microsoft – Windows – AppLocker – EXE e DLL
  • Logs de aplicativos e serviços – Microsoft – Windows – AppLocker – Implantação de aplicativo empacotada
  • Logs de aplicativos e serviços – Microsoft – Windows – AppLocker – App-Execution empacotado
  • Logs de aplicativos e serviços – Microsoft – Windows – AppID – Operacional
  • Logs de aplicativos e serviços – Microsoft – Windows – CAPI2 – Operacional
  • Logs de aplicativos e serviços – Microsoft – Windows – DeviceGuard – Operacional
  • Logs de aplicativos e serviços – Microsoft – Windows – PowerShell – *
  • Windows – Aplicativo
  • Windows – Sistema

2 – Usar os dados de diagnóstico e log para identificar problemas

Tendo coletado as informações de diagnóstico necessárias de um dispositivo, você está pronto para iniciar a análise dos dados de diagnóstico coletados na seção anterior.

  1. Verifique o conjunto de políticas WDAC que estão ativas e impostas. Confirme se somente as políticas que você espera estar ativo estão ativas no momento. Esteja ciente das políticas de caixa de entrada do Windows que também podem estar ativas. Você pode usar qualquer um desses métodos:

    • Examine a saída de CiTool.exe -lp, se aplicável, que foi salva no diretório de saída CIDiag como CiToolOutput.json. Consulte usar o Microsoft Edge para exibir o arquivo json formatado.
    • Examine todos os eventos de ativação de política do log de eventos WDAC principal encontrados nos logs de Aplicativos e Serviços – Microsoft – Windows – CodeIntegrity – Operacional. No diretório de saída CIDiag, esse log de eventos é chamado CIOperational.evtx.
  2. Examine todos os eventos de bloco para executáveis, dlls e drivers do log de eventos WDAC principal encontrado em logs de aplicativos e serviços - Microsoft - Windows - CodeIntegrity - Operacional. No diretório de saída CIDiag, esse log de eventos é chamado CIOperational.evtx. Use informações dos eventos do bloco e seus eventos de detalhes de assinatura 3089 correlacionados para investigar quaisquer blocos que sejam inexplicáveis ou inesperados. Consulte o exemplo executável bloqueado descrito posteriormente neste artigo para obter referência.

  3. Examine todos os eventos de bloco para aplicativos empacotados, instaladores msi, scripts e objetos COM do log de eventos de execução de script principal encontrados nos logs de Aplicativos e Serviços - Microsoft - Windows - AppLocker - MSI e Script. No diretório de saída CIDiag, esse log de eventos é chamado de ALMsiAndScript.evtx. Use informações dos eventos do bloco e seus eventos de detalhes de assinatura 8038 correlacionados para investigar quaisquer blocos que sejam inexplicáveis ou inesperados.

A maioria dos problemas relacionados ao WDAC, incluindo falhas de aplicativo e script, pode ser diagnosticada usando as etapas anteriores.

Análise de eventos para um executável bloqueado por exemplo

Aqui está um exemplo de EventData detalhado de um evento de bloco de modo de aplicação do WDAC típico 3077 e um de seus eventos de informações de assinatura 3089 correlacionados. As tabelas que seguem cada captura de tela de evento descrevem alguns dos elementos contidos nos eventos. Seguindo as descrições do evento está um passo a passo explicando como usar os eventos para entender por que o bloco ocorreu.

Evento 3077 – Evento de bloqueio de imposição do WDAC

Exemplo de evento de bloco 3077 para PowerShell.exe.

Nome do elemento Descrição
Sistema – Correlação – [ActivityID] Não mostrado na captura de tela
Use a correlação ActivityID para corresponder a um evento de bloco WDAC com um ou mais eventos de assinatura 3089.
Nome do arquivo O caminho e o nome do arquivo no disco que foi impedido de ser executado. Como o nome no disco é mutável, esse valor não é o usado ao criar regras de arquivo WDAC com -Level FileName. Em vez disso, consulte o elemento OriginalFileName mais tarde nesta tabela.
Nome do processo O caminho e o nome do arquivo que tentou executar o arquivo bloqueado. Também chamou o processo pai.
Nível de assinatura solicitado O nível de autorização de assinatura do Windows é o código necessário para ser executado. Consulte Nível de assinatura solicitado e validado.
Nível de assinatura validado O nível de autorização de assinatura do Windows que o código recebeu. Consulte Nível de assinatura solicitado e validado.
Status Windows NT status código. Você pode usar certutil.exe -error <status> para pesquisar o significado do código status.
SHA1 Hash O hash sha1 Authenticode para o arquivo bloqueado.
SHA256 Hash O hash sha256 Authenticode para o arquivo bloqueado.
Hash simples SHA1 O hash de arquivo simples SHA1 para o arquivo bloqueado.
Hash simples SHA256 O hash de arquivo simples SHA256 para o arquivo bloqueado.
Policyname O nome amigável da política WDAC que causou o evento de bloco. Um evento de bloco 3077 separado (ou evento de bloco de auditoria 3076) é mostrado para cada política que bloqueia a execução do arquivo.
PolicyId O valor da ID amigável da política WDAC que causou o evento de bloco.
PolicyHash O hash sha256 Authenticode do binário de política do WDAC que causou o evento de bloco.
OriginalFileName O nome do arquivo imutável definido pelo desenvolvedor no cabeçalho de recurso do arquivo bloqueado. Esse valor é o usado ao criar regras de arquivo WDAC com -Level FileName.
Internalname Outro valor imutável definido pelo desenvolvedor no cabeçalho de recurso do arquivo bloqueado. Você pode substituir esse valor pelo OriginalFileName nas regras de arquivo por -Level FileName -SpecificFileNameLevel InternalName.
Filedescription Outro valor imutável definido pelo desenvolvedor no cabeçalho de recurso do arquivo bloqueado. Você pode substituir esse valor pelo OriginalFileName nas regras de arquivo por -Level FileName -SpecificFileNameLevel FileDescription.
ProductName Outro valor imutável definido pelo desenvolvedor no cabeçalho de recurso do arquivo bloqueado. Você pode substituir esse valor pelo OriginalFileName nas regras de arquivo por -Level FileName -SpecificFileNameLevel ProductName.
Fileversion O valor VersionEx da política usado para impor o controle de versão sobre políticas assinadas.
PolicyGUID O PolicyId da política WDAC que causou o evento de bloco.
UserWriteable Um valor booliano que indica se o arquivo estava em um local gravável pelo usuário. Essas informações são úteis para diagnosticar problemas ao permitir regras do FilePath.
PackageFamilyName O Nome da Família de Pacotes para o aplicativo empacotado (MSIX) que inclui o arquivo bloqueado.

Evento 3089 – Evento de informações de assinatura do WDAC

Exemplo de evento de informações de assinatura 3089 para PowerShell.exe.

Nome do elemento Descrição
Sistema – Correlação – [ActivityID] Use a correlação ActivityID para corresponder a um evento de assinatura WDAC com seu evento de bloco.
TotalSignatureCount O número total de assinaturas detectadas para o arquivo bloqueado.
Assinatura A contagem de índices, a partir de 0, da assinatura atual mostrada neste evento 3089. Se o arquivo tiver várias assinaturas, você encontrará outros 3.089 eventos para as outras assinaturas.
Hash O valor de hash usado pelo WDAC para corresponder ao arquivo. Esse valor deve corresponder a um dos quatro hashes mostrados no evento do bloco 3077 ou 3076. Se nenhuma assinatura foi encontrada para o arquivo (TotalSignatureCount = 0), apenas o valor de hash será mostrado.
SignatureType O tipo de assinatura.
ValidatedSigningLevel O nível de autorização de assinatura do Windows que a assinatura cumpriu. Consulte Nível de assinatura solicitado e validado.
VerificationError A razão pela qual essa assinatura em particular não passou na política do WDAC. Consulte VerificationError.
Publishername O valor de CN (nome comum) do certificado folha.
Issuername O valor CN do certificado mais alto disponível na cadeia de certificados. Esse nível normalmente é um certificado abaixo da raiz.
PublisherTBSHash O hash TBS do certificado de folha.
IssuerTBSHash O hash TBS do certificado mais alto disponível na cadeia de certificados. Esse nível normalmente é um certificado abaixo da raiz.

Passo a passo dos eventos de exemplo 3077 e 3089

Agora vamos percorrer como usar os dados de evento nos eventos de exemplo 3077 e 3089 para entender por que a política do WDAC bloqueou esse arquivo.

Entender qual arquivo está sendo bloqueado e o contexto do bloco

Referindo-se ao evento 3077, localize as informações que identificam a política, o arquivo que está sendo bloqueado e o processo pai que tentou executá-la. Considere essas informações de contexto para determinar se o bloco é esperado e desejado.

No exemplo, o arquivo que está sendo bloqueado é PowerShell.exe, que faz parte do Windows e normalmente seria esperado para ser executado. No entanto, nesse caso, a política foi baseada no modelo de política do modo Windows em S, o que não permite que os hosts de script sejam executados como uma maneira de limitar a superfície de ataque. Para o modo S, esse evento de bloco é um sucesso. Mas vamos supor que o autor da política não tinha conhecimento dessa restrição quando escolheu o modelo e tratar esse bloco como inesperado.

Determinar por que o WDAC rejeitou o arquivo

Novamente referindo-se ao evento 3077, vemos que o nível de assinatura solicitado de 2 significa que o código deve passar a política WDAC. Mas o nível de assinatura validado de 1 significa que o código foi tratado como sem sinal. "Não assinado" pode significar que o arquivo estava realmente sem sinal, assinado, mas com um certificado inválido ou assinado, mas sem certificados permitidos pela política WDAC.

Agora, vamos inspecionar os eventos 3089 correlacionados para o arquivo bloqueado. No exemplo, estamos analisando apenas a primeira assinatura (índice de assinatura 0) encontrada em um arquivo que tinha várias assinaturas. Para essa assinatura, o ValidatedSigningLevel é 12, o que significa que tem uma assinatura de produto do Microsoft Windows. O VerificationError de 21 significa que a assinatura não passou na política WDAC.

É importante examinar as informações de cada evento 3089 correlacionado, pois cada assinatura pode ter um ValidatedSigningLevel e VerificationError diferentes.

Importante

Observe como o Nível de Assinatura Validado no evento 3077 é interpretado de forma muito diferente do ValidatedSigningLevel no evento 3089.

No caso do evento 3077, o Nível de Assinatura Validado nos informa como o binário foi realmente tratado pelo Windows.

No caso do evento 3089, por outro lado, ValidatedSigningLevel nos informa o nível máximo potencial que a assinatura poderia receber. Devemos usar o VerificationError para entender por que a assinatura foi rejeitada.

3 – Resolver problemas comuns

Tendo analisado os dados de diagnóstico do WDAC, você pode tomar medidas para resolve o problema ou fazer mais etapas de depuração. A seguir estão alguns problemas comuns e etapas que você pode tentar resolve ou isolar ainda mais o problema raiz:

Problema: um arquivo foi bloqueado que você deseja permitir

  • Use dados dos principais logs de eventos WDAC para adicionar regras para permitir o arquivo bloqueado.
  • Reimplante o arquivo ou o aplicativo usando um instalador gerenciado se sua política confiar em instaladores gerenciados.

Problema: uma política está ativa que é inesperada

Essa condição poderá existir se:

  • Uma política foi removida, mas o sistema não foi reiniciado.
  • Uma política foi parcialmente removida, mas uma cópia da política ainda existe na partição System ou EFI.
  • Uma política com PolicyId {A244370E-44C9-4C06-B551-F6016E563076} (formato de política única) foi copiada para o local da política de formato de várias políticas antes da ativação, resultando em um binário de política duplicado em disco. Verifique se há arquivos SiPolicy.p7b e {A244370E-44C9-4C06-B551-F6016E563076}.cip nas partições System e EFI.
  • Uma política foi implantada incorretamente no dispositivo.
  • Um invasor com acesso de administrador aplicou uma política para causar negação de serviço para alguns processos críticos.

Para resolve esse problema, siga as instruções para Remover políticas WDAC para a política identificada.

Problema: uma falha de aplicativo não tratada está ocorrendo e nenhum evento WDAC é observado

Alguns aplicativos alteram seu comportamento quando uma política WDAC do modo de usuário está ativa, o que pode resultar em falhas inesperadas. Ele também pode ser um efeito colateral da aplicação de script para aplicativos que não lidam corretamente com os comportamentos de aplicação implementados pelos hosts de script.

Tente isolar a causa raiz fazendo as seguintes ações:

  • Verifique os outros logs de eventos listados na seção 1 deste artigo para obter eventos correspondentes às falhas inesperadas do aplicativo.
  • Substitua temporariamente a política WDAC por outra política que desabilita a aplicação e o retestamento do script.
  • Substitua temporariamente a política WDAC por outra política que permita que todos os objetos COM e retestem.
  • Substitua temporariamente a política WDAC por outra política que relaxe outras regras de política e retize.

Problema: um aplicativo implantado por um instalador gerenciado não está funcionando

Para depurar problemas usando o instalador gerenciado, experimente estas etapas:

  • Verifique se a política WDAC que está bloqueando o aplicativo inclui a opção de habilitar o instalador gerenciado.
  • Verifique se a política efetiva do AppLocker $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml está correta, conforme descrito em Permitir automaticamente aplicativos implantados por um instalador gerenciado.
  • Verifique se os serviços AppLocker estão em execução. Essas informações são encontradas em $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt criados na seção 1 deste artigo.
  • Verifique se existe um arquivo AppLocker chamado MANAGEDINSTALLER. APPLOCKER existe na pasta CiDiag criada anteriormente. Caso contrário, repita as etapas para implantar e habilitar a configuração do AppLocker do instalador gerenciado.
  • Reinicie o processo do instalador gerenciado e marcar que um evento 8002 seja observado no log de eventos AppLocker – EXE e DLL para o processo de instalador gerenciado com PolicyName = MANAGEDINSTALLER. Se, em vez disso, você vir um evento com 8003 ou 8004 com PolicyName = MANAGEDINSTALLER, marcar as regras managedInstaller na política do AppLocker XML e garantir que uma regra corresponda ao processo do instalador gerenciado.
  • Use fsutil.exe para verificar se os arquivos gravados pelo processo do instalador gerenciado têm o atributo de origem do instalador gerenciado estendido. Caso contrário, reimplante os arquivos com o instalador gerenciado e marcar novamente.
  • Teste a instalação de um aplicativo diferente usando o instalador gerenciado.
  • Adicione outro instalador gerenciado à política do AppLocker e à instalação de teste usando o outro instalador gerenciado.
  • Verifique se o aplicativo está encontrando uma limitação conhecida com o instalador gerenciado. Nesse caso, você deve autorizar o aplicativo usando outros meios.

Problema: um aplicativo que você esperava que o ISG (Intelligent Security Graph) permitisse não está funcionando

Para depurar problemas usando o ISG, experimente estas etapas:

  • Verifique se a política WDAC que está bloqueando o aplicativo inclui a opção de habilitar o grafo de segurança inteligente.
  • Verifique se os serviços AppLocker estão em execução. Essas informações são encontradas em $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt criados na seção 1 deste artigo.
  • Use fsutil.exe para verificar se os arquivos têm o atributo estendido de origem ISG. Caso contrário, reimplante os arquivos com o instalador gerenciado e marcar novamente.
  • Verifique se o aplicativo está encontrando uma limitação conhecida com ISG.

4 – Relatar problemas à Microsoft, se for o caso

Se depois de seguir as diretrizes abordadas por este artigo, você acredita ter identificado um problema de produto, denuncie o problema à Microsoft.

  • Os clientes com suporte do Microsoft Premier devem registrar uma solicitação de serviço por meio de canais normais.
  • Todos os outros clientes podem relatar problemas diretamente à equipe de produtos do WDAC por meio do Hub de Comentários do Windows. Selecione a categoria Segurança & Privacidade – Controle de Aplicativo para garantir que o problema seja roteado corretamente para a equipe de produtos do WDAC.

Ao relatar problemas, certifique-se de fornecer as seguintes informações:

  • Todos os dados de diagnóstico do WDAC descritos anteriormente.
  • Se possível, os arquivos bloqueados.
  • Desmarque instruções para reproduzir o problema.