Como usar o Controle de Aplicativos para proteger o PowerShell
Este artigo descreve como configurar uma política de Controle de Aplicativos 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 é alterado, mas registra as mensagens da ID do Evento 16387 no log de eventos do PowerShellCore/Analytic
. No modo de imposição, o PowerShell aplica as restrições da política.
Este artigo pressupõe que você esteja usando um computador de teste para que possa testar o comportamento do PowerShell em uma política de Controle de Aplicativos em todo o computador antes de implantar a política em seu ambiente.
Criar uma política de Controle de Aplicativos
Uma política de Controle de Aplicativos é 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, somente arquivos aprovados podem ser carregados e executados. O PowerShell bloqueia a execução de arquivos de script para aprovação ou os executa no modo ConstrainedLanguage
, dependendo das opções da política.
Você cria e manipula a política do Controle de Aplicativos usando o módulo ConfigCI , que está disponível em todas as versões do Windows com suporte. Este módulo do Windows PowerShell pode ser usado no Windows PowerShell 5.1 ou no PowerShell 7 via camada de Compatibilidade do Windows. É mais fácil usar esse módulo no Windows PowerShell. A política que você cria pode ser aplicada a qualquer versão do PowerShell.
Etapas para criar uma política de Controle de Aplicativos
Para fins de teste, basta criar uma política-padrão e um certificado de autenticação de código autoassinado.
Criar uma política padrão
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
Esse 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.Observação
A execução desse comando pode levar até duas horas porque ele deve verificar todo o computador de teste.
Desabilitar o modo de auditoria na política padrão
Uma nova política é sempre criada no modo
Audit
. Para testar a imposição de políticas, você precisa desabilitar o modo de auditoria ao aplicar a política. Edite o arquivoSystemCIPolicy.xml
usando um editor de texto comonotepad.exe
ou Visual Studio Code (VS Code). Comente a opçãoAudit mode
.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
Criar um certificado de autenticação de código autoassinado
Você precisa de um certificado de autenticação de código para assinar qualquer binário de teste ou arquivo de script que deseja executar em seu computador de teste. O
New-SelfSignedCertificate
é fornecido pelo módulo PKI. Para obter os melhores resultados, execute 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
Adicionar o certificado de autenticação de código à política
Use o comando a seguir para adicionar o novo certificado de autenticação de código à política.
Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
Converter o arquivo de política XML em um arquivo binário de imposição de política
Por fim, você precisa converter o arquivo XML em um arquivo binário usado pelo Controle de Aplicativos para aplicar uma política.
ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
Aplicar a política de Controle de Aplicativos
Para aplicar a política à sua máquina de teste, copie o arquivo
SIPolicy.p7b
para a localização do sistema necessário,C:\Windows\System32\CodeIntegrity
.Observação
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 e problemas conhecidos do administrador do App Control.Desativar a política de Controle de Aplicativos
Para desabilitar a política, renomeie o arquivo
SIPolicy.p7b
. Se você precisar fazer mais testes, poderá alterar o nome de volta para reabilitar a política.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
Testar usando a auditoria de política do Controle de Aplicativos
O PowerShell 7.4 adicionou um novo recurso para dar suporte a políticas de Controle de Aplicativos no modo de auditoria . No modo de auditoria, o PowerShell executa os scripts não confiáveis no modo ConstrainedLanguage
sem mostrar erros, mas registra as mensagens no log de eventos. As mensagens de log descrevem quais restrições seriam aplicadas se a política estivesse no modo de imposição.
Exibir eventos de auditoria
O PowerShell registra eventos de auditoria no log de eventos do 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 no log PowerShellCore/Analytic e selecione Habilitar Log.
Como alternativa, você pode executar o comando a seguir em uma sessão do PowerShell com privilégios elevados.
wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet
Você pode exibir os eventos no Visualizador de Eventos do Windows ou usar o cmdlet Get-WinEvent
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 em que a restrição seria aplicada. Essas informações ajudam você a entender onde você precisa alterar seu script para que ele seja executado na política de Controle de Aplicativos.
Importante
Depois de examinar os eventos de auditoria, você deve desabilitar o log analítico. Os logs analíticos crescem rapidamente e consomem grandes quantidades de espaço em disco.
Exibir eventos de auditoria no depurador do PowerShell
Se você configurar a variável $DebugPreference
como Break
para uma sessão interativa do PowerShell, o PowerShell invadirá o depurador de script da linha de comando no local atual no script em que o evento de auditoria ocorreu. O ponto de interrupção permite que você depure seu código e inspecione o estado atual do script em tempo real.