استخدام 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"

نحصل على قائمة العمليات الجارية نيابة عن المستخدم الحالي على النحو التالي: إنشاء متغير عملية $، وتعيينه cmdlet get-ciminstance مع فئة win32_process. باستخدام أمر Select-Object cmdlet، يمكنك إضافة معلمات إخراج إضافية، في حالتنا ستكون هذه المعلمات اسم العملية الأصل (معرف العملية الأصلية PPID)، تاريخ الإنشاء (تاريخ إنشاء العملية)، المعالجة (معرف العملية PID)، اسم العملية (اسم العملية)، سطر الأوامر ( الأمر Run).

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

للحصول على قائمة بجميع اتصالات TCP وUDP، قم بإنشاء متغيرات $netTCP و$netUDP عن طريق تعيين أوامر cmdlets الخاصة بـ Get-NetTCPConnection وGet-NetTCPConnection، على التوالي.

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

سيكون من المهم معرفة قائمة المهام والواجبات المخططة. للقيام بذلك، نستخدم أوامر cmdlets get-ScheduledTask وGet-ScheduledJob. دعونا نخصص لهم المتغيرات $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، يمكنك إخفاء البيانات التي لن تكون مرئية من خلال عمليات فحص النظام القياسية. وهذا يجعل من الممكن إدخال تعليمات برمجية ضارة و/أو إخفاء البيانات.

لعرض تدفقات البيانات البديلة في 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، سيتم كتابة البيانات المستلمة في الملفات.

for ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

بعد تنفيذ البرنامج النصي، سيتم إنشاء 9 ملفات نصية تحتوي على المعلومات الضرورية.

اليوم، يمكن لمحترفي الأمن السيبراني استخدام PowerShell لإثراء المعلومات التي يحتاجونها لحل مجموعة متنوعة من المهام في عملهم. من خلال إضافة برنامج نصي لبدء التشغيل، يمكنك الحصول على بعض المعلومات دون إزالة عمليات التفريغ والصور وما إلى ذلك.

المصدر: www.habr.com

إضافة تعليق