urmărirea și înregistrarea Scripturilor

  • 06/12/2017
  • 2 minute de citit
    • j
    • s

în timp ce PowerShell are deja setarea de politică de grup LogPipelineExecutionDetails pentru a înregistra invocarea cmdleturilor, limbajul de script PowerShell are mai multe caracteristici pe care ați putea dori să le conectați și să le auditați. Noua caracteristică detaliată de urmărire a scriptului oferă urmărirea și analiza detaliată a activității scriptului PowerShell pe un sistem. După activarea trasării detaliate a scriptului, PowerShell înregistrează blocurile allscript în Jurnalul de evenimente ETW, Microsoft-Windows-PowerShell/Operațional. Dacă un bloc de scriptcreează un alt bloc de script, de exemplu, apelând Invoke-Expression, blocul de script invocat este, de asemenea, înregistrat.

înregistrarea în jurnal este activată prin setarea politicii de grup pentru activarea scriptului PowerShell Block Logging în șabloanele administrative -> Componente Windows -> Windows PowerShell.

evenimentele sunt:

canal Operațional
nivelul detaliat
Opcode creare
sarcina CommandStart
cuvânt cheie Runspace
EventId Motor_scriptblockcompilat (0x1008 = 4104)
mesaj crearea textului Scriptblock (%1 din %2): % 3 ScriptBlock ID: %4

textul încorporat în mesaj este amploarea blocului de script compilat. ID-ul este un GUID careeste păstrat pentru viața blocului de script.

când activați înregistrarea detaliată, caracteristica scrie markeri de început și sfârșit:

canal Operațional
nivelul detaliat
Opcode deschidere / închidere
sarcina CommandStart / CommandStop
cuvânt cheie Runspace
EventId ScriptBlock_Invoke_Start_Detail (0x1009 = 4105) / ScriptBlock_Invoke_Complete_Detail (0x100A = 4106)
mesaj invocarea începută / finalizată a ScriptBlock ID: % 1 Runspace ID: %2

ID-ul este GUID-ul care reprezintă blocul de script (care poate fi corelat cu ID-ul evenimentului 0x1008), și ID-ul spațiului de rulare reprezintă spațiul de rulare în care a fost rulat acest bloc de script.

semnele procentuale din mesajul de invocare reprezintă proprietăți etw structurate. În timp ce acestea sunt replacedwith valorile reale în textul mesajului, un mod mai robust pentru a le accesa este de a prelua themessage cu cmdletul Get-WinEvent, și apoi utilizați matrice proprietăți a mesajului.

Iată un exemplu despre modul în care această funcționalitate poate ajuta la desfacerea unei încercări rău intenționate de a cripta și de a șterge un 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

rularea aceasta generează următoarele intrări de jurnal:

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

dacă lungimea blocului de script depășește capacitatea unui singur eveniment, PowerShell sparge scriptul înpiese multiple. Aici este un exemplu de cod pentru a recombina un script din mesajele sale jurnal:

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

ca și în cazul tuturor sistemelor de logare care au un tampon de retenție limitat, o modalitate de a ataca aceastăinfrastructură este de a inunda jurnalul cu evenimente false pentru a ascunde dovezile anterioare. Pentru a vă proteja de acest atac, asigurați-vă că aveți o formă de colectare a jurnalului de evenimente configurată redirecționarea WindowsEvent. Pentru mai multe informații, vedețipotting adversarul cu monitorizarea Jurnalului de evenimente Windows.



+