Script per l’Analisi e la Registrazione

  • 06/12/2017
  • 2 minuti a leggere
    • j
    • s

Mentre PowerShell ha già il LogPipelineExecutionDetails impostazione di Criteri di Gruppo per accedere theinvocation di cmdlet, PowerShell è un linguaggio di scripting ha diverse caratteristiche che si potrebbe desiderare tolog e di controllo. La nuova funzione Traccia script dettagliata fornisce il monitoraggio dettagliato e l’analisi dell’attività di script PowerShell su un sistema. Dopo aver abilitato il tracciamento dettagliato degli script, PowerShell registra i blocchi allscript nel registro eventi ETW, Microsoft-Windows-PowerShell / Operational. Se un blocco di script crea un altro blocco di script, ad esempio, chiamando Invoke-Expression, lo script richiamato blockalso registrato.

La registrazione è abilitata tramite l’impostazione dei criteri di gruppo per la registrazione dei blocchi di script di PowerShell in modelli amministrativi- > Componenti di Windows- > Windows PowerShell.

Gli eventi sono:

Canale Operativo
Livello Verbose
Opcode Creare
Attività CommandStart
Parola chiave spazio di esecuzione
EventId Engine_ScriptBlockCompiled (0x1008 = 4104)
Messaggio Creazione di Scriptblock testo (%1 di %2): %3 ScriptBlock ID: %4

Il testo incorporato nel messaggio è la misura del blocco di script compilato. L’ID è un GUID cheè mantenuto per la vita del blocco di script.

Quando si abilita la registrazione dettagliata, la funzione scrive i marcatori di inizio e fine:

Canale Operativo
Livello Verbose
Opcode Apri / Chiudi
Attività CommandStart / CommandStop
parola Chiave spazio di esecuzione
EventId ScriptBlock_Invoke_Start_Detail (0x1009 = 4105) / ScriptBlock_Invoke_Complete_Detail (0x100A = 4106)
Messaggio Avviati e / o conclusi invocazione di ScriptBlock ID: %1 spazio di esecuzione ID: %2

L’ID è il GUID che rappresenta il blocco di script (che può essere correlato con l’ID evento 0x1008) e l’ID Runspace rappresenta lo spazio di esecuzione in cui è stato eseguito questo blocco di script.

I segni di percentuale nel messaggio di invocazione rappresentano proprietà ETW strutturate. Mentre vengono sostituiti con i valori effettivi nel testo del messaggio, un modo più robusto per accedervi è recuperare themessage con il cmdlet Get-WinEvent e quindi utilizzare l’array delle proprietà del messaggio.

Ecco un esempio di come questa funzionalità può aiutare a scartare un tentativo di dannoso per crittografare andobfuscate uno 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

l’Esecuzione di questo genera le seguenti voci del registro:

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 il blocco di script lunghezza supera la capacità di un singolo evento, PowerShell rompe lo script intomultiple parti. Ecco il codice di esempio per ricombinare uno script dai suoi messaggi di registro:

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

Come con tutti i sistemi di registrazione che hanno un buffer di ritenzione limitato, un modo per attaccare thisinfrastructure è quello di inondare il registro con eventi spuri per nascondere prove precedenti. Per proteggere te stesso da questo attacco, assicurati di avere una qualche forma di raccolta di log degli eventi configurata per l’inoltro di WindowsEvent. Per ulteriori informazioni, vederespotting l’avversario con il monitoraggio del registro eventi di Windows.



+