Partilhar via


Como usar o Controle de Aplicativo para proteger o PowerShell

Este artigo descreve como configurar uma política de Controle de Aplicativo para Empresas . Você pode configurar a política para impor ou auditar a regra da política. No modo de auditoria, o comportamento do PowerShell não muda, mas registra mensagens de ID de Evento 16387 no log de PowerShellCore/Analytic eventos. No modo de imposição, o PowerShell aplica as restrições da política.

Este artigo pressupõe que você esteja usando uma máquina de teste para que possa testar o comportamento do PowerShell em uma política de Controle de Aplicativo em toda a máquina antes de implantar a política em seu ambiente.

Criar uma política de Controlo de Aplicações

Uma política de Controle de Aplicativo é descrita em um arquivo XML, que contém informações sobre opções de política, arquivos permitidos e certificados de assinatura reconhecidos pela política. Quando a política é aplicada, apenas os arquivos aprovados podem ser carregados e executados. O PowerShell bloqueia a execução de arquivos de script não aprovados ou os executa no ConstrainedLanguage modo, dependendo das opções de política.

Você cria e manipula a política de Controle de Aplicativo usando o módulo ConfigCI, que está disponível em todas as versões suportadas do Windows. Este módulo do Windows PowerShell pode ser usado no Windows PowerShell 5.1 ou no PowerShell 7 por meio da camada de Compatibilidade do Windows. É mais fácil usar esse módulo no Windows PowerShell. A política criada pode ser aplicada a qualquer versão do PowerShell.

Etapas para criar uma política de Controle de Aplicativo

Para o teste, você só precisa criar uma política padrão e um certificado de assinatura de código autoassinado.

  1. Criar uma política padrão

    New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
    

    Este comando cria um arquivo de política padrão chamado SystemCIPolicy.xml que permite que todos os arquivos assinados por código da Microsoft sejam executados.

    Nota

    A execução desse comando pode levar até duas horas, pois ele deve verificar toda a máquina de teste.

  2. Desativar o Modo de Auditoria na política padrão

    Uma nova política é sempre criada no Audit modo. Para testar a imposição da política, você precisa desabilitar o modo de auditoria ao aplicar a política. Edite o SystemCIPolicy.xml arquivo usando um editor de texto como notepad.exe ou Visual Studio Code (VS Code). Comente a Audit mode opção.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Criar um certificado de assinatura de código autoassinado

    Você precisa de um certificado de assinatura de código para assinar quaisquer binários de teste ou arquivos de script que você deseja executar em sua máquina de teste. O New-SelfSignedCertificate é fornecido pelo módulo PKI . Para obter melhores resultados, você deve executar esse comando no Windows PowerShell 5.1.

    $newSelfSignedCertificateSplat = @{
        DnsName = $env:COMPUTERNAME
        CertStoreLocation = "Cert:\CurrentUser\My\"
        Type = 'CodeSigningCert'
    }
    $cert = New-SelfSignedCertificate @newSelfSignedCertificateSplat
    Export-Certificate -Cert $cert -FilePath c:\certs\signing.cer
    Import-Certificate -FilePath C:\certs\signing.cer -CertStoreLocation "Cert:\CurrentUser\Root\"
    $cert = Get-ChildItem Cert:\CurrentUser\My\ -CodeSigningCert
    
    dir c:\bin\powershell\pwsh.exe | Set-AuthenticodeSignature -Certificate $cert
    
  4. Adicionar o certificado de assinatura de código à política

    Use o comando a seguir para adicionar o novo certificado de assinatura de código à política.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
    
  5. Converter o arquivo de política XML em um arquivo binário de imposição de política

    Finalmente, você precisa converter o arquivo XML em um arquivo binário usado pelo Controle de Aplicativo para aplicar uma política.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Aplicar a política de Controlo de Aplicações

    Para aplicar a política à máquina de teste, copie o SIPolicy.p7b arquivo para o local do sistema necessário, C:\Windows\System32\CodeIntegrity.

    Nota

    Algumas definições de políticas devem ser copiadas para uma subpasta, como C:\Windows\System32\CodeIntegrity\CiPolicies. Para obter mais informações, consulte Dicas de administrador de controle de aplicativo & Problemas conhecidos.

  7. Desativar a política de Controlo de Aplicações

    Para desativar a política, renomeie o SIPolicy.p7b arquivo. Se precisar fazer mais testes, você pode alterar o nome novamente para reativar a política.

    Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
    

Teste usando a auditoria de política do Controle de Aplicativo

O PowerShell 7.4 adicionou um novo recurso para dar suporte às políticas de Controle de Aplicativo no modo de Auditoria . No modo de auditoria, o PowerShell executa os scripts não confiáveis no modo sem erros, mas registra as mensagens no ConstrainedLanguage log de eventos. As mensagens de log descrevem quais restrições seriam aplicadas se a política estivesse no modo Enforce .

Visualizar eventos de auditoria

O PowerShell registra eventos de auditoria no log de eventos PowerShellCore/Analytic . O log não está habilitado por padrão. Para habilitar o log, abra o Visualizador de Eventos do Windows, clique com o botão direito do mouse no log PowerShellCore/Analytic e selecione Habilitar Log.

Como alternativa, você pode executar o seguinte comando a partir de uma sessão elevada do PowerShell.

wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet

Você pode exibir os eventos no Visualizador de Eventos do Windows ou usar o Get-WinEvent cmdlet para recuperar os eventos.

Get-WinEvent -LogName PowerShellCore/Analytic -Oldest |
    Where-Object Id -eq 16387 | Format-List
TimeCreated  : 4/19/2023 10:11:07 AM
ProviderName : PowerShellCore
Id           : 16387
Message      : App Control Audit.

    Title: Method or Property Invocation
    Message: Method or Property 'WriteLine' on type 'System.Console' invocation will not
        be allowed in ConstrainedLanguage mode.
        At C:\scripts\Test1.ps1:3 char:1
        + [System.Console]::WriteLine("pwnd!")
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    FullyQualifiedId: MethodOrPropertyInvocationNotAllowed

A mensagem de evento inclui a posição do script onde a restrição seria aplicada. Essas informações ajudam você a entender onde você precisa alterar seu script para que ele seja executado sob a política de Controle de Aplicativo.

Importante

Depois de revisar os eventos de auditoria, você deve desativar o log analítico. Os logs analíticos crescem rapidamente e consomem grandes quantidades de espaço em disco.

Exibindo eventos de auditoria no depurador do PowerShell

Se você definir a $DebugPreference variável como Break para uma sessão interativa do PowerShell, o PowerShell quebrará o depurador de script de linha de comando no local atual no script onde o evento de auditoria ocorreu. O ponto de interrupção permite depurar seu código e inspecionar o estado atual do script em tempo real.