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