Оқиға туралы ақпаратты жинау үшін PowerShell пайдалану

PowerShell – зиянды бағдарламалық қамтамасыз етуді әзірлеушілер де, ақпараттық қауіпсіздік мамандары да жиі қолданатын өте кең таралған автоматтандыру құралы.
Бұл мақалада ақпараттық қауіпсіздік инциденттеріне жауап беру кезінде соңғы құрылғылардан деректерді қашықтан жинау үшін PowerShell пайдалану опциясы талқыланады. Мұны істеу үшін сізге соңғы құрылғыда жұмыс істейтін сценарий жазу керек, содан кейін осы сценарийдің толық сипаттамасы болады.

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
		}

	}

}

Бастау үшін функция жасаңыз CSIRT кеңейтімі, ол аргумент қабылдайды - алынған деректерді сақтау жолы. Көптеген командлеттер Powershell v5 жүйесінде жұмыс істейтіндіктен, PowerShell нұсқасы дұрыс жұмыс істеу үшін тексерілді.

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

Жасалған файлдар арқылы шарлауды жеңілдету үшін екі айнымалы мәндер инициализацияланады: $date және $Computer, оларға компьютер атауы және ағымдағы күн тағайындалады.

$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 айнымалы мәнін жасаңыз, оған win32_process сыныбымен get-ciminstance командлетін тағайындаңыз. Select-Object командлетін пайдалану арқылы қосымша шығыс параметрлерін қосуға болады, біздің жағдайда бұл ата-аналық процесс (ата-аналық процестің идентификаторы PPID), жасалған күні (процестің жасалған күні), өңделген (процесс идентификаторы PID), процесс атауы (процесс атауы), пәрмен жолы ( іске қосу пәрмені).

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

Барлық TCP және UDP қосылымдарының тізімін алу үшін, тиісінше Get-NetTCPConnection және Get-NetTCPConnection командлеттерін тағайындау арқылы $netTCP және $netUDP айнымалы мәндерін жасаңыз.

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

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

Жоспарланған тапсырмалар мен тапсырмалардың тізімін білу маңызды болады. Ол үшін get-ScheduledTask және Get-ScheduledJob командлеттерін қолданамыз. Оларға $task және $job айнымалыларын тағайындайық, өйткені Бастапқыда жүйеде көптеген жоспарланған тапсырмалар бар, содан кейін зиянды әрекетті анықтау үшін заңды жоспарланған тапсырмаларды сүзгілеу керек. Бұл бізге Select-Object командлеті көмектеседі.

$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 файлдық жүйесінде баламалы деректер ағындары (ADS) сияқты нәрсе бар. Бұл NTFS файлын ерікті өлшемдегі бірнеше деректер ағынымен байланыстыруға болатынын білдіреді. ADS көмегімен стандартты жүйе тексерулері арқылы көрінбейтін деректерді жасыруға болады. Бұл зиянды кодты енгізуге және/немесе деректерді жасыруға мүмкіндік береді.

PowerShell бағдарламасында балама деректер ағындарын көрсету үшін біз get-element командлетін және барлық ықтимал ағындарды көру үшін * таңбасы бар кірістірілген Windows ағыны құралын пайдаланамыз, ол үшін $ADS айнымалысын жасаймыз.

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

Жүйеге кірген пайдаланушылардың тізімін білу пайдалы болады, ол үшін $user айнымалысын жасап, оны quser бағдарламасының орындалуына тағайындаймыз.

$user = quser

Шабуылшылар жүйеде орын алу үшін автоматты іске қосуға өзгерістер енгізе алады. Іске қосу нысандарын көру үшін Get-ItemProperty командлетін пайдалануға болады.
Екі айнымалыны жасайық: $runUser - пайдаланушы атынан іске қосуды көру үшін және $runMachine - компьютер атынан іске қосуды көру үшін.

$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", "Alternative Data Stream"

Ал for циклі арқылы алынған мәліметтер файлдарға жазылады.

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

Сценарийді орындағаннан кейін қажетті ақпаратты қамтитын 9 мәтіндік файл жасалады.

Бүгінгі таңда киберқауіпсіздік мамандары PowerShell бағдарламасын өз жұмысындағы әртүрлі тапсырмаларды шешу үшін қажетті ақпаратты байыту үшін пайдалана алады. Іске қосуға сценарий қосу арқылы сіз кейбір ақпаратты қоқыстарды, кескіндерді және т.б. жоймай-ақ ала аласыз.

Ақпарат көзі: www.habr.com

пікір қалдыру