Použití PowerShellu ke shromažďování informací o incidentu

PowerShell je poměrně běžný automatizační nástroj, který často používají jak vývojáři malwaru, tak specialisté na informační bezpečnost.
Tento článek se bude zabývat použitím PowerShellu pro vzdálený sběr dat z koncových zařízení při reakci na incidenty zabezpečení informací. K tomu je potřeba napsat skript, který poběží na koncovém zařízení a následně bude podrobný popis tohoto skriptu.

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
		}

	}

}

Chcete-li začít, vytvořte funkci Rozšíření CSIRT, který převezme argument - cestu k uložení přijatých dat. Vzhledem k tomu, že většina cmdletů funguje v Powershell v5, byla provedena kontrola správné funkce verze PowerShellu.

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

Pro snadnou navigaci ve vytvořených souborech jsou inicializovány dvě proměnné: $date a $Computer, kterým bude přiřazen název počítače a aktuální 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"

Seznam běžících procesů jménem aktuálního uživatele získáme následovně: vytvořte proměnnou $process přiřazením rutiny get-ciminstance s třídou win32_process. Pomocí rutiny Select-Object můžete přidat další výstupní parametry, v našem případě to budou parentprocessid (ID rodičovského procesu PPID), datum vytvoření (datum vytvoření procesu), zpracované (ID procesu PID), název procesu (název procesu), příkazový řádek (příkaz start).

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

Chcete-li získat seznam všech připojení TCP a UDP, vytvořte proměnné $netTCP a $netUDP tak, že jim přiřadíte rutiny Get-NetTCPConnection a 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

Důležité bude znát seznam naplánovaných úkolů a úkolů. K tomu používáme rutiny get-ScheduledTask a Get-ScheduledJob. Přiřaďme jim proměnné $task a $job, protože Zpočátku je v systému spousta naplánovaných úloh, pak se pro identifikaci škodlivé činnosti vyplatí odfiltrovat legitimní naplánované úlohy. S tím nám pomůže rutina 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

V souborovém systému NTFS existuje něco jako alternativní datové toky (Alternate Data Streams, ADS). To znamená, že soubor na NTFS může být dále spojen s více datovými toky libovolné velikosti. Pomocí ADS můžete skrýt data, která nebudou viditelná standardními systémovými kontrolami. To může vložit škodlivý kód a/nebo skrýt data.

Pro zobrazení alternativních datových streamů v PowerShellu použijeme rutinu get-item a vestavěný streamovací nástroj Windows se symbolem * k zobrazení všech možných streamů, k tomu vytvoříme proměnnou $ADS.

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

Bude užitečné znát seznam uživatelů přihlášených do systému, k tomu si vytvoříme proměnnou $user a přiřadíme jí provádění programu quser.

$user = quser

Aby útočníci získali oporu v systému, mohou provádět změny v automatickém spouštění. K zobrazení položek v automatickém přehrávání můžete použít rutinu Get-ItemProperty.
Vytvořme dvě proměnné: $runUser – pro zobrazení automatického načítání jménem uživatele a $runMachine – pro zobrazení automatického načítání jménem počítače.

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

Aby se všechny informace zapisovaly do různých souborů, vytvoříme pole s proměnnými a pole s názvy souborů.


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

A pomocí cyklu for budou výsledná data zapsána do souborů.

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

Po spuštění skriptu se vytvoří 9 textových souborů obsahujících potřebné informace.

Dnes mohou odborníci na kybernetickou bezpečnost používat PowerShell k obohacení informací, které potřebují k řešení různých úkolů ve své práci. Přidáním skriptu k automatickému načítání můžete získat některé informace bez dumpingu, obrázků atd.

Zdroj: www.habr.com

Přidat komentář