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.
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.
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 oSystemCIPolicy.xml
arquivo usando um editor de texto comonotepad.exe
ou Visual Studio Code (VS Code). Comente aAudit mode
opção.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
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
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
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
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.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.