Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 se altera, mas regista mensagens de ID de Evento 16387 no log de eventos PowerShellCore/Analytic. 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.
Políticas de Controlo de Aplicações
Uma política de Controlo de Aplicações é descrita num ficheiro XML que contém informações sobre opções de política, ficheiros 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. Pode usar este módulo PowerShell do Windows no PowerShell 5.1 do Windows ou no PowerShell 7 através 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 -UserPEsEste comando cria um arquivo de política padrão chamado
SystemCIPolicy.xmlque 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 modo
Audit. Para testar a imposição da política, você precisa desabilitar o modo de auditoria ao aplicar a política. Edite oSystemCIPolicy.xmlarquivo usando um editor de texto comonotepad.exeou Visual Studio Code (VS Code). Comente a opçãoAudit mode.<!-- <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 $certAdicionar 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 -UserConverter 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.p7bAplicar a política de Controlo de Aplicações
Para aplicar a política à máquina de teste, copie o arquivo
SIPolicy.p7bpara o local do sistema necessário,C:\Windows\System32\CodeIntegrity.Nota
Deve copiar algumas definições de políticas para uma subpasta, como
C:\Windows\System32\CodeIntegrity\CiPolicies. Para mais informações, consulte [Dicas de Administração de Controlo de Aplicações & Problemas Conhecidos][03].Desativar a política de Controlo de Aplicações
Para desativar a política, renomeie o
SIPolicy.p7barquivo. 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 utilizando a auditoria de política de Controle de Aplicações
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 ConstrainedLanguage sem 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 Enforce .
Visualizar eventos de auditoria
O PowerShell regista eventos de auditoria no registo 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 rever os eventos de auditoria, deve desativar o registo 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
Caso defina a variável $DebugPreference para Break numa sessão interativa do PowerShell, o PowerShell entrará no depurador de script de linha de comando na localização atual no script onde ocorreu o evento de auditoria. O ponto de interrupção permite depurar o seu código e inspecionar o estado atual do script em tempo real.
Definições adicionais de configuração para PowerShell
O Controlo de Aplicações suporta definições adicionais para o PowerShell.
BlockScriptOnPolicyFailure: Esta definição bloqueia a execução de scripts que não cumpram os requisitos da política de Controlo da Aplicação. Quando ativado, o Controlo de Aplicações bloqueia qualquer script que não seja explicitamente permitido pela política, em vez de o executar em modo RestrainedLanguage .Nota
Esta definição é imposta pelo Controlo de Aplicações e aplica-se a todas as versões do PowerShell (
powershell.exeepwsh.exe).FileOnlyEntry: Esta configuração impede que o PowerShell seja executado com argumentos que não resultem na execução de um ficheiro especificado. Quando ativado, o Controlo de Aplicações bloqueia a execução de comandos do PowerShell que são passados através do pipeline, para os parâmetros-Commandou-EncodedCommand, ou em sessões interativas que permitem a execução direta de comandos. Quando ativado, o PowerShell só executa scripts especificados com o-Fileparâmetro.Exemplos de execuções bloqueadas:
pwsh pwsh -NoExit -File ./file.ps1 pwsh -Command Get-ChildItem "Get-ChildItem" | pwsh -File - pwsh -EncodedCommand <base64-string>Exemplos de execuções permitidas:
pwsh -File ./file.ps1 pwsh -NoProfile -NonInteractive -File ./file.ps1 arg1 arg2Nota
Esta definição aplica-se apenas ao PowerShell 7.7-preview.4 e versões mais recentes. Se configurares esta definição para versões anteriores, a AppSetting é silenciosamente ignorada.
Para usar estas definições, deve adicioná-las ao ficheiro XML da política de Controlo da Aplicação (SystemCIPolicy.xml).
Abra o ficheiro XML num editor de texto e adicione a <AppSettings> secção da política. O exemplo seguinte mostra o <AppSettings> XML com ambas as definições ativadas.
<?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy">
<!-- Existing policy content -->
<AppSettings>
<AppSetting
AppManifest="Powershell"
Name="BlockScriptOnPolicyFailure"
Value="true" />
<AppSetting
AppManifest="Powershell"
Name="FileOnlyEntry"
Value="true" />
</AppSettings>
</SiPolicy>
Leitura adicional
- [Dicas de Administração de Controlo de Aplicações & Problemas Conhecidos][03]
- [Compreender a aplicação de scripts de Controlo de Aplicação][02]
- [Criar uma política de Controlo de Aplicação para dispositivos totalmente geridos][01]
[01]: /windows/security/application-security/application-control/app-control-for-business/design/create-App Control-policy-for-fully-managed-devices [02]: /windows/security/application-security/application-control/application-control-for-business/design/script-enforcement [03]: /windows/security/application-security/application-control/app-control-for-business/operations/known-issues