MuiCache¶
Що таке MuiCache¶
Коли користувач запускає програму, Windows читає ресурси версії програми, щоб отримати назву, яку
має показувати оболонка (FileDescription, наприклад «Windows Command Processor» для
cmd.exe), і кешує її для кожного користувача в MuiCache. Windows 8 і новіші версії також кешують компанію
(CompanyName). Ключем кешу є повний шлях до програми:
- Windows 8 і новіші: два значення для кожної програми,
<path>.FriendlyAppNameі<path>.AppCompany. - Windows Vista і 7: одне значення для кожної програми,
<path>, що містить зрозумілу назву. - Windows XP: та сама форма, у
NTUSER.DAT.
MuiCache може давати зачіпки щодо виконання програм у сеансі оболонки користувача, зокрема програм на знімних дисках, мережевих спільних папках і в папках, яких уже не існує, з назвою та компанією, які вказав сам файл.
Найобґрунтованіший висновок: цей профіль оболонки кешував шлях, опис і компанію файлу. Зіставляйте це з іншими артефактами виконання. Профіль не визначає обліковий запис, від імені якого працював процес. MuiCache не має часу для кожної програми та лічильника запусків.
Розташування¶
C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat Windows Vista and later
Local Settings\Software\Microsoft\Windows\Shell\MuiCache
C:\Documents and Settings\<user>\NTUSER.DAT Windows XP
Software\Microsoft\Windows\ShellNoRoam\MUICache
LangID (мова кешованих рядків) не є програмою, тому його пропущено. Значення з назвами
@<file>,-<number> (@shell32.dll,-22019) — це рядки ресурсів, які оболонка кешувала для власних
меню та типів файлів, а не програми; їх пропущено й підраховано в підсумку. У Windows Vista
і новіших версіях NTUSER.DAT не містить MuiCache.
Збирайте UsrClass.dat (і NTUSER.DAT) разом із їхніми журналами транзакцій для кожного профілю, а також кущі
SYSTEM і SOFTWARE системи для імен хоста та користувачів.
Застереження для аналітика¶
- Власник профілю не обов'язково є обліковим записом процесу. Програма, запущена від імені іншого
облікового запису, може показати вікно в сеансі цього користувача й залишити метадані в його кеші.
UserіUserSidвизначають власника куща, а не контекст безпеки процесу. - Немає часу для кожної програми.
KeyLastWrittenUTC— це останній запис ключа: найновіша зміна будь-якої з його програм, а не момент запуску конкретної програми. Час дають Prefetch, BAM, UserAssist і журнали подій. - Не лише програми, які користувач запустив вручну. Може з'явитися DLL або програма, яку завантажила сама оболонка (для
Open with, розширення оболонки, дочірнього процесу інсталятора), як-отexplorerframe.dllабоshell32.dll. - Назва береться з файлу.
FriendlyAppNameіAppCompany— це те, що вказували ресурси версії файлу на момент запуску. Шкідливе ПЗ може заявити будь-який опис і компанію; перейменований інструмент зберігає свій початковий опис, що може його викрити (файл із назвоюsvchost.exe, зрозуміла назва якого вказує на засіб віддаленого доступу). - Один запис на шлях. Повторний запуск тієї самої програми не додає запису; копія за іншим шляхом — додає. Запис програми може залишатися після видалення файлу.
- Обидві форми для одного шляху. Якщо шлях має зрозумілу назву в обох формах (оновлений профіль), кожна отримує окремий запис, тож жодне значення не втрачається.
- Пошкоджені значення. Значення, яке не є рядком, не є коректним UTF-16 або не може бути прочитане повністю, зберігає
свої байти (
FriendlyAppNameRaw,AppCompanyRaw) і вказується вProblems. Некоректний UTF-16 також може давати символи заміни у відображуваному тексті; використовуйте стовпець з необробленими даними, щоб отримати вихідні байти.
Аналіз за допомогою Juntei¶
Usage: juntei parse-registry muicache <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find UsrClass.dat and NTUSER.DAT hives
-f, --file <FILE> Parse one UsrClass.dat or NTUSER.DAT
--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 muicache -d evidence/ -o muicache.csv
juntei parse-registry muicache -f UsrClass.dat -t jsonl \
| jq 'select(.Path | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
Підсумок перелічує програми поза папками Windows і Program Files (папки користувачів,
інші диски, мережеві спільні папки) разом із їхніми користувачами, а також кількість пропущених рядків ресурсів.
Папки Program Files з іншими назвами (у Windows іншими мовами) також перелічуються.
Відносні шляхи та шляхи, що виходять за межі папки зі змінної середовища, також залишаються в переліку. Звичайні
шляхи дисків перевіряються після обробки компонентів . і .. без звернення до файлової
системи комп'ютера аналітика.
Поля виводу¶
| Поле | Інтерпретація |
|---|---|
Host, User, UserSID, SourcePath |
Хост, назва папки профілю, SID користувача (його називає кореневий ключ UsrClass.dat; інакше — ProfileList системи) і кущ. |
HiveType |
UsrClass.dat або NTUSER.DAT. |
Path |
Шлях до програми: назва значення без .FriendlyAppName або .AppCompany. |
FriendlyAppName |
Опис програми з <path>.FriendlyAppName або <path>. |
AppCompany |
Компанія програми з <path>.AppCompany (Windows 8 і новіші). |
KeyPath, KeyLastWrittenUTC |
Ключ MuiCache та його останній запис: найновіша зміна будь-якої з його програм. |
FriendlyAppNameRaw, AppCompanyRaw |
Байти значення (у шістнадцятковому вигляді), якщо вони не є текстом, що коректно декодується. |
TransactionLogStatus, LogsApplied |
Контекст відновлення реєстру: replayed, якщо журнали записали одне зі значень програми. |
Problems |
Значення, які не є рядками, не є коректним UTF-16 або не можуть бути прочитані. |
Стратегія розслідування¶
- Перевірте програми в розташуваннях, доступних користувачу для запису (
\Users\,Downloads,Temp,ProgramData), на інших дисках і в мережевих спільних папках, а також засоби адміністрування, віддаленого доступу та архівування. - Порівняйте ім'я файлу з його зрозумілою назвою та компанією: невідповідність може викрити перейменований інструмент або файл, що маскується під інший.
- Зіставляйте з Prefetch, BAM і UserAssist (коли запускалася програма), Amcache і ShimCache (хеш і
наявність файлу) та
$MFT(чи файл досі існує). - Використовуйте
parse-registry read --recover-deletedдляUsrClass.dat, щоб знайти видалені значення MuiCache.