Uzante PowerShell por Kolekti Okazajn Informojn

PowerShell estas sufiĉe ofta aŭtomatiga ilo, kiu estas ofte uzata de kaj malware programistoj kaj informsekurecaj specialistoj.
Ĉi tiu artikolo diskutos la eblon uzi PowerShell por malproksime kolekti datumojn de finaj aparatoj kiam vi respondas al informaj sekurecaj okazaĵoj. Por fari tion, vi devos skribi skripton, kiu funkcios sur la fina aparato kaj tiam estos detala priskribo de ĉi tiu skripto.

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
		}

	}

}

Por komenci, kreu funkcion CSIRT etendo, kiu prenos argumenton - la vojo por konservi la ricevitajn datumojn. Pro la fakto, ke plej multaj cmdletoj funkcias en Powershell v5, la PowerShell-versio estis kontrolita por ĝusta funkciado.

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

Por facileco de navigado tra la kreitaj dosieroj, du variabloj estas pravigitaj: $dato ​​kaj $Computer, al kiuj estos asignitaj la komputila nomo kaj la aktuala dato.

$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"

Ni ricevas la liston de kurantaj procezoj nome de la nuna uzanto jene: kreu la variablon $process asignante al ĝi la cmdlet get-ciminstance kun la klaso win32_process. Uzante la cmdlet Elektu-Objekton, vi povas aldoni pliajn eligajn parametrojn, en nia kazo, ĉi tiuj estos parentprocessid (PPID gepatra proceza ID), kreadato (proceza krea dato), procesita (PID-proceza ID), proceznomo (proceza nomo), komandlinio. (komenca komando).

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

Por akiri liston de ĉiuj TCP kaj UDP-konektoj, kreu la $netTCP kaj $netUDP-variabloj atribuante al ili la cmdlets Get-NetTCPConnection kaj Get-NetTCPConnection, respektive.

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

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

Gravos ekscii la liston de planitaj taskoj kaj taskoj. Por fari tion, ni uzas la cmdletojn get-ScheduledTask kaj Get-ScheduledJob. Ni asignu al ili la variablojn $task kaj $job, ĉar Komence, estas multaj planitaj taskoj en la sistemo, tiam por identigi malican agadon indas filtri laŭleĝajn planitajn taskojn. La cmdlet Select-Object helpos nin pri tio.

$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

En la dosiersistemo NTFS ekzistas tia afero kiel alternativaj datumfluoj (ADS). Ĉi tio signifas, ke dosiero en NTFS laŭvole povas esti asociita kun multoblaj datumfluoj de arbitra grandeco. Uzante ADS, vi povas kaŝi datumojn, kiuj ne estus videblaj per normaj sistemaj kontroloj. Ĉi tio ebligas injekti malican kodon kaj/aŭ kaŝi datumojn.

Por montri alternativajn datumfluojn en PowerShell, ni uzos la get-item cmdleton kaj la enkonstruitan Vindozan fluan ilon kun la * simbolo por vidi ĉiujn eblajn fluojn, por tio ni kreos la $ADS-variablon.

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

Estos utile ekscii la liston de uzantoj ensalutintaj al la sistemo; por tio ni kreos variablon $user kaj asignos ĝin al la ekzekuto de la programo quser.

$user = quser

Atakantoj povas fari ŝanĝojn al aŭtorun por akiri piedtenejon en la sistemo. Por vidi komencajn objektojn, vi povas uzi la cmdleton Get-ItemProperty.
Ni kreu du variablojn: $runUser - por vidi ekfunkciigon nome de la uzanto kaj $runMachine - por vidi ekfunkciigon nome de la komputilo.

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

Por ke ĉiuj informoj estas skribitaj al malsamaj dosieroj, ni kreas tabelon kun variabloj kaj tabelon kun dosiernomoj.


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

Kaj, uzante for buklo, la rezultaj datumoj estos skribitaj al dosieroj.

for ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

Post ekzekuto de la skripto, 9 tekstaj dosieroj estos kreitaj enhavantaj la necesajn informojn.

Hodiaŭ, profesiuloj pri cibersekureco povas uzi PowerShell por riĉigi la informojn, kiujn ili bezonas por solvi diversajn taskojn en sia laboro. Aldonante skripton al ekfunkciigo, vi povas ricevi iujn informojn sen forigi rubejojn, bildojn ktp.

fonto: www.habr.com

Aldoni komenton