PowerShell on laialdaselt levinud automatiseerimise tööriist, mida kasutavad sageli nii pahavara arendajad kui ka infotehnoloogia turbe spetsialistid.
Antud artiklis käsitletakse PowerShelli kasutamise võimalust lõppseadmetelt andmete kaugkogumiseks küberturbe intsidentide käsitlemisel. Selleks on vajalik kirjutada skript, mis käivitatakse lõppseadmest ning allpool on antud selle skripti üksikasjalik kirjeldus.
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 '*Mikrosoft*' | 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
}
}
}Selleks, et alustada, luuakse funktsioon CSIRT, mis võtab argumendina vastu tee saadud andmete salvestamiseks. Kuna enamus cmdlet'e töötavad Powershell v5-s, on PowerShelli versiooni korrektseks toimimiseks tehtud kontroll.
function CSIRT{
param($path)# skripti käivitamisel tuleb näidata salvestamise kausta
if ($psversiontable.psversion.major -ge 5)Kasutajate loodud failide kiireks navigeerimiseks on algatatud kaks muutujat: $date ja $Computer, millele antakse 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"Käimasolevate protsesside nimekirja saamiseks praeguse kasutaja nimel loome muutuja $process, andes sellele käskluse get-ciminstance klassiga win32_process. Kasutades käsklust Select-Object, saame lisada täiendavaid väljundparameetreid, meie puhul on need parentprocessid (vanema protsessi 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 soovime saada kõiki TCP ja UDP ühenduste nimekirja, loome muutujad $netTCP ja $netUDP, andes neile käsklused Get-NetTCPConnection ja Get-NetUDPConnection vastavalt.
$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 saada planeeritud ülesannete ja tööde nimekiri. Selleks kasutame cmdlet'e get-ScheduledTask ja Get-ScheduledJob. Määrame neile muutujad $task ja $job, kuna süsteemis on algselt palju planeeritud ülesandeid, tasub pahatahtlikku aktiivsust määratlemiseks filtreerida välja seaduslikud planeeritud ülesanded. Sellega aitab meid cmdlet 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 välistab autorid, mis sisaldavad 'Microsoft', 'Microsoft', '*@%systemroot%*' ja 'tühjad' autorid
$job = Get-ScheduledJobNTFS-failisüsteemis eksisteerib mõisted nagu alternatiivsed andmevood (Alternate Data Streams, ADS). See tähendab, et NTFS-fail võib olla lisatud mitme andmevooga, mille suurus on suvaline. ADS-i abil saab peita andmeid, mis ei ole nähtavad standardsete süsteemikontrollide käigus. Tänu sellele on võimalik sisestada kahjulikku koodi ja/või varjata andmeid.
Alternatiivsete andmevoogude väljavõtmiseks PowerShellis kasutame get-item käsu ja Windowsi sisseehitatud tööriista, mille sümbol on *, et vaadata kõiki võimalikke vooge. Selleks loome muutuja $ADS.
$ADS = get-item * -stream * | where stream –ne ':$Data' Kasulik on teada ka süsteemi sisse logitud kasutajate nimekirja, selleks loome muutuja $user ja määrame sellele quser programmi käivitamise.
$user = quser Kurjategijad, et süsteemis püsida, võivad muuta automaatset käivitamist. Automaatse käivitamise objektide vaatamiseks saab kasutada Get-ItemProperty käsku.
Loomeme kaks muutujat: $runUser – kasutaja nimel automaatse käivitamise vaatamiseks ja $runMachine – arvuti nimel automaatse käivitamise vaatamiseks.
$runUser = Get-ItemProperty
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"Ette kõikide andmete salvestamiseks erinevatesse failidesse loome massiivi muutujaid ja failide nimedega.
$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überjulgeoleku spetsialistid kasutada PowerShelli vajaliku teabe rikastamiseks erinevate ülesannete lahendamisel. Skripti lisamine käivitusse võimaldab teatud teavet saada ilma dumpide, piltide jms tegemiseta.
Allikas: habr.com
