المختبر 11.2: كشف البرمجيات الخبيثة من خلال تحليل الذاكرة
أهداف التعلم
في نهاية هذا المختبر، ستكون قادرًا على:
- تحديد تقنيات البرمجيات الخبيثة في الذاكرة
- استخدام أدوات كشف الشذوذ
- فهم حقن العمليات
- تحليل تفريغ ذاكرة أساسي
- التعرف على مؤشرات اختراق الذاكرة
المدة المقدرة
55 دقيقة
المتطلبات المسبقة
- إكمال المختبر 11.1
- VM Windows 10/11 معزولة
- Process Explorer, Process Monitor
- حقوق المسؤول
السياق المهني
كشف البرمجيات الخبيثة في الذاكرة أمر حيوي لأن:
- البرمجيات الخبيثة "بدون ملفات" لا تكتب على القرص
- تحليل الذاكرة يكشف السلوكيات النشطة
- إنها مهارة أساسية في الاستجابة للحوادث
تحذير
يستخدم هذا المختبر تقنيات لأغراض تعليمية فقط. قم بالتنفيذ فقط على VMs معزولة وللاختبار.
الجزء 1: تقنيات البرمجيات الخبيثة في الذاكرة
الخطوة 1.1: نظرة عامة
| التقنية | الوصف | الكشف |
|---|---|---|
| حقن العمليات | حقن كود في عملية أخرى | مناطق RWX غير طبيعية |
| حقن DLL | تحميل DLL ضارة | DLL غير موقعة/غير معروفة |
| إفراغ العمليات | استبدال كود عملية | الصورة لا تتطابق مع القرص |
| التحميل الانعكاسي | تحميل DLL بدون المرور عبر API | DLL بدون ملف مطابق |
| البرمجيات الخبيثة بدون ملفات | كود فقط في الذاكرة | سكربتات مشفرة، PowerShell مشبوه |
الخطوة 1.2: المؤشرات الرئيسية
إشارات التحذير:
- مناطق ذاكرة RWX (قراءة-كتابة-تنفيذ)
- عمليات النظام التي تم إطلاقها من موقع خاطئ
- DLLs غير موقعة في عمليات حساسة
- خيوط بدون وحدة مرتبطة
- اتصالات شبكة غير طبيعية من عمليات شرعية
الجزء 2: الكشف باستخدام Process Explorer
الخطوة 2.1: الإعداد المتقدم
- قم بتشغيل Process Explorer كمسؤول
- Options > Verify Image Signatures
- 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:
- حدد عملية
- View > Show Lower Pane
- 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: المفهوم
إفراغ العمليات:
- إنشاء عملية شرعية في وضع التعليق
- إفراغ ("hollow") ذاكرتها
- حقن كود ضار
- استئناف التنفيذ
النتيجة: تبدو العملية شرعية لكنها تنفذ كود ضار.
الخطوة 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: الفلاتر المفيدة للكشف
إنشاء فلاتر للكشف عن السلوكيات المشبوهة:
- Filter > Filter...
- أضف:
- 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: تفريغ عملية (طريقة بسيطة)
مدير المهام:
- علامة التبويب التفاصيل
- انقر بزر الماوس الأيمن على العملية
- "إنشاء ملف تفريغ"
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: قم بتنفيذ السكربت. ما هي التنبيهات التي يحصل عليها؟
التسليمات
-
لقطات شاشة:
- Process Explorer مع توقيعات مؤكدة
- DLLs لعملية
- نتيجة سكربت الكشف
-
الإجابات على الأسئلة الأربعة
-
تقرير (صفحتان):
- تقنيات البرمجيات الخبيثة في الذاكرة
- طرق الكشف المستخدمة
- نتائج تحليل VM الخاص بك
- التوصيات
معايير التقييم
| المعيار | النقاط |
|---|---|
| Process Explorer | 25% |
| كشف DLLs | 25% |
| سكربت الكشف | 30% |
| التقرير والفهم | 20% |
الموارد
تم تطوير المختبر في إطار دورة أنظمة التشغيل - MODULE 11