အဖြစ်အပျက်အချက်အလက်စုဆောင်းရန် PowerShell ကိုအသုံးပြုခြင်း။

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

မှတ်ချက် Add