Hadisə haqqında məlumat toplamaq üçün PowerShell-dən istifadə

PowerShell, həm zərərli proqram tərtibatçıları, həm də informasiya təhlükəsizliyi mütəxəssisləri tərəfindən tez-tez istifadə olunan kifayət qədər ümumi avtomatlaşdırma vasitəsidir.
Bu məqalə informasiya təhlükəsizliyi insidentlərinə cavab verərkən son cihazlardan məlumatların uzaqdan toplanması üçün PowerShell-dən istifadəni nəzərdən keçirəcək. Bunu etmək üçün, son cihazda işləyəcək bir skript yazmalısınız və sonra bu skriptin ətraflı təsviri olacaq.

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
		}

	}

}

Başlamaq üçün funksiya yaradın CSIRT uzadılması, bir arqument alacaq - alınan məlumatları saxlamaq üçün yol. Əksər cmdletlər Powershell v5-də işlədiyinə görə düzgün işləmək üçün PowerShell versiyası yoxlanılıb.

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

Yaradılmış fayllar arasında naviqasiya asanlığı üçün iki dəyişən işə salınır: $date və $Computer, onlara kompüter adı və cari tarix təyin ediləcək.

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

Cari istifadəçi adından işləyən proseslərin siyahısını aşağıdakı kimi əldə edirik: win32_process sinfi ilə get-ciminstance cmdletini təyin edərək $process dəyişənini yaradın. Select-Object cmdletindən istifadə edərək əlavə çıxış parametrləri əlavə edə bilərsiniz, bizim vəziyyətimizdə bunlar ana proses (ana proses identifikatoru PPID), yaradılış tarixi (prosesin yaradılması tarixi), işlənmiş (PID proses identifikatoru), proses adı (proses adı), komanda xətti olacaqdır. (başlamaq əmri).

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

Bütün TCP və UDP əlaqələrinin siyahısını əldə etmək üçün müvafiq olaraq Get-NetTCPConnection və Get-NetTCPConnection cmdletlərini təyin edərək $netTCP və $netUDP dəyişənlərini yaradın.

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

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

Planlaşdırılmış tapşırıqların və tapşırıqların siyahısını bilmək vacib olacaq. Bunun üçün biz get-ScheduledTask və Get-ScheduledJob cmdletlərindən istifadə edirik. Gəlin onlara $task və $job dəyişənlərini təyin edək, çünki Əvvəlcə sistemdə çoxlu planlaşdırılmış tapşırıqlar var, sonra zərərli fəaliyyəti müəyyən etmək üçün qanuni planlaşdırılan tapşırıqları süzgəcdən keçirməyə dəyər. Select-Object cmdlet bu işdə bizə kömək edəcək.

$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

NTFS fayl sistemində alternativ məlumat axınları (Alternativ Data Streams, ADS) kimi bir şey var. Bu o deməkdir ki, NTFS-dəki bir fayl daha çox ixtiyari ölçüdə çoxlu məlumat axını ilə əlaqələndirilə bilər. ADS ilə siz standart sistem yoxlamaları ilə görünməyəcək məlumatları gizlədə bilərsiniz. Bu, zərərli kodu yeridə və/və ya məlumatları gizlədə bilər.

PowerShell-də alternativ məlumat axınlarını göstərmək üçün biz get-element cmdletindən və bütün mümkün axınlara baxmaq üçün * simvolu ilə quraşdırılmış Windows axın alətindən istifadə edəcəyik, bunun üçün $ADS dəyişənini yaradacağıq.

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

Sistemə daxil olan istifadəçilərin siyahısını bilmək faydalı olacaq, bunun üçün biz $user dəyişəni yaradacaq və ona quser proqramının icrasını təyin edəcəyik.

$user = quser

Sistemdə möhkəmlənmək üçün təcavüzkarlar autorun-da dəyişikliklər edə bilərlər. Avtomatik oynatmada elementlərə baxmaq üçün Get-ItemProperty cmdletindən istifadə edə bilərsiniz.
İki dəyişən yaradaq: $runUser - istifadəçi adından avtomatik yükləməyə baxmaq üçün və $runMachine - kompüter adından avtomatik yükləməyə baxmaq üçün.

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

Bütün məlumatların müxtəlif fayllara yazılması üçün biz dəyişənləri olan massiv və fayl adları olan massiv yaradırıq.


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

Və for loopundan istifadə edərək, əldə edilən məlumatlar fayllara yazılacaq.

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

Skript icra edildikdən sonra lazımi məlumatları ehtiva edən 9 mətn faylı yaradılacaq.

İndiki vaxtda kibertəhlükəsizlik mütəxəssisləri öz işlərində müxtəlif vəzifələri həll etmək üçün lazım olan məlumatları zənginləşdirmək üçün PowerShell-dən istifadə edə bilərlər. Avtomatik yükləməyə skript əlavə etməklə siz bəzi məlumatları dempinq, şəkillər və s.

Mənbə: www.habr.com

Добавить комментарий