Script Logboekregistratie en Tracering

  • 06/12/2017
  • 2 minuten te lezen
    • j
    • s

Terwijl PowerShell al heeft de LogPipelineExecutionDetails groepsbeleid-instelling te melden theinvocation van cmdlets PowerShell scripting taal heeft verschillende functies die u zou willen tolog en audit. De nieuwe gedetailleerde Script Tracing functie biedt gedetailleerde tracking en analyse van powershell script activiteit op een systeem. Na het inschakelen van gedetailleerde script tracing, PowerShell logt allscript blokken naar het ETW event log, Microsoft-Windows-PowerShell / Operational. Als een scriptblok een ander scriptblok maakt, bijvoorbeeld door Invoke-Expression aan te roepen, wordt het aangeroepen scriptblok ook gelogd.

Logging is ingeschakeld door het inschakelen van powershell Script blok Logging Groepsbeleid instelling inAdministrative Templates – > Windows Components – > Windows PowerShell.

de gebeurtenissen zijn:

Kanaal Operationele
Niveau Uitgebreide
Opcode Maken
Taak CommandStart
Sleutelwoord Runspace
gebeurtenis-id Engine_ScriptBlockCompiled (0x1008 = 4104)
Bericht het Maken van Scriptblock tekst (%1 van %2): %3 ScriptBlock ID: %4

De tekst is ingesloten in het bericht is de omvang van het script blok samengesteld. De ID is een GUID die wordt bewaard voor de levensduur van het script blok.

wanneer u uitgebreide logboekregistratie inschakelt, schrijft de functie begin-en eindmarkeringen:

Kanaal Operationele
Niveau Uitgebreide
Opcode Open / Sluiten
Taak CommandStart / CommandStop
Sleutelwoord Runspace
gebeurtenis-id ScriptBlock_Invoke_Start_Detail (0x1009 = 4105) / ScriptBlock_Invoke_Complete_Detail (0x100A = 4106)
Bericht Gestart / Voltooid inroepen van ScriptBlock-ID: %1 Runspace ID: %2

de ID is de GUID die het script blok vertegenwoordigt (dat kan worden gecorreleerd met event ID 0x1008), en de Runspace ID vertegenwoordigt de runspace waarin dit script blok werd uitgevoerd.

Procenttekens in het aanroepbericht vertegenwoordigen gestructureerde ETW-eigenschappen. Terwijl ze worden vervangen door de werkelijke waarden in de tekst van het bericht, een meer robuuste manier om toegang te krijgen tot hen is om het bericht op te halen met de Get-WinEvent cmdlet, en vervolgens gebruik maken van de eigenschappen array van het bericht.

hier is een voorbeeld van hoe deze functionaliteit kan helpen bij het uitpakken van een kwaadaardige poging om een script te versleutelen en te verwijderen:

## 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

Als u dit uitvoert, worden de volgende logboekvermeldingen gegenereerd:

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

als de lengte van het scriptblok de capaciteit van een enkele gebeurtenis overschrijdt, breekt PowerShell het script in meerdere delen. Hier is voorbeeldcode om een script te recombineren uit zijn logberichten:

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

zoals met alle logging systemen die een beperkte retentiebuffer hebben, een manier om deze infrastructuur aan te vallen is om het log te overspoelen met valse gebeurtenissen om eerder bewijs te verbergen. Om jezelf te beschermen tegen deze aanval, zorg ervoor dat u een of andere vorm van event log collectie ingesteld WindowsEvent Forwarding. Zie voor meer informatie de tegenstander met Windows Event Log Monitoring.



+