Korištenje PowerShell-a za prikupljanje informacija o incidentu

PowerShell je prilično uobičajen alat za automatizaciju koji često koriste i razvijači zlonamjernog softvera i stručnjaci za informacijsku sigurnost.
U ovom će se članku raspravljati o mogućnosti korištenja PowerShell-a za daljinsko prikupljanje podataka s krajnjih uređaja prilikom reagiranja na incidente informacijske sigurnosti. Da biste to učinili, morat ćete napisati skriptu koja će se izvoditi na krajnjem uređaju, a zatim će biti detaljan opis te skripte.

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
		}

	}

}

Za početak izradite funkciju CSIRT proširenje, koji će uzeti argument - put za spremanje primljenih podataka. Zbog činjenice da većina cmdleta radi u Powershell v5, verzija PowerShell je provjerena za ispravan rad.

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

Za lakšu navigaciju kroz kreirane datoteke, inicijaliziraju se dvije varijable: $date i $Computer, kojima će biti dodijeljen naziv računala i trenutni datum.

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

Dobivamo popis pokrenutih procesa u ime trenutnog korisnika na sljedeći način: kreirajte varijablu $process, dodjeljujući joj cmdlet get-ciminstance s klasom win32_process. Pomoću cmdleta Select-Object možete dodati dodatne izlazne parametre, u našem slučaju to će biti parentprocessid (ID nadređenog procesa PPID), creationdate (datum stvaranja procesa), processed (ID procesa PID), processname (naziv procesa), commandline ( naredba za pokretanje).

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

Da biste dobili popis svih TCP i UDP veza, stvorite varijable $netTCP i $netUDP tako da im dodijelite cmdlete Get-NetTCPConnection i 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

Bit će važno saznati popis planiranih zadataka i zadataka. Da bismo to učinili, koristimo cmdlete get-ScheduledTask i Get-ScheduledJob. Dodijelimo im varijable $task i $job, jer U početku postoji mnogo planiranih zadataka u sustavu, a zatim da bi se identificirala zlonamjerna aktivnost vrijedi filtrirati legitimne planirane zadatke. U tome će nam pomoći 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

U NTFS datotečnom sustavu postoji nešto poput alternativnih tokova podataka (ADS). To znači da se datoteka u NTFS-u može po izboru povezati s više tokova podataka proizvoljne veličine. Pomoću ADS-a možete sakriti podatke koji ne bi bili vidljivi standardnim provjerama sustava. To omogućuje ubacivanje zlonamjernog koda i/ili skrivanje podataka.

Za prikaz alternativnih tokova podataka u PowerShell-u, koristit ćemo cmdlet get-item i ugrađeni Windows alat za tokove sa simbolom * za pregled svih mogućih tokova, za to ćemo stvoriti varijablu $ADS.

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

Bit će korisno saznati popis korisnika prijavljenih na sustav; za to ćemo kreirati varijablu $user i dodijeliti je izvršavanju programa quser.

$user = quser

Napadači mogu mijenjati automatsko pokretanje kako bi se učvrstili u sustavu. Za pregled pokretačkih objekata možete koristiti cmdlet Get-ItemProperty.
Kreirajmo dvije varijable: $runUser - za pregled pokretanja u ime korisnika i $runMachine - za pregled pokretanja u ime računala.

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

Kako bi se sve informacije zapisale u različite datoteke, stvaramo polje s varijablama i polje s nazivima datoteka.


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

I korištenjem for petlje, primljeni podaci bit će zapisani u datoteke.

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

Nakon izvršavanja skripte, kreirat će se 9 tekstualnih datoteka koje sadrže potrebne podatke.

Danas stručnjaci za kibernetičku sigurnost mogu koristiti PowerShell za obogaćivanje informacija koje su im potrebne za rješavanje raznih zadataka u svom radu. Dodavanjem skripte u pokretanje možete dobiti neke informacije bez uklanjanja dumpova, slika itd.

Izvor: www.habr.com

Dodajte komentar