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