انتقل إلى المحتوى الرئيسي

المختبر 11.2: كشف البرمجيات الخبيثة من خلال تحليل الذاكرة

أهداف التعلم​

في نهاية هذا المختبر، ستكون قادرًا على:

  • تحديد تقنيات البرمجيات الخبيثة في الذاكرة
  • استخدام أدوات كشف الشذوذ
  • فهم حقن العمليات
  • تحليل تفريغ ذاكرة أساسي
  • التعرف على مؤشرات اختراق الذاكرة

المدة المقدرة​

55 دقيقة

المتطلبات المسبقة​

  • إكمال المختبر 11.1
  • VM Windows 10/11 معزولة
  • Process Explorer, Process Monitor
  • حقوق المسؤول

السياق المهني​

كشف البرمجيات الخبيثة في الذاكرة أمر حيوي لأن:

  • البرمجيات الخبيثة "بدون ملفات" لا تكتب على القرص
  • تحليل الذاكرة يكشف السلوكيات النشطة
  • إنها مهارة أساسية في الاستجابة للحوادث

تحذير​

يستخدم هذا المختبر تقنيات لأغراض تعليمية فقط. قم بالتنفيذ فقط على VMs معزولة وللاختبار.


الجزء 1: تقنيات البرمجيات الخبيثة في الذاكرة​

الخطوة 1.1: نظرة عامة​

التقنيةالوصفالكشف
حقن العملياتحقن كود في عملية أخرىمناطق RWX غير طبيعية
حقن DLLتحميل DLL ضارةDLL غير موقعة/غير معروفة
إفراغ العملياتاستبدال كود عمليةالصورة لا تتطابق مع القرص
التحميل الانعكاسيتحميل DLL بدون المرور عبر APIDLL بدون ملف مطابق
البرمجيات الخبيثة بدون ملفاتكود فقط في الذاكرةسكربتات مشفرة، PowerShell مشبوه

الخطوة 1.2: المؤشرات الرئيسية​

إشارات التحذير:

  • مناطق ذاكرة RWX (قراءة-كتابة-تنفيذ)
  • عمليات النظام التي تم إطلاقها من موقع خاطئ
  • DLLs غير موقعة في عمليات حساسة
  • خيوط بدون وحدة مرتبطة
  • اتصالات شبكة غير طبيعية من عمليات شرعية

الجزء 2: الكشف باستخدام Process Explorer​

الخطوة 2.1: الإعداد المتقدم​

  1. قم بتشغيل Process Explorer كمسؤول
  2. Options > Verify Image Signatures
  3. View > Select Columns > أضف "Verified Signer"

الخطوة 2.2: تحديد العمليات غير الموقعة​

العمليات باللون الوردي/البنفسجي لها توقيع غير مؤكد.

العمليات التي يجب أن تكون موقعة من Microsoft:

  • svchost.exe
  • csrss.exe
  • lsass.exe
  • services.exe
  • winlogon.exe
  • explorer.exe

السؤال 1: هل جميع عمليات النظام الخاصة بك موقعة من Microsoft؟

الخطوة 2.3: التحقق من المسارات​

العمليات الشرعية ومساراتها:
- svchost.exe -> C:\Windows\System32\
- csrss.exe -> C:\Windows\System32\
- lsass.exe -> C:\Windows\System32\
- services.exe -> C:\Windows\System32\
- explorer.exe -> C:\Windows\

سكربت التحقق:

# التحقق من مسارات العمليات الحرجة
$criticalProcesses = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"services" = "C:\Windows\System32\services.exe"
"winlogon" = "C:\Windows\System32\winlogon.exe"
}

Write-Host "=== VERIFICATION PROCESSUS CRITIQUES ===" -ForegroundColor Cyan

foreach ($proc in $criticalProcesses.Keys) {
$running = Get-Process -Name $proc -ErrorAction SilentlyContinue

foreach ($p in $running) {
$expectedPath = $criticalProcesses[$proc]
$actualPath = $p.Path

if ($actualPath -ne $expectedPath) {
Write-Host "[ALERTE] $proc" -ForegroundColor Red
Write-Host " Attendu: $expectedPath"
Write-Host " Trouve: $actualPath"
} else {
Write-Host "[OK] $proc - $actualPath" -ForegroundColor Green
}
}
}

السؤال 2: هل يكتشف السكربت أي شذوذ؟


الجزء 3: كشف حقن DLL​

الخطوة 3.1: سرد DLLs لعملية​

Process Explorer:

  1. حدد عملية
  2. View > Show Lower Pane
  3. View > Lower Pane View > DLLs

PowerShell:

# سرد DLLs لعملية
$proc = Get-Process notepad
$proc.Modules | Select-Object ModuleName, FileName, Size

# البحث عن DLLs مشبوهة (غير موجودة في System32 أو Program Files)
$proc.Modules | Where-Object {
$_.FileName -notlike "C:\Windows\*" -and
$_.FileName -notlike "C:\Program Files*"
} | Select-Object ModuleName, FileName

الخطوة 3.2: DLLs مشبوهة للبحث عنها​

مؤشرالوصف
DLL في Tempموقع غير طبيعي
DLL في AppDataيحتمل أن يكون ضارًا
DLL غير موقعةنقص التحقق
اسم عشوائيبرمجيات خبيثة محتملة
حجم صغير جدًاStub/loader

الخطوة 3.3: سكربت كشف DLL​

# كشف DLLs مشبوهة
Write-Host "=== ANALYSE DLLs SUSPECTES ===" -ForegroundColor Cyan

$suspiciousPaths = @(
"*\Temp\*",
"*\AppData\Local\Temp\*",
"*\Downloads\*",
"*\Desktop\*"
)

Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$procName = $_.Name
$_.Modules | ForEach-Object {
$dll = $_
foreach ($path in $suspiciousPaths) {
if ($dll.FileName -like $path) {
Write-Host "[SUSPECT] $procName charge: $($dll.FileName)" -ForegroundColor Red
}
}
}
}

Write-Host "`nAnalyse terminee." -ForegroundColor Green

السؤال 3: هل تم تحميل أي DLLs مشبوهة؟


الجزء 4: كشف إفراغ العمليات​

الخطوة 4.1: المفهوم​

إفراغ العمليات:

  1. إنشاء عملية شرعية في وضع التعليق
  2. إفراغ ("hollow") ذاكرتها
  3. حقن كود ضار
  4. استئناف التنفيذ

النتيجة: تبدو العملية شرعية لكنها تنفذ كود ضار.

الخطوة 4.2: مؤشرات الكشف​

مؤشرالوصف
الصورة ≠ الذاكرةالكود في الذاكرة يختلف عن الملف
PEB معدلكتلة بيئة العملية معدلة
أقسام غير طبيعيةحجم/أذونات غير متوقعة

الخطوة 4.3: التحقق الأساسي​

# مقارنة حجم الصورة في الذاكرة مقابل القرص
# يتطلب أدوات متقدمة للكشف الحقيقي

Get-Process | Where-Object { $_.Path } | ForEach-Object {
$proc = $_
try {
$fileSize = (Get-Item $proc.Path -ErrorAction Stop).Length
$memorySize = $proc.WorkingSet64

# نسبة عالية جدًا قد تشير إلى شذوذ
$ratio = [math]::Round($memorySize / $fileSize, 2)

if ($ratio -gt 100) {
Write-Host "[INFO] $($proc.Name) - Ratio mem/file: $ratio" -ForegroundColor Yellow
}
} catch {}
}

الجزء 5: التحليل باستخدام Process Monitor​

الخطوة 5.1: التقاط النشاط​

procmon64.exe /accepteula

الخطوة 5.2: الفلاتر المفيدة للكشف​

إنشاء فلاتر للكشف عن السلوكيات المشبوهة:

  1. Filter > Filter...
  2. أضف:
    • Operation is WriteFile then Include
    • Path contains \Temp\ then Include
    • Process Name is powershell.exe then Include

الخطوة 5.3: السلوكيات التي يجب مراقبتها​

العمليةمشبوه إذا...
WriteFileفي Temp مع امتداد .exe/.dll
CreateFileإنشاء في مجلدات النظام
RegSetValueتعديل مفاتيح Run
CreateRemoteThreadفي عملية أخرى
VirtualAllocExتخصيص في عملية بعيدة

الجزء 6: إنشاء تفريغ ذاكرة​

الخطوة 6.1: تفريغ عملية (طريقة بسيطة)​

مدير المهام:

  1. علامة التبويب التفاصيل
  2. انقر بزر الماوس الأيمن على العملية
  3. "إنشاء ملف تفريغ"

PowerShell:

# استخدام procdump (Sysinternals)
# procdump64.exe -ma <PID> dump.dmp

# أو عبر comsvcs.dll (تحذير: يتم اكتشافها بواسطة AV)
# طريقة يستخدمها المهاجمون لتفريغ lsass

الخطوة 6.2: أين يتم تخزين التفريغات؟​

# الموقع الافتراضي
$env:LOCALAPPDATA + "\Temp"

# سرد التفريغات الموجودة
Get-ChildItem "$env:LOCALAPPDATA\Temp" -Filter "*.dmp" -ErrorAction SilentlyContinue

الخطوة 6.3: تحليل تفريغ (أساسي)​

لتحليل متعمق، هناك حاجة إلى أدوات مثل Volatility.

مع WinDbg (إذا كان مثبتًا):

windbg -z dump.dmp
!analyze -v
!process 0 0

الجزء 7: سكربت الكشف الكامل​

# سكربت كشف الشذوذ في الذاكرة
# ========================================

param(
[switch]$Verbose
)

Write-Host @"
=====================================
DETECTION ANOMALIES MEMOIRE
=====================================
"@ -ForegroundColor Cyan

$alerts = @()

# 1. التحقق من مسارات العمليات الحرجة
Write-Host "`n[1/5] Verification processus critiques..." -ForegroundColor Yellow

$criticalPaths = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"services" = "C:\Windows\System32\services.exe"
}

foreach ($name in $criticalPaths.Keys) {
Get-Process -Name $name -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.Path -and $_.Path -ne $criticalPaths[$name]) {
$alerts += "[CRITIQUE] $name depuis mauvais chemin: $($_.Path)"
}
}
}

# 2. البحث عن DLLs في مواقع مشبوهة
Write-Host "[2/5] Analyse DLLs..." -ForegroundColor Yellow

$suspectDlls = @()
Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$_.Modules | Where-Object {
$_.FileName -like "*\Temp\*" -or
$_.FileName -like "*\Downloads\*"
} | ForEach-Object {
$alerts += "[SUSPECT] DLL suspecte: $($_.FileName)"
}
}

# 3. عمليات مع اتصالات شبكة غير عادية
Write-Host "[3/5] Analyse connexions..." -ForegroundColor Yellow

$networkProcs = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object { $_.RemoteAddress -notmatch "^(127\.|::1|0\.0\.0\.0)" }

foreach ($conn in $networkProcs) {
$proc = Get-Process -Id $conn.OwningProcess -ErrorAction SilentlyContinue
if ($proc.Name -in @("notepad", "calc", "mspaint")) {
$alerts += "[SUSPECT] $($proc.Name) a une connexion reseau: $($conn.RemoteAddress):$($conn.RemotePort)"
}
}

# 4. PowerShell مع اتصالات
Write-Host "[4/5] Verification PowerShell..." -ForegroundColor Yellow

$psConnections = Get-NetTCPConnection -OwningProcess (Get-Process -Name powershell -ErrorAction SilentlyContinue).Id -ErrorAction SilentlyContinue |
Where-Object { $_.State -eq "Established" }

if ($psConnections) {
$alerts += "[INFO] PowerShell a des connexions reseau actives"
}

# 5. عمليات مع ذاكرة RWX (يتطلب أدوات متقدمة)
Write-Host "[5/5] Verification terminee." -ForegroundColor Yellow

# تقرير
Write-Host "`n========== RAPPORT ==========" -ForegroundColor Cyan

if ($alerts.Count -eq 0) {
Write-Host "[OK] Aucune anomalie majeure detectee" -ForegroundColor Green
} else {
Write-Host "Alertes detectees: $($alerts.Count)" -ForegroundColor Red
foreach ($alert in $alerts) {
if ($alert -match "CRITIQUE") {
Write-Host " $alert" -ForegroundColor Red
} elseif ($alert -match "SUSPECT") {
Write-Host " $alert" -ForegroundColor Yellow
} else {
Write-Host " $alert" -ForegroundColor Gray
}
}
}

Write-Host "`n=============================" -ForegroundColor Cyan

السؤال 4: قم بتنفيذ السكربت. ما هي التنبيهات التي يحصل عليها؟


التسليمات​

  1. لقطات شاشة:

    • Process Explorer مع توقيعات مؤكدة
    • DLLs لعملية
    • نتيجة سكربت الكشف
  2. الإجابات على الأسئلة الأربعة

  3. تقرير (صفحتان):

    • تقنيات البرمجيات الخبيثة في الذاكرة
    • طرق الكشف المستخدمة
    • نتائج تحليل VM الخاص بك
    • التوصيات

معايير التقييم​

المعيارالنقاط
Process Explorer25%
كشف DLLs25%
سكربت الكشف30%
التقرير والفهم20%

الموارد​


تم تطوير المختبر في إطار دورة أنظمة التشغيل - MODULE 11