PowerShelli kasutamine juhtumiteabe kogumiseks

PowerShell on üsna levinud automatiseerimistööriist, mida kasutavad sageli nii pahavara arendajad kui ka infoturbe spetsialistid.
Selles artiklis käsitletakse PowerShelli kasutamist andmete kaugkogumiseks lõppseadmetest infoturbeintsidentidele reageerimisel. Selleks peate kirjutama skripti, mis töötab lõppseadmes ja seejärel on 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 '*Майкрософт*' | 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
		}

	}

}

Alustamiseks looge funktsioon CSIRT laiendus, mis võtab argumendi - vastuvõetud andmete salvestamise tee. Kuna enamik cmdlet-käske töötab versioonis Powershell v5, kontrolliti PowerShelli versiooni õiget toimimist.

function CSIRT{
		
param($path)# при запуске скрипта необходимо указать директорию для сохранения
if ($psversiontable.psversion.major -ge 5)

Loodud failides navigeerimise hõlbustamiseks lähtestatakse kaks muutujat: $date ja $Computer, millele määratakse 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"

Saame praeguse kasutaja nimel töötavate protsesside loendi järgmiselt: looge muutuja $process, määrates sellele cmdlet get-ciminstance klassiga win32_process. Select-Object cmdleti abil saate lisada täiendavaid väljundparameetreid, meie puhul on nendeks parentprocessid (vanema protsessi ID PPID), createdate (protsessi loomise kuupäev), töödeldav (PID protsessi ID), protsessi nimi (protsessi nimi), käsurida (käivituskäsk).

$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessid

Kõigi TCP- ja UDP-ühenduste loendi saamiseks looge muutujad $netTCP ja $netUDP, määrates neile vastavalt cmdletid Get-NetTCPConnection ja Get-NetTCPConnection.

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

Oluline on teada ajastatud ülesannete ja ülesannete loendit. Selleks kasutame cmdlet-käske get-ScheduledTask ja Get-ScheduledJob. Määrame neile muutujad $task ja $job, sest Esialgu on süsteemis palju ajastatud ülesandeid, siis tasub pahatahtliku tegevuse tuvastamiseks välja filtreerida legitiimsed ajastatud toimingud. Select-Object cmdlet aitab meid selles.

$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname| where author -notlike '*Майкрософт*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task исключает авторов, содержащих “Майкрософт”, “Microsoft”, “*@%systemroot%*”, а также «пустых» авторов
$job = Get-ScheduledJob

NTFS-failisüsteemis on selline asi nagu alternatiivsed andmevood (Alternate Data Streams, ADS). See tähendab, et NTFS-faili saab täiendavalt seostada mitme suvalise suurusega andmevooga. ADS-i abil saate peita andmed, mis pole tavaliste süsteemikontrollide käigus nähtavad. See võib sisestada pahatahtlikku koodi ja/või andmeid peita.

Alternatiivsete andmevoogude kuvamiseks PowerShellis kasutame kõigi võimalike voogude vaatamiseks cmdlet-käsku get-item ja sisseehitatud Windowsi vootööriista sümboliga *, selleks loome muutuja $ADS.

$ADS = get-item * -stream * | where stream –ne ':$Data' 

Kasulik on teada süsteemi sisse logitud kasutajate nimekirja, selleks loome $user muutuja ja määrame sellele quser programmi täitmise.

$user = quser

Süsteemis jalad alla saamiseks saavad ründajad teha automaatkäivituses muudatusi. Üksuste kuvamiseks automaatesituses saate kasutada käsku Get-ItemProperty.
Loome kaks muutujat: $runUser - automaatse laadimise vaatamiseks kasutaja nimel ja $runMachine - automaatse laadimise vaatamiseks arvuti nimel.

$runUser = Get-ItemProperty 
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty 
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

Selleks, et kogu info saaks kirjutada erinevatesse failidesse, loome muutujatega massiivi ja failinimedega massiivi.


$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect" "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"

Ja tsüklit kasutades kirjutatakse 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.

Tänapäeval saavad küberturvalisuse spetsialistid kasutada PowerShelli, et rikastada teavet, mida nad oma töös erinevate ülesannete lahendamiseks vajavad. Lisades automaatsele laadimisele skripti, saate osa teabest ilma dumpinguta, pilte jne.

Allikas: www.habr.com

Lisa kommentaar