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