рдШрдЯрдирд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди 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 рд╡рд┐рд╕реНрддрд╛рд░, рдЬрд╕рд▓реЗ рдПрдЙрдЯрд╛ рддрд░реНрдХ рд▓рд┐рдиреЗрдЫ - рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдмрдЪрдд рдЧрд░реНрдиреЗ рдмрд╛рдЯреЛред рдзреЗрд░реИ cmdlets 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"

рд╣рд╛рдореАрд▓реЗ рд╣рд╛рд▓рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рддрд░реНрдлрдмрд╛рдЯ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд╛рдЙрдБрдЫреМрдВ: $рдкреНрд░реЛрд╕реЗрд╕ рдЪрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдпрд╕рд▓рд╛рдИ win32_process рдХреНрд▓рд╛рд╕рдХреЛ рд╕рд╛рде get-ciminstance cmdlet рдЕрд╕рд╛рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЪрдпрди-рд╡рд╕реНрддреБ cmdlet рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрдкрд╛рдЗрдБ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЙрдЯрдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛ рдпреА parentprocessid (рдЕрднрд┐рднрд╛рд╡рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ ID PPID), рд╕рд┐рд░реНрдЬрдирд╛ рдорд┐рддрд┐ (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдорд┐рддрд┐), рдкреНрд░рд╢реЛрдзрд┐рдд (рдкреНрд░рдХреНрд░рд┐рдпрд╛ ID PID), рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╛рдо (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╛рдо), рдХрдорд╛рдВрдбрд▓рд╛рдЗрди ( рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН)ред

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

рд╕рдмреИ TCP рд░ UDP рдЬрдбрд╛рдирд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдХреНрд░рдорд╢рдГ Get-NetTCPConnection рд░ Get-NetTCPConnection cmdlets рдЕрд╕рд╛рдЗрди рдЧрд░реА $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 cmdlets рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ $task рд░ $job рднреНрдпрд╛рд░реАрдПрдмрд▓рд╣рд░реВ рдЕрд╕рд╛рдЗрди рдЧрд░реМрдВ, рдХрд┐рдирднрдиреЗ рдкреНрд░рд╛рд░рдореНрднрдорд╛, рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдзреЗрд░реИ рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдпрд╣рд░реВ рдЫрдиреН, рддреНрдпрд╕рдкрдЫрд┐ рдЦрд░рд╛рдм рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрди рдпреЛ рд╡реИрдз рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдпрд╣рд░реВ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫред рдЪрдпрди-рд╡рд╕реНрддреБ 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

рдЖрдХреНрд░рдордгрдХрд╛рд░реАрд╣рд░реВрд▓реЗ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдЦреБрдЯреНрдЯрд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрдЯреЛрд░рдирдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡рд╕реНрддреБрд╣рд░реВ рд╣реЗрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ 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 ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реЗрдкрдЫрд┐, рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣рд┐рдд 9 рдкрд╛рда рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫред

рдЖрдЬ, рд╕рд╛рдЗрдмрд░рд╕реЗрдХреНрдпреБрд░рд┐рдЯреА рдкреНрд░реЛрдлреЗрд╕рд░рд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдордорд╛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реАрд▓рд╛рдИ рд╕рдореГрджреНрдз рдмрдирд╛рдЙрди PowerShell рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдердкреЗрд░, рддрдкрд╛рдИрдВрд▓реЗ рдбрдореНрдкрд╣рд░реВ, рдЫрд╡рд┐рд╣рд░реВ, рдЖрджрд┐ рдирд╣рдЯрд╛рдИ рдХреЗрд╣реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди