Gebruik PowerShell om voorvalinligting in te samel

PowerShell is 'n redelik algemene outomatiseringsinstrument wat dikwels deur beide wanware-ontwikkelaars en inligtingsekuriteitspesialiste gebruik word.
Hierdie artikel sal die gebruik van PowerShell oorweeg vir afstandversameling van data vanaf eindtoestelle wanneer op inligtingsekuriteitvoorvalle gereageer word. Om dit te doen, moet jy 'n skrif skryf wat op die eindtoestel sal loop, en dan sal daar 'n gedetailleerde beskrywing van hierdie skrif wees.

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
		}

	}

}

Om te begin, skep 'n funksie CSIRT uitbreiding, wat 'n argument sal neem - die pad om die ontvangde data te stoor. As gevolg van die feit dat die meeste cmdlets in Powershell v5 werk, is 'n kontrole van die PowerShell-weergawe gedoen vir korrekte werking.

function CSIRT{
		
param($path)# при запуске скрипта необходимо указать директорию для сохранения
if ($psversiontable.psversion.major -ge 5)

Vir gemak van navigasie deur die geskepde lêers, word twee veranderlikes geïnisialiseer: $date en $Computer, wat die rekenaarnaam en die huidige datum sal kry.

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

Ons kry die lys van lopende prosesse namens die huidige gebruiker soos volg: skep die $process veranderlike deur dit die get-ciminstance cmdlet toe te wys met die win32_process klas. Deur die Select-Object cmdlet te gebruik, kan u addisionele uitvoerparameters byvoeg, in ons geval sal dit ouerproses-ID (ouerproses-ID PPID), skeppingsdatum (prosesskeppingsdatum), verwerk (PID-proses-ID), prosesnaam (prosesnaam), opdraglyn wees (begin opdrag).

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

Om 'n lys van alle TCP- en UDP-verbindings te kry, skep die $netTCP- en $netUDP-veranderlikes deur onderskeidelik die Get-NetTCPConnection- en Get-NetTCPConnection-cmdlets aan hulle toe te ken.

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

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

Dit sal belangrik wees om die lys van geskeduleerde take en take te ken. Om dit te doen, gebruik ons ​​die get-ScheduledTask en Get-ScheduledJob-cmdlets. Kom ons ken aan hulle die veranderlikes $taak en $job toe, want Aanvanklik is daar baie geskeduleerde take in die stelsel, en om kwaadwillige aktiwiteite te identifiseer, is dit die moeite werd om wettige geskeduleerde take uit te filter. Die Select-Object-cmdlet sal ons hiermee help.

$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

In die NTFS-lêerstelsel is daar iets soos alternatiewe datastrome (Alternate Data Streams, ADS). Dit beteken dat 'n lêer op NTFS verder geassosieer kan word met veelvuldige datastrome van arbitrêre grootte. Met ADS kan jy data versteek wat nie deur standaard stelselkontroles sigbaar sal wees nie. Dit kan kwaadwillige kode inspuit en/of data versteek.

Om alternatiewe datastrome in PowerShell te vertoon, sal ons die get-item cmdlet en die ingeboude Windows-stroomnutsding met die *-simbool gebruik om alle moontlike strome te sien, hiervoor sal ons die $ADS-veranderlike skep.

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

Dit sal nuttig wees om die lys van gebruikers wat by die stelsel aangemeld is te ken, hiervoor sal ons 'n $gebruikersveranderlike skep en die uitvoering van die quser-program daaraan toewys.

$user = quser

Om 'n vastrapplek in die stelsel te kry, kan aanvallers veranderinge aan outorun aanbring. Jy kan die Get-ItemProperty-cmdlet gebruik om die items in outospeel te sien.
Kom ons skep twee veranderlikes: $runUser - om outoload namens die gebruiker te sien en $runMachine - om outoload namens die rekenaar te sien.

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

Om alle inligting na verskillende lêers te skryf, skep ons 'n skikking met veranderlikes en 'n skikking met lêername.


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

En deur 'n for-lus te gebruik, sal die resulterende data na lêers geskryf word.

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

Nadat die skrip uitgevoer is, sal 9 tekslêers geskep word wat die nodige inligting bevat.

Deesdae kan kuberveiligheidspersoneel PowerShell gebruik om die inligting wat hulle nodig het om 'n verskeidenheid take in hul werk op te los, te verryk. Deur 'n skrip by te voeg om outomaties te laai, kan jy inligting kry sonder om te stort, beelde, ens.

Bron: will.com

Voeg 'n opmerking