Depuração e resolução de problemas do Controlo de Aplicações

Observação

Algumas capacidades do Controlo de Aplicações para Empresas só estão disponíveis em versões específicas do Windows. Saiba mais sobre a disponibilidade das funcionalidades do Controlo de Aplicações.

Este artigo descreve como depurar e resolver problemas de falhas de aplicações e scripts ao utilizar o Controlo de Aplicações para Empresas.

1 - Recolher dados de diagnóstico do Controlo de Aplicações

Antes de depurar e resolver problemas do Controlo de Aplicações, tem de recolher informações de um dispositivo que apresente o comportamento do problema.

Execute os seguintes comandos a partir de uma janela elevada do PowerShell para recolher as informações de diagnóstico de que poderá precisar:

  1. Recolha os dados de diagnóstico gerais do Controlo de Aplicações e copie-os para %userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag:

    cidiag.exe /stop
    

    Se CiDiag.exe não estiver presente na sua versão do Windows, recolha estas informações manualmente:

  2. Guarde as Informações do Sistema do dispositivo na pasta CiDiag:

    msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
    
  3. Utilize CiTool.exe para inventariar a lista de políticas de Controlo de Aplicações no dispositivo. Ignore este passo se CiTool.exe não estiver presente na sua versão do Windows.

    citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
    
  4. Exporte os dados da chave de registo do 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

    Poderá ver um erro a indicar que o sistema não conseguiu localizar a chave ou o valor de registo especificado. Este erro não indica um problema e pode ser ignorado.

  5. Copie quaisquer ficheiros 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. Recolha informações de ficheiro para os ficheiros de política do AppLocker recolhidos no passo 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. Exporte a política appLocker em vigor:

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

Registos de eventos do Controlo de Aplicações Principais

Os eventos do Controlo de Aplicações são gerados em duas localizações:

  • Registos de Aplicações e Serviços – Microsoft – Windows – Integridade do Código – Operacional
  • Registos de Aplicações e Serviços – Microsoft – Windows – AppLocker – MSI e Script

No diretório de saída ciDiag, estes registos de eventos são denominados CIOperational.evtx e ALMsiAndScript.evtx, respetivamente.

Outros registos de eventos do Windows que podem ser úteis

Por vezes, poderá ser capaz de complementar as informações contidas nos registos de eventos principais do Controlo de Aplicações com informações encontradas nestes outros registos de eventos. CIDiag.exe não recolhe os apresentados em itálico.

  • Registos de Aplicações e Serviços – Microsoft – Windows – Integridade do Código – Verboso
  • Registos de Aplicações e Serviços – Microsoft – Windows – AppLocker – EXE e DLL
  • Registos de Aplicações e Serviços – Microsoft – Windows – AppLocker – Implementação de aplicações em pacote
  • Registos de Aplicações e Serviços – Microsoft – Windows – AppLocker – Execução de Aplicações em Pacote
  • Registos de Aplicações e Serviços – Microsoft – Windows – AppID – Operacional
  • Registos de Aplicações e Serviços – Microsoft – Windows – CAPI2 – Operacional
  • Registos de Aplicações e Serviços – Microsoft – Windows – DeviceGuard – Operacional
  • Registos de Aplicações e Serviços – Microsoft – Windows – PowerShell – *
  • Windows - Aplicação
  • Windows - Sistema

2 - Utilize os dados de diagnóstico e de registo para identificar problemas

Depois de recolher as informações de diagnóstico necessárias de um dispositivo, está pronto para iniciar a análise dos dados de diagnóstico recolhidos na secção anterior.

  1. Verifique o conjunto de políticas de Controlo de Aplicações que estão ativas e impostas. Confirme que apenas as políticas que espera que estejam ativas estão atualmente ativas. Tenha em atenção as políticas de caixa de entrada do Windows que também podem estar ativas. Pode utilizar qualquer um destes métodos:

    • Reveja o resultado de CiTool.exe -lp, se aplicável, que foi guardado no diretório de saída CIDiag como CiToolOutput.json. Consulte Utilizar o Microsoft Edge para ver o ficheiro json formatado.
    • Reveja todos os eventos de ativação de políticas do registo de eventos do Controlo de Aplicações principal encontrado nos registos de Aplicações e Serviços – Microsoft – Windows – Integridade do Código – Operacional. No diretório de saída CIDiag, este registo de eventos chama-se CIOperational.evtx.
  2. Reveja quaisquer eventos de bloqueio para executáveis, dlls e controladores do registo de eventos do Controlo de Aplicações principal encontrado nos registos de Aplicações e Serviços – Microsoft – Windows – Integridade do Código – Operacional. No diretório de saída CIDiag, este registo de eventos chama-se CIOperational.evtx. Utilize as informações dos eventos de bloqueio e os eventos de detalhes da assinatura 3089 correlacionados para investigar quaisquer blocos inexplicáveis ou inesperados. Veja o exemplo executável bloqueado descrito mais adiante neste artigo para referência.

  3. Reveja quaisquer eventos de bloqueio para aplicações em pacote, instaladores MSI, scripts e objetos COM do registo de eventos de imposição do script principal encontrado nos registos de Aplicações e Serviços – Microsoft – Windows – AppLocker – MSI e Script. No diretório de saída CIDiag, este registo de eventos chama-se ALMsiAndScript.evtx. Utilize as informações dos eventos de bloqueio e os eventos de detalhes da assinatura 8038 correlacionados para investigar quaisquer blocos inexplicáveis ou inesperados.

A maioria dos problemas relacionados com o Controlo de Aplicações, incluindo falhas de aplicações e scripts, pode ser diagnosticada com os passos anteriores.

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

Eis um exemplo de EventData detalhado de um evento 3077 de bloqueio de modo de imposição do Controlo de Aplicações típico e um dos eventos de informações de assinatura correlacionados com 3089. As tabelas que se seguem a cada captura de ecrã de evento descrevem alguns dos elementos contidos nos eventos. A seguir às descrições do evento encontra-se uma instruções passo a passo que explica como utilizar os eventos para compreender por que motivo o bloco ocorreu.

Evento 3077 - Evento de bloqueio de imposição do Controlo de Aplicações

Exemplo de evento de bloco 3077 para PowerShell.exe.

Nome do elemento Descrição
Sistema – Correlação – [ActivityID] Não apresentado na captura de ecrã
Utilize o ActivityID de correlação para corresponder um evento de bloco do Controlo de Aplicações a um ou mais eventos de assinatura 3089.
Nome do Ficheiro O caminho e o nome do ficheiro no disco que foi impedido de ser executado. Uma vez que o nome no disco é mutável, este valor não é o utilizado ao criar regras de ficheiros do Controlo de Aplicações com -Level FileName. Em vez disso, veja o elemento OriginalFileName mais adiante nesta tabela.
Nome do Processo O caminho e o nome do ficheiro que tentou executar o ficheiro bloqueado. Também denominado processo principal.
Nível de Assinatura Pedido O nível de autorização de assinatura do Windows o código necessário para ser transmitido para ser executado. Veja Nível de assinatura pedido e validado.
Nível de Assinatura Validado O nível de autorização de assinatura do Windows que o código foi fornecido. Veja Nível de assinatura pedido e validado.
Status Windows NT status código. Pode utilizar certutil.exe -error <status> para procurar o significado do código de status.
SHA1 Hash O hash SHA1 Authenticode para o ficheiro bloqueado.
SHA256 Hash O hash SHA256 Authenticode para o ficheiro bloqueado.
Hash Plano SHA1 O hash de ficheiro simples SHA1 para o ficheiro bloqueado.
Hash Plano SHA256 O hash de ficheiro simples SHA256 para o ficheiro bloqueado.
PolicyName O nome amigável da política de Controlo de Aplicações que causou o evento de bloqueio. É apresentado um evento de bloco 3077 separado (ou evento de bloco de auditoria 3076) para cada política que bloqueia a execução do ficheiro.
PolicyId O valor de ID amigável da política de Controlo de Aplicações que causou o evento de bloqueio.
PolicyHash O hash SHA256 Authenticode do binário da política de Controlo de Aplicações que causou o evento de bloqueio.
OriginalFileName O nome de ficheiro imutável definido pelo programador no cabeçalho de recurso do ficheiro bloqueado. Este valor é o utilizado ao criar regras de ficheiros do Controlo de Aplicações com -Level FileName.
InternalName Outro valor imutável definido pelo programador no cabeçalho de recurso do ficheiro bloqueado. Pode substituir este valor pelo OriginalFileName nas regras de ficheiro por -Level FileName -SpecificFileNameLevel InternalName.
FileDescription Outro valor imutável definido pelo programador no cabeçalho de recurso do ficheiro bloqueado. Pode substituir este valor pelo OriginalFileName nas regras de ficheiro por -Level FileName -SpecificFileNameLevel FileDescription.
ProductName Outro valor imutável definido pelo programador no cabeçalho de recurso do ficheiro bloqueado. Pode substituir este valor pelo OriginalFileName nas regras de ficheiro por -Level FileName -SpecificFileNameLevel ProductName.
FileVersion O valor VersionEx da política utilizado para impor o controlo de versões sobre as políticas assinadas.
PolicyGUID O PolicyId da política de Controlo de Aplicações que causou o evento de bloqueio.
UserWriteable Um valor booleano que indica se o ficheiro estava numa localização gravável pelo utilizador. Estas informações são úteis para diagnosticar problemas ao permitir as regras do FilePath.
PackageFamilyName O Nome da Família do Pacote para a aplicação em pacote (MSIX) que inclui o ficheiro bloqueado.

Evento 3089 – Evento de informações da assinatura do Controlo de Aplicações

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

Nome do elemento Descrição
Sistema – Correlação – [ActivityID] Utilize o ActivityID de correlação para corresponder um evento de assinatura do Controlo de Aplicações ao evento de bloco.
TotalSignatureCount O número total de assinaturas detetadas para o ficheiro bloqueado.
Assinatura A contagem de índices, a partir de 0, da assinatura atual apresentada neste evento 3089. Se o ficheiro tiver múltiplas assinaturas, encontrará outros eventos 3089 para as outras assinaturas.
Hash O valor hash que o Controlo de Aplicações utilizou para corresponder ao ficheiro. Este valor deve corresponder a um dos quatro hashes mostrados no evento de bloco 3077 ou 3076. Se não foram encontradas assinaturas para o ficheiro (TotalSignatureCount = 0), só é apresentado o valor hash.
SignatureType O tipo de assinatura.
ValidatedSigningLevel O nível de autorização de assinatura do Windows que a assinatura cumpriu. Veja Nível de assinatura pedido e validado.
VerificationError A razão pela qual esta assinatura específica não passou na política de Controlo de Aplicações. Veja VerificationError.
PublisherName O valor de nome comum (CN) do certificado de folha.
IssuerName O valor CN do certificado mais alto disponível na cadeia de certificados. Normalmente, este nível é um certificado abaixo da raiz.
PublisherTBSHash O hash TBS do certificado de folha.
IssuerTBSHash O hash TBS do certificado mais elevado disponível na cadeia de certificados. Normalmente, este nível é um certificado abaixo da raiz.

Instruções passo a passo dos eventos 3077 e 3089 de exemplo

Agora, vamos explicar como utilizar os dados do evento nos eventos 3077 e 3089 de exemplo para compreender o motivo pelo qual a política de Controlo de Aplicações bloqueou este ficheiro.

Compreender que ficheiro está a ser bloqueado e o contexto de bloqueio

Referindo-se ao evento 3077, localize as informações que identificam a política, o ficheiro que está a ser bloqueado e o processo principal que tentou executá-la. Considere estas informações de contexto para determinar se o bloco é esperado e pretendido.

No exemplo, o ficheiro que está a ser bloqueado é PowerShell.exe, que faz parte do Windows e que normalmente seria esperado que fosse executado. No entanto, neste caso, a política baseou-se no modelo de política do Windows no modo S, o que não permite que os anfitriões de scripts executem como forma de limitar a superfície de ataque. Para o modo S, este evento de bloqueio é um êxito. No entanto, vamos supor que o autor da política não tinha conhecimento dessa restrição quando escolheu o modelo e tratar este bloco como inesperado.

Determinar por que motivo o Controlo de Aplicações rejeitou o ficheiro

Novamente referindo-se ao evento 3077, vemos o Nível de Assinatura Pedido de 2 significa que o código tem de passar na política de Controlo de Aplicações. No entanto, o Nível de Assinatura Validado de 1 significa que o código foi tratado como se não estivesse assinado. "Não assinado" pode significar que o ficheiro foi verdadeiramente não assinado, assinado, mas com um certificado inválido ou assinado, mas sem quaisquer certificados permitidos pela política de Controlo de Aplicações.

Agora, vamos inspecionar os eventos 3089 correlacionados para o ficheiro bloqueado. No exemplo, estamos a analisar apenas a primeira assinatura (Índice de assinatura 0) encontrada num ficheiro que tinha múltiplas assinaturas. Para esta assinatura, 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 de Controlo de Aplicações.

É importante rever as informações de cada evento 3089 correlacionado, uma vez que cada assinatura pode ter um ValidatedSigningLevel e VerificationError diferente.

Importante

Repare 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 diz-nos como o binário foi realmente tratado pelo Windows.

No caso do evento 3089, por outro lado, ValidatedSigningLevel indica-nos o nível máximo potencial que a assinatura pode receber. Temos de utilizar o VerificationError para compreender por que motivo a assinatura foi rejeitada.

3 - Resolver problemas comuns

Depois de analisar os dados de diagnóstico do Controlo de Aplicações, pode tomar medidas para resolve o problema ou efetuar mais passos de depuração. Seguem-se alguns problemas comuns e passos que pode tentar resolve ou isolar ainda mais o problema de raiz:

Problema: foi bloqueado um ficheiro que pretende permitir

  • Utilize dados dos registos de eventos principais do Controlo de Aplicações para adicionar regras para permitir o ficheiro bloqueado.
  • Reimplemente o ficheiro ou aplicação com um instalador gerido se a sua política confiar nos instaladores geridos.

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

Esta condição pode existir se:

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

Para resolve tal problema, siga as instruções para Remover políticas de Controlo de Aplicações para a política identificada.

Problema: está a ocorrer uma falha não processada na aplicação e não são observados eventos do Controlo de Aplicações

Algumas aplicações alteram o respetivo comportamento quando uma política de Controlo de Aplicações no modo de utilizador está ativa, o que pode resultar em falhas inesperadas. Também pode ser um efeito colateral da imposição de scripts para aplicações que não processam corretamente os comportamentos de imposição implementados pelos anfitriões de script.

Tente isolar a causa raiz ao efetuar as seguintes ações:

  • Verifique os outros registos de eventos listados na secção 1 deste artigo para ver se existem eventos correspondentes às falhas inesperadas da aplicação.
  • Substitua temporariamente a política de Controlo de Aplicações por outra política que desative a imposição e o teste do script.
  • Substitua temporariamente a política de Controlo de Aplicações por outra política que permita todos os objetos COM e teste novamente.
  • Substitua temporariamente a política de Controlo de Aplicações por outra política que relaxe outras regras de política e teste novamente.

Problema: uma aplicação implementada por um instalador gerido não está a funcionar

Para depurar problemas com o instalador gerido, experimente estes passos:

  • Verifique se a política de Controlo de Aplicações que está a bloquear a aplicação inclui a opção para ativar o instalador gerido.
  • Verifique se a política do AppLocker em vigor $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml está correta, conforme descrito em Permitir automaticamente aplicações implementadas por um instalador gerido.
  • Verifique se os serviços appLocker estão em execução. Estas informações encontram-se em $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt criado na secção 1 deste artigo.
  • Verifique se existe um ficheiro AppLocker denominado MANAGEDINSTALLER. APPLOCKER existe na pasta CiDiag criada anteriormente. Caso contrário, repita os passos para implementar e ativar a configuração do Instalador gerido AppLocker.
  • Reinicie o processo do instalador gerido e marcar que é observado um evento 8002 no registo de eventos AppLocker – EXE e DLL do processo do instalador gerido com PolicyName = MANAGEDINSTALLER. Se, em vez disso, vir um evento com 8003 ou 8004 com PolicyName = MANAGEDINSTALLER, marcar as regras ManagedInstaller no XML da política do AppLocker e certifique-se de que uma regra corresponde ao processo do instalador gerido.
  • Utilize fsutil.exe para verificar se os ficheiros escritos pelo processo do instalador gerido têm o atributo de origem do instalador gerido expandido. Caso contrário, volte a implementar os ficheiros com o instalador gerido e marcar novamente.
  • Teste a instalação de uma aplicação diferente com o instalador gerido.
  • Adicione outro instalador gerido à política do AppLocker e teste a instalação com o outro instalador gerido.
  • Verifique se a aplicação está a encontrar uma limitação conhecida com o instalador gerido. Em caso afirmativo, tem de autorizar a aplicação através de outros meios.

Problema: uma aplicação que esperava que o Gráfico de Segurança Inteligente (ISG) permitisse não está a funcionar

Para depurar problemas com o ISG, experimente estes passos:

  • Verifique se a política de Controlo de Aplicações que está a bloquear a aplicação inclui a opção para ativar o gráfico de segurança inteligente.
  • Verifique se os serviços appLocker estão em execução. Estas informações encontram-se em $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt criado na secção 1 deste artigo.
  • Utilize fsutil.exe para verificar se os ficheiros têm o atributo expandido de origem ISG. Caso contrário, volte a implementar os ficheiros com o instalador gerido e marcar novamente.
  • Verifique se a aplicação está a encontrar uma limitação conhecida com o ISG.

4 - Comunicar problemas à Microsoft, se apropriado

Se depois de seguir a documentação de orientação abrangida por este artigo acreditar que identificou um problema de produto, comunique o problema à Microsoft.

  • Os clientes com Suporte Premier da Microsoft devem registar um pedido de serviço através de canais normais.
  • Todos os outros clientes podem comunicar problemas diretamente à equipa de produtos do Controlo de Aplicações através do Hub de Comentários do Windows. Selecione a categoria Segurança & Privacidade – Controlo de Aplicações para garantir que o problema é devidamente encaminhado para a equipa de produtos do Controlo de Aplicações.

Ao comunicar problemas, certifique-se de que fornece as seguintes informações: