PowerShell izmantošana, lai apkopotu informāciju par incidentiem

PowerShell ir diezgan izplatīts automatizācijas rīks, ko bieži izmanto gan ļaunprātīgas programmatūras izstrādātāji, gan informācijas drošības speciālisti.
Šajā rakstā tiks apspriesta iespēja izmantot PowerShell, lai attālināti vāktu datus no gala ierīcēm, reaģējot uz informācijas drošības incidentiem. Lai to izdarītu, jums būs jāuzraksta skripts, kas darbosies gala ierīcē, un pēc tam būs detalizēts šī skripta apraksts.

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
		}

	}

}

Lai sāktu, izveidojiet funkciju CSIRT paplašinājums, kas veiks argumentu - ceļu uz saņemto datu saglabāšanu. Tā kā lielākā daļa cmdlet darbojas programmā Powershell v5, tika pārbaudīta PowerShell versijas pareiza darbība.

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

Lai atvieglotu navigāciju pa izveidotajiem failiem, tiek inicializēti divi mainīgie: $date un $Computer, kuriem tiks piešķirts datora nosaukums un pašreizējais datums.

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

Mēs iegūstam pašreizējā lietotāja vārdā darbojošos procesu sarakstu šādi: izveidojiet $process mainīgo, piešķirot tam cmdlet get-ciminstance ar win32_process klasi. Izmantojot Select-Object cmdlet, varat pievienot papildu izvades parametrus, mūsu gadījumā tie būs parentprocessid (vecāku procesa ID PPID), createdate (procesa izveides datums), apstrādāts (procesa ID PID), procesa nosaukums (procesa nosaukums), komandrinda ( palaist komandu).

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

Lai iegūtu visu TCP un UDP savienojumu sarakstu, izveidojiet $netTCP un $netUDP mainīgos, piešķirot tiem attiecīgi cmdlet Get-NetTCPConnection un 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

Svarīgi būs noskaidrot plānoto uzdevumu un uzdevumu sarakstu. Lai to izdarītu, mēs izmantojam cmdlet get-ScheduledTask un Get-ScheduledJob. Piešķirsim tiem mainīgos $task un $job, jo Sākotnēji sistēmā ir daudz ieplānotu uzdevumu, tad, lai identificētu ļaunprātīgu darbību, ir vērts filtrēt likumīgus ieplānotos uzdevumus. Šajā jautājumā mums palīdzēs Select-Object cmdlet.

$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 failu sistēmā ir tāda lieta kā alternatīvas datu plūsmas (ADS). Tas nozīmē, ka failu NTFS sistēmā var pēc izvēles saistīt ar vairākām patvaļīga izmēra datu plūsmām. Izmantojot ADS, varat paslēpt datus, kas nebūtu redzami, veicot standarta sistēmas pārbaudes. Tas ļauj ievadīt ļaunprātīgu kodu un/vai slēpt datus.

Lai parādītu alternatīvas datu straumes programmā PowerShell, mēs izmantosim get-item cmdlet un iebūvēto Windows straumes rīku ar simbolu *, lai skatītu visas iespējamās straumes, šim nolūkam izveidosim mainīgo $ADS.

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

Būs noderīgi noskaidrot sistēmā pieteicušos lietotāju sarakstu, šim nolūkam izveidosim $user mainīgo un piešķirsim to quser programmas izpildei.

$user = quser

Uzbrucēji var veikt izmaiņas automātiskajā palaišanā, lai nostiprinātos sistēmā. Lai skatītu startēšanas objektus, varat izmantot cmdlet Get-ItemProperty.
Izveidosim divus mainīgos: $runUser — lai skatītu startēšanu lietotāja vārdā un $runMachine — lai skatītu startēšanu datora vārdā.

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

Lai visa informācija tiktu ierakstīta dažādos failos, mēs izveidojam masīvu ar mainīgajiem un masīvu ar failu nosaukumiem.


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

Un, izmantojot for cilpu, saņemtie dati tiks ierakstīti failos.

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

Pēc skripta izpildes tiks izveidoti 9 teksta faili, kas satur nepieciešamo informāciju.

Mūsdienās kiberdrošības speciālisti var izmantot PowerShell, lai bagātinātu informāciju, kas viņiem nepieciešama dažādu uzdevumu risināšanai savā darbā. Pievienojot skriptu startēšanai, varat iegūt kādu informāciju, nenoņemot izgāztuves, attēlus utt.

Avots: www.habr.com

Pievieno komentāru