Коришћење ПоверСхелл-а за прикупљање информација о инцидентима

ПоверСхелл је прилично уобичајен алат за аутоматизацију који често користе и програмери злонамерног софтвера и стручњаци за безбедност информација.
У овом чланку ће се расправљати о могућности коришћења ПоверСхелл-а за даљинско прикупљање података са крајњих уређаја приликом реаговања на инциденте у вези са безбедношћу информација. Да бисте то урадили, мораћете да напишете скрипту која ће се покренути на крајњем уређају, а затим ће постојати детаљан опис ове скрипте.

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
		}

	}

}

Да бисте започели, креирајте функцију ЦСИРТ екстензија, који ће узети аргумент - путању за чување примљених података. Због чињенице да већина цмдлета ради у Поверсхелл в5, ПоверСхелл верзија је проверена да ли ради исправно.

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"

Добијамо листу покренутих процеса у име тренутног корисника на следећи начин: креирајте променљиву $процесс, додељујући јој цмдлет гет-циминстанце са класом вин32_процесс. Користећи команду Селецт-Објецт, можете додати додатне излазне параметре, у нашем случају то ће бити парентпроцессид (ИД надређеног процеса ППИД), датум креирања (датум креирања процеса), обрађен (ИД процеса ПИД), име процеса (име процеса), командна линија ( наредба за покретање).

$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*' # $task исключает авторов, содержащих “Майкрософт”, “Microsoft”, “*@%systemroot%*”, а также «пустых» авторов
$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", "Alternative Data Stream"

А користећи фор петљу, примљени подаци ће бити уписани у датотеке.

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

Након извршавања скрипте, биће креирано 9 текстуалних датотека које садрже потребне информације.

Данас професионалци за сајбер безбедност могу да користе ПоверСхелл да обогате информације које су им потребне за решавање разних задатака у свом раду. Додавањем скрипте за покретање, можете добити неке информације без уклањања думпова, слика итд.

Извор: ввв.хабр.цом

Додај коментар