وقوعہ کی معلومات جمع کرنے کے لیے پاور شیل کا استعمال

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"

ہمیں موجودہ صارف کی جانب سے چلنے والے عمل کی فہرست اس طرح ملتی ہے: ایک $process متغیر بنائیں، اسے 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 کنکشنز کی فہرست حاصل کرنے کے لیے، $netTCP اور $netUDP متغیرات کو بالترتیب Get-NetTCPConnection اور Get-NetTCPConnection cmdlets تفویض کر کے بنائیں۔

$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، کیونکہ ابتدائی طور پر، نظام میں بہت سے طے شدہ کام ہوتے ہیں، پھر بدنیتی پر مبنی سرگرمی کی نشاندہی کرنے کے لیے یہ جائز طے شدہ کاموں کو فلٹر کرنے کے قابل ہے۔ 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 کا استعمال کرتے ہوئے، آپ اس ڈیٹا کو چھپا سکتے ہیں جو معیاری نظام کی جانچ کے ذریعے نظر نہیں آئے گا۔ یہ بدنیتی پر مبنی کوڈ کو انجیکشن کرنا اور/یا ڈیٹا کو چھپانا ممکن بناتا ہے۔

پاور شیل میں متبادل ڈیٹا اسٹریمز کو ظاہر کرنے کے لیے، ہم تمام ممکنہ اسٹریمز کو دیکھنے کے لیے get-item cmdlet اور بلٹ ان ونڈوز اسٹریم ٹول کو * علامت کے ساتھ استعمال کریں گے، اس کے لیے ہم $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

نیا تبصرہ شامل کریں