التصدي لـ malware persistence كمستجيب حوادث بأستخدام powershell sc

Security
التصدي لأكثر أنواع الـ malware persistence انتشارا بأستخدام powershell script
Mohab yehia
March 16, 2023, 5:10 p.m.
mohab
التصدي لـ malware persistence  كمستجيب حوادث بأستخدام powershell sc

حسنا اولا علينا ذكر ما هي الـ malware persistence techniques ؟

الطرق التي تستخدمها البرامج الضارة للحفاظ على وجودها على النظام حتى بعد إعادة التشغيل أو محاولات أخرى لإزالته ، وهناك انواع كثيره و advanced techniques يستخدمها ال threat actor ولكن هذه ال techniques التي سوف نذكرها هي اكثرها شيوعا .

 

 لننتقل الأن الي ذكر اكثر الـ malware persistence techniques انتشارا و شيوعا :

1- Registry keys

يمكن للبرامج الضارة إنشاء مفاتيح التسجيل أو تعديلها للتأكد من أنها تعمل في كل مرة يقوم فيها النظام بالتمهيد. يمكن العثور على هذه المفاتيح في سجل Windows. 

Detection :

اولا قبل أستخدام powershell script عليك مراقبة التغيير في windows registry و البحث عن اي  suspicious or unusual registry keys ، للننتقل الأن الي استخدام الـ powershell script 


$keyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"


$filter = [Microsoft.Win32.RegistryKeyChangeEvent]::new($keyPath)
$query = New-Object System.Management.EventQuery
$query.EventClassName = "__InstanceModificationEvent"
$query.WithinInterval = "00:00:01"
$query.Condition = $filter.QueryString


$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query

$watcher.Start() | Out-Null


while ($true) {
    $event = $watcher.WaitForNextEvent()
    $message = "Registry key '$($event.TargetInstance.keyName)' was modified by $($event.TargetInstance.UserName)"
    Write-Host $message
    
    Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Registry Change Detected" -Body $message -SmtpServer "smtp.example.com"
}

ان هذا الأسكربت يقوم بأستخدام VmI Event Watcher لمراقبة ال registry key المسؤول عن التغيرات ، عند أكتشاف تغيير في السجل سوق يظهر لك رسالة بأستخدام الأمر Write-Host cmdlet و يرسل تنبيها بالبريد الألكرتوني بأستخدام Send-MailMessage cmdlet كمثال ، ويجب عليك اعداد الأسكربت تبعا لبيئة عملك الخاصة .

اذا اردت تفسير أكثر للكود المكتوب بالداخل لفهم كيفية عمل الأسكربت بطريقه اعمق يمكنك زيارة ال github

 

 2- Scheduled tasks

يمكن للبرامج الضارة إنشاء مهام مجدولة ( scheduled ) للتشغيل في أوقات  أو أحداث محددة. يمكن العثور على هذه المهام في برنامج جدولة المهام . 

Detection :

يمكنك أستخدام بعض ألادوات لتساعدك في تحليل ال process مثل process hacker لكي تقوم بتحليل ال suspicious process، لننتقل الأن الي رؤية الاسكربت الخاص بنا .


$filter = [xml]@"
<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">
      *[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and EventID=140]] 
    </Select>
  </Query>
</QueryList>
"@
$query = New-Object System.Diagnostics.Eventing.Reader.EventLogQuery("Microsoft-Windows-TaskScheduler/Operational", [System.Diagnostics.Eventing.Reader.PathType]::LogName, $filter)
$watcher = New-Object System.Diagnostics.Eventing.Reader.EventLogWatcher($query)


$watcher.Start()

while ($true) {
    $event = $watcher.ReadEvent()
    if ($event.Id -eq 140) {
        $message = "New scheduled task was created: $($event.Properties[0].Value)"
        Write-Host $message
        
        Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "New Scheduled Task Created" -Body $message -SmtpServer "smtp.example.com"
    }
}

يقوم هذا الأسكربت بأستخدام Windows Event Viewer لمراقبة Microsoft-Windows-TaskScheduler/Operational event log و يبحث تحديدا عن event ID 140 ، وهو يشير اذا تم أنشاء قد تم أنشاء scheduled task ، عند انشاء scheduled task ، يقوم الأسكربت بعرض رسالة او تنبيه انه قد تم انشاء scheduled task جديده بأستخدام الأمر Send-MailMessage ، اذا اردت تفسير أكثر للكود المكتوب بالداخل لفهم كيفية عمل الأسكربت بطريقه اعمق يمكنك زيارة ال github 

3- Startup folder

يمكن أن تضع البرامج الضارة نفسها أو تختصر لنفسها في مجلد بدء تشغيل النظام للتأكد من أنها تعمل في كل مرة يقوم فيها النظام بالتمهيد .

Detection :

يمكنك أستخدام baseline لجهازك لمعرفة اذا وجد شذوذ في الجهاز ، او أستخدام اداة autoruns للكشف عن وجود برامج في ملف startup .

$StartupFolder = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
$LastWriteTime = (Get-Item $StartupFolder).LastWriteTime
$CurrentTime = Get-Date

if ($LastWriteTime -gt $CurrentTime.AddMinutes(-1)) {
    Write-Host "The startup folder has been updated recently."
} else {
    Write-Host "No updates detected in the startup folder."
}

 

إذا تم تحديث مجلد بدء التشغيل مؤخرًا ، فسيقوم الأسكربت بإخراج رسالة تفيد بأنه تم اكتشاف تحديثات. خلاف ذلك ، فإنه يخرج رسالة تفيد بأنه لم يتم اكتشاف أي تحديثات .

اذا اردت تفسير أكثر للكود المكتوب بالداخل لفهم كيفية عمل الأسكربت بطريقه اعمق يمكنك زيارة ال github .

 

 4- Service creation

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

Detection :

قد يكون اكتشاف استمرار وجود البرامج الضارة لإنشاء خدمة ( service ) Windows أمرًا صعبًا نظرًا لأن مطوري البرامج الضارة يستخدمون تقنيات مختلفة لتجنب الاكتشاف. ومع ذلك ، إليك بعض الخطوات التي يمكنك اتخاذها لاكتشاف ومنع استمرار البرامج الضارة من خلال خدمات windows ، مراقبة إنشاء خدمة Windows: تتبع خدمات Windows التي تم إنشاؤها أو تعديلها على نظامك. يمكنك استخدام أدوات مثل Sysinternals ,  Autoruns ، والتي توفر واجهة سهلة الاستخدام لعرض وإدارة خدمات Windows ، التحقق من أسماء الخدمات المشبوهة: ابحث عن أي خدمات ذات أسماء مشبوهة ، مثل الأسماء التي يتم إنشاؤها عشوائيًا أو الأسماء المشابهة لخدمات Windows الشرعية. غالبًا ما تستخدم البرامج الضارة أسماء خدمة عشوائية لتجنب اكتشافها ،  تحقق من وصف الخدمة: ابحث عن أي خدمات ذات أوصاف غامضة أو مشبوهة. غالبًا ما تستخدم البرامج الضارة أوصافًا عامة مثل "خدمة Windows Update" لتقليد الخدمات المشروعة ، مراقبة مسار الخدمة القابل للتنفيذ: تحقق من المسار القابل للتنفيذ للخدمة وتحقق من شرعيته. غالبًا ما تضع البرامج الضارة ملفها القابل للتنفيذ في موقع غير قياسي أو تستخدم مسارًا عشوا .

لننتقل الأن الي الأسكربت الخاص بنا :


$ServiceName = "MalwareService"


$Services = Get-Service


if ($Services.Name -contains $ServiceName) {
    
    if ($Services | Where-Object {$_.Name -eq $ServiceName -and $_.StartType -eq "Automatic"}) {
        
        Write-Host "ALERT: Malware persistence may be present. Service $ServiceName is set to start automatically."
    }
}

في هذا الأسكربت ، قمنا أولاً بتعيين اسم الخدمة التي نريد مراقبتها (يمكنك تعديلها للاسم الذي تريده ) بعد ذلك ، نستخدم Get-Service cmdlet للحصول على قائمة بجميع الخدمات على النظام. نتحقق مما إذا كانت الخدمة التي نراقبها موجودة في هذه القائمة ، وإذا كانت موجودة ، فإننا نتحقق مما إذا كانت مضبوطة على البدء تلقائيًا. إذا كان الأمر كذلك ، فإننا نعرض تنبيهًا يشير إلى احتمال وجود برامج ضارة.

اذا اردت تفسير أكثر للكود المكتوب بالداخل لفهم كيفية عمل الأسكربت بطريقه اعمق يمكنك زيارة ال github 

5- DLL hijacking

يمكن للبرامج الضارة اختطاف ( legitimate ) ملفات DLL الشرعية لـ Windows لتنفيذ التعليمات البرمجية الخاصة بها عند تشغيل البرنامج الشرعي المرتبط.

Detection :

مراجعة ملف الأحداث ( Event Logs ) : تتمثل إحدى طرق اكتشاف اختطاف DLL في مراجعة سجلات الأحداث على النظام المتأثر. عند اختراق ملف DLL ، فقد يُنشئ إدخالات سجل الأحداث التي يمكن أن تساعد في تحديد التطبيق المتأثر أو مكون النظام. قد توفر سجلات الأحداث أيضًا معلومات إضافية ، مثل مسار DLL الضار ، مراقبة الوصول الي الملفات ، يتضمن اختطاف DLL تحميل ملف DLL ضار بدلاً من ملف شرعي. يمكن أن يساعد الوصول إلى ملفات المراقبة في اكتشاف وقت تحميل DLL ضار. يمكن استخدام أدوات مثل Sysinternals Process Monitor لمراقبة الوصول إلى الملفات وتحديد أي نشاط مشبوه.


$processes = Get-Process | Where-Object { $_.Modules | Where-Object { $_.ModuleName -like "*.dll" } }


foreach ($process in $processes)
{
   
    Write-Host "Process: $($process.ProcessName)"

   
    $subprocesses = Get-WmiObject -Class Win32_Process -Filter "ParentProcessId = $($process.Id)"

    foreach ($subprocess in $subprocesses)
    {
        Write-Host "  Subprocess: $($subprocess.Name)"
    }
}

هذا الأسكربت يقوم بأسترجاع كل ال dll process و ال subprocess الخاصة بها في فورمات 

اذا اردت تفسير أكثر للكود المكتوب بالداخل لفهم كيفية عمل الأسكربت بطريقه اعمق يمكنك زيارة ال github 

الي هنا نكون قد وصلنا الي نهاية مقالتنا ، في المقالات المقبله سوف نتحدث عن ال yara rules ، و ال incident response cycle .

إن أحسنت فمن الله، وإن أسأت أو أخطأت فمن نفسي والشيطان

هل صليت علي النبي اليوم ؟


security powershell Ir incidentresponse malware persistence techniques