Сумісність програм¶
Що зберігає 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> |
Програми, які завантажували відстежуваний модуль, і коли вони востаннє це робили |
cit_system |
SOFTWARE CIT\System (від Windows 7 до ранніх версій Windows 10) |
Шляхи до програм і командні рядки в стиснених базах даних CIT |
installed_sdb |
SOFTWARE InstalledSDB\{GUID} |
Власні бази даних шимів, установлені за допомогою sdbinst: файл, опис, час встановлення |
custom_sdb |
SOFTWARE Custom\<program> |
Власні бази даних шимів, застосовані до кожної програми, з часом їх встановлення |
Найобґрунтованіший висновок: шари та бази даних шимів — це конфігурація, яка змінює спосіб роботи програми; записи помічника із сумісності програм і CIT показують, що програма запускалася (або завантажувала модуль) від імені цього користувача або в цій системі.
Власні бази даних шимів — це техніка закріплення та впровадження коду (MITRE ATT&CK T1546.011): шим може завантажувати 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, на які вказує шлях
бази даних шимів (зазвичай C:\Windows\AppPatch\Custom\).
Застереження для аналітика¶
-
Розпакування CIT обмежене. Значення, які заявляють понад 64 MiB у розпакованому вигляді, зберігаються як необроблені байти з діагностичним повідомленням. Повідомляється про некоректне стиснення та невідповідність розмірів.
-
Немає часу запуску для записів помічника із сумісності програм. Дані
Store(SACP, зберігаються вDataRaw) мають один час, але у Windows 8.1, 10 і 11 він однаковий для всіх програм куща, а також для інших систем: це не час запуску програми. Лише час останнього запису ключаStoreдатує найновішу зміну. - Програми на знімних носіях мають назви у форматі
SIGN.MEDIA=<id> <path>:Path— це шлях на носії, аDetailsмістить ідентифікатор носія. - Бази даних CIT стиснено за допомогою LZNT1, а їхня структура не задокументована публічно: Juntei перелічує шляхи до програм і командні рядки, знайдені в кожній із них, по одному разу на базу даних, без лічильників і часу. Командний рядок є окремим записом і не прив'язаний до своєї програми. Windows 10 і новіші версії зберігають тут небагато даних.
- Бази даних шимів. Перевіряйте кожен запис
custom_sdbіinstalled_sdb: легітимне програмне забезпечення рідко їх встановлює. Що саме робить шим, показує сам файл.sdb. - Шари, установлені користувачем, застосовуються лише до цього користувача; шари в
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")'
Підсумок перелічує власні бази даних шимів, програми із шарами та останні використання модулів 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 або програма, до якої застосовується база даних шимів. |
Layers |
Шари сумісності в записаному вигляді (~ RUNASADMIN). |
LastSeenUTC |
Коли програма востаннє завантажувала модуль CIT. |
SdbGUID, SdbPath, SdbInstalledUTC |
GUID, файл і час встановлення бази даних шимів. |
Details |
Назва модуля CIT, назва значення бази даних CIT, ідентифікатор знімного носія програми (SignMedia), DatabaseDescription і DatabaseType бази даних шимів. |
KeyPath, KeyLastWrittenUTC, ValueName, WOW64 |
Звідки походить запис, коли ключ востаннє змінювався і чи розташований він у Wow6432Node. |
DataRaw |
Дані SACP значення Store або дані, що не відповідають очікуваному (у шістнадцятковому вигляді). |
TransactionLogStatus, LogsApplied |
Контекст відновлення реєстру. |
Problems |
Дані, які не вдалося декодувати або прочитати. |
Стратегія розслідування¶
- Перевірте кожну власну базу даних шимів: її файл
.sdb, час встановлення та програми, до яких вона застосовується; зіставляйте зsdbinst.exeу Prefetch, Amcache і подіях створення процесів. - Шукайте серед записів помічника із сумісності програм програми в папках, доступних користувачу для запису, а також програми зі знімних носіїв.
- Перевіряйте
RUNASADMINта інші шари в незвичних програмах. - Для визначення часу виконання зіставляйте з ShimCache, Amcache, BAM, Prefetch і UserAssist.