خدمات Windows¶
ما الذي يسجله تكوين الخدمات¶
تُكوَّن خدمات Windows وبرامج تشغيل النواة (kernel drivers) ضمن كل مجموعة تحكم (control set) في
SYSTEM. وتسمّي السجلات الملف التنفيذي/برنامج التشغيل أو ملف DLL الخاص بالخدمة، ووضع البدء، ونوع
الخدمة، والحساب، ومجموعة ترتيب التحميل، والبدء المؤجل، وسلوك معالجة الأخطاء، والإجراءات التي يتخذها
Windows بعد الفشل.
ينشئ المهاجمون الخدمات أو يعدّلونها لتحقيق الاستمرارية، وتصعيد الامتيازات، وتحميل برامج التشغيل، والحركة الجانبية. وتستخدم البرامج المشروعة الآلية نفسها تمامًا، لذا فإن المسارات والحسابات والتوقيع وسياق الإنشاء وأدلة وقت التشغيل كلها مهمة.
أفضل استنتاج: كوّنت مجموعة التحكم التي جرى تحليلها الخدمة/برنامج التشغيل كما هو موضح. ولا يثبت التكوين وحده أن الخدمة بدأت بنجاح.
الموقع¶
اجمع SYSTEM مع سجلات المعاملات الخاصة به. يمكن لمعرّفات أحداث مثل System 7045 وSecurity 4697 أن
تسجل التثبيت؛ ويمكن لأحداث التحكم في الخدمات والعمليات أن تدعم استنتاج البدء/التنفيذ الفعلي.
تحذيرات للمحلل¶
- قد يحتوي
ImagePathعلى متغيرات بيئة، أو علامات اقتباس، أو وسيطات، أو مسارات أجهزة، أو مسار غير محاط بعلامات اقتباس يتضمن مسافات. احتفظ به كما هو تمامًا قبل توحيد صيغته. - يُعد
ServiceDllحاسم الأهمية للخدمات المستضافة فيsvchost.exe؛ إذ قد لا يسمّيImagePathوحده سوى المضيف. - لا يثبت
StartType=automaticأن الخدمة بدأت أو ظلت مفعّلة. ObjectNameهو الحساب المكوَّن، وليس بالضرورة المستخدم الذي ثبّت الخدمة.- تستخدم برامج التشغيل وخدمات وضع المستخدم علامات
ServiceTypeواصطلاحات مسارات مختلفة. - يمكن لإجراءات الفشل أن تنفذ أمرًا بحساب الخدمة بعد حدوث فشل؛ وهذا سطح استمرارية يسهل إغفاله.
- قد تحتفظ مجموعات التحكم الأخرى بتكوين سابق؛ استخدم
IsCurrentControlSet.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry services <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SYSTEM hives
-f, --file <FILE> Parse one SYSTEM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--service <NAME> Only this service name
--all-control-sets Parse every ControlSet00N
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry services -f SYSTEM -o services.csv
juntei parse-registry services -f SYSTEM --all-control-sets -t jsonl \
| jq 'select(.FailureCommand != null or (.ImagePath? | test("temp|public"; "i")))'
حقول الإخراج¶
| الحقل | التفسير |
|---|---|
Host، SourcePath |
هوية النظام والخلية المُدخلة. احتفظ بهما عبر عمليات الجمع. |
ControlSet، IsCurrentControlSet |
مجموعة التحكم المصدر، وما إذا كان Select\Current يسمّيها. فضّل المجموعة الحالية عند استنتاج الحالة النشطة. |
ServiceName |
اسم مفتاح سجل Windows/الاسم الداخلي للخدمة. نقطة محورية قوية للانتقال إلى الأحداث وأوامر مدير التحكم في الخدمات (Service Control Manager). |
DisplayName، Description |
نص موجّه للمستخدم؛ وقد يكون مراجع إلى موارد أو نصًا يتحكم فيه المهاجم. |
ImagePath |
أمر الملف التنفيذي/برنامج التشغيل كما هو مكوَّن. حلّل علامات الاقتباس والوسيطات ومتغيرات البيئة ومسارات الأجهزة. |
ServiceDLL |
ملف DLL الذي تحمّله خدمة مضيفة. وكثيرًا ما يكون الحمولة الفعلية للخدمات ذات العمليات المشتركة. |
StartType، StartValue |
وضع البدء بصيغته المقروءة/الخام: boot (0)، وsystem (1)، وautomatic (2)، وmanual (3)، وdisabled (4). |
DelayedAutostart |
تبدأ الخدمة التلقائية بعد مرحلة الإقلاع الأولى؛ ولا تزال قادرة على تحقيق الاستمرارية. |
ServiceType، TypeValue |
العلامات بصيغتها المفكوكة/الخام: برنامج تشغيل نواة، أو برنامج تشغيل نظام ملفات، أو عملية خاصة/مشتركة، أو خدمة مستخدم، وغير ذلك. |
ErrorControl |
مستوى معالجة أخطاء الإقلاع/البدء. سياق تشغيلي في المقام الأول. |
ObjectName |
حساب الخدمة المكوَّن أو اسم كائن برنامج التشغيل. وليس هوية من قام بالتثبيت. |
Group |
مجموعة ترتيب التحميل، وهي مهمة خاصةً لبرامج تشغيل الإقلاع/النظام. |
FailureResetPeriod |
عدد الثواني قبل إعادة تعيين عدّاد مرات الفشل؛ وتعني 4294967295 عدم إعادة التعيين أبدًا. |
FailureCommand |
الأمر المكوَّن لإجراء الفشل run_command. حقل استمرارية عالي القيمة. |
FailureActions |
قائمة الإجراءات الكاملة بعد فك ترميزها (restart، reboot، run_command، none) مع فترات التأخير. |
FailureActionType، FailureActionDelayMs |
الإجراء الأول مسطحًا لأغراض التصفية؛ افحص القائمة الكاملة أيضًا. |
FailureActionsRaw |
البايتات الأصلية عندما يكون فك الترميز غير مكتمل أو تالفًا. |
KeyLastWrittenUTC |
آخر تغيير على مفتاح الخدمة، وليس بالضرورة وقت التثبيت/البدء. |
TransactionLogStatus، LogsApplied |
سياق إعادة تطبيق سجلات سجل Windows. |
Problems |
عدم تطابق النوع، أو بنية فشل تالفة، أو حقول مفقودة/غير قابلة للقراءة. |
استراتيجية التحقيق¶
- راجع المسارات غير القياسية، والمجلدات القابلة للكتابة، والحسابات غير المعتادة، وأوقات المفاتيح الجديدة، وأوامر الفشل.
- وسّع متغيرات البيئة باستخدام تكوين المضيف المتأثر، لا جهاز المحلل.
- احسب التجزئة وتحقق من التوقيع للملف التنفيذي أو ملف DLL الفعلي إن جُمع.
- اربط اسم الخدمة/مسارها مع الأحداث 7045/4697، وإنشاء العمليات، وPrefetch، و
$MFT، وUSN. - قارن مجموعات التحكم الحالية وغير الحالية بحثًا عن آليات استمرارية مُغيَّرة/محذوفة.