Defnyddio PowerShell i Gasglu Gwybodaeth am Ddigwyddiadau

Offeryn awtomeiddio eithaf cyffredin yw PowerShell a ddefnyddir yn aml gan ddatblygwyr malware ac arbenigwyr diogelwch gwybodaeth.
Bydd yr erthygl hon yn ystyried y defnydd o PowerShell ar gyfer casglu data o bell o ddyfeisiau terfynol wrth ymateb i ddigwyddiadau diogelwch gwybodaeth. I wneud hyn, mae angen i chi ysgrifennu sgript a fydd yn rhedeg ar y ddyfais diwedd, ac yna bydd disgrifiad manwl o'r sgript hon.

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
		}

	}

}

I ddechrau, crΓ«wch swyddogaeth Estyniad CSIRT, a fydd yn cymryd dadl - y llwybr i achub y data a dderbyniwyd. Oherwydd bod y rhan fwyaf o cmdlets yn gweithio yn Powershell v5, mae'r fersiwn PowerShell wedi'i wirio i sicrhau ei fod yn gweithredu'n gywir.

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

Er mwyn hwyluso llywio trwy'r ffeiliau a grΓ«wyd, mae dau newidyn yn cael eu cychwyn: $date a $Computer, a fydd yn cael enw'r cyfrifiadur a'r dyddiad cyfredol.

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

Rydyn ni'n cael y rhestr o brosesau rhedeg ar ran y defnyddiwr presennol fel a ganlyn: creu'r newidyn $process trwy aseinio'r cmdlet get-ciminstance iddo gyda'r dosbarth win32_process. Gan ddefnyddio'r cmdlet Select-Object, gallwch ychwanegu paramedrau allbwn ychwanegol, yn ein hachos ni, y rhain fydd parentprocessid (ID proses rhiant PPID), dyddiad creu (dyddiad creu proses), wedi'i brosesu (ID proses PID), enw proses (enw'r broses), llinell orchymyn (gorchymyn cychwyn).

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

I gael rhestr o'r holl gysylltiadau TCP a CDU, crΓ«wch y newidynnau $netTCP a $netUDP trwy aseinio cmdlets Get-NetTCPConnection a Get-NetTCPConnection iddynt, yn y drefn honno.

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

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

Bydd yn bwysig gwybod y rhestr o dasgau a thasgau sydd wedi'u hamserlennu. I wneud hyn, rydym yn defnyddio'r cmdlets get-ScheduledTask a Get-ScheduledJob. Gadewch i ni aseinio'r newidynnau $tassk a $job iddynt, oherwydd I ddechrau, mae yna lawer o dasgau wedi'u trefnu yn y system, yna er mwyn nodi gweithgaredd maleisus, mae'n werth hidlo tasgau a drefnwyd yn gyfreithlon. Bydd y cmdlet Select-Object yn ein helpu gyda hyn.

$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

Yn system ffeiliau NTFS, mae'r fath beth Γ’ ffrydiau data amgen (Ffrydiau Data Amgen, ADS). Mae hyn yn golygu y gall ffeil ar NTFS gael ei chysylltu ymhellach Γ’ ffrydiau data lluosog o faint mympwyol. Gydag ADS, gallwch guddio data na fydd yn weladwy trwy wiriadau system safonol. Gall hyn chwistrellu cod maleisus a/neu guddio data.

I arddangos ffrydiau data amgen yn PowerShell, byddwn yn defnyddio'r cmdlet get-item a'r offeryn ffrwd Windows adeiledig gyda'r symbol * i weld pob ffrwd bosibl, ar gyfer hyn byddwn yn creu'r newidyn $ADS.

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

Bydd yn ddefnyddiol gwybod y rhestr o ddefnyddwyr sydd wedi mewngofnodi i'r system, ar gyfer hyn byddwn yn creu newidyn $user ac yn aseinio gweithrediad y rhaglen quser iddo.

$user = quser

Er mwyn ennill troedle yn y system, gall ymosodwyr wneud newidiadau i autorun. Gallwch ddefnyddio cmdlet Get-ItemProperty i weld yr eitemau yn awtochwarae.
Gadewch i ni greu dau newidyn: $runUser - i weld llwyth awtomatig ar ran y defnyddiwr a $runMachine - i weld llwyth awtomatig ar ran y cyfrifiadur.

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

Er mwyn i'r holl wybodaeth gael ei hysgrifennu i wahanol ffeiliau, rydym yn creu arae gyda newidynnau ac arae gydag enwau ffeiliau.


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

Ac, gan ddefnyddio dolen ar gyfer, bydd y data canlyniadol yn cael ei ysgrifennu i ffeiliau.

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

Ar Γ΄l gweithredu'r sgript, bydd 9 ffeil testun yn cael eu creu yn cynnwys y wybodaeth angenrheidiol.

Y dyddiau hyn, gall gweithwyr proffesiynol seiberddiogelwch ddefnyddio PowerShell i gyfoethogi'r wybodaeth sydd ei hangen arnynt i ddatrys amrywiaeth o dasgau yn eu gwaith. Trwy ychwanegu sgript i lwytho'n awtomatig, gallwch gael rhywfaint o wybodaeth heb ddympio, delweddau, ac ati.

Ffynhonnell: hab.com

Ychwanegu sylw