śledzenie i rejestrowanie skryptów

  • 06/12/2017
  • 2 protokół do czytania
    • j
    • s

podczas gdy PowerShell ma już ustawienie zasad grupy LogPipelineExecutionDetails, aby rejestrować invocation poleceń cmdletów, język skryptowy PowerShell ma kilka funkcji, które mogą być potrzebne do logowania i audytu. Nowa funkcja szczegółowego śledzenia skryptów zapewnia szczegółowe śledzenie i analizę aktywności skryptów PowerShell w systemie. Po włączeniu szczegółowego śledzenia skryptów PowerShell rejestruje bloki allscript do dziennika zdarzeń ETW, Microsoft-Windows-PowerShell/Operational. Jeśli blok skryptowy tworzy inny blok skryptowy, na przykład wywołując Invoke-Expression, wywołany blok skryptowy również jest rejestrowany.

rejestrowanie jest włączone poprzez włączenie ustawienia zasad grupy logowania bloków skryptów PowerShell inAdministrative Templates -> Windows Components -> Windows PowerShell.

wydarzenia są:

kanał działa
poziom
Opcode Utwórz
zadanie CommandStart
słowo kluczowe Runspace
EventId Engine_ScriptBlockCompiled (0x1008 = 4104)
wiadomość Tworzenie tekstu bloku skryptów (%1 z % 2): % 3 identyfikator bloku skryptów: %4

tekst osadzony w wiadomości jest wielkością skompilowanego bloku skryptów. ID jest identyfikatorem GUID, który jest przechowywany przez cały okres istnienia bloku skryptu.

po włączeniu verbose logging funkcja zapisuje znaczniki początku i końca:

kanał działa
poziom
Opcode Otwórz / Zamknij
zadanie CommandStart / CommandStop
słowo kluczowe Runspace
EventId ScriptBlock_Invoke_Start_Detail (0x1009 = 4105) / ScriptBlock_Invoke_Complete_Detail (0x100A = 4106)
wiadomość rozpoczęte / zakończone wywołanie identyfikatora ScriptBlock: %1 Runspace ID: %2

ID jest identyfikatorem GUID reprezentującym blok skryptów (który może być skorelowany z ID zdarzenia 0x1008), A ID Runspace reprezentuje obszar, w którym ten blok skryptów został uruchomiony.

znaki procentowe w wiadomości wywołania reprezentują ustrukturyzowane właściwości ETW. Chociaż są one zastępowane rzeczywistymi wartościami w tekście wiadomości, bardziej niezawodnym sposobem uzyskania do nich dostępu jest pobranie themessage za pomocą polecenia Get-WinEvent, a następnie użycie tablicy właściwości wiadomości.

oto przykład tego, jak ta funkcjonalność może pomóc w rozpakowaniu złośliwej próby zaszyfrowania i zablokowania skryptu:

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

uruchomienie tego powoduje wygenerowanie następujących wpisów dziennika:

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

jeśli długość bloku skryptu przekracza pojemność pojedynczego zdarzenia, PowerShell rozbija skrypt na wiele części. Oto przykładowy kod do rekombinacji skryptu z jego komunikatów dziennika:

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

podobnie jak w przypadku wszystkich systemów logowania, które mają ograniczony bufor retencji, jednym ze sposobów na zaatakowanie tejinfrastruktury jest zalanie dziennika fałszywymi zdarzeniami w celu ukrycia wcześniejszych dowodów. Aby zabezpieczyć się przed tym atakiem, upewnij się, że masz jakąś formę zbierania dziennika zdarzeń skonfigurować przekazywanie WindowsEvent. Aby uzyskać więcej informacji, zobaczspotting przeciwnika z monitorowaniem dziennika zdarzeń systemu Windows.



+