التحقيق الجنائي في ويندوز — تحليل السجلات والآثار
تحليل MFT و ShimCache و Prefetch وسجلات الأحداث
فن قراءة ويندوز — البيانات تتكلّم
كل عملية، تسجيل دخول، اتصال شبكة، فتح ملف — يترك أثراً في مكان معروف. الفرق بين محقّق متمرّس و مبتدئ ليس الأدوات — بل أين ينظر و بأي ترتيب. ويندوز يحوي ~40 مصدر artifact، 6 منها تكفي لـ 80% من القضايا.
الخريطة — أين تبحث عن ماذا
Sysmon — الـ EDR المجاني الذي يجب أن يكون على كل host
Sysmon من Sysinternals يضيف >20 نوع حدث ضرورية لا يسجّلها ويندوز افتراضياً. مع config جيد (SwiftOnSecurity أو Olaf Hartong) يصبح أقوى من EDRs تجارية للكشف.
# تثبيت
sysmon64.exe -accepteula -i sysmonconfig.xml
# تحديث config دون إعادة تثبيت
sysmon64.exe -c sysmonconfig.xml
# إلغاء التثبيت
sysmon64.exe -uأهم Event IDs:
- 1 Process Create — مع CommandLine, ParentImage, Hashes (MD5/SHA256/IMPHASH).
- 3 Network Connection — مع process المسبّب.
- 7 Image Loaded — DLLs المحمّلة (مفيد لكشف DLL hijacking).
- 8 CreateRemoteThread — كشف process injection.
- 10 ProcessAccess — من فتح handle لـ LSASS؟ (Mimikatz).
- 11 FileCreate — كتابة ملفات.
- 12/13/14 Registry create/set/rename.
- 22 DNS Query — مع process.
- 25 ProcessTampering — كشف Process Hollowing/Doppelganging.
Event Log Analysis — استعلامات حرجة
Lateral Movement عبر RDP / SMB
# 4624 Logon Type 3 (Network) أو 10 (RDP) — من IP خارجي
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 1000 |
Where-Object { $_.Properties[8].Value -in 3,10 -and $_.Properties[18].Value -notmatch '^10\.' } |
Select-Object TimeCreated, @{n='User';e={$_.Properties[5].Value}}, @{n='SrcIP';e={$_.Properties[18].Value}}إنشاء خدمة جديدة (مؤشّر persistence)
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} -MaxEvents 50 |
Format-Table TimeCreated,
@{n='Service';e={$_.Properties[0].Value}},
@{n='Path';e={$_.Properties[1].Value}},
@{n='StartType';e={$_.Properties[3].Value}}PowerShell scriptblock logging
// Microsoft Sentinel KQL
Event
| where Source == "Microsoft-Windows-PowerShell" and EventID == 4104
| extend ScriptBlock = tostring(EventData["ScriptBlockText"])
| where ScriptBlock matches regex @"(?i)Invoke-Mimikatz|Invoke-Expression|DownloadString|FromBase64String"
| project TimeGenerated, Computer, ScriptBlockRegistry — مخبأ الـ persistence
Hives الأكثر فحصاً: SYSTEM, SOFTWARE, NTUSER.DAT, UsrClass.dat.
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
+ RunOnce, RunOnceEx, RunServices.
MFT و Timeline — الترتيب يحلّ القضية
كل ملف على NTFS له MFT record (1024 byte) فيه: created, modified, accessed, MFT-modified (4 timestamps × 2 attributes = 8 timestamps). هذا يكشف timestomping (Mimikatz, Cobalt Strike).
# على Linux — تحليل image
mmls disk.img # partitions
fls -r -m C: -o 2048 disk.img > body.txt # body file
mactime -d -b body.txt 2026-04-25 > timeline.csv
# Plaso (log2timeline) — الأقوى للـ super-timeline
log2timeline.py timeline.plaso /mnt/evidence
psort.py -o l2tcsv timeline.plaso > super.csv
# أو Eric Zimmerman's Tools (سريعة جداً)
MFTECmd.exe -f $MFT --csv .
KAPE.exe --tsource C: --tdest C:\triage --target KapeTriagePrefetch — ما الذي شُغّل و متى
Windows ينشئ ملف .pf في C:\Windows\Prefetch لأول 128 برنامج. يحتوي:
- اسم البرنامج + hash من path الكامل (يكشف لو نُسخ من مسار غريب).
- آخر 8 مرات تنفيذ (timestamps).
- قائمة DLLs و ملفات قرأها.
- عدد التنفيذات الكلي.
# تحليل Prefetch
PECmd.exe -d C:\Windows\Prefetch --csv .
# بحث: ملفات شُغّلت من %TEMP% (مؤشّر مشبوه)
Import-Csv .\PECmd_Output.csv | Where-Object { $_.ExecutablePath -match 'TEMP|AppData' }فرز سريع باستخدام KAPE و Velociraptor
في حادث live: لا تنسخ كل القرص (300GB). انسخ فقط ما يهمّ — ~3GB من artifacts.
# KAPE — جمع artifacts فقط
KAPE.exe --tsource C: --tdest C:\triage --target !BasicCollection --vhdx triage
# ثم تشغيل modules للتحليل
KAPE.exe --msource C:\triage --mdest C:\out --module !EZParser
# Velociraptor — جمع عن بعد لـ thousands of hosts
velociraptor.exe artifact collect Windows.KapeFiles.Targets \
--args Device=C: --args _Triage=YMemory Forensics — الذاكرة لا تكذب
# جمع الذاكرة (live)
winpmem.exe -o memory.raw
# أو DumpIt.exe (single click)
# تحليل بـ Volatility 3
vol -f memory.raw windows.pslist
vol -f memory.raw windows.netscan
vol -f memory.raw windows.malfind # injected code
vol -f memory.raw windows.cmdline
vol -f memory.raw windows.dlllist --pid 1234
vol -f memory.raw windows.hashdump # SAM hashes
vol -f memory.raw windows.lsadump # secrets cachedAnti-forensics و كيف تغلبه
- Timestomping — يغيّر MFT $STANDARD_INFORMATION لكن غالباً ينسى $FILE_NAME. قارنهما.
- Log clearing — Event ID 1102 يُسجّل عند مسح Security log. أيضاً افحص USN Journal لـ .evtx deletes.
- Alternate Data Streams — file.txt:hidden.exe. اكتشفها بـ dir /R أو streams.exe.
- WMI persistence — لا يظهر في autoruns عادية. استخدم Get-WmiObject -Namespace root\\subscription -Class __EventFilter.
- Wiping with cipher /w — يكتب صفر/واحد على free space. يبقى MFT records و metadata.
منهجية أول 60 دقيقة
- Memory dump أولاً (قبل أي تغيير).
- KAPE Triage على القرص.
- Sysmon + Security + System logs (آخر 30 يوماً).
- Autoruns full scan (autorunsc.exe -accepteula -a * -h -s -m -nobanner -c).
- Run keys, Services, Scheduled Tasks، WMI subscriptions.
- Process tree الحالي + network connections.
- Recent file modifications (last 24h).