PowerShell është një mjet automatizimi mjaft i njohur, i cili njihet shpesh si nga zhvilluesit e malware, ashtu edhe nga specialistët e sigurisë informative.
Ky artikull do të shqyrtojë një variant të përdorimit të PowerShell për mbledhjen e të dhënave në distancë nga pajisjet fundore gjatë reagimit ndaj incidenteve të sigurisë informative. Për këtë, do të nevojitet të shkruhet një skenar që do të ekzekutohet në pajisjen fundore dhe më pas do të ndiqet një përshkrim i detajuar i këtij skenari.
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 '*Microsoft*' | 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
}
}
}Një funksion krijohet për të filluar punën CSIRT, i cili do të pranojë si argument një rrugë për të ruajtur të dhënat e marra. Duke pasur parasysh se shumica e komandave funksionojnë në Powershell v5, është kryer një verifikim i versionit të PowerShell për funksionimin e saktë.
funksioni CSIRT{
param($path)# kur ekzekutohet skripti, duhet përcaktuar direktoriumi për ruajtje
if ($psversiontable.psversion.major -ge 5)Për lehtësinë e navigimit midis skedarëve të krijuar, janë inicializuar dy variabël: $date dhe $Computer, të cilave do t'u caktohet emri i kompjuterit dhe data aktuale.
$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"Lista e proceseve të aktivizuara nga përdoruesi aktual do të merret kështu: do të krijojmë një variabël $process, duke i caktuar asaj komandëlin get-ciminstance me klasën win32_process. Duke përdorur komandëlin Select-Object, mund të shtojmë parametra të tjerë të daljes, në rastin tonë këto do të jenë parentprocessid (identifikuesi i procesit prind PPID), creationdate (data e krijimit të procesit), processed (identifikuesi i procesit PID), processname (emri i procesit), commandline (komanda e ekzekutimit).
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessidPër të marrë një listë të të gjitha lidhjeve TCP dhe UDP, do të krijojmë variabël $netTCP dhe $netUDP, duke u caktuar atyre komandët Get-NetTCPConnection dhe Get-NetUDPConnection përkatësisht.
$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state
$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, stateĂshtĂ« e rĂ«ndĂ«sishme tĂ« dihet lista e detyrave dhe punĂ«ve tĂ« planifikuara. PĂ«r kĂ«tĂ«, do tĂ« pĂ«rdorim komandat get-ScheduledTask dhe Get-ScheduledJob. Do t'i caktojmĂ« ata variablave $task dhe $job, pasi fillimisht nĂ« sistem ka shumĂ« detyra tĂ« planifikuara, qĂ« pĂ«r tĂ« pĂ«rcaktuar aktivitetin e dyshimtĂ«, duhet filtruar detyrat legjitime. KĂ«shtu ne do tĂ« ndihmohemi nga komanda Select-Object.
$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname | where author -notlike '*Microsoft*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task pĂ«rjashton autorĂ«t qĂ« pĂ«rmbajnĂ« âMicrosoftâ, â*@%systemroot%*â, si dhe autorĂ«t âtĂ« zbrazĂ«tâ
$job = Get-ScheduledJobNë sistemin e skedave NTFS ekziston një koncept i tillë si rrjedhat alternative të të dhënave (Alternate Data Streams, ADS). Kjo do të thotë se një skedë në NTFS mund të lidhet më tej me disa rrjedha të dhënash të madhësisë së rastit. Me ndihmën e ADS, mund të fshehni të dhëna që nuk do të jenë të dukshme për verifikimet standarde të sistemit. Falë kësaj, mund të futni kode të dëmshme dhe/ose të fshehni të dhëna.
Për të treguar rrjedhat alternative të të dhënave në PowerShell, do të përdorim komandlet get-item dhe injektorin e ndërtuar të Windows stream me simbolin * për të parë të gjitha rrjedhat e mundshme, për këtë do të krijojmë një variabël $ADS.
$ADS = get-item * -stream * | where stream âne ':$Data' Do tĂ« jetĂ« e dobishme tĂ« dimĂ« gjithashtu listĂ«n e pĂ«rdoruesve tĂ« kĂ«qij, pĂ«r kĂ«tĂ« do tĂ« krijojmĂ« njĂ« variabĂ«l $user dhe do t'i caktojmĂ« ekzekutimin e programit quser.
$user = quser Sulmuesit, për t'u konsoliduar në sistem mund të bëjnë ndryshime në autostart. Për të parë objektet në autostart mund të përdorim komandlet Get-ItemProperty.
Do tĂ« krijojmĂ« dy variabla: $runUser â pĂ«r tĂ« parĂ« autostartin nĂ« emrin e pĂ«rdoruesit dhe $runMachine â pĂ«r tĂ« parĂ« autostartin nĂ« emrin e kompjuterit.
$runUser = Get-ItemProperty
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"Për të regjistruar të gjithë informacionin në skedarë të ndryshëm, krijojmë një array me variabla dhe një array me emrat e skedarëve.
$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"Dhe, duke përdorur një cikël for, të dhënat e mbledhura do të regjistrohen në skedarë.
for ($w = 0; $w -lt $array.count; $w++){
$name = $arrayName[$w]
$array[$w] >> $path$name.txt
Pas ekzekutimit të skenarit, do të krijohen 9 skedarë tekstualë që përmbajnë informacionin e nevojshëm.
Aktualisht, specialistët e sigurisë kibernetike mund të përdorin PowerShell për të pasuruar informacionin e nevojshëm për të zgjidhur detyra të ndryshme në punën e tyre. Duke e shtuar skenarin në autopërgjigje, mund të merrni disa informacione pa pasur nevojë për të nxjerrë dump, imazhe, etj.
Burimi: habr.com
