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

المختبر 7.2: آليات استمرارية ويندوز

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

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

  • فهم آليات استمرارية ويندوز
  • إنشاء وحذف خدمات الاختبار
  • إدارة المهام المجدولة
  • اكتشاف الاستمرارية الضارة

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

50 دقيقة

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

  • إكمال المختبر 7.1
  • جهاز افتراضي ويندوز 10/11
  • حقوق المسؤول

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

الاستمرارية هي تقنية تُستخدم لـ:

  • بشكل شرعي: بدء الخدمات تلقائيًا
  • بشكل ضار: الحفاظ على الوصول بعد إعادة التشغيل

فهم هذه الآليات ضروري للدفاع.


تحذير​

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

  • قم بالتنفيذ فقط على الأجهزة الافتراضية للاختبار
  • نظف جميع الإنشاءات في نهاية المختبر

الجزء 1: الاستمرارية عبر الخدمات​

الخطوة 1.1: إنشاء خدمة اختبار​

# إنشاء سكربت الخدمة
$scriptContent = @'
# خدمة اختبار - لا تفعل شيئًا
# هذا السكربت يحاكي خدمة للمختبر
Write-Output "خدمة الاختبار بدأت" | Out-File C:\Temp\service_log.txt -Append
while ($true) {
Start-Sleep -Seconds 60
}
'@

# حفظ السكربت
New-Item -Path "C:\Temp" -ItemType Directory -Force | Out-Null
$scriptContent | Out-File "C:\Temp\test_service.ps1" -Encoding UTF8

Write-Host "تم إنشاء السكربت: C:\Temp\test_service.ps1" -ForegroundColor Green

الخطوة 1.2: تسجيل الخدمة​

# إنشاء الخدمة باستخدام NSSM أو sc.exe
# لهذا المختبر، نستخدم sc.exe مع cmd.exe

# الطريقة 1: خدمة بسيطة مع cmd.exe (للعرض)
sc.exe create "LabTestService" `
binPath= "cmd.exe /k echo خدمة الاختبار" `
DisplayName= "خدمة اختبار المختبر" `
start= manual

# التحقق
Get-Service "LabTestService"
sc.exe qc "LabTestService"

الخطوة 1.3: تعديل الخدمة​

# تغيير نوع البدء
sc.exe config "LabTestService" start= auto

# إضافة وصف
sc.exe description "LabTestService" "خدمة تم إنشاؤها للمختبر 7.2"

# التحقق من التغييرات
Get-Service "LabTestService" | Select-Object *

الخطوة 1.4: اكتشاف خدمتنا​

# يجب أن تظهر خدمتنا كمشتبه بها
Get-WmiObject Win32_Service | Where-Object {
$_.Name -eq "LabTestService"
} | Select-Object Name, DisplayName, PathName, StartMode, State

السؤال 1: لماذا يمكن اعتبار هذه الخدمة مشبوهة؟

الخطوة 1.5: حذف الخدمة​

# إيقاف وحذف
Stop-Service "LabTestService" -Force -ErrorAction SilentlyContinue
sc.exe delete "LabTestService"

# التحقق من الحذف
Get-Service "LabTestService" -ErrorAction SilentlyContinue

الجزء 2: الاستمرارية عبر المهام المجدولة​

الخطوة 2.1: إنشاء مهمة بسيطة​

# إنشاء مهمة تُنفذ عند بدء التشغيل
$action = New-ScheduledTaskAction `
-Execute "cmd.exe" `
-Argument "/c echo مهمة اختبار > C:\Temp\task_log.txt"

$trigger = New-ScheduledTaskTrigger -AtStartup

$principal = New-ScheduledTaskPrincipal `
-UserId "SYSTEM" `
-RunLevel Highest

Register-ScheduledTask `
-TaskName "LabTestTask" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Description "مهمة تم إنشاؤها للمختبر 7.2"

Write-Host "تم إنشاء المهمة: LabTestTask" -ForegroundColor Green

الخطوة 2.2: التحقق من المهمة​

# عرض المهمة
Get-ScheduledTask -TaskName "LabTestTask"

# تفاصيل كاملة
Get-ScheduledTask -TaskName "LabTestTask" |
Select-Object TaskName, State, @{N='Trigger';E={$_.Triggers.AtStartup}},
@{N='Action';E={$_.Actions.Execute}}

# معلومات التنفيذ
Get-ScheduledTaskInfo -TaskName "LabTestTask"

الخطوة 2.3: إنشاء مهمة أكثر واقعية​

# مهمة تحاكي خدمة شرعية (للعرض للكشف)
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-WindowStyle Hidden -Command Start-Sleep 3600"

$trigger = New-ScheduledTaskTrigger -AtLogOn

Register-ScheduledTask `
-TaskName "WindowsUpdateHelper" `
-Action $action `
-Trigger $trigger `
-Description "تحديث ويندوز (وهمي - مختبر)"

Write-Host "تم إنشاء مهمة مشبوهة للعرض" -ForegroundColor Yellow

الخطوة 2.4: تنفيذ الكشف​

# سكربت كشف المهام المشبوهة
$suspectTasks = @()

Get-ScheduledTask | Where-Object {
$_.TaskPath -notlike "\Microsoft\*"
} | ForEach-Object {
$task = $_

foreach ($action in $task.Actions) {
$isSuspect = $false
$reasons = @()

# PowerShell مخفي
if ($action.Arguments -match "-WindowStyle\s+Hidden") {
$isSuspect = $true
$reasons += "PowerShell مخفي"
}

# أوامر مشفرة
if ($action.Arguments -match "-[Ee]ncoded") {
$isSuspect = $true
$reasons += "أمر مشفر"
}

# مهام الاختبار الخاصة بنا
if ($task.TaskName -match "^Lab" -or $task.TaskName -eq "WindowsUpdateHelper") {
$isSuspect = $true
$reasons += "مهمة اختبار/مشبوهة"
}

if ($isSuspect) {
$suspectTasks += [PSCustomObject]@{
TaskName = $task.TaskName
Execute = $action.Execute
Arguments = $action.Arguments
Reasons = ($reasons -join ", ")
}
}
}
}

Write-Host "`n=== المهام المشبوهة المكتشفة ===" -ForegroundColor Cyan
$suspectTasks | Format-Table -AutoSize

السؤال 2: ما هي المهام التي تم اكتشافها كمشبوهة؟

الخطوة 2.5: حذف المهام​

# حذف مهام الاختبار الخاصة بنا
Unregister-ScheduledTask -TaskName "LabTestTask" -Confirm:$false
Unregister-ScheduledTask -TaskName "WindowsUpdateHelper" -Confirm:$false

Write-Host "تم حذف المهام" -ForegroundColor Green

الجزء 3: الاستمرارية عبر السجل​

الخطوة 3.1: مفاتيح Run (التشغيل التلقائي)​

مفاتيح Run تقوم بتنفيذ البرامج عند تسجيل الدخول:

# عرض مفاتيح Run الحالية
Write-Host "=== HKCU Run ===" -ForegroundColor Cyan
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -ErrorAction SilentlyContinue

Write-Host "`n=== HKLM Run ===" -ForegroundColor Cyan
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -ErrorAction SilentlyContinue

الخطوة 3.2: إضافة إدخال اختبار​

# إضافة إدخال Run (للمستخدم الحالي)
Set-ItemProperty `
-Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" `
-Name "LabTestRun" `
-Value "cmd.exe /c echo Test > C:\Temp\run_test.txt"

Write-Host "تم إضافة إدخال Run" -ForegroundColor Green

# التحقق
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" |
Select-Object LabTestRun

الخطوة 3.3: اكتشاف الإدخالات المشبوهة​

# سكربت كشف مفاتيح Run المشبوهة
$runKeys = @(
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce"
)

Write-Host "=== تحليل مفاتيح Run ===" -ForegroundColor Cyan

foreach ($key in $runKeys) {
if (Test-Path $key) {
Write-Host "`n$key" -ForegroundColor Yellow

$props = Get-ItemProperty $key -ErrorAction SilentlyContinue
$props.PSObject.Properties | Where-Object {
$_.Name -notmatch "^PS"
} | ForEach-Object {
$value = $_.Value

# اكتشاف المشبوهين
$suspect = $false
if ($value -match "\\Temp\\" -or
$value -match "\\AppData\\Local\\" -or
$value -match "-[Ee]ncoded" -or
$_.Name -match "^Lab") {
$suspect = $true
}

if ($suspect) {
Write-Host " [مشتبه] $($_.Name): $value" -ForegroundColor Red
} else {
Write-Host " [موافق] $($_.Name): $value" -ForegroundColor Green
}
}
}
}

الخطوة 3.4: حذف إدخال الاختبار​

Remove-ItemProperty `
-Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" `
-Name "LabTestRun"

Write-Host "تم حذف إدخال Run" -ForegroundColor Green

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

الخطوة 4.1: فحص كامل للاستمرارية​

# سكربت كشف الاستمرارية الشامل
Write-Host @"
================================================================================
فاحص استمرارية ويندوز
================================================================================
"@ -ForegroundColor Cyan

$findings = @()

# 1. الخدمات المشبوهة
Write-Host "`n[1/3] تحليل الخدمات..." -ForegroundColor Yellow
Get-WmiObject Win32_Service | Where-Object {
$_.PathName -match "\\(Temp|AppData|Downloads)\\" -or
$_.Name -match "^(Lab|Test)"
} | ForEach-Object {
$findings += [PSCustomObject]@{
Type = "Service"
Name = $_.Name
Details = $_.PathName
Risk = "متوسط"
}
}

# 2. المهام المجدولة المشبوهة
Write-Host "[2/3] تحليل المهام المجدولة..." -ForegroundColor Yellow
Get-ScheduledTask | Where-Object {
$_.TaskPath -notlike "\Microsoft\*"
} | ForEach-Object {
$task = $_
$action = $task.Actions | Select-Object -First 1

if ($action.Arguments -match "-Hidden|-[Ee]ncoded" -or
$task.TaskName -match "^(Lab|Test|WindowsUpdate[A-Z])") {
$findings += [PSCustomObject]@{
Type = "ScheduledTask"
Name = $task.TaskName
Details = "$($action.Execute) $($action.Arguments)"
Risk = "مرتفع"
}
}
}

# 3. مفاتيح Run
Write-Host "[3/3] تحليل مفاتيح Run..." -ForegroundColor Yellow
$runKeys = @(
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
)

foreach ($key in $runKeys) {
if (Test-Path $key) {
$props = Get-ItemProperty $key -ErrorAction SilentlyContinue
$props.PSObject.Properties | Where-Object {
$_.Name -notmatch "^PS" -and
($_.Value -match "\\Temp\\" -or $_.Name -match "^Lab")
} | ForEach-Object {
$findings += [PSCustomObject]@{
Type = "RunKey"
Name = $_.Name
Details = $_.Value
Risk = "مرتفع"
}
}
}
}

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

if ($findings.Count -eq 0) {
Write-Host "[موافق] لم يتم اكتشاف أي استمرارية مشبوهة" -ForegroundColor Green
} else {
Write-Host "[!] تم اكتشاف $($findings.Count) استمرارية مشبوهة:" -ForegroundColor Red
$findings | Format-Table -AutoSize
}

Write-Host "================================================================================" -ForegroundColor Cyan

الجزء 5: التنظيف​

الخطوة 5.1: التحقق والتنظيف النهائي​

# التحقق من عدم بقاء أي شيء
Write-Host "=== التحقق من التنظيف ===" -ForegroundColor Cyan

# الخدمات
$testService = Get-Service "LabTestService" -ErrorAction SilentlyContinue
if ($testService) {
Write-Host "الخدمة LabTestService لا تزال موجودة - الحذف..." -ForegroundColor Yellow
sc.exe delete "LabTestService"
}

# المهام
$testTasks = Get-ScheduledTask | Where-Object {$_.TaskName -match "^Lab|WindowsUpdateHelper"}
foreach ($task in $testTasks) {
Write-Host "المهمة $($task.TaskName) لا تزال موجودة - الحذف..." -ForegroundColor Yellow
Unregister-ScheduledTask -TaskName $task.TaskName -Confirm:$false
}

# مفاتيح Run
$runKey = Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "LabTestRun" -ErrorAction SilentlyContinue
if ($runKey) {
Write-Host "مفتاح Run LabTestRun لا يزال موجودًا - الحذف..." -ForegroundColor Yellow
Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "LabTestRun"
}

# الملفات
if (Test-Path "C:\Temp\test_service.ps1") {
Remove-Item "C:\Temp\test_service.ps1" -Force
}

Write-Host "`nتم الانتهاء من التنظيف!" -ForegroundColor Green

التسليمات​

  1. الإجابات على السؤالين

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

    • الخدمة التي تم إنشاؤها
    • المهمة المجدولة التي تم إنشاؤها
    • نتيجة فاحص الاستمرارية
  3. تقرير (1-2 صفحات):

    • آليات الاستمرارية التي تم اختبارها
    • كيفية اكتشافها
    • توصيات الدفاع

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

المعيارالنقاط
الاستمرارية عبر الخدمة25%
الاستمرارية عبر المهام30%
الاستمرارية عبر السجل20%
سكربت الكشف25%

تم تطوير المختبر كجزء من دورة أنظمة التشغيل - الوحدة 7