PowerShelli kasutamine intsidentide teabe kogumiseks

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, parentprocessid

Kuna 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, state

Oluline 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-ScheduledJob

NTFS-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

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster