Como Ativar e Exportar Logs de Blocos de Script do PowerShell

Como Ativar e Exportar Logs de Blocos de Script do PowerShell

SOC Prime Team
SOC Prime Team linkedin icon Seguir

Os logs dos blocos de script do PowerShell estão em Logs de Aplicativos e Serviços → Microsoft → Windows → PowerShell → Operacional, como evento 4104. Eles só estão completos se o registro de blocos de script estiver ativado. Para exportá-los:

wevtutil epl “Microsoft-Windows-PowerShell/Operational” C:logspowershell.evtx

O PowerShell 7 é um produto separado com um canal separado, PowerShellCore/Operational, e sua própria configuração de política.

Se um invasor tocou em uma máquina Windows, as chances são de que o PowerShell estava envolvido. O registro de blocos de script grava o código que realmente foi executado, muitas vezes após as camadas de ofuscação terem sido removidas. A Prime Core tem 663 regras de detecção para logs do PowerShell, mapeadas para 417 técnicas MITRE ATT&CK. Elas cobrem o uso malicioso do PowerShell (T1059.001), ofuscação (T1027) e cradles de download que puxam ferramentas (T1105).

Experimente LogTotal, grátis

Antes de começar

O registro de blocos de script está ativado?

reg query “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging”

EnableScriptBlockLogging definido como 0x1 significa sim. Se a chave não existir, está desativado. Mesmo assim, o Windows PowerShell 5.1 ainda registra blocos de script que considera suspeitos, como eventos 4104 no nível de Aviso. Então você pode encontrar alguns eventos. Apenas não os confunda com o quadro completo.

Ligá-lo ajuda daqui para frente, não para o que já aconteceu. Use a configuração de Política de Grupo Modelos Administrativos → Componentes do Windows → Windows PowerShell → Ativar Logging de Bloco de Script do PowerShell, ou defina o valor do registro diretamente:

reg add “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging” /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f

O PowerShell 7 lê sua própria chave de política sob HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Se foi instalado a partir de um zip em vez do MSI, seu canal de eventos pode não estar registrado até você executar RegisterManifest.ps1 de $PSHOME.

Espere volume. Todo script e módulo que é executado termina no log. Aumente o tamanho máximo do canal, ou você manterá apenas algumas horas.

Espere segredos. Scripts de administração às vezes carregam senhas e chaves de API em texto simples, e o registro de blocos de script os grava fielmente. Tenha isso em mente antes que este arquivo vá para qualquer lugar, e leia a seção LogTotal abaixo.

Exporte os logs

No Visualizador de Eventos, clique com o botão direito em Operacional em PowerShell e escolha Salvar Todos os Eventos Como… Na linha de comando:

:: apenas blocos de script

wevtutil epl “Microsoft-Windows-PowerShell/Operational” C:logsps_4104.evtx /q:”*[System[(EventID=4104)]]”

:: PowerShell 7

wevtutil epl “PowerShellCore/Operational” C:logspwsh.evtx

:: o log clássico “Windows PowerShell”: eventos de início do motor com a linha de comando do host

wevtutil epl “Windows PowerShell” C:logswindows_powershell.evtx

Este último é fácil de esquecer, e vale a pena pegar. O evento 400 registra cada início de motor, incluindo a versão do motor. Uma EngineVersion de 2.0 em um sistema moderno geralmente significa que alguém fez downgrade deliberadamente para evitar o registro de blocos de script.

Faça upload e revise no LogTotal

O LogTotal lê EVTX nativamente. Uma coisa a saber primeiro: O LogTotal ainda não sanitiza arquivos EVTX. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.

  1. Faça upload. Abra logtotal.com e solte o arquivo. [PROVA: tela de upload, limite de tamanho]
  2. Revise. [PROOF: what the results screen shows for PowerShell data]

Como isso parece em dados reais. Usamos [PROVA: fonte de amostra, por exemplo, uma VM de teste com registro de blocos de script ativado, após executar um cradle de download codificado e uma string de teste inofensiva de manipulação de AMSI]. O LogTotal destacou [PROVA: descobertas reais]. [PROVA: link para o arquivo de exemplo]

Quando dá errado

SintomaCausa provávelFix
Nenhum evento 4104O registro de blocos de script está desativado, e nada parecia suspeitoAtive-o para o futuro; verifique o log do Windows PowerShell para o que você ainda pode obter
Apenas alguns eventos 4104, todos AvisoO registro está desativado; você está vendo registro automático de blocos suspeitosO mesmo que acima
PowerShellCore/Operational não encontradoO PowerShell 7 não está instalado, ou seu manifesto não está registradoExecute RegisterManifest.ps1 de $PSHOME
Texto 4104 é uma cifra ilegívelO registro de eventos protegidos está ativadoVocê precisa do certificado de decriptação
O log cobre apenas algumas horasTamanho padrão, alto volumeAumente o tamanho máximo do canal

FAQ

O registro de blocos de script captura código ofuscado?

Em grande parte, sim. Ele grava blocos de script à medida que são compilados. Quando o código ofuscado constrói e executa o próximo estágio, esse estágio é registrado como seu próprio bloco, muitas vezes em forma legível.

Qual é a diferença da transcrição?

A transcrição grava arquivos de texto da entrada e saída da sessão em uma pasta. O registro de blocos de script grava o próprio código no log de eventos. Eles se complementam e ambos valem a pena ter.

Junte-se à plataforma Detection as Code da SOC Prime para melhorar a visibilidade das ameaças mais relevantes para o seu negócio. Para ajudá-lo a começar e gerar valor imediato, agende uma reunião agora com os especialistas da SOC Prime.