A’ cleachdadh PowerShell gus Fiosrachadh Tachartas a Chruinneachadh

Tha PowerShell na inneal fèin-ghluasaid gu math cumanta a bhios gu tric air a chleachdadh le luchd-leasachaidh malware agus eòlaichean tèarainteachd fiosrachaidh.
Beachdaichidh an artaigil seo air cleachdadh PowerShell airson cruinneachadh dàta aig astar bho innealan deireannach nuair a bhios tu a’ freagairt tachartasan tèarainteachd fiosrachaidh. Gus seo a dhèanamh, feumaidh tu sgriobt a sgrìobhadh a ruitheas air an inneal crìochnachaidh, agus an uairsin bidh tuairisgeul mionaideach air an sgriobt seo.

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
		}

	}

}

Gus tòiseachadh, cruthaich gnìomh leudachadh CSIRT, a bheir argamaid - an t-slighe gus an dàta a fhuaireadh a shàbhaladh. Leis gu bheil a’ mhòr-chuid de na cmdlets ag obair ann an Powershell v5, chaidh sgrùdadh a dhèanamh air an dreach PowerShell airson obrachadh ceart.

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

Airson a bhith furasta a sheòladh tro na faidhlichean cruthaichte, thèid dà chaochladair a thòiseachadh: $date agus $Computer, a gheibh ainm a’ choimpiutair agus an ceann-latha làithreach.

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

Gheibh sinn an liosta de phròiseasan ruith às leth an neach-cleachdaidh gnàthach mar a leanas: cruthaich an caochladair $ process le bhith a’ sònrachadh an cmdlet get-ciminstance leis a’ chlas win32_process. A’ cleachdadh an cmdlet Select-Object, faodaidh tu paramadairean toraidh a bharrachd a chur ris, anns a’ chùis againn, bidh iad sin nam pròiseas pàrant (ID pròiseas pàrant PPID), ceann-latha cruthachaidh (ceann-latha cruthachaidh pròiseas), air a phròiseasadh (ID pròiseas PID), ainm pròiseas (ainm pròiseas), loidhne-àithne (òrdugh tòiseachaidh).

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

Gus liosta fhaighinn de na ceanglaichean TCP agus UDP gu lèir, cruthaich na caochladairean $netTCP agus $netUDP le bhith a’ sònrachadh cmdlets Get-NetTCPConnection agus Get-NetTCPConnection, fa leth.

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

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

Bidh e cudromach fios a bhith agad air an liosta de ghnìomhan agus gnìomhan clàraichte. Gus seo a dhèanamh, bidh sinn a’ cleachdadh na cmdlets get-ScheduledTask agus Get-ScheduledJob. Sònraichidh sinn dhaibh na caochladairean $task and $job, oir An toiseach, tha tòrr ghnìomhan clàraichte san t-siostam, agus an uairsin gus gnìomhachd droch-rùnach a chomharrachadh, is fhiach a bhith a’ sìoladh a-mach gnìomhan clàraichte dligheach. Cuidichidh an cmdlet Select-Object sinn le seo.

$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

Ann an siostam faidhle NTFS, tha leithid de rud ann ri sruthan dàta eile (Sruthan Dàta Eile, ADS). Tha seo a’ ciallachadh gum faod faidhle air NTFS a bhith nas ceangailte ri iomadh sruth dàta de mheud neo-riaghailteach. Le ADS, faodaidh tu dàta fhalach nach fhaicear le sgrùdaidhean siostam àbhaisteach. Faodaidh seo còd droch-rùnach a stealladh agus/no dàta fhalach.

Gus sruthan dàta eile a thaisbeanadh ann an PowerShell, cleachdaidh sinn an cmdlet get-item agus an inneal sruthadh Windows togte leis an samhla * gus a h-uile sruthan a tha comasach fhaicinn, airson seo cruthaichidh sinn an caochladair $ADS.

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

Bidh e feumail fios a bhith agad air an liosta de luchd-cleachdaidh a tha air logadh a-steach don t-siostam, airson seo cruthaichidh sinn caochladair $user agus sònraichidh sinn coileanadh a’ phrògram quser dha.

$user = quser

Gus grèim fhaighinn air an t-siostam, faodaidh luchd-ionnsaigh atharrachaidhean a dhèanamh air autorun. Faodaidh tu an cmdlet Get-ItemProperty a chleachdadh gus na nithean ann an cluich fèin-ghluasadach fhaicinn.
Cruthaichidh sinn dà chaochladair: $runUser - gus fèin-luchdachadh fhaicinn às leth an neach-cleachdaidh agus $runMachine - gus fèin-luchdachadh fhaicinn às leth a’ choimpiutair.

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

Gus an tèid a h-uile fiosrachadh a sgrìobhadh gu diofar fhaidhlichean, bidh sinn a’ cruthachadh sreath le caochladairean agus sreath le ainmean faidhle.


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

Agus, a’ cleachdadh airson lùb, thèid an dàta a thig às a sgrìobhadh gu faidhlichean.

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

Às deidh an sgriobt a chuir an gnìomh, thèid 9 faidhlichean teacsa a chruthachadh anns a bheil am fiosrachadh riatanach.

An-diugh, faodaidh proifeiseantaich cybersecurity PowerShell a chleachdadh gus am fiosrachadh a tha a dhìth orra a shaidhbhreachadh gus grunn ghnìomhan fhuasgladh nan cuid obrach. Le bhith a’ cur sgriobt ri fèin-luchdachadh, gheibh thu beagan fiosrachaidh gun dumpadh, ìomhaighean, msaa.

Source: www.habr.com

Cuir beachd ann