المحتويات
المقدمة
الفرز هو المرحلة التقنية الأولى في الاستجابة للحوادث: نظرة سريعة ومنظمة على جهاز Windows مشبوه للإجابة عن أربعة أسئلة. هل هو مخترق؟ كيف دخل المهاجم؟ ماذا فعل ومتى؟ ما الأنظمة والحسابات الأخرى المعنية؟ يجيب الفرز الجيد عن ذلك خلال ساعات، ويحفظ الأدلة التي قد يحتاجها الفحص الجنائي الكامل، ويتجنب تنبيه مهاجم ما زال نشطًا. يغطي هذا الدليل ترتيب العمل والأوامر والأدوات اللازمة لذلك على Windows 10 وWindows 11 وWindows Server.
القواعد الأساسية قبل لمس الجهاز
- اجمع حسب درجة التطاير (RFC 3227): الذاكرة وحالة الشبكة أولًا، ثم العمليات والجلسات، ثم آثار القرص والسجلات. فإعادة التشغيل أو إعادة التثبيت أو فحص مضاد الفيروسات الكامل أولًا يتلف أهم الأدلة.
- لا تسجل الدخول تفاعليًا بحساب مسؤول النطاق. فتسجيلات الدخول التفاعلية وRDP تترك بيانات اعتماد قابلة لإعادة الاستخدام في ذاكرة LSASS على جهاز قد يسيطر عليه المهاجم. استخدم الاستجابة المباشرة عبر EDR، أو حساب استجابة مخصصًا بصلاحيات مسؤول محلي فقط، أو أدوات بعيدة تعتمد على دخول الشبكة.
- شغّل الأدوات من وسيط موثوق للقراءة فقط أو مشاركة شبكية، وليس من برامج الجهاز المشبوه أبدًا، واكتب المخرجات إلى تخزين خارجي أو مشاركة جمع، وليس إلى قرص النظام أبدًا.
- سجل كل شيء بتوقيت UTC: كل أمر، ومن نفذه، ومتى، وبصمة SHA-256 لكل ملف تجمعه. يصبح هذا السجل سلسلة الحيازة وأساس الجدول الزمني.
- قرر مبكرًا هل ستحقق بهدوء أم ستحتوي فورًا. فالإجراءات الظاهرة مثل تعطيل الحسابات أو إيقاف العمليات تخبر المهاجم بأنك وجدته.
- افترض أن أكثر من جهاز معني. افرز الجهاز الأول وعينك على المؤشرات التي يمكنك البحث عنها في بقية البيئة.
إعداد حقيبة الفرز
جهز الحقيبة واختبرها قبل أن تحتاج إليها. احفظها على قرص USB محمي من الكتابة أو مشاركة محدودة الوصول، وسجل بصمة كل ملف تنفيذي، وحدّثها كل ربع سنة. معظم الأدوات الأساسية مجانية.
| الأداة | الغرض | ملاحظات |
|---|---|---|
| Velociraptor | استجابة مباشرة عن بُعد وجمع الآثار وصيد على مستوى الأجهزة كلها | مجانية ومفتوحة المصدر، وتنشئ أيضًا أدوات جمع دون اتصال |
| KAPE | جمع سريع وموجه للآثار وتحليلها بالوحدات | مجانية من Kroll، وتحقق من شروط الترخيص للأعمال المدفوعة |
| أدوات Eric Zimmerman | محللات لـ MFT وسجل النظام وسجلات الأحداث وprefetch وAmcache وLNK وjump lists وSRUM | مجانية، مع Timeline Explorer وRegistry Explorer للمراجعة |
| حزمة Sysinternals | Autoruns وProcess Explorer وTCPView وSigcheck وHandle وListDLLs | مجانية من Microsoft، واستخدم نسخ سطر الأوامر للجمع |
| WinPmem أو Magnet RAM Capture | التقاط الذاكرة الفعلية | مجانية، وتعمل بصلاحية المسؤول |
| Volatility 3 وMemProcFS | تحليل الذاكرة | مجانية، وتربط MemProcFS الذاكرة كنظام ملفات |
| Hayabusa وChainsaw | صيد سريع قائم على Sigma في سجلات الأحداث | مجانية، على ملفات EVTX المصدرة أو مباشرة |
| FTK Imager | تصوير الأقراص وتصفح نظام الملفات بسرعة | مجانية، وتنتج صور E01 مع بصمات تحقق |
| YARA وTHOR Lite وLoki | فحص الملفات والذاكرة بالبصمات بحثًا عن الأدوات والبرمجيات الخبيثة المعروفة | قواعد مجانية من المجتمع وNextron |
| Plaso (log2timeline) | جداول زمنية شاملة من أنواع آثار كثيرة | مجانية، ثقيلة لكنها شاملة |
| Cyber Triage | جمع وفرز موجهان وتقييم للمحللين | تجارية مع إصدار مجاني |
| الاستجابة المباشرة عبر EDR | لوحات Defender for Endpoint وCrowdStrike وSentinelOne | عزل وصدفة بعيدة وجمع ملفات دون تسجيل دخول |
الدقائق الخمس عشرة الأولى
ابدأ بتحديد السياق. يجب أن تعرف بالضبط أي جهاز أنت عليه، ومنطقته الزمنية وفرق ساعته، ومن سجل الدخول، ومنذ متى يعمل. فالجهاز الذي أُعيد تشغيله قبل ساعة فقد أدلة الذاكرة، والساعة المتأخرة خمس دقائق تزيح كل حدث تربطه بالأنظمة الأخرى.
$case = "E:\IR-2026-031\$env:COMPUTERNAME"
New-Item -ItemType Directory -Path $case -Force | Out-Null
Start-Transcript -Path "$case\transcript.txt"
(Get-Date).ToUniversalTime().ToString('o')
hostname; whoami /all
Get-TimeZone
w32tm /query /status
Get-CimInstance Win32_OperatingSystem |
Select-Object Caption, Version, BuildNumber, InstallDate, LastBootUpTime
Get-CimInstance Win32_ComputerSystem | Select-Object Domain, Manufacturer, Model
Get-NetIPConfiguration | Format-List InterfaceAlias, IPv4Address, IPv4DefaultGateway, DNSServer
quser 2>$nullثم قرر الاحتواء. إذا كان الجهاز يملك وكيل EDR، فعزل الشبكة من اللوحة هو غالبًا أفضل خطوة أولى: فهو يقطع المهاجم ويبقي الجهاز عاملًا ومتاحًا لـ EDR، فتبقى الذاكرة والحالة المباشرة. ودون EDR، وازن خطر الضرر الجاري، مثل التشفير أو خروج البيانات، مقابل الأدلة والرؤية التي تفقدها بفصل الشبكة. ولا تطفئ الجهاز ببساطة أبدًا.
| الإجراء | هل يوقف المهاجم | الأثر على الأدلة | متى يُستخدم |
|---|---|---|---|
| عزل الشبكة عبر EDR | نعم، باستثناء قناة EDR | لا أثر، فالذاكرة والحالة محفوظتان | الخيار الافتراضي عند وجود EDR |
| حظر عبر جدار الحماية أو منفذ المبدل | نعم | منخفض، وتحتاج الاستجابة المباشرة إلى وصول محلي | لا يوجد EDR لكن يمكنك العمل على اللوحة المحلية |
| فصل كابل الشبكة أو تعطيل Wi-Fi | نعم | منخفض، وقد يشغّل منطق تنظيف لدى المهاجم | ضرر جارٍ ولا يوجد خيار أفضل |
| تعليق جهاز افتراضي | نعم | لا أثر، فالذاكرة محفوظة على القرص (.vmem أو .vmsn) | الخوادم الافتراضية، واجمع ملف الذاكرة |
| الإطفاء أو قطع الكهرباء | نعم | مرتفع، إذ تضيع الذاكرة ومفاتيح التشفير | تجنبه، إلا لإيقاف تدمير جارٍ |
التقط الذاكرة أولًا
تحتوي الذاكرة على ما لا يحتويه القرص: الكود المحقون، والبرمجيات الخبيثة دون ملفات، والحمولات المفكوكة، وسجل الصدفات العاملة، واتصالات الشبكة التي أُغلقت، وأحيانًا مفاتيح التشفير. التقطها قبل أي تغيير آخر. وتوقع نحو دقيقة واحدة لكل 4 إلى 8 GB من الذاكرة إلى قرص USB 3 سريع.
# WinPmem (run from the kit drive, write to the evidence drive)
E:\tools\winpmem_mini_x64_rc2.exe E:\IR-2026-031\HOST01\HOST01.raw
Get-FileHash -Algorithm SHA256 E:\IR-2026-031\HOST01\HOST01.raw |
Export-Csv E:\IR-2026-031\HOST01\hashes.csv -NoTypeInformation -Append
# Velociraptor alternative, run remotely from the server console:
# artifact Windows.Memory.Acquisitionيحتوي ملف الصفحات وملف السبات أيضًا على صفحات ذاكرة ويستحقان الجمع مع آثار القرص. وهما مقفلان أثناء عمل Windows، لذا استخدم KAPE أو Velociraptor أو FTK Imager التي تقرأهما بالوصول المباشر إلى القرص. وعلى الأجهزة الافتراضية، تنتج اللقطة مع الذاكرة أو عملية التعليق ملف ذاكرة يقرؤه Volatility مباشرة.
vol -f HOST01.raw windows.info
vol -f HOST01.raw windows.pstree # parent and child relationships
vol -f HOST01.raw windows.psscan # finds unlinked and exited processes too
vol -f HOST01.raw windows.cmdline
vol -f HOST01.raw windows.netscan # connections and listeners with PIDs
vol -f HOST01.raw windows.malfind # executable private memory, injected code
vol -f HOST01.raw windows.svcscan
vol -f HOST01.raw windows.dlllist --pid 4416
vol -f HOST01.raw windows.handles --pid 4416
vol -f HOST01.raw -o out windows.dumpfiles --pid 4416
# MemProcFS: browse processes, handles and timelines as files under M:\
MemProcFS.exe -device HOST01.raw -forensic 1قارن pslist مع psscan: العملية التي يجدها psscan فقط أُزيلت من قائمة العمليات النشطة، وهذه تقنية rootkit، أو انتهت بالفعل. وفي نتائج malfind، تستحق مناطق الذاكرة التنفيذية التي تبدأ بترويسة MZ أو تحتوي على shellcode في عمليات مثل explorer.exe أو svchost.exe أو rundll32.exe نظرة أدق، مع أن مترجمات JIT في المتصفحات و.NET تنتج إنذارات خاطئة.
الاستجابة المباشرة: العمليات والشبكة والجلسات
بعد تأمين الذاكرة، سجل الحالة المباشرة بالأوامر المدمجة. هذه المخرجات سريعة القراءة أثناء الحادثة وسهلة المقارنة بين الأجهزة. احفظ كلًا منها بصيغة CSV لفرزها وتصفيتها لاحقًا في Timeline Explorer أو جدول بيانات.
Get-CimInstance Win32_Process |
Select-Object ProcessId, ParentProcessId, Name, CommandLine, ExecutablePath,
@{n='Created';e={$_.CreationDate.ToUniversalTime()}},
@{n='Owner';e={(Invoke-CimMethod -InputObject $_ -MethodName GetOwner).User}} |
Export-Csv "$case\processes.csv" -NoTypeInformation
Get-Process | Where-Object Path | Select-Object -ExpandProperty Path -Unique |
ForEach-Object { Get-FileHash -Algorithm SHA256 $_ } |
Export-Csv "$case\process-hashes.csv" -NoTypeInformation
tasklist /svc /fo csv > "$case\tasklist-svc.csv"Get-NetTCPConnection |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess,
@{n='Process';e={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}},
CreationTime |
Export-Csv "$case\tcp.csv" -NoTypeInformation
Get-NetUDPEndpoint | Select-Object LocalAddress, LocalPort, OwningProcess |
Export-Csv "$case\udp.csv" -NoTypeInformation
netstat -anob > "$case\netstat.txt"
Get-DnsClientCache | Export-Csv "$case\dns-cache.csv" -NoTypeInformation
Get-NetNeighbor | Export-Csv "$case\arp.csv" -NoTypeInformation
route print > "$case\routes.txt"
Get-SmbSession | Export-Csv "$case\smb-sessions.csv" -NoTypeInformation # who is connected to us
Get-SmbMapping; net use # where we are connected
Get-SmbShare | Export-Csv "$case\shares.csv" -NoTypeInformation
netsh advfirewall show allprofiles > "$case\firewall.txt"ذاكرة DNS المؤقتة قصيرة العمر، وكثيرًا ما تعرض نطاقات قيادة وتحكم لم يعد لها اتصال مفتوح. وتوضح جلسات SMB الواردة الأجهزة والحسابات المتصلة بهذا الجهاز الآن، وهذا دليل مباشر على حركة جانبية جارية.
quser; qwinsta
Get-CimInstance Win32_LogonSession |
Select-Object LogonId, LogonType, AuthenticationPackage, StartTime
Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet, Description
Get-LocalGroupMember Administrators
Get-LocalGroupMember 'Remote Desktop Users'
Get-ChildItem C:\Users -Directory | Select-Object Name, CreationTime, LastWriteTime
klist sessionsابحث عن حساب محلي أُنشئ حديثًا، أو عضو غير متوقع في مجموعة Administrators، أو مجلد ملف شخصي أُنشئ داخل نافذة الحادثة. فمجلد الملف الشخصي الجديد يعني أن الحساب سجل دخوله تفاعليًا إلى هذا الجهاز لأول مرة.
كيف تبدو العمليات المشبوهة
- أب خاطئ: تطبيقات Office أو المتصفحات أو قارئات PDF أو w3wp.exe تشغل cmd.exe أو powershell.exe أو wscript.exe أو mshta.exe أو rundll32.exe.
- مسار خاطئ: svchost.exe أو lsass.exe أو csrss.exe تعمل من غير C:\Windows\System32، أو برامج تعمل من AppData أو ProgramData أو Temp أو Public أو سلة المحذوفات.
- أسماء مشابهة: scvhost.exe أو lsasss.exe أو svch0st.exe، أو اسم صحيح مع مسافة إضافية.
- أوامر مرمزة أو مموهة: powershell مع EncodedCommand وIEX وDownloadString، أو سلاسل Base64 طويلة، أو استخدام كثيف لأحرف الهروب.
- برامج غير موقعة في أماكن كل ما فيها موقع، وأدوات وصول عن بُعد لم يثبتها أحد في تقنية المعلومات، مثل AnyDesk أو ScreenConnect أو Atera أو ngrok.
- عمليات لها اتصالات شبكة يجب ألا تكون لها، مثل اتصال notepad.exe أو rundll32.exe بالإنترنت.
$b64 = 'SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkA'
[Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($b64))E:\tools\sigcheck64.exe -accepteula -nobanner -u -e -s -c -h C:\Users > "$case\unsigned-users.csv"
E:\tools\sigcheck64.exe -accepteula -nobanner -u -e -s -c -h C:\ProgramData > "$case\unsigned-programdata.csv"
# -u unsigned only, -e executables only, -s recurse, -c CSV, -h hashes
# Add -v to look hashes up on VirusTotal. It sends hashes only, never the files.البحث عن وسائل الاستمرار
يحرص المهاجمون الراغبون في البقاء على أن يصمد وصولهم أمام إعادة التشغيل وتغيير كلمة المرور. يوفر Windows مئات الأماكن لذلك، لكن معظم الاختراقات تستخدم مجموعة صغيرة: مفاتيح Run والمهام المجدولة والخدمات واشتراكات WMI ومجلدات بدء التشغيل والحسابات الجديدة. ابدأ بأداة Autoruns التي تفحص معظمها دفعة واحدة، ثم أكد الإدخالات المهمة يدويًا.
E:\tools\autorunsc64.exe -accepteula -nobanner -a * -c -h -s -m '*' > "$case\autoruns.csv"
# -a * every category -c CSV output -h file hashes
# -s verify signatures -m hide Microsoft-signed entries
# '*' include every user profile, not only the current oneرتب ملف CSV حسب الموقّع، وانظر أولًا إلى الإدخالات غير الموقعة، وتلك التي تشير إلى مجلدات يمكن للمستخدم الكتابة فيها، وتلك التي يستدعي أمرها مضيف نصوص أو مفسرًا. يقلل إخفاء إدخالات Microsoft الضوضاء، لكن المهاجمين يسيئون استخدام برامج Microsoft الموقعة كثيرًا، فيبقى الإدخال الذي يشغل rundll32.exe أو mshta.exe بوسيط غير معتاد مهمًا حتى لو كان البرنامج موقعًا.
$keys = @(
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce',
'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce',
'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon',
'HKLM:\System\CurrentControlSet\Control\Session Manager'
)
foreach ($k in $keys) { "== $k"; Get-ItemProperty -Path $k -ErrorAction SilentlyContinue }
# Debugger hijacks: a program that runs instead of, or when, the target starts
Get-ChildItem 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options' |
Get-ItemProperty | Where-Object { $_.Debugger -or $_.GlobalFlag } |
Select-Object PSChildName, Debugger, GlobalFlagفي مفتاح Winlogon، يجب أن تكون قيمة Userinit هي C:\Windows\system32\userinit.exe متبوعة بفاصلة، وقيمة Shell هي explorer.exe. وأي إضافة إليهما تعمل عند كل تسجيل دخول. وفي Session Manager، افحص BootExecute التي يجب أن تحتوي عادةً على autocheck autochk * فقط. وإدخالات Image File Execution Options بقيمة Debugger على أدوات الوصول مثل sethc.exe أو utilman.exe باب خلفي تقليدي يفتح صدفة SYSTEM من شاشة الدخول.
Get-ScheduledTask | Where-Object State -ne 'Disabled' |
Select-Object TaskPath, TaskName, State, Author,
@{n='Run';e={($_.Actions | ForEach-Object { "$($_.Execute) $($_.Arguments)" }) -join ' | '}},
@{n='User';e={$_.Principal.UserId}} |
Export-Csv "$case\tasks.csv" -NoTypeInformation
# Raw task XML, including tasks hidden by deleting their SD registry value
Get-ChildItem C:\Windows\System32\Tasks -Recurse -File |
Sort-Object LastWriteTime -Descending | Select-Object -First 30 FullName, LastWriteTimeGet-CimInstance Win32_Service |
Select-Object Name, DisplayName, State, StartMode, StartName, PathName |
Export-Csv "$case\services.csv" -NoTypeInformation
# Services launching shells, scripts or binaries from writable folders
Get-CimInstance Win32_Service | Where-Object {
$_.PathName -match 'cmd(\.exe)?\s*/c|powershell|mshta|rundll32|\\Users\\|\\ProgramData\\|\\Temp\\|\\AppData\\'
} | Select-Object Name, StartMode, PathNameكثيرًا ما تكون أسماء الخدمات التي تنشئها أدوات مثل PsExec أو Impacket أو Cobalt Strike سلاسل عشوائية من الأحرف أو الأرقام، ويكون مسارها غالبًا سطر أوامر لا ملفًا تنفيذيًا. وافحص أيضًا مسارات الخدمات غير المقتبسة التي فيها مسافات، لأن مجلدًا قابلًا للكتابة في هذا المسار طريق لرفع الصلاحيات يستخدمه المهاجمون أيضًا للاستمرار.
Get-CimInstance -Namespace root\subscription -ClassName __EventFilter |
Select-Object Name, Query
Get-CimInstance -Namespace root\subscription -ClassName CommandLineEventConsumer |
Select-Object Name, CommandLineTemplate, ExecutablePath
Get-CimInstance -Namespace root\subscription -ClassName ActiveScriptEventConsumer |
Select-Object Name, ScriptingEngine, ScriptText
Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding
Get-BitsTransfer -AllUsers | Select-Object DisplayName, JobState, OwnerAccount, FileList
Get-ChildItem 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp',
'C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup' -Force -ErrorAction SilentlyContinue |
Select-Object FullName, CreationTime, LastWriteTimeيملك الجهاز السليم عادةً مرشحًا أو اثنين ومستهلكًا أو اثنين مدمجين في WMI، مثل SCM Event Log Consumer. وأي CommandLineEventConsumer أو ActiveScriptEventConsumer لا يمكنك نسبته إلى برنامج إدارة مشبوه جدًا، لأن استمرار WMI لا يترك ملفًا في موقع بدء التشغيل ويصمد أمام إعادة التشغيل.
Get-MpComputerStatus |
Select-Object AMServiceEnabled, RealTimeProtectionEnabled, IsTamperProtected, AntivirusSignatureLastUpdated
Get-MpPreference | Select-Object ExclusionPath, ExclusionProcess, ExclusionExtension, ExclusionIpAddress
Get-MpThreatDetection | Sort-Object InitialDetectionTime -Descending | Select-Object -First 20
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Windows Defender/Operational'; Id=1116,1117,5001,5007} -MaxEvents 50 |
Select-Object TimeCreated, Id, Messageيضيف المهاجمون استثناءات Defender لمجلد التجميع أو يعطلون الحماية الفورية قبل إسقاط الأدوات. يسجل الحدث 5007 كل تغيير في الإعدادات بما فيه مسار الاستثناء الجديد، ويسجل 5001 إيقاف الحماية الفورية. وتعد استثناءات الأقراص الكاملة أو مجلدات الملفات الشخصية أو الامتدادات الشائعة مثل .ps1 علامات خطر. تخفي إصدارات Defender الحالية قائمة الاستثناءات عن غير المسؤولين، فاجمعها من جلسة مرتفعة الصلاحيات.
- أماكن أخرى تستحق الفحص عندما تكون المواقع الشائعة سليمة: اختطاف كائنات COM تحت HKCU\Software\Classes\CLSID، وإضافات Office وقوالبه (Normal.dotm)، وإضافات المتصفح، وملفات DLL المساعدة في netsh، ومراقبات الطباعة، وحزم مصادقة LSA أو إشعاراتها.
- الحسابات وسيلة استمرار أيضًا: مسؤول محلي جديد، أو حساب معطل أُعيد تفعيله، أو كلمة مرور لا تنتهي لحساب خدمة، كلها تعيد المهاجم بعد إزالة برمجياته الخبيثة.
- تعد برامج الوصول عن بُعد وسيلة استمرار. افحص البرامج والخدمات المثبتة بحثًا عن أدوات إدارة عن بُعد لا يستخدمها فريق تقنية المعلومات لديك.
سجلات الأحداث المهمة
سجلات أحداث Windows أقرب شيء إلى الصندوق الأسود على الجهاز. صدّرها مبكرًا: فالمهاجمون يمسحونها، وأحجامها الافتراضية على الأجهزة تجعلها تُستبدل خلال أيام. انسخ مجلد السجلات كاملًا، فهذا يحفظ كل قناة حتى تلك التي لم تفكر في طلبها.
New-Item -ItemType Directory "$case\evtx" -Force | Out-Null
foreach ($log in 'Security','System','Application',
'Microsoft-Windows-PowerShell/Operational','Microsoft-Windows-Sysmon/Operational',
'Microsoft-Windows-TaskScheduler/Operational','Microsoft-Windows-Windows Defender/Operational',
'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational',
'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational',
'Microsoft-Windows-WMI-Activity/Operational','Microsoft-Windows-WinRM/Operational') {
$name = ($log -replace '[/ ]', '_') + '.evtx'
wevtutil epl $log "$case\evtx\$name" 2>$null
}
# Or simply copy every channel
robocopy C:\Windows\System32\winevt\Logs "$case\evtx-all" *.evtx /COPY:DAT /R:0 /W:0| معرف الحدث | السجل | ما يخبرك به |
|---|---|---|
| 4624 / 4625 | Security | تسجيلات الدخول الناجحة والفاشلة مع النوع وعنوان المصدر والعملية |
| 4648 | Security | دخول ببيانات اعتماد صريحة، مثل runas أو أداة تمرر كلمة مرور |
| 4672 | Security | صلاحيات خاصة عند الدخول: جلسة تعادل المسؤول |
| 4688 | Security | إنشاء عملية، ويتضمن الأمر فقط إذا فُعّلت السياسة |
| 4697 / 7045 | Security / System | تثبيت خدمة: PsExec وImpacket وأبواب خلفية كثيرة |
| 4698 / 4702 | Security | إنشاء مهمة مجدولة أو تحديثها مع XML الكامل |
| 4720 / 4722 / 4738 | Security | إنشاء حساب أو تفعيله أو تغييره |
| 4728 / 4732 / 4756 | Security | إضافة عضو إلى مجموعة أمان عامة أو محلية أو شاملة |
| 4768 / 4769 / 4771 | Security (DC) | طلبات تذاكر Kerberos وفشل المصادقة المسبقة |
| 4776 | Security | التحقق من بيانات اعتماد NTLM |
| 1102 / 104 | Security / System | مسح سجل التدقيق أو سجل النظام |
| 4104 | PowerShell Operational | تسجيل كتل النصوص: الكود الذي شغله PowerShell فعلًا بعد فك الترميز |
| 21 / 24 / 25 | TS LocalSessionManager | دخول جلسة RDP وانقطاعها وإعادة اتصالها مع عنوان المصدر |
| 1149 | TS RemoteConnectionManager | نجاح مصادقة RDP عبر الشبكة |
| 106 / 140 / 200 | TaskScheduler Operational | تسجيل مهمة وتحديثها وتشغيلها |
| 5857 إلى 5861 | WMI-Activity Operational | تحميل مزود WMI، ويسجل 5861 اشتراك حدث دائمًا |
| 1116 / 1117 / 5001 / 5007 | Defender Operational | الكشف والإجراء المتخذ وإيقاف الحماية الفورية وتغيير الإعدادات |
| 1 / 3 / 10 / 11 / 13 / 22 | Sysmon | إنشاء عملية واتصال شبكة والوصول إلى عملية وإنشاء ملف وكتابة في السجل واستعلام DNS |
| النوع | الاسم | المصدر المعتاد |
|---|---|---|
| 2 | Interactive | لوحة المفاتيح على الجهاز، وبيانات الاعتماد مخزنة في LSASS |
| 3 | Network | الوصول إلى مشاركة SMB وPsExec وWMI ومعظم الأدوات البعيدة، دون ترك بيانات قابلة لإعادة الاستخدام |
| 4 | Batch | المهام المجدولة |
| 5 | Service | خدمات تبدأ بحساب |
| 7 | Unlock | فتح قفل الجهاز |
| 8 | NetworkCleartext | مصادقة أساسية مثل IIS، وتُرسل كلمة المرور بوضوح إلى الجهاز |
| 9 | NewCredentials | runas /netonly وبعض أدوات pass-the-hash |
| 10 | RemoteInteractive | سطح المكتب البعيد |
| 11 | CachedInteractive | دخول نطاق ببيانات مخزنة أثناء تعذر الوصول إلى DC |
خصائص الأحداث موضعية وتختلف بين المعرفات، لذا حلل XML حسب اسم الحقل لا الفهرس. يعمل هذا النمط مع أي حدث ويسهل تصفية المخرجات.
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-7)} |
ForEach-Object {
$d = @{}
([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[pscustomobject]@{
TimeUtc = $_.TimeCreated.ToUniversalTime()
User = "$($d.TargetDomainName)\$($d.TargetUserName)"
Type = $d.LogonType
Source = $d.IpAddress
Host = $d.WorkstationName
Auth = $d.AuthenticationPackageName
Process = $d.ProcessName
}
} | Where-Object { $_.Type -in '3','10' -and $_.Source -notin '-','127.0.0.1','::1' } |
Export-Csv "$case\logons.csv" -NoTypeInformationGet-WinEvent -FilterHashtable @{LogName='Security'; Id=1102} -ErrorAction SilentlyContinue
Get-WinEvent -FilterHashtable @{LogName='System'; Id=104,7045} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Id, Message | Format-List
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4698} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Message | Format-List
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; Id=4104} -MaxEvents 500 |
Where-Object Message -match 'DownloadString|IEX|Invoke-Expression|FromBase64String|Net.WebClient|-enc|Bypass|Mimikatz|Invoke-' |
Select-Object TimeCreated, Message | Format-Listلا تصلح قراءة الأحداث باستعلام بعد آخر بعد الجهاز الأول. تطبق أدوات الصيد القائمة على Sigma آلاف القواعد المجتمعية على السجلات المصدرة خلال دقائق وتنتج جدولًا زمنيًا للأحداث المهمة فقط. شغّلها على ملفات EVTX المصدرة في جهاز التحليل لا على الجهاز المشبوه.
# Hayabusa: Sigma and built-in rules, timeline output
hayabusa.exe update-rules
hayabusa.exe csv-timeline -d E:\IR-2026-031\HOST01\evtx-all -o host01-hayabusa.csv -p verbose -U -w
hayabusa.exe logon-summary -d E:\IR-2026-031\HOST01\evtx-all
# Chainsaw: Sigma hunting plus fast keyword search
chainsaw hunt E:\IR-2026-031\HOST01\evtx-all -s sigma\ --mapping mappings\sigma-event-logs-all.yml -r rules\ --csv --output host01-chainsaw
chainsaw search mimikatz -i E:\IR-2026-031\HOST01\evtx-all
# EvtxECmd: every event normalized into one CSV for Timeline Explorer
EvtxECmd.exe -d E:\IR-2026-031\HOST01\evtx-all --csv E:\out --csvf host01-evtx.csvابدأ المراجعة بأعلى نتائج Hayabusa أو Chainsaw خطورة، وسجل الأوقات، ثم اقرأ كل ما حدث في مخرجات EvtxECmd قبلها وبعدها ببضع دقائق. تخبرك قواعد الكشف أين تنظر، وتخبرك الأحداث العادية حولها بما حدث فعلًا.
أدلة التنفيذ
عندما تكون السجلات مفقودة أو ممسوحة، يتذكر Windows الكثير عن البرامج التي عملت ومتى ومن أين. ولكل أثر ثغراته وخصائصه، لذلك تأتي أقوى الاستنتاجات من اتفاق أثرين أو ثلاثة.
| الأثر | الموقع | ما يثبته | المحلل |
|---|---|---|---|
| Prefetch | C:\Windows\Prefetch\*.pf | عمل البرنامج، مع عدد المرات وآخر ثمانية أوقات والملفات المحملة. معطل افتراضيًا في Windows Server | PECmd |
| Amcache | C:\Windows\AppCompat\Programs\Amcache.hve | كان البرنامج موجودًا، مع المسار الكامل وبصمة SHA-1، وغالبًا وقت التشغيل الأول | AmcacheParser |
| ShimCache (AppCompatCache) | خلية SYSTEM | كان الملف موجودًا ورآه محرك التوافق، وليس إثباتًا للتنفيذ منذ Windows 10 | AppCompatCacheParser |
| BAM / DAM | SYSTEM\CurrentControlSet\Services\bam\State\UserSettings | آخر تنفيذ لكل SID مستخدم للبرامج الحديثة | RECmd وRegistry Explorer |
| UserAssist | NTUSER.DAT | البرامج الرسومية التي شغلها المستخدم مع العدد وآخر تشغيل | RECmd |
| SRUM | C:\Windows\System32\sru\SRUDB.dat | البايتات المرسلة والمستلمة لكل تطبيق كل ساعة لمدة 30 إلى 60 يومًا تقريبًا | SrumECmd |
| ملفات LNK وjump lists | AppData\Roaming\Microsoft\Windows\Recent | الملفات والمجلدات التي فتحها المستخدم، ومنها على USB والمشاركات الشبكية | LECmd وJLECmd |
| ShellBags | UsrClass.dat وNTUSER.DAT | المجلدات التي تصفحها المستخدم حتى بعد حذفها | SBECmd وShellBags Explorer |
| سجل PowerShell | AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt | الأوامر المكتوبة في جلسات PowerShell التفاعلية | أي محرر نصوص |
| ذاكرة RDP المؤقتة للصور | AppData\Local\Microsoft\Terminal Server Client\Cache | أجزاء من شاشة جلسات RDP الخارجة من هذا الجهاز | bmc-tools |
PECmd.exe -d C:\Windows\Prefetch --csv E:\out --csvf prefetch.csv
AmcacheParser.exe -f C:\Windows\AppCompat\Programs\Amcache.hve -i --csv E:\out
AppCompatCacheParser.exe --csv E:\out --csvf shimcache.csv
SrumECmd.exe -d E:\collect\C --csv E:\out
RECmd.exe -d E:\collect\C --bn BatchExamples\Kroll_Batch.reb --csv E:\out
LECmd.exe -d E:\collect\C\Users --csv E:\out
JLECmd.exe -d E:\collect\C\Users --csv E:\out
# PowerShell history for every user
Get-ChildItem C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt -Force |
ForEach-Object { "===== $($_.FullName)"; Get-Content $_.FullName }بصمة SHA-1 في Amcache ثمينة لأنها تبقى بعد حذف الملف. فكثيرًا ما يترك المهاجم الذي نظف أدواته البصمة خلفه، ويمكنك البحث عنها في VirusTotal أو منصة الاستخبارات دون امتلاك البرنامج.
فرز نظام الملفات
يسجل Master File Table في NTFS كل ملف على القرص بأربعة أوقات في خاصيتين منفصلتين. ويسجل سجل USN كل إنشاء وإعادة تسمية وكتابة وحذف خلال الأيام أو الأسابيع الماضية. ويكشفان معًا مجلدات التجميع وإسقاط الأدوات والبرمجيات الخبيثة المعاد تسميتها والتشفير الجماعي، حتى بعد اختفاء الملفات.
$since = (Get-Date).AddDays(-14)
Get-ChildItem C:\Users, C:\ProgramData, C:\Windows\Temp, C:\PerfLogs, 'C:\$Recycle.Bin' -Recurse -Force -File -ErrorAction SilentlyContinue -Include *.exe,*.dll,*.ps1,*.bat,*.cmd,*.vbs,*.js,*.hta,*.lnk,*.iso,*.zip,*.7z,*.rar |
Where-Object { $_.CreationTime -gt $since -or $_.LastWriteTime -gt $since } |
Select-Object FullName, Length, CreationTimeUtc, LastWriteTimeUtc |
Sort-Object CreationTimeUtc | Export-Csv "$case\recent-files.csv" -NoTypeInformation
# Where did a file come from? Mark of the Web stores the download URL
Get-Content C:\Users\bob\Downloads\invoice.iso -Stream Zone.IdentifierMFTECmd.exe -f 'E:\collect\C\$MFT' --csv E:\out --csvf mft.csv
MFTECmd.exe -f 'E:\collect\C\$Extend\$J' --csv E:\out --csvf usn.csv
RBCmd.exe -d 'E:\collect\C\$Recycle.Bin' --csv E:\out # deleted file names and times- Timestomping: يغيّر المهاجمون أوقات الملفات للتمويه. يسهل تغيير أوقات $STANDARD_INFORMATION، بخلاف أوقات $FILE_NAME. ويشير MFTECmd إلى السجلات التي يكون فيها وقت الإنشاء في $SI أقدم من $FN، أو تكون أجزاء الثانية فيها أصفارًا.
- مجلدات التجميع: دفعة من ملفات الأرشيف (zip و7z وrar) في مجلد واحد قبل حركة خارجة كبيرة في SRUM بقليل نمط شائع لتسريب البيانات.
- النسخ الظلية: نفذ vssadmin list shadows. فاختفاؤها المفاجئ مع أوامر vssadmin أو wmic shadowcopy أو wbadmin في أحداث 4688 أو Sysmon يشير إلى التحضير لبرنامج فدية.
- مجلدات المهاجمين الشائعة: C:\PerfLogs وC:\Users\Public وC:\ProgramData وC:\Windows\Temp وجذر C:\، غالبًا بأسماء تشبه مجلدات النظام.
yara64.exe -r -s -w E:\rules\index.yar C:\Users\Public C:\ProgramData C:\Windows\Temp > "$case\yara-files.txt"
# Scan a running process by PID
yara64.exe -s E:\rules\cobaltstrike.yar 4416
# Loki and THOR Lite bundle curated rules and IOC lists
loki.exe -p C:\ --noprocscan --csvجمع صورة الفرز
صورة الفرز نسخة موجهة من الآثار المهمة، عادةً من 1 إلى 5 GB بدل قرص كامل. وتستغرق دقائق لا ساعات، ويمكن جلبها عبر الشبكة، وتكفي لمعظم أسئلة التحقيق. ولا تجمع صورة كاملة للقرص أيضًا إلا إذا كانت القضية قد تصل إلى المحكمة أو تركت صورة الفرز أسئلة مهمة دون إجابة.
E:\KAPE\kape.exe --tsource C: --tdest E:\IR-2026-031\%m\tout --target KapeTriage --vhdx %m --zv false --msource E:\IR-2026-031\%m\tout --mdest E:\IR-2026-031\%m\mout --module !EZParser
# Add memory-related files and browser history when relevant
E:\KAPE\kape.exe --tsource C: --tdest E:\IR-2026-031\%m\extra --target FileSystem,WebBrowsers,PowerShellConsole --vhdx %m-extraيجمع KapeTriage كلًا من MFT وسجل USN وخلايا السجل وسجلات الأحداث وprefetch وAmcache وSRUM وملفات LNK وjump lists وغيرها، باستخدام القراءة المباشرة من القرص لنسخ الملفات المقفلة. وتشغل وحدة EZParser محللات Eric Zimmerman على النسخة، فتكون ملفات CSV جاهزة لـ Timeline Explorer عند انتهاء الجمع. ويشير المتغير %m إلى اسم الجهاز، مما يبقي عمليات الجمع من أجهزة كثيرة منظمة.
لأكثر من بضعة أجهزة، يعد Velociraptor الأداة الأفضل. يدير خادم واحد آلاف الأجهزة، وتعمل عمليات الجمع كصيد في البيئة كلها، ويمكن بناء أداة جمع دون اتصال كملف تنفيذي واحد للأجهزة التي لا تملك وكيلًا. تسمي الإصدارات الحديثة الأثر المتوافق مع KAPE باسم Windows.Triage.Targets، وتسميه الإصدارات الأقدم Windows.KapeFiles.Targets.
| الأثر | ما يجمعه |
|---|---|
| Windows.Triage.Targets | جمع ملفات متوافق مع KAPE (KapeTriage وSANS_Triage وغيرها) |
| Windows.System.Pslist | العمليات مع الأوامر والبصمات والتواقيع |
| Windows.Network.NetstatEnriched | الاتصالات مربوطة بتفاصيل العمليات |
| Windows.Sysinternals.Autoruns | مخرجات Autoruns من كل جهاز |
| Windows.Persistence.PermanentWMIEvents | مرشحات WMI ومستهلكوها وروابطها |
| Windows.System.TaskScheduler | XML المهام المجدولة وإجراءاتها |
| Windows.EventLogs.Hayabusa | تشغيل Hayabusa على الجهاز وإعادة النتائج إلى الخادم |
| Windows.Detection.Yara.Process | قواعد YARA على ذاكرة العمليات |
| Windows.Memory.Acquisition | صورة ذاكرة كاملة |
إذا لم تتوفر أي من الأداتين، فيمكن لنص PowerShell قصير التقاط الأساسيات بطريقة متسقة. وهو لا يغني عن أداة جمع حقيقية، لكنه أفضل بكثير من أوامر مرتجلة تحت الضغط، ويحسب بصمة مخرجاته.
param([string]$Out = "E:\IR\$env:COMPUTERNAME-$((Get-Date).ToUniversalTime().ToString('yyyyMMddTHHmmssZ'))")
New-Item -ItemType Directory -Path $Out -Force | Out-Null
Start-Transcript "$Out\transcript.txt"
Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine,ExecutablePath,CreationDate | Export-Csv "$Out\processes.csv" -NoTypeInformation
Get-NetTCPConnection | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,CreationTime | Export-Csv "$Out\tcp.csv" -NoTypeInformation
Get-DnsClientCache | Export-Csv "$Out\dns.csv" -NoTypeInformation
Get-CimInstance Win32_Service | Select-Object Name,State,StartMode,StartName,PathName | Export-Csv "$Out\services.csv" -NoTypeInformation
Get-ScheduledTask | Select-Object TaskPath,TaskName,State,@{n='Run';e={($_.Actions.Execute + ' ' + $_.Actions.Arguments)}} | Export-Csv "$Out\tasks.csv" -NoTypeInformation
Get-LocalUser | Export-Csv "$Out\local-users.csv" -NoTypeInformation
Get-LocalGroupMember Administrators | Export-Csv "$Out\local-admins.csv" -NoTypeInformation
Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding | Out-File "$Out\wmi-bindings.txt"
Get-MpPreference | Select-Object Exclusion* | Out-File "$Out\defender-exclusions.txt"
New-Item -ItemType Directory "$Out\evtx" | Out-Null
robocopy C:\Windows\System32\winevt\Logs "$Out\evtx" *.evtx /R:0 /W:0 /NP | Out-Null
robocopy C:\Windows\Prefetch "$Out\prefetch" *.pf /R:0 /W:0 /NP | Out-Null
Get-ChildItem C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\*.txt -Force -ErrorAction SilentlyContinue |
ForEach-Object { Copy-Item $_.FullName "$Out\pshistory-$(($_.FullName -split '\\')[2]).txt" }
Stop-Transcript
Get-ChildItem $Out -Recurse -File | Get-FileHash -Algorithm SHA256 | Export-Csv "$Out\..\$(Split-Path $Out -Leaf)-sha256.csv" -NoTypeInformationتحتاج الملفات المقفلة مثل خلايا السجل وMFT وملف الصفحات إلى وصول مباشر للقرص، وهذا النص لا يحاول ذلك. وكحل بديل لخلايا السجل، يعمل reg save HKLM\SYSTEM system.hiv من موجه مرتفع الصلاحيات مع SYSTEM وSOFTWARE وSAM وSECURITY، لكن خلايا المستخدمين المسجلين (NTUSER.DAT) ما زالت تحتاج إلى أداة نسخ مباشر.
الحركة الجانبية وسرقة بيانات الاعتماد
بعد معرفة الجهاز الأول، السؤال التالي هو أين ذهب المهاجم من هناك وما بيانات الاعتماد التي أخذها. انظر إلى هذا الجهاز كوجهة (من دخل إليه) وكمصدر (إلى أين اتصل).
| التقنية | على الوجهة | على المصدر |
|---|---|---|
| RDP | 4624 من النوع 10، وإعادة الاتصال 4778، وTS LocalSessionManager 21 و25، وRemoteConnectionManager 1149 | mstsc.exe في prefetch، وMRU في سجل Terminal Server Client، وذاكرة الصور، وحدث RDPClient 1024 |
| PsExec وImpacket psexec أو smbexec | تثبيت خدمة 7045 أو 4697 (PSEXESVC أو اسم عشوائي)، و4624 من النوع 3، ووصول 5145 إلى مشاركة ADMIN$ | بيانات اعتماد صريحة 4648، وpsexec.exe في prefetch، وقيمة EulaAccepted في السجل |
| WMI (wmic وImpacket wmiexec) | تشغيل WmiPrvSE.exe لـ cmd.exe أو powershell.exe، و4624 من النوع 3، وملفات مخرجات في ADMIN$ | wmic.exe في prefetch و4688 مع /node: |
| WinRM وPowerShell Remoting | عمليات فرعية لـ wsmprovhost.exe، وWinRM Operational 91، و4624 من النوع 3 | WinRM Operational 6، وEnter-PSSession أو Invoke-Command في 4104 |
| المهام المجدولة عن بُعد | 4698 مع XML المهمة، وTaskScheduler 106 و200، و4624 من النوع 3 | schtasks.exe مع /s في 4688 |
| نسخ الملفات عبر SMB | وصول المشاركات 5140 و5145، وملفات جديدة في C$ أو ADMIN$ | ربط net use ومفتاح MountPoints2 في السجل |
- الوصول إلى LSASS: حدث Sysmon 10 مع TargetImage lsass.exe من عملية مصدر غير متوقعة، أو procdump أو rundll32 يحملان comsvcs.dll مع MiniDump، أو ملفات .dmp جديدة في مجلدات Temp. افترض أن كل بيانات الاعتماد المخزنة على الجهاز مسروقة.
- Pass-the-hash: حدث 4624 من النوع 3 بمصادقة NTLM من جهاز إلى أجهزة كثيرة في وقت قصير، أو النوع 9 مع عملية الدخول seclogo على المصدر.
- Kerberoasting: على وحدات التحكم بالنطاق، دفعة من أحداث 4769 لحسابات خدمة بنوع تشفير 0x17 (RC4) يطلبها مستخدم واحد.
- DCSync: حدث 4662 على وحدة تحكم بالنطاق مع معرفات GUID لحقوق النسخ المتماثل (1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 و1131f6ad-9c07-11d1-f79f-00c04fc2dcd2) يطلبها حساب ليس وحدة تحكم بالنطاق.
- سرقة NTDS: ntdsutil أو vssadmin create shadow أو diskshadow على وحدة تحكم بالنطاق، تليها نسخ ntds.dit وخلية SYSTEM.
الفرز الخاص ببرامج الفدية
في حالة الفدية، يكون التشفير آخر خطوة في اختراق بدأ عادةً قبل أيام أو أسابيع. وللفرز مهمتان في وقت واحد: الحد من الضرر الآن، وتحديد نقطة الدخول والحسابات المستخدمة حتى لا يكرر المهاجم ذلك بعد الاستعادة.
- صوّر مذكرة الفدية وسجل امتداد الملفات واسم المذكرة. تحدد ID Ransomware ومشروع No More Ransom العائلة وأي أدوات فك تشفير مجانية.
- حدد بداية التشفير بترتيب مخرجات MFT أو سجل USN حسب الامتداد الجديد. يقودك أول ملف مشفر والعملية التي كتبته إلى برنامج التشفير والحساب الذي شغله.
- ابحث عن خطوات التحضير في 4688 وSysmon وسجلات PowerShell: vssadmin delete shadows وwmic shadowcopy delete وwbadmin delete catalog وbcdedit مع recoveryenabled no وإيقاف خدمات النسخ الاحتياطي وقواعد البيانات.
- تحقق من التسريب قبل التشفير، فمعظم الجماعات تسرق البيانات أولًا. ابحث عن rclone أو MEGAsync أو WinSCP أو restic أو عملاء المزامنة السحابية، وملفات rclone.conf في AppData، والأرشيفات الكبيرة في مجلدات التجميع، وحجم الخروج في SRUM.
- حدد طريقة النشر: المهام المجدولة عبر Group Policy أو PsExec أو WMI أو أداة إدارة عن بُعد تدفع برنامج التشفير عبر الشبكة، وكلها تشير إلى حساب مسؤول نطاق مخترق.
- تأكد من سلامة النسخ الاحتياطية وعدم اتصالها قبل الاعتماد عليها. يستهدف المهاجمون لوحات النسخ الاحتياطي ويحذفون المستودعات أولًا.
Import-Csv E:\out\mft.csv |
Where-Object { $_.Extension -eq '.lockbit' } |
Sort-Object { [datetime]$_.Created0x10 } |
Select-Object -First 20 ParentPath, FileName, Created0x10, LastModified0x10بناء الجدول الزمني
الجدول الزمني هو المنتج الرئيسي للفرز. فهو يحول مئات الملاحظات إلى قصة: الوصول الأولي، والتنفيذ، والاستمرار، ورفع الصلاحيات، والحركة الجانبية، والجمع، والتسريب، والأثر. أبقه بتوقيت UTC، واذكر الأثر لكل إدخال، وافصل ما أكدته عما تستنتجه.
log2timeline.py --storage-file host01.plaso E:\IR-2026-031\HOST01\tout\HOST01.vhdx
psort.py -o dynamic -w host01-timeline.csv host01.plaso "date > '2026-10-20 00:00:00' AND date < '2026-10-28 00:00:00'"للسرعة، حمّل ملفات CSV من EvtxECmd وMFTECmd وPECmd وAmcacheParser وHayabusa في Timeline Explorer جنبًا إلى جنب، وصفِّ على نافذة الحادثة، وانسخ الصفوف المهمة إلى جدول بسيط بأعمدة الوقت والجهاز والحساب والنشاط والأثر المصدر ودرجة الثقة. هذا الجدول هو ما ستسلمه إلى الإدارة والقانونيين وشركات التأمين والسلطات.
| الوقت (UTC) | الجهاز | النشاط | المصدر |
|---|---|---|---|
| 2026-10-21 08:14:09 | HOST01 | المستخدم bob يفتح invoice.iso من Downloads (Mark of the Web من موقع مشاركة ملفات) | MFT وZone.Identifier وLNK |
| 2026-10-21 08:14:31 | HOST01 | rundll32.exe يحمل DLL من ISO المربوط، واتصال HTTPS خارج إلى نطاق جديد | Sysmon 1 و3 وذاكرة DNS |
| 2026-10-21 08:20:02 | HOST01 | إنشاء مهمة مجدولة لتشغيل DLL عند الدخول | 4698 وTaskScheduler 106 |
| 2026-10-22 01:47:55 | HOST01 | وصول rundll32.exe مع comsvcs.dll إلى ذاكرة LSASS | Sysmon 10 و4688 |
| 2026-10-22 02:03:12 | FS02 | دخول شبكي باسم svc_backup من HOST01 وتثبيت PSEXESVC | 4624 من النوع 3 و7045 |
الاحتواء والإزالة والتسليم
احتوِ في خطوة واحدة منسقة بعد فهم النطاق. فالاحتواء الجزئي، مثل تغيير كلمة مرور واحدة مع احتفاظ المهاجم بباب خلفي في مكان آخر، يعلمه الاختباء بشكل أفضل.
- اعزل كل جهاز مؤكد عبر EDR أو الشبكة، مع إبقائه يعمل حتى اكتمال الجمع.
- احظر المؤشرات عند المحيط والوكيل وDNS وEDR: نطاقات وعناوين القيادة والتحكم وبصمات الملفات والشهادات الخبيثة.
- عطّل الحسابات المخترقة وأعد تعيين كلمات مرورها مرتين. وإذا اختُرق مسؤول نطاق أو وحدة تحكم بالنطاق، فخطط لإعادة تعيين krbtgt (مرتين مع نسخ متماثل كامل بينهما) وأعد تعيين كل بيانات الاعتماد الامتيازية وحسابات الخدمة.
- أزل وسائل الاستمرار التي وجدتها من كل جهاز، مستخدمًا البحث عن المؤشرات في البيئة لإيجاد الأجهزة التي لم تفرزها.
- أعد بناء الأجهزة المخترقة من صور سليمة بدل تنظيفها، فالتنظيف يفوته ما لم تجده.
- أصلح مسار الوصول الأولي أو أغلقه: VPN الضعيف أو RDP المكشوف أو الحساب المستهدف بالتصيد دون MFA.
- راقب عن كثب لمدة 30 يومًا على الأقل المؤشرات والحسابات والتقنيات نفسها.
سلّم تقريرًا قصيرًا: ملخص تنفيذي، والنطاق (الأجهزة والحسابات والبيانات)، والجدول الزمني، والسبب الجذري، ومؤشرات الاختراق، والإجراءات المتخذة، والتوصيات. واحفظ الأدلة وقائمة بصماتها وفق سياسة الاحتفاظ لديك، فقد تطلبها الجهات التنظيمية وشركات التأمين وجهات إنفاذ القانون بعد أشهر.
قائمة تحقق سريعة
- افتح سجل حالة بتوقيت UTC، وسجل من وماذا ومتى لكل إجراء.
- سجل هوية الجهاز والمنطقة الزمنية وفرق الساعة ومدة التشغيل والمستخدمين المسجلين.
- قرر الاحتواء، وفضّل عزل EDR على الإطفاء.
- التقط الذاكرة واحسب بصمتها.
- سجل العمليات مع الأوامر والآباء، واتصالات الشبكة، وذاكرة DNS، وجلسات SMB، والمسؤولين المحليين.
- شغّل Autoruns وراجع المهام المجدولة والخدمات واشتراكات WMI ومفاتيح Run واستثناءات Defender.
- صدّر كل سجلات الأحداث وشغّل عليها Hayabusa أو Chainsaw.
- اجمع صورة فرز عبر KAPE أو Velociraptor وحللها بأدوات Eric Zimmerman.
- راجع آثار التنفيذ: prefetch وAmcache وShimCache وBAM وSRUM وسجل PowerShell.
- راجع MFT وسجل USN بحثًا عن إسقاط الأدوات والتجميع والحذف.
- تتبع الحركة الجانبية في الاتجاهين وافترض أن البيانات المخزنة مسروقة.
- ابنِ الجدول الزمني، وابحث عن المؤشرات في البيئة، ثم احتوِ في خطوة واحدة منسقة.
الخاتمة
يتبع فرز Windows الجيد ترتيبًا ثابتًا: سجل السياق، والتقط الأدلة المتطايرة، وافحص وسائل الاستمرار وسجلات الأحداث، واجمع صورة فرز، ثم احتوِ. يحافظ هذا الترتيب على صلاحية الأدلة ويجيب عن الأسئلة المهمة: كيف دخل المهاجم، وماذا لمس، وهل ما زال موجودًا. تدرب على جهاز اختبار لتكون الحقيبة والخطوات مألوفة قبل أي حادثة حقيقية.
- Windows
- DFIR
- الاستجابة للحوادث
- الفرز
- التحليل الجنائي
- KAPE
- Velociraptor
- Volatility
- سجلات الأحداث
- صيد التهديدات