Uża PowerShell biex Tiġbor Informazzjoni dwar l-Inċidenti

PowerShell hija għodda ta 'awtomazzjoni pjuttost komuni li ħafna drabi tintuża kemm mill-iżviluppaturi tal-malware kif ukoll mill-ispeċjalisti tas-sigurtà tal-informazzjoni.
Dan l-artikolu ser jiddiskuti l-għażla li tuża PowerShell biex tiġbor dejta mill-bogħod minn tagħmir finali meta tirrispondi għal inċidenti ta’ sigurtà tal-informazzjoni. Biex tagħmel dan, ser ikollok bżonn tikteb skript li se jaħdem fuq l-apparat finali u mbagħad ikun hemm deskrizzjoni dettaljata ta 'dan l-iskript.

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
		}

	}

}

Biex tibda, oħloq funzjoni estensjoni CSIRT, li se tieħu argument - il-mogħdija biex issalva d-dejta riċevuta. Minħabba l-fatt li ħafna cmdlets jaħdmu f'Powershell v5, il-verżjoni PowerShell ġiet iċċekkjata għal tħaddim korrett.

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

Għal faċilità ta 'navigazzjoni permezz tal-fajls maħluqa, żewġ varjabbli huma inizjalizzati: $data u $Computer, li se jiġu assenjati l-isem tal-kompjuter u d-data kurrenti.

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

Aħna niksbu l-lista ta 'proċessi li qed jaħdmu f'isem l-utent attwali kif ġej: oħloq varjabbli $process, tassenjaha l-cmdlet get-ciminstance mal-klassi win32_process. Bl-użu tal-cmdlet Select-Object, tista 'żżid parametri ta' output addizzjonali, fil-każ tagħna dawn se jkunu parentprocessid (ġenitur tal-proċess ID PPID), creationdate (data tal-ħolqien tal-proċess), ipproċessat (proċess ID PID), processname (isem tal-proċess), commandline ( run kmand).

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

Biex tikseb lista tal-konnessjonijiet TCP u UDP kollha, oħloq il-varjabbli $netTCP u $netUDP billi tassenjahom is-cmdlets Get-NetTCPConnection u Get-NetTCPConnection, rispettivament.

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

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

Ikun importanti li ssir taf il-lista tal-kompiti u l-inkarigi ppjanati. Biex tagħmel dan, nużaw is-cmdlets get-ScheduledTask u Get-ScheduledJob. Ejja jassenjawhom il-varjabbli $task u $job, għaliex Inizjalment, hemm ħafna kompiti skedati fis-sistema, imbagħad sabiex tiġi identifikata attività malizzjuża ta 'min jiffiltra l-kompiti skedati leġittimi. Il-cmdlet Select-Object se jgħinna f'dan.

$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

Fis-sistema ta 'fajls NTFS hemm ħaġa bħal flussi ta' data alternattivi (ADS). Dan ifisser li fajl f'NTFS jista 'jkun assoċjat ma' flussi ta' data multipli ta' daqs arbitrarju. Bl-użu tal-ADS, tista' taħbi data li ma tkunx viżibbli permezz ta' kontrolli standard tas-sistema. Dan jagħmilha possibbli li tinjetta kodiċi malizzjuż u/jew taħbi data.

Biex turi flussi ta 'dejta alternattivi f'PowerShell, se nużaw is-cmdlet get-item u l-għodda tal-flussi tal-Windows integrata bis-simbolu * biex naraw il-flussi kollha possibbli, għal dan se noħolqu l-varjabbli $ADS.

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

Ikun utli li ssir taf il-lista ta 'utenti illoggjati fis-sistema; għal dan aħna noħolqu varjabbli $user u nassenjawha għall-eżekuzzjoni tal-programm quser.

$user = quser

L-attakkanti jistgħu jagħmlu bidliet fl-autorun biex jiksbu post fis-sistema. Biex tara l-oġġetti tal-istartjar, tista' tuża s-cmdlet Get-ItemProperty.
Ejja noħolqu żewġ varjabbli: $runUser - biex tara l-istartjar f'isem l-utent u $runMachine - biex tara l-istartjar f'isem il-kompjuter.

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

Sabiex l-informazzjoni kollha tinkiteb f'fajls differenti, noħolqu firxa b'varjabbli u firxa b'ismijiet ta 'fajls.


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

U bl-użu ta 'for loop, id-dejta riċevuta tinkiteb fil-fajls.

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

Wara li tesegwixxi l-iskrittura, se jinħolqu 9 fajls tat-test li jkun fihom l-informazzjoni meħtieġa.

Illum, il-professjonisti taċ-ċibersigurtà jistgħu jużaw PowerShell biex jarrikkixxu l-informazzjoni li jeħtieġu biex isolvu varjetà ta’ kompiti fix-xogħol tagħhom. Billi żżid script għall-istartjar, tista 'tikseb xi informazzjoni mingħajr ma tneħħi miżbliet, immaġini, eċċ.

Sors: www.habr.com

Żid kumment