PowerShell on üsna levinud automatiseerimisvahend, mida kasutavad nii pahavara arendajad kui ka infotehnoloogia turbe spetsialistid.
Selles artiklis käsitletakse PowerShelli kasutamist lõppseadmest andmete kaugkogumiseks IT-intsidentide käsitlemisel. Selleks tuleb kirjutada skript, mis käivitatakse lõppseadmest, ja seejärel antakse üksikasjalik kirjeldus sellest skriptist.
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
}
}
}Skripti töö alustamiseks luuakse funktsioon CSIRT, mis võtab argumendiks teekonna, kuhu salvestada saadud andmed. Kuna enamik cmdlet'e töötavad PowerShell v5-s, on PowerShelli versiooni kontrollimiseks sisse viidud kontroll.
function CSIRT{
param($path)# skripti käivitamisel tuleb määrata kaust, kuhu andmed salvestatakse
if ($psversiontable.psversion.major -ge 5)Mugavuse huvides on loodud kaks muutuja: $date ja $Computer, millele omistatakse arvuti nimi ja praegune kuupäev.
$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"Jooksevate protsesside nimekirja, mis kuuluvad praeguse kasutaja juurde, saame järgmiselt: loome muutuja $process, määrates sellele get-ciminstance käsu win32_process klassiga. Kasutades Select-Object käsu, saame lisada täiendavaid väljundparameetreid, milleks meie puhul on parentprocessid (vanemprotsessi identifikaator PPID), creationdate (protsessi loomise kuupäev), processed (protsessi identifikaator PID), processname (protsessi nimi), commandline (käivituskäsk).
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessidKuna tahame saada kõiki TCP ja UDP ühendusi, loome muutujad $netTCP ja $netUDP, määrates neile vastavalt Get-NetTCPConnection ja Get-NetUDPEndpoint käsud.
$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state
$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, stateOluline on teada ka kavandatud ülesannete ja tööde nimekirja. Selleks kasutame get-ScheduledTask ja Get-ScheduledJob käske. Määrame neile muutujad $task ja $job, kuna süsteemis on alguses suur hulk kavandatud ülesandeid, on oluline filtreerida välja kahtlased ülesanded. Sellega aitab meid Select-Object käsk.
$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 välistab autorid, mis sisaldavad “Microsoft”, “*@%systemroot%*”, samuti tühjad autorid
$job = Get-ScheduledJobNTFS failisüsteemis on olemas selline mõisted nagu alternatiivsed andmevood (Alternate Data Streams, ADS). See tähendab, et fail NTFS-is saab olla lisatud mitme vabalt suurusega andmevooga. ADS abil on võimalik peita andmeid, mis ei paista silma standardsete süsteemide kontrollide käigus. Sel viisil on võimalik sisestada pahatahtlikku koodi ja/või varjata andmeid.
Alternatiivsete andmevoogude kuvamiseks PowerShellis kasutame get-item käsku ja Windowsi sisseehitatud tööriista vooge vaatamiseks, kasutades sümbolit * kõigi võimalike voogude vaatamiseks; selleks loome muutuja $ADS.
$ADS = get-item * -stream * | where stream –ne ':$Data' Kasulik oleks teada ka süsteemi sisse logitud kasutajate nimekirja, selle jaoks loome muutuja $user ja määrame selle quser programmi käivitamisele.
$user = quser Ründajatele, et süsteemis püsida, võivad nad teha muudatusi automaatses käivitamises. Automaatkäivituses olevate objektide vaatamiseks saab kasutada käsku Get-ItemProperty.
Loome kaks muutujat: $runUser – kasutaja nimel automaatkäivituse vaatamiseks ja $runMachine – arvuti nimel automaatkäivituse vaatamiseks.
$runUser = Get-ItemProperty
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"Et kogu teave salvestataks erinevatesse failidesse, loome massiivi muutujatega ja massiivi failinimedega.
$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"Ja kasutades for-tsüklit, salvestatakse saadud andmed failidesse.
for ($w = 0; $w -lt $array.count; $w++){
$name = $arrayName[$w]
$array[$w] >> $path$name.txt
Pärast skripti täitmist luuakse 9 tekstifaili, mis sisaldavad vajalikku teavet.
Praegu saavad küberturbe spetsialistid kasutada PowerShelli teabe rikastamiseks, mis on vajalik erinevate ülesannete lahendamisel nende töös. Lisades skripti automaatkäivitusse, on võimalik saada teavet ilma dumpide, piltide jms võtmiseta.
Allikas: habr.com
