PowerShell je pomerne rozšírený nástroj na automatizáciu, ktorý sa často používa, ako vývojármi škodlivého softvéru, tak aj odborníkmi na informačnú bezpečnosť.
V tomto článku sa bude skúmať spôsob použitia PowerShellu na vzdialené zhromažďovanie údajov z koncových zariadení pri reagovaní na incidenty informačnej bezpečnosti. K tomu bude potrebné napísať skript, ktorý sa spustí na koncovom zariadení, a podrobný opis tohto skriptu bude nasledovať.
function CSIRT{
param($path)
if ($psversiontable.psversion.major -ge 5)
{
$date = Get-Date -Format dd.MM.yyyy_hh_mm
$Computer = $env:COMPUTERNAME
New-Item -Path $path$computer$date -ItemType 'Directory' -Force | Out-Null
$path = "$path$computer$date"
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname,
processid, commandline, parentprocessid
$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress,
localport, remoteaddress, remoteport, owningprocess, state
$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress,
localport, remoteaddress, remoteport, owningprocess, state
$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname|
where author -notlike '*Microsoft*' | where author -ne $null |
where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*'
$job = Get-ScheduledJob
$ADS = get-item * -stream * | where stream -ne ':$Data'
$user = quser
$runUser = Get-ItemProperty "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"
$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "AlternativeDataStream"
for ($w = 0; $w -lt $array.count; $w++){
$name = $arrayName[$w]
$array[$w] >> $path$name.txt
}
}
}Aby sme začali, vytvoríme funkciu CSIRT, ktorá prijme argument – cestu pre uloženie získaných údajov. Pretože väčšina cmdletov funguje v PowerShell v5, bola vykonaná kontrola verzie PowerShellu na zabezpečenie správnej funkčnosti.
function CSIRT{
param($path)# pri spustení skriptu je potrebné zadať adresár pre uloženie
if ($psversiontable.psversion.major -ge 5)Pre pohodlnú navigáciu v vytvorených súboroch sú inicializované dve premenné: $date a $Computer, ktorým budú priradené meno počítača a aktuálny dátum.
$date = Get-Date -Format dd.MM.yyyy_hh_mm
$Computer = $env:COMPUTERNAME
New-Item -Path $path$computer$date –ItemType 'Directory' -Force | Out-Null
$path = "$path$computer$date"Zoznam bežiacich procesov pod aktuálnym používateľom získame nasledujúcim spôsobom: vytvoríme premennú $process, ktorej priradíme príkaz get-ciminstance s triedou win32_process. Použitím príkazu Select-Object môžeme pridať ďalšie výstupné parametre, v našom prípade to budú parentprocessid (identifikátor rodičovského procesu PPID), creationdate (dátum vytvorenia procesu), processed (identifikátor procesu PID), processname (názov procesu), commandline (spúšťací príkaz).
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessidAby sme získali zoznam všetkých TCP a UDP spojení, vytvoríme premenné $netTCP a $netUDP a priradíme im príkazy Get-NetTCPConnection a Get-NetUDPEndpoint, zodpovedajúcim spôsobom.
$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state
$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, stateRovnako dôležité bude zistiť zoznam naplánovaných úloh a úloh. Na tento účel použijeme príkazy get-ScheduledTask a Get-ScheduledJob. Priradíme im premenné $task a $job, keďže v systéme existuje veľké množstvo naplánovaných úloh, pre určenie zlovestnej aktivity bude potrebné filtrovať legitímne naplánované úlohy. V tom nám pomôže príkaz Select-Object.
$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname | where author -notlike '*Microsoft*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task vylučuje autorov, ktorí obsahujú 'Microsoft', 'Microsoft', '*@%systemroot%*', ako aj 'prázdnych' autorov
$job = Get-ScheduledJobV súborovom systéme NTFS existuje pojem alternatívne dátové prúdy (Alternate Data Streams, ADS). To znamená, že súbor v NTFS môže byť dodatočne spojený s niekoľkými prúdmi dát ľubovoľnej veľkosti. Pomocou ADS je možné skryť údaje, ktoré nebudú viditeľné pri štandardných kontrolách systému. Vďaka tomu je možné vložiť škodlivý kód a/alebo skryť údaje.
Na zobrazenie alternatívnych dátových prúdov v PowerShell použijeme príkaz get-item a vstavaný nástroj Windows stream s symbolom * na prezeranie všetkých možných prúdov. Na tento účel vytvoríme premennú $ADS.
$ADS = get-item * -stream * | where stream –ne ':$Data' Užitočné bude zistiť aj zoznam používateľov, ktorí sa prihlásili do systému. Na tento účel vytvoríme premennú $user a priradíme jej vykonanie programu quser.
$user = quser Útočníci, aby sa usadili v systéme, môžu vykonať zmeny v automatickom spúšťaní. Na zobrazenie objektov v automatickom spúšťaní môžete použiť príkaz Get-ItemProperty.
Vytvoríme dve premenné: $runUser – na zobrazenie automatického spúšťania od používateľa a $runMachine – na zobrazenie automatického spúšťania od počítača.
$runUser = Get-ItemProperty
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"Aby sa všetky informácie zaznamenávali do rôznych súborov, vytvoríme pole s premennými a pole s názvami súborov.
$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"A pomocou cyklu for budú získané údaje zapísané do súborov.
for ($w = 0; $w -lt $array.count; $w++){
$name = $arrayName[$w]
$array[$w] >> $path$name.txt
Po vykonaní skriptu budú vytvorené 9 textové súbory obsahujúce potrebné informácie.
V súčasnosti môžu odborníci na kybernetickú bezpečnosť používať PowerShell na obohatenie informácií potrebných pri riešení rôznych úloh vo svojej práci. Pridaním skriptu do automatického spúšťania môžete získavať určité informácie bez snímania zásob, obrazov atď.
Zdroj: habr.com
