Истифодаи PowerShell барои ҷамъоварии маълумот дар бораи ҳодиса

PowerShell як воситаи хеле маъмули автоматизатсия мебошад, ки онро ҳам таҳиягарони нармафзори зараровар ва ҳам мутахассисони амнияти иттилоотӣ истифода мебаранд.
Дар ин мақола варианти истифодаи PowerShell барои ҷамъоварии маълумот аз дастгоҳҳои ниҳоӣ ҳангоми вокуниш ба ҳодисаҳои амнияти иттилоотӣ баррасӣ мешавад. Барои ин ба шумо лозим меояд, ки скрипте нависед, ки дар дастгоҳи ниҳоӣ кор мекунад ва сипас тавсифи муфассали ин скрипт мавҷуд аст.

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
		}

	}

}

Барои оғоз кардан, функсия эҷод кунед васеъшавии CSIRT, ки як аргумент мегирад - роҳи захира кардани маълумоти гирифташуда. Аз сабаби он, ки аксари cmdlets дар Powershell v5 кор мекунанд, версияи PowerShell барои кори дуруст санҷида шуд.

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

Барои осонии паймоиш тавассути файлҳои сохташуда ду тағирёбанда оғоз карда мешаванд: $date ва $Computer, ки номи компютер ва санаи ҷорӣ таъин карда мешавад.

$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 эҷод кунед ва ба он cmdlet-и get-ciminstance бо синфи win32_process таъин кунед. Бо истифода аз cmdlet Select-Object, шумо метавонед параметрҳои баромади иловагиро илова кунед, дар ҳолати мо инҳо протсессори волидайн (идентификатсияи протсесси волидайн PPID), санаи офариниш (санаи эҷоди раванд), коркардшуда (ID PID раванд), номи раванд (номи раванд), сатри фармон ( фармонро иҷро кунед).

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

Барои гирифтани рӯйхати ҳамаи пайвастҳои TCP ва UDP, тағирёбандаҳои $netTCP ва $netUDP-ро тавассути таъин кардани онҳо мутаносибан cmdlet-ҳои Get-NetTCPConnection ва 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

Фахмидани номгуи супоришхои планй ва супо-ришхо ахамияти калон дорад. Барои ин, мо cmdlets get-ScheduledTask ва Get-ScheduledJob истифода мебарем. Биёед ба онҳо тағирёбандаҳои $task ва $job таъин кунем, зеро Дар аввал, дар система бисёр вазифаҳои ба нақша гирифташуда мавҷуданд, пас барои муайян кардани фаъолияти зараровар бояд филтр кардани вазифаҳои қонунии ба нақша гирифташуда лозим аст. Командлети Select-Object дар ин кор ба мо кӯмак мекунад.

$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 чунин чизе ба монанди ҷараёнҳои алтернативии додаҳо (ADS) вуҷуд дорад. Ин маънои онро дорад, ки файл дар NTFS метавонад ба таври ихтиёрӣ бо ҷараёнҳои зиёди додаҳои андозаи худсарона алоқаманд бошад. Бо истифода аз ADS, шумо метавонед маълумотеро, ки тавассути санҷишҳои стандартии система намоён нестанд, пинҳон кунед. Ин имкон медиҳад, ки рамзи зараровар ворид карда шавад ва/ё маълумот пинҳон карда шавад.

Барои намоиш додани ҷараёнҳои алтернативии додаҳо дар PowerShell, мо cmdlet-и get-item ва асбоби дарунсохташудаи Windows-ро бо аломати * барои дидани ҳамаи ҷараёнҳои имконпазир истифода хоҳем кард, барои ин мо тағирёбандаи $ADS-ро эҷод мекунем.

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

Муайян кардани рӯйхати корбароне, ки ба система ворид шудаанд, муфид хоҳад буд; барои ин мо тағирёбандаи $user-ро эҷод мекунем ва онро ба иҷрои барномаи quser таъин мекунем.

$user = quser

Ҳамлагарон метавонанд ба autorun тағирот ворид кунанд, то дар система пойгоҳ пайдо кунанд. Барои дидани объектҳои оғозёбӣ, шумо метавонед cmdlet Get-ItemProperty -ро истифода баред.
Биёед ду тағирёбанда эҷод кунем: $runUser - барои дидани оғозёбӣ аз номи корбар ва $runMachine - барои дидани оғозёбӣ аз номи компютер.

$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", "Alternative Data Stream"

Ва бо истифода аз даври for, маълумоти гирифташуда ба файлҳо навишта мешавад.

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

Пас аз иҷрои скрипт 9 файли матнӣ сохта мешавад, ки дорои маълумоти зарурӣ мебошанд.

Имрӯз, мутахассисони киберамният метавонанд PowerShell-ро барои ғанӣ гардонидани маълумоте, ки барои ҳалли вазифаҳои гуногун дар кори худ заруранд, истифода баранд. Бо илова кардани скрипт ба оғозёбӣ, шумо метавонед баъзе маълумотро бидуни нест кардани партовҳо, тасвирҳо ва ғайра ба даст оред.

Манбаъ: will.com

Илова Эзоҳ