PowerShell သည် malware developer များနှင့် information security specialists နှစ်ခုလုံးမှ မကြာခဏ အသုံးပြုလေ့ရှိသော automation tool တစ်ခုဖြစ်သည်။
ဤဆောင်းပါးတွင် အချက်အလက်လုံခြုံရေးဖြစ်ရပ်များကို တုံ့ပြန်ရာတွင် အဆုံးစက်ပစ္စည်းများမှ ဒေတာများကို အဝေးမှစုဆောင်းရန်အတွက် PowerShell ကိုအသုံးပြုခြင်း၏ ရွေးချယ်ခွင့်ကို ဆွေးနွေးပါမည်။ ၎င်းကိုလုပ်ဆောင်ရန်၊ သင်သည် အဆုံးစက်ပစ္စည်းပေါ်တွင်လည်ပတ်မည့် script ကိုရေးရန် လိုအပ်ပြီး ဤ script ၏အသေးစိတ်ဖော်ပြချက်ပါရှိလိမ့်မည်။
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"
ကျွန်ုပ်တို့သည် လက်ရှိအသုံးပြုသူကိုယ်စား လုပ်ဆောင်နေသည့် လုပ်ငန်းစဉ်များစာရင်းကို အောက်ပါအတိုင်းရရှိပါသည်- $process variable ကိုဖန်တီးပြီး win32_process အတန်းအစားနှင့် get-ciminstance cmdlet ကို သတ်မှတ်ပေးပါသည်။ Select-Object cmdlet ကိုအသုံးပြုခြင်းဖြင့်၊ သင်သည် နောက်ထပ်ထွက်ရှိမှုဘောင်များကို ပေါင်းထည့်နိုင်သည်၊ ကျွန်ုပ်တို့၏အခြေအနေတွင် ၎င်းတို့သည် parentprocessid (မိဘလုပ်ငန်းစဉ် ID PPID)၊ ဖန်တီးရက်စွဲ (လုပ်ငန်းစဉ်ဖန်တီးသည့်ရက်စွဲ)၊ လုပ်ဆောင်ပြီး (လုပ်ငန်းစဉ် ID PID)၊ လုပ်ငန်းစဉ်အမည် (လုပ်ငန်းစဉ်အမည်)၊ commandline ( command ကို run) ။
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessid
TCP နှင့် UDP ချိတ်ဆက်မှုအားလုံး၏စာရင်းကိုရယူရန်၊ Get-NetTCPConnection နှင့် Get-NetTCPConnection cmdlets တို့ကို သတ်မှတ်ပေးခြင်းဖြင့် $netTCP နှင့် $netUDP variable များကို ဖန်တီးပါ။
$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 ကို variable များ သတ်မှတ်ကြပါစို့ အစပိုင်းတွင်၊ စနစ်တွင် စီစဉ်ထားသည့် လုပ်ဆောင်စရာများစွာရှိပြီး၊ ထို့နောက် အန္တရာယ်ရှိသော လုပ်ဆောင်ချက်များကို ဖော်ထုတ်ရန်အတွက် ၎င်းသည် တရားဝင်စီစဉ်ထားသည့် အလုပ်များကို စစ်ထုတ်သင့်သည်။ 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 တွင် အခြားဒေတာစီးကြောင်းများကို ပြသရန်၊ ဖြစ်နိုင်သည့် stream အားလုံးကိုကြည့်ရှုရန် * သင်္ကေတဖြင့် get-item cmdlet နှင့် built-in Windows stream တူးလ်ကို အသုံးပြုမည်ဖြစ်ပြီး၊ ၎င်းအတွက် ကျွန်ုပ်တို့သည် $ADS variable ကိုဖန်တီးပါမည်။
$ADS = get-item * -stream * | where stream –ne ':$Data'
စနစ်သို့ လော့ဂ်အင်ဝင်ထားသော အသုံးပြုသူများစာရင်းကို ရှာဖွေရန် အသုံးဝင်လိမ့်မည်၊ ၎င်းအတွက် ကျွန်ုပ်တို့သည် $user variable တစ်ခုကို ဖန်တီးပြီး quser ပရိုဂရမ်၏ လုပ်ဆောင်မှုတွင် ၎င်းအား သတ်မှတ်ပေးပါမည်။
$user = quser
တိုက်ခိုက်သူများသည် စနစ်တွင် ခြေကုပ်ယူနိုင်ရန် autorun ကို ပြောင်းလဲမှုများ ပြုလုပ်နိုင်သည်။ စတင်သည့်အရာဝတ္ထုများကိုကြည့်ရှုရန်၊ သင်သည် Get-ItemProperty cmdlet ကိုသုံးနိုင်သည်။
အသုံးပြုသူကိုယ်စား startup ကိုကြည့်ရှုရန် $runUser နှင့် $runMachine - ကွန်ပျူတာကိုယ်စား startup ကိုကြည့်ရှုရန် variable နှစ်ခုဖန်တီးကြပါစို့။
$runUser = Get-ItemProperty
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"
အချက်အလက်အားလုံးကို မတူညီသောဖိုင်များသို့ ရေးမှတ်နိုင်ရန်၊ ကျွန်ုပ်တို့သည် variable များပါသည့် array တစ်ခုနှင့် ဖိုင်အမည်များပါသည့် array တစ်ခုကို ဖန်တီးပါသည်။
$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect" "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"
for loop ကို အသုံးပြု၍ ရရှိလာသော data များကို ဖိုင်များသို့ စာရေးပါမည်။
for ($w = 0; $w -lt $array.count; $w++){
$name = $arrayName[$w]
$array[$w] >> $path$name.txt
ဇာတ်ညွှန်းကို အကောင်အထည်ဖော်ပြီးနောက်၊ လိုအပ်သောအချက်အလက်များပါဝင်သော စာသားဖိုင် ၉ ခုကို ဖန်တီးမည်ဖြစ်သည်။
ယနေ့တွင်၊ ဆိုက်ဘာလုံခြုံရေးကျွမ်းကျင်ပညာရှင်များသည် ၎င်းတို့၏လုပ်ငန်းခွင်ရှိ လုပ်ငန်းဆောင်တာအမျိုးမျိုးကို ဖြေရှင်းရန် လိုအပ်သော အချက်အလက်များကို ပြည့်စုံစေရန် PowerShell ကို အသုံးပြုနိုင်ပါသည်။ စတင်ရန်အတွက် script ကိုထည့်သွင်းခြင်းဖြင့်၊ အမှိုက်ပုံများ၊ ပုံများစသည်တို့ကို မဖယ်ရှားဘဲ အချက်အလက်အချို့ကို သင်ရနိုင်သည် ။
source: www.habr.com