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