Gamit ang PowerShell sa Pagtigom sa Impormasyon sa Insidente

Ang PowerShell usa ka kasagaran nga himan sa automation nga kanunay gigamit sa mga nag-develop sa malware ug mga espesyalista sa seguridad sa impormasyon.
Kini nga artikulo maghisgot sa paggamit sa PowerShell alang sa hilit nga pagkolekta sa mga datos gikan sa mga end device sa pagtubag sa mga insidente sa seguridad sa impormasyon. Aron mahimo kini, kinahanglan nimo nga magsulat usa ka script nga modagan sa katapusan nga aparato, ug unya adunay usa ka detalyado nga paghulagway niini nga script.

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
		}

	}

}

Aron makasugod, paghimo og function CSIRT extension, nga magkuha ug argumento - ang dalan aron maluwas ang nadawat nga datos. Tungod sa kamatuoran nga kadaghanan sa mga cmdlet nagtrabaho sa Powershell v5, usa ka pagsusi sa bersyon sa PowerShell gihimo alang sa husto nga operasyon.

function CSIRT{
		
param($path)# ΠΏΡ€ΠΈ запускС скрипта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для сохранСния
if ($psversiontable.psversion.major -ge 5)

Para sa kasayon ​​sa nabigasyon pinaagi sa gibuhat nga mga file, duha ka variables ang gisugdan: $date ug $Computer, nga itudlo sa computer name ug sa kasamtangang petsa.

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

Among makuha ang lista sa mga proseso sa pagpadagan alang sa kasamtangang user sama sa mosunod: paghimo sa $process variable pinaagi sa pag-assign niini sa get-ciminstance cmdlet uban sa win32_process nga klase. Gamit ang Select-Object cmdlet, mahimo nimong idugang ang dugang nga mga parameter sa output, sa among kaso, kini ang parentprocessid (proseso sa ginikanan nga ID PPID), petsa sa paghimo (petsa sa paghimo sa proseso), giproseso (ID proseso sa PID), ngalan sa proseso (ngalan sa proseso), linya sa mando. (pagsugod sa sugo).

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

Aron makakuha og lista sa tanang TCP ug UDP nga koneksyon, paghimo sa $netTCP ug $netUDP nga mga variable pinaagi sa pag-assign kanila sa Get-NetTCPConnection ug Get-NetTCPConnection cmdlet, matag usa.

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

Mahinungdanon nga mahibal-an ang lista sa mga naka-iskedyul nga buluhaton ug buluhaton. Aron mahimo kini, among gigamit ang get-ScheduledTask ug Get-ScheduledJob cmdlet. Atong i-assign kanila ang mga variable nga $task ug $job, tungod kay Sa sinugdan, adunay daghang mga naka-iskedyul nga mga buluhaton sa sistema, unya aron mahibal-an ang makadaot nga kalihokan, angay nga pagsala sa mga lehitimong naka-iskedyul nga mga buluhaton. Ang Select-Object cmdlet makatabang kanato niini.

$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

Sa NTFS file system, adunay usa ka butang sama sa alternatibong data streams (Alternate Data Streams, ADS). Kini nagpasabot nga ang usa ka file sa NTFS mahimong dugang nga nalangkit sa daghang data streams sa arbitraryong gidak-on. Uban sa ADS, mahimo nimong itago ang datos nga dili makita sa mga sumbanan nga pagsusi sa sistema. Mahimo kining mag-inject sa malisyoso nga code ug/o makatago sa datos.

Para ipakita ang alternatibong mga stream sa datos sa PowerShell, atong gamiton ang get-item cmdlet ug ang built-in nga Windows stream tool nga adunay simbolo nga * para makita ang tanang posibleng stream, para niini atong himoon ang $ADS variable.

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

Mapuslanon nga mahibal-an ang lista sa mga tiggamit nga naka-log in sa sistema, tungod niini maghimo kami usa ka variable nga $user ug i-assign ang pagpatuman sa quser program niini.

$user = quser

Aron makakuha og foothold sa sistema, ang mga tig-atake makahimo og mga kausaban sa autorun. Mahimo nimong gamiton ang Get-ItemProperty cmdlet aron makita ang mga butang sa autoplay.
Magbuhat ta ug duha ka variable: $runUser - para tan-awon ang autoload para sa user ug $runMachine - para tan-awon ang autoload para sa computer.

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

Aron masulat ang tanang impormasyon ngadto sa lain-laing mga file, maghimo kami og array nga adunay mga variable ug array nga adunay mga ngalan sa file.


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

Ug, gamit ang for loop, ang resulta nga datos isulat sa mga file.

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

Human mapatuman ang script, 9 ka text files ang pagabuhaton nga adunay sulod nga gikinahanglang impormasyon.

Karong panahona, ang mga propesyonal sa cybersecurity mahimong mogamit sa PowerShell aron mapauswag ang kasayuran nga ilang kinahanglan aron masulbad ang lainlaing mga buluhaton sa ilang trabaho. Pinaagi sa pagdugang og script sa autoload, makakuha ka og pipila ka impormasyon nga walay paglabay, mga hulagway, ug uban pa.

Source: www.habr.com

Idugang sa usa ka comment