Օգտագործելով 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 ընդլայնում, որը կվերցնի փաստարկ՝ ստացված տվյալների պահպանման ուղին։ Շնորհիվ այն բանի, որ cmdlet-ների մեծ մասն աշխատում է 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 փոփոխական՝ նրան վերագրելով get-ciminstance cmdlet-ը win32_process դասի հետ։ Օգտագործելով Select-Object cmdlet-ը, դուք կարող եք ավելացնել լրացուցիչ ելքային պարամետրեր, մեր դեպքում դրանք կլինեն parentprocessid (հիմնական գործընթացի ID PPID), ստեղծման ամսաթիվը (գործընթացի ստեղծման ամսաթիվը), մշակված (գործընթացի ID PID), գործընթացի անունը (գործընթացի անվանումը), հրամանի տողը ( գործարկել հրամանը):

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

Բոլոր TCP և UDP կապերի ցանկը ստանալու համար ստեղծեք $netTCP և $netUDP փոփոխականները՝ համապատասխանաբար վերագրելով նրանց Get-NetTCPConnection և Get-NetTCPConnection cmdlets:

$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 cmdlet-ները: Եկեք նրանց վերագրենք $task և $job փոփոխականները, քանի որ Սկզբում համակարգում կան բազմաթիվ պլանավորված առաջադրանքներ, այնուհետև վնասակար գործողությունները բացահայտելու համար արժե զտել օրինական պլանավորված առաջադրանքները: Select-Object cmdlet-ը մեզ կօգնի այս հարցում:

$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-item cmdlet-ը և ներկառուցված Windows հոսքի գործիքը * խորհրդանիշով՝ դիտելու բոլոր հնարավոր հոսքերը, դրա համար մենք կստեղծենք $ADS փոփոխականը:

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

Օգտակար կլինի պարզել համակարգ մուտք գործած օգտատերերի ցանկը, դրա համար մենք կստեղծենք $user փոփոխական և վերագրենք այն quser ծրագրի կատարմանը:

$user = quser

Հարձակվողները կարող են փոփոխություններ կատարել autorun-ում՝ համակարգում տեղ գրավելու համար: Գործարկման օբյեկտները դիտելու համար կարող եք օգտագործել Get-ItemProperty cmdlet-ը:
Եկեք ստեղծենք երկու փոփոխական՝ $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 loop-ը, ստացված տվյալները կգրվեն ֆայլերում:

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

Սցենարը կատարելուց հետո կստեղծվի 9 տեքստային ֆայլ, որը պարունակում է անհրաժեշտ տեղեկատվություն։

Այսօր կիբերանվտանգության մասնագետները կարող են օգտագործել PowerShell-ը՝ հարստացնելու իրենց անհրաժեշտ տեղեկատվությունը իրենց աշխատանքում տարբեր խնդիրներ լուծելու համար: Գործարկմանը սկրիպտ ավելացնելով` կարող եք որոշակի տեղեկատվություն ստանալ` առանց աղբավայրերը, պատկերները և այլն հեռացնելու:

Source: www.habr.com

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