Script de Rastreio e Registo

  • 06/12/2017
  • 2 minutos de leitura
    • j
    • s

Enquanto PowerShell já tem o LogPipelineExecutionDetails definição de Política de Grupo para log theinvocation de cmdlets, PowerShell script da língua dispõe de vários recursos que você pode querer tolog e auditoria. A nova característica Detalhada De Rastreamento de Script fornece rastreamento detalhado e análise da atividade de scriptpowershell em um sistema. Depois de permitir o rastreamento detalhado do script, o PowerShell registra todos os blocos do allscript para o registro de eventos ETW, Microsoft-Windows-PowerShell/Operacional. Se um script blockcreates another script block, por exemplo, chamando Invoke-Expression, o script invocado blockalso logado.

o registo está activo através da definição da Política de grupos de Registo de blocos de PowerShell – > componentes do Windows – > PowerShell do Windows.

os eventos são:

Canal Operacional
Nível Detalhado
Código De Operação Criar
A Tarefa CommandStart
Palavra-chave espaço de execução
EventId Engine_ScriptBlockCompiled (0x1008 = 4104)
Mensagem de Criação de Scriptblock de texto (%1 %2): %3 ScriptBlock IDENTIFICAÇÃO: %4

O texto inserido na mensagem é a medida do bloco de script compilado. O ID é um GUID que é retido para a vida do bloco de script.

quando activar o registo descritivo, a funcionalidade escreve marcadores de início e fim:

Canal Operacional
Nível Detalhado
Código De Operação Abrir / Fechar
A Tarefa CommandStart / CommandStop
Palavra-chave espaço de execução
EventId ScriptBlock_Invoke_Start_Detail (0x1009 = 4105) / ScriptBlock_Invoke_Complete_Detail (0x100A = 4106)
Mensagem de / Iniciado Concluído invocação de ScriptBlock ID: %1 ID do espaço de execução: %2

o ID é O GUID que representa o bloco de script (que pode ser correlacionada com o ID de evento 0x1008), eos-Lo ID representa o espaço de execução em que este bloco de script foi executado.

os sinais percentuais na mensagem de Invocação representam propriedades ETW estruturadas. Enquanto eles são substituídos com os valores reais no texto da mensagem, uma maneira mais robusta de acessá-los é recuperar a mensagem com o cmdlet Get-WinEvent, e então usar o array de Propriedades da mensagem.

Aqui está um exemplo de como essa funcionalidade pode ajudar a desvendar uma tentativa mal-intencionada para criptografar andobfuscate um script:

## Malwarefunction SuperDecrypt{ param($script) $bytes = ::FromBase64String($script) ## XOR "encryption" $xorKey = 0x42 for($counter = 0; $counter -lt $bytes.Length; $counter++) { $bytes = $bytes -bxor $xorKey } ::Unicode.GetString($bytes)}$decrypted = SuperDecrypt "FUIwQitCNkInQm9CCkItQjFCNkJiQmVCEkI1QixCJkJlQg=="Invoke-Expression $decrypted

Executando isso gera as seguintes entradas de registo:

Compiling Scriptblock text (1 of 1):function SuperDecrypt{ param($script) $bytes = ::FromBase64String($script) ## XOR "encryption" $xorKey = 0x42 for($counter = 0; $counter -lt $bytes.Length; $counter++) { $bytes = $bytes -bxor $xorKey } ::Unicode.GetString($bytes)}ScriptBlock ID: ad8ae740-1f33-42aa-8dfc-1314411877e3Compiling Scriptblock text (1 of 1):$decrypted = SuperDecrypt "FUIwQitCNkInQm9CCkItQjFCNkJiQmVCEkI1QixCJkJlQg=="ScriptBlock ID: ba11c155-d34c-4004-88e3-6502ecb50f52Compiling Scriptblock text (1 of 1):Invoke-Expression $decryptedScriptBlock ID: 856c01ca-85d7-4989-b47f-e6a09ee4eeb3Compiling Scriptblock text (1 of 1):Write-Host 'Pwnd'ScriptBlock ID: 5e618414-4e77-48e3-8f65-9a863f54b4c8

Se o bloco de script comprimento excede a capacidade de um único evento, o PowerShell quebra o script intomultiple partes. Aqui está o código de exemplo para recombinar um script a partir de suas mensagens de log:

$created = Get-WinEvent -FilterHashtable @{ ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 } | Where-Object { $_.<...> }$sortedScripts = $created | sort { $_.Properties.Value }$mergedScript = -join ($sortedScripts | % { $_.Properties.Value })

Como com todos os sistemas de registro limitado de retenção de memória, uma forma de ataque thisinfrastructure é a inundação do log de eventos espúrios para ocultar provas anteriores. Para se proteger deste ataque, certifique-se de que você tem alguma forma de coleta de log de eventos configurado Windowsevent Forwarding. Para mais informações, inserir o adversário com monitoramento de log de Eventos do Windows.



+