Встановлені програми¶
Що зберігає Windows¶
Windows та інсталятори записують встановлене програмне забезпечення в кількох списках реєстру. Кожен список має один ключ на програму, продукт, дистрибутив або пакет; Juntei формує один запис на ключ.
| Джерело | Кущ і ключ | Що містить |
|---|---|---|
uninstall |
SOFTWARE і NTUSER.DAT …\CurrentVersion\Uninstall\*, а також SOFTWARE\Wow6432Node\… |
Те, що перелічують «Параметри» та Програми та засоби: назва, версія, видавець, дата встановлення, папки, команди видалення, розмір, чи приховано запис |
msi_product |
SOFTWARE\Classes\Installer\Products\*, NTUSER.DAT Software\Microsoft\Installer\Products\* |
Продукти Windows Installer: назва та версія продукту, ім'я файлу пакета та папка, з якої його встановлено |
app_path |
SOFTWARE і NTUSER.DAT …\CurrentVersion\App Paths\* |
Програми, які Windows запускає за назвою (Win+R, start tool): шлях до програми та її папка |
wsl |
NTUSER.DAT …\CurrentVersion\Lxss\{GUID} |
Дистрибутиви підсистеми Windows для Linux (WSL): назва, де розташовані її файли або диск, WSL 1 чи 2 |
package |
SOFTWARE …\Appx\AppxAllUserStore |
Пакетні програми (Store): підготовлені для всіх користувачів, власні програми Windows, проміжні (staged), скасовані (deprovisioned) та програми кожного користувача |
Найобґрунтованіший висновок: цю програму, продукт або пакет було встановлено (або зареєстровано) в системі для всіх користувачів або для цього користувача. Дата встановлення — це те, що записав інсталятор; останній запис ключа — момент останньої зміни запису.
Розташування¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows\CurrentVersion\Uninstall\<name or {ProductCode}>
Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\<…> 32-bit programs
Classes\Installer\Products\<packed product code>[\SourceList]
Microsoft\Windows\CurrentVersion\App Paths\<program.exe>
Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\{Applications,InboxApplications,Staged,Deprovisioned,<SID>,EndOfLife\<SID>}\<package>
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Uninstall\<…>
Software\Microsoft\Installer\Products\<packed product code>
Software\Microsoft\Windows\CurrentVersion\App Paths\<program.exe>
Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}
Збирайте SOFTWARE, кожен NTUSER.DAT та їхні журнали транзакцій. SYSTEM містить назву хоста, а
ProfileList у SOFTWARE дає SID кожного користувача.
Застереження для аналітика¶
- Дата встановлення та час ключа.
InstallDate— це дата (без часу), записана інсталятором, у місцевому часі; деякі інсталятори її не записують, а деякі записують в іншому форматі (зберігається в записаному вигляді вInstallDateRaw). Оновлення може перезаписати запис, не змінивши дати, або змінити дату, майже не змінивши програми: порівнюйтеInstallDateзKeyLastWrittenUTC. - Видалене програмне забезпечення. Програма, яку коректно видалено, втрачає свої ключі. Використовуйте
parse-registry read --recover-deletedдля видалених ключівUninstall, а також Amcache, Prefetch і$MFTдля слідів, що залишилися. - Реєстрації для окремих користувачів. Записи
NTUSER.DATвизначають програмне забезпечення, зареєстроване для профілю. Ця область не встановлює, хто запускав інсталятор і чи використовувалися права адміністратора. - Приховані записи.
SystemComponentприховує запис у Програми та засоби; записи безDisplayName(оновлення, компоненти) також не відображаються. Усі вони наводяться у виводі. - Коди продуктів. Ключ
Uninstallу формі GUID можна зіставити з упакованим ключемmsi_productчерезProductCode. Сама лише назва у формі GUID не доводить, що запис створив Windows Installer. - App Paths. Це реєстрації, які використовуються для пошуку програм, а не записи
про виконання. Значення
Pathможе містити кілька каталогів пошуку і не обов'язково є каталогом встановлення. - Видавець. Це метадані реєстру, надані інсталятором, а не перевірені відомості про підпис.
- Архітектура.
Wow6432Nodeмістить 32-бітні програми в 64-бітній Windows (Architecturex86,Wow64True); інші записи мають власну архітектуру системи (порожнє значення). Архітектура пакета є його власною (x64,neutral, …). - WSL.
Version— це версія WSL зFlagsдистрибутива (0x8: він працює у віртуальній машині WSL 2). Власне значенняVersionдистрибутива (уDetails) — це версія його файлової системи, яка дорівнює 2 і в дистрибутивах WSL 1.BasePathмістить йогоext4.vhdx(WSL 2) абоrootfs(WSL 1): зберіть його, щоб дослідити вміст. - Пакети. Списки
<SID>— це пакети, зареєстровані для кожного користувача; більшість із них — власні пакети Windows. ПакетиDeprovisionedбуло видалено для нових користувачів, пакетиEndOfLife\<SID>— для цього користувача. - Пошкоджені значення. Некоректні числа, неправильні типи значень і некоректний UTF-16 вказуються в
Problemsі зберігаються вDataRaw, зокрема порожній шістнадцятковий рядок для наявного значення з нульовою кількістю байтів. Чистий порожній рядок у необов'язковому числовому полі вважається відсутнім значенням. Версія пакета має містити чотири десяткові компоненти, кожен у межах діапазону 16-бітного числа без знака. Попередження на рівні куща виводяться в stderr, коли-tпередає записи потоком у stdout.
Аналіз за допомогою Juntei¶
Usage: juntei parse-registry installed-programs <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 installed-programs -d evidence/ -o installed.csv
juntei parse-registry installed-programs -d evidence/ -t jsonl \
| jq 'select(.Scope == "user" and .Source != "package")'
Підсумок перелічує програми, встановлені останніми (за InstallDate), те, що користувачі встановили
для себе, і дистрибутиви WSL.
Поля виводу¶
| Поле | Інтерпретація |
|---|---|
Host, SourcePath, HiveType |
Хост, файл куща та SOFTWARE або NTUSER.DAT. |
User, UserSID |
Користувач куща користувача (його папка профілю та SID з ProfileList) або користувач, для якого вказано пакет. |
Source, Scope |
Список (uninstall, msi_product, app_path, wsl, package) і machine або user. |
Name, Version, Publisher |
DisplayName, DisplayVersion, Publisher; ProductName і Version продукту; ім'я файлу програми з App Path; назва дистрибутива та версія WSL; назва та версія пакета. |
InstallDate, InstallDateRaw |
InstallDate як дата, якщо записано у форматі YYYYMMDD; інакше — у записаному вигляді. |
KeyLastWrittenUTC |
Коли ключ запису востаннє змінювався. |
InstallLocation, InstallSource |
InstallLocation (Path з App Path, BasePath дистрибутива, Path пакета); InstallSource (остання використана папка-джерело продукту). |
Program |
Програма з App Path. |
UninstallCommand, QuietUninstallCommand |
UninstallString, QuietUninstallString. |
SizeKB, SystemComponent, WindowsInstaller |
EstimatedSize у KiB; чи приховано запис; чи встановив його Windows Installer. |
ProductCode |
Код продукту Windows Installer ({GUID}). |
Architecture, WOW64 |
x86 у Wow6432Node або архітектура пакета; чи розташований ключ у Wow6432Node. |
Details |
Додатково: DisplayIcon, ModifyPath, ParentKeyName, ReleaseType, Inno Setup: User (обліковий запис, який запускав інсталятор Inno Setup); PackageCode, PackageName продукту; Flags, State, DefaultUid, Version, PackageFamilyName, Default дистрибутива; List, ResourceId, PublisherId пакета. |
KeyPath |
Ключ запису. |
DataRaw |
Байти (у шістнадцятковому вигляді) значень, які не відповідають тому, що вказують їхні назви. |
TransactionLogStatus, LogsApplied |
Контекст відновлення реєстру. |
Problems |
Значення, які не вдалося прочитати або які не відповідають тому, що вказують їхні назви. |
Стратегія розслідування¶
- Відсортуйте за
InstallDateіKeyLastWrittenUTCнавколо часу інциденту; перевірте засоби віддаленого доступу, тунелювання та клієнти передавання файлів, архіватори, середовища виконання скриптів і засоби безпеки. - Перегляньте записи зі
Scopeuser: програмне забезпечення, встановлене без прав адміністратора. - Перевірте
InstallLocation,InstallSourceіUninstallCommandна наявність папок, доступних користувачу для запису (Downloads,AppData,Temp,ProgramData). - Шукайте дистрибутиви WSL і збирайте їхні
BasePath. - Зіставляйте з Amcache і Prefetch (запуск інсталятора та програми),
$MFT(створення папки встановлення) і журналом подій Application (події MsiInstaller).