BAM / DAM¶
ما هما BAM وDAM¶
إن Background Activity Moderator (BAM) وDesktop Activity Moderator (DAM) خدمتان من خدمات Windows
(في Windows 10 1709 والإصدارات الأحدث) تديران ما يُسمح للتطبيقات بفعله في الخلفية. وتحتفظان، لكل
مستخدم، بآخر وقت شُغّل فيه كل برنامج، في خلية SYSTEM:
- مفتاح واحد لكل مستخدم، يحمل اسم معرّف SID الخاص بالمستخدم؛
- قيمة واحدة لكل برنامج: اسمها هو مسار البرنامج على جهازه
(
\Device\HarddiskVolume3\Windows\System32\cmd.exe) أو معرّف تطبيق محزَّم (Microsoft.WindowsCalculator_8wekyb3d8bbwe)؛ - أول 8 بايتات من بيانات القيمة هي آخر وقت شُغّل فيه البرنامج (FILETIME).
يربط BAM البرنامج بمستخدم وبوقت دون الحاجة إلى خلية المستخدم نفسه، ويسرد البرامج التي شُغّلت من الأجهزة القابلة للإزالة والأجهزة الشبكية.
أفضل استنتاج: عملت عملية لهذا البرنامج في جلسة هذا المستخدم؛ وكان آخر تشغيل لها في هذا الوقت. لا يحصي BAM عدد مرات التشغيل، وقد يبقى الإدخال بعد حذف البرنامج.
الموقع¶
C:\Windows\System32\config\SYSTEM
ControlSet00N\Services\bam\State\UserSettings\<SID> Windows 10 1809 and later
ControlSet00N\Services\bam\UserSettings\<SID> Windows 10 1709 to 1803
ControlSet00N\Services\dam\State\UserSettings\<SID>
ControlSet00N\Services\dam\UserSettings\<SID>
يحتوي مفتاح كل مستخدم أيضًا على القيمتين Version وSequenceNumber؛ وهما ليستا برنامجين وتُستبعدان.
وقد يحتوي نظام تمت ترقيته من 1709 أو 1803 على كلا التخطيطين.
اجمع SYSTEM مع سجلات المعاملات الخاصة به، وخليتي SAM وSOFTWARE الخاصتين بالنظام: فهما تحددان
أسماء المستخدمين.
تحذيرات للمحلل¶
- وقت واحد لكل برنامج ومستخدم. لا يُحتفظ إلا بآخر تشغيل. وتوفر Prefetch وAmcache وسجلات الأحداث مرات التشغيل السابقة.
- النشاط الحديث. يُذكر أن إدخالات البرامج التي لم تُشغَّل منذ مدة تُزال عند بدء Windows، لذا يُظهر BAM في الغالب النشاط الحديث: فالبرنامج الغائب عنه ربما شُغّل قبل وقت طويل.
- مسارات أجهزة، لا أحرف محركات أقراص.
\Device\HarddiskVolume3هو المجلد (volume) الثالث الذي رقّمه Windows، وليسC:. يفصلDevicePathوPathالجهاز عن المسار عليه؛ طابق وحدة التخزين معMountedDevicesأو$MFTأو آثار رقمية أخرى قبل كتابة حرف محرك أقراص. - ليس كل برنامج. يتتبع BAM وDAM البرامج في جلسات المستخدمين؛ ولا تظهر الخدمات في الغالب. إدخالات
S-1-5-18هي عادةً عمليات الإعداد وشاشة تسجيل الدخول (FirstLogonAnim.exe)، وإدخالاتS-1-5-90-0-<n>هي Desktop Window Manager (DWM-<n>). - مجموعات التحكم. افتراضيًا تُقرأ مجموعة التحكم التي استخدمها Windows آخر مرة. ويقرأ
--all-control-setsكل المجموعات: فقد تحتفظ مجموعة تحكم أقدم بإدخال لم يعد موجودًا في المجموعة الحالية. - أسماء المستخدمين. يأتي اسم الحساب المحلي من
SAM(معرّف SID الخاص بالحاسوب ومعرّف RID الخاص بالحساب)؛ ويأتي اسم حساب المجال من مجلد ملف تعريفه فيProfileList. ويبيّنUserSourceالمصدر (sam،profile_list،well_known). ودونهما لا يُعطى سوى معرّف SID. ويبقى معرّف RID الذي لم يعد موجودًا فيSAM(حساب محذوف) دون اسم.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry bam <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:
--all-control-sets Every control set, not only the one in use
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry bam -d evidence/ -o bam.csv
juntei parse-registry bam -f SYSTEM -t jsonl \
| jq 'select(.Path? // "" | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
يسرد الملخص كل مستخدم مع معرّف SID واسمه وعدد إدخالاته، والبرامج التي شُغّلت أخيرًا (الأحدث أولًا).
حقول الإخراج¶
| الحقل | التفسير |
|---|---|
Host، SourcePath |
المضيف، وخلية SYSTEM. |
ControlSet، IsCurrentControlSet |
مجموعة التحكم التي يوجد فيها الإدخال، وما إذا كانت المجموعة التي استخدمها Windows آخر مرة. |
Moderator |
bam أو dam. |
UserSID، User، UserSource |
معرّف SID الذي يحمل المفتاح اسمه، واسم المستخدم، ومصدره (sam، profile_list، well_known). |
Program |
اسم القيمة كما كتبه Windows: مسار جهاز أو معرّف تطبيق محزَّم. |
DevicePath، Path |
بالنسبة لمسار جهاز، الجهاز (\Device\HarddiskVolume3) والمسار عليه (\Windows\System32\cmd.exe)؛ ويكونان فارغين للتطبيق المحزَّم. |
LastRunUTC |
وقت آخر تشغيل للبرنامج (بدقة 100 نانوثانية). |
KeyPath، KeyLastWrittenUTC |
مفتاح المستخدم ووقت آخر كتابة له: أحدث تحديث لأي من إدخالاته. |
DataRaw |
بايتات القيمة (بالنظام الست عشري)، عندما لا تحتوي على وقت: ليست REG_BINARY، أو أقل من 8 بايتات. |
TransactionLogStatus، LogsApplied |
سياق استرداد سجل Windows. |
Problems |
بيانات لا تحتوي على وقت، وقيم تتعذر قراءتها. |
استراتيجية التحقيق¶
- رتّب حسب
LastRunUTCوافحص البرامج الموجودة في أماكن قابلة للكتابة من قِبل المستخدم (\Users\،Downloads،Temp،ProgramData)، وعلى أجهزة غير وحدة تخزين النظام، وأدوات الإدارة والوصول عن بُعد. - تحقق من المستخدم الذي شغّلها، ومن الحسابات التي لا تطابق ملف تعريف حاليًا.
- اربط النتائج مع Prefetch (عدد مرات التشغيل والتشغيلات السابقة)، وUserAssist (التشغيل من Explorer)،
وAmcache وShimCache (الوجود)، و
$MFT(ملف البرنامج)، وسجلات الأحداث. - استخدم
--all-control-sets، وparse-registry read --recover-deletedلقيم BAM المحذوفة.
مزيد من التفاصيل¶
- libyal winreg-kb: Background activity moderator (BAM)
- Microsoft: معرّفات الأمان (معرّفات SID المعروفة)
- ys-registry-parser
تترك قيم FILETIME لآخر تشغيل الواقعة خارج النطاق الحقلَ LastRunUTC فارغًا وتحفظ القيمة الأصلية في
DataRaw، مع شرح في Problems. ويحدد ملخص النشاط الحديث كل مضيف ويُبقي ملاحظات الخلايا/المستخدمين
المنفصلة متمايزة.