توافق التطبيقات¶
ما الذي يحتفظ به Windows¶
إلى جانب ShimCache (parse-registry shimcache) وAmcache (parse-registry amcache)، تحتفظ ميزات
توافق التطبيقات في Windows بما يلي تحت
Microsoft\Windows NT\CurrentVersion\AppCompatFlags:
| المصدر | الخلية والمفتاح | ما الذي يُظهره |
|---|---|---|
layers |
SOFTWARE (وWow6432Node) وNTUSER.DAT Layers |
البرامج المضبوطة للعمل بطبقات توافق: RUNASADMIN (دائمًا بصفة مسؤول)، WIN7RTM، HIGHDPIAWARE، … |
pca_store |
NTUSER.DAT Compatibility Assistant\Store (Windows 8 والإصدارات الأحدث) |
البرامج التي رأى Program Compatibility Assistant المستخدمَ يشغّلها |
pca_persisted |
NTUSER.DAT Compatibility Assistant\Persisted (Windows 7) |
الأمر نفسه، على Windows 7 |
cit_module |
SOFTWARE CIT\Module\<module> |
البرامج التي حمّلت وحدة (module) متتبَّعة، ومتى فعلت ذلك آخر مرة |
cit_system |
SOFTWARE CIT\System (من Windows 7 حتى الإصدارات الأولى من Windows 10) |
مسارات البرامج وأسطر الأوامر في قواعد بيانات CIT المضغوطة |
installed_sdb |
SOFTWARE InstalledSDB\{GUID} |
قواعد بيانات shim المخصصة المثبتة باستخدام sdbinst: الملف، والوصف، ووقت التثبيت |
custom_sdb |
SOFTWARE Custom\<program> |
قواعد بيانات shim المخصصة المطبقة على كل برنامج، مع أوقات تثبيتها |
أفضل استنتاج: الطبقات وقواعد بيانات shim تكوينٌ يغيّر طريقة تشغيل البرنامج؛ أما إدخالات Program Compatibility Assistant وCIT فتُظهر أن برنامجًا قد عمل (أو حمّل وحدة) بصفة هذا المستخدم أو على هذا النظام.
تُعد قواعد بيانات shim المخصصة تقنيةً للاستمرارية والحقن (MITRE ATT&CK T1546.011): إذ يمكن لـ shim أن يحمّل ملف DLL داخل برنامج أو أن يبدأ برنامجًا آخر كلما عمل البرنامج.
الموقع¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers <program> = <layers>
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\Module\<module> <program> = FILETIME
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\System <id> = compressed database
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB\{GUID} DatabasePath, …
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom\<program.exe> {GUID}.sdb = FILETIME
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
اجمع SOFTWARE، وكل ملفات NTUSER.DAT وسجلات المعاملات الخاصة بها، وملفات .sdb التي يسمّيها مسار
قاعدة بيانات shim (عادةً C:\Windows\AppPatch\Custom\).
تحذيرات للمحلل¶
-
توسيع CIT محدود. القيم التي تعلن حجمًا غير مضغوط يتجاوز 64 MiB يُحتفظ بها بايتاتٍ خامًا مع رسالة تشخيصية. ويُبلَّغ عن الضغط المشوّه وحالات عدم تطابق الحجم.
-
لا يوجد وقت تشغيل لإدخالات Program Compatibility Assistant. تحتوي بيانات
Store(SACP، المحفوظة فيDataRaw) على وقت واحد، لكنه في Windows 8.1 و10 و11 هو نفسه لكل برامج الخلية، وكذلك في الأنظمة الأخرى: إنه ليس وقت تشغيل البرنامج. ولا يؤرّخ أحدث تغيير إلا وقت آخر كتابة لمفتاحStore. - البرامج الموجودة على وسائط قابلة للإزالة تُسمّى
SIGN.MEDIA=<id> <path>: Pathهو المسار على الوسيط، وDetailsيحتوي على معرّف الوسيط. - قواعد بيانات CIT مضغوطة بخوارزمية LZNT1 وبنيتها غير موثقة علنًا: يسرد Juntei مسارات البرامج وأسطر الأوامر الموجودة في كل منها، مرة واحدة لكل قاعدة بيانات، دون أعداد أو أوقات. وسطر الأوامر سجلٌ مستقل بذاته، غير مرتبط ببرنامجه. ولا يحتفظ Windows 10 والإصدارات الأحدث إلا بالقليل هنا.
- قواعد بيانات shim. افحص كل سجل
custom_sdbوinstalled_sdb: نادرًا ما تثبّت البرمجيات المشروعة واحدة منها. ويوضح ملف.sdbنفسه ما يفعله shim. - الطبقات التي يضبطها مستخدم لا تنطبق إلا على ذلك المستخدم؛ أما طبقات
SOFTWAREفتنطبق على الجميع. ويجعلRUNASADMINالبرنامج يطلب رفع الامتيازات في كل مرة.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry app-compat <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE and NTUSER.DAT hives
-f, --file <FILE> Parse one SOFTWARE or NTUSER.DAT hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry app-compat -d evidence/ -o appcompat.csv
juntei parse-registry app-compat -d evidence/ -t jsonl \
| jq 'select(.Source == "installed_sdb" or .Source == "custom_sdb")'
يسرد الملخص قواعد بيانات shim المخصصة، والبرامج ذات الطبقات، وآخر استخدامات وحدات CIT.
حقول الإخراج¶
| الحقل | التفسير |
|---|---|
Host، SourcePath، HiveType |
المضيف، وملف الخلية، وSOFTWARE أو NTUSER.DAT. |
User، UserSID |
اسم مجلد ملف التعريف لخلية المستخدم، ومعرّف SID الخاص به من ProfileList في النظام. |
Source، Scope |
layers، pca_store، pca_persisted، cit_module، cit_system، installed_sdb، custom_sdb؛ machine أو user. |
Path |
البرنامج (اسم القيمة)، أو مسار أو سطر أوامر في قاعدة بيانات CIT، أو البرنامج الذي تنطبق عليه قاعدة بيانات shim. |
Layers |
طبقات التوافق كما هي مكتوبة (~ RUNASADMIN). |
LastSeenUTC |
آخر مرة حمّل فيها برنامج وحدة CIT. |
SdbGUID، SdbPath، SdbInstalledUTC |
معرّف GUID لقاعدة بيانات shim، وملفها، ووقت تثبيتها. |
Details |
اسم وحدة CIT، أو اسم قيمة قاعدة بيانات CIT، أو معرّف الوسيط القابل للإزالة لبرنامج (SignMedia)، أو DatabaseDescription وDatabaseType لقاعدة بيانات shim. |
KeyPath، KeyLastWrittenUTC، ValueName، WOW64 |
مصدر السجل، ووقت آخر تغيير لذلك المفتاح، وما إذا كان تحت Wow6432Node. |
DataRaw |
بيانات SACP لقيمة Store، أو البيانات التي ليست على النحو المتوقع (بالنظام الست عشري). |
TransactionLogStatus، LogsApplied |
سياق استرداد سجل Windows. |
Problems |
البيانات التي تعذّر فك ترميزها أو قراءتها. |
استراتيجية التحقيق¶
- راجع كل قاعدة بيانات shim مخصصة: ملف
.sdbالخاص بها، ووقت تثبيتها، والبرامج التي تنطبق عليها؛ واربطها بـsdbinst.exeفي Prefetch وAmcache وأحداث إنشاء العمليات. - ابحث عن البرامج الموجودة في مجلدات قابلة للكتابة من قِبل المستخدم ضمن إدخالات Program Compatibility Assistant، وعن البرامج الواردة من وسائط قابلة للإزالة.
- افحص
RUNASADMINوالطبقات الأخرى على البرامج غير المعتادة. - اربط النتائج بـ ShimCache وAmcache وBAM وPrefetch وUserAssist لتحديد أوقات التنفيذ.