Installierte Programme¶
Was Windows aufbewahrt¶
Windows und Installationsprogramme zeichnen installierte Software in mehreren Registry-Listen auf. Jede Liste hat einen Schlüssel pro Programm, Produkt, Distribution oder Paket; Juntei gibt einen Datensatz pro Schlüssel aus.
| Quelle | Hive und Schlüssel | Was sie enthält |
|---|---|---|
uninstall |
SOFTWARE und NTUSER.DAT …\CurrentVersion\Uninstall\* sowie SOFTWARE\Wow6432Node\… |
Was die Einstellungen und Programme und Features auflisten: Name, Version, Herausgeber, Installationsdatum, Ordner, Deinstallationsbefehle, Größe, ob der Eintrag ausgeblendet ist |
msi_product |
SOFTWARE\Classes\Installer\Products\*, NTUSER.DAT Software\Microsoft\Installer\Products\* |
Windows Installer-Produkte: Produktname und Version, Dateiname des Pakets und der Ordner, aus dem es installiert wurde |
app_path |
SOFTWARE und NTUSER.DAT …\CurrentVersion\App Paths\* |
Programme, die Windows über ihren Namen startet (Win+R, start tool): Pfad des Programms und sein Ordner |
wsl |
NTUSER.DAT …\CurrentVersion\Lxss\{GUID} |
Distributionen des Windows-Subsystems für Linux: Name, Speicherort ihrer Dateien oder ihres Datenträgers, WSL 1 oder 2 |
package |
SOFTWARE …\Appx\AppxAllUserStore |
Paketierte (Store-)Apps: für alle Benutzer bereitgestellt, Windows-eigene, bereitgestellte (staged), deprovisionierte und die jedes einzelnen Benutzers |
Bestmögliche Schlussfolgerung: Dieses Programm, Produkt oder Paket wurde auf dem System für alle Benutzer oder für diesen Benutzer installiert (oder registriert). Das Installationsdatum ist das, was das Installationsprogramm geschrieben hat; der letzte Schreibzugriff auf den Schlüssel ist der Zeitpunkt der letzten Änderung des Eintrags.
Speicherort¶
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}
Sichern Sie SOFTWARE, jede NTUSER.DAT und deren Transaktionsprotokolle. SYSTEM benennt den Host, und
die ProfileList in SOFTWARE liefert die SID jedes Benutzers.
Hinweise für die Analyse¶
- Installationsdatum und Schlüsselzeit.
InstallDateist ein vom Installationsprogramm geschriebenes Datum (ohne Uhrzeit) in lokaler Zeit; manche Installationsprogramme schreiben es nicht, andere in einem anderen Format (wie geschrieben inInstallDateRawbeibehalten). Ein Update kann den Eintrag neu schreiben, ohne das Datum zu ändern, oder das Datum ändern, ohne dass sich das Programm wesentlich ändert: Vergleichen SieInstallDatemitKeyLastWrittenUTC. - Deinstallierte Software. Ein sauber entferntes Programm verliert seine Schlüssel. Verwenden Sie
parse-registry read --recover-deletedfür gelöschteUninstall-Schlüssel sowie Amcache, Prefetch und die$MFTfür zurückgebliebene Spuren. - Benutzerbezogene Registrierungen. Einträge in
NTUSER.DATkennzeichnen Software, die für ein Profil registriert ist. Dieser Geltungsbereich belegt nicht, wer das Installationsprogramm ausgeführt hat oder ob Administratorrechte verwendet wurden. - Ausgeblendete Einträge.
SystemComponentblendet einen Eintrag in Programme und Features aus; Einträge ohneDisplayName(Updates, Komponenten) werden ebenfalls nicht angezeigt. Sie alle werden gemeldet. - Produktcodes. Ein
Uninstall-Schlüssel in GUID-Form kann überProductCodeeinem gepacktenmsi_product-Schlüssel zugeordnet werden. Der Name in GUID-Form allein beweist nicht, dass Windows Installer den Eintrag erstellt hat. - App Paths. Dies sind Registrierungen zum Auffinden von Programmen, keine Ausführungsdatensätze.
Der Wert
Pathkann mehrere Suchverzeichnisse enthalten und ist nicht notwendigerweise das Installationsverzeichnis. - Herausgeber. Dies sind vom Installationsprogramm gelieferte Registry-Metadaten, keine geprüften Signaturinformationen.
- Architektur.
Wow6432Nodeenthält 32-Bit-Programme unter 64-Bit-Windows (Architecturex86,Wow64True); andere Einträge haben die eigene Architektur des Systems (leer). Die Architektur eines Pakets ist seine eigene (x64,neutral, …). - WSL.
Versionist die WSL-Version aus denFlagsder Distribution (0x8: Sie läuft in der virtuellen Maschine von WSL 2). Der eigeneVersion-Wert der Distribution (inDetails) ist die Version ihres Dateisystems, auch bei WSL-1-Distributionen 2.BasePathenthält ihreext4.vhdx(WSL 2) bzw.rootfs(WSL 1): Sichern Sie diese, um hineinzusehen. - Pakete. Die
<SID>-Listen sind die für jeden Benutzer registrierten Pakete; die meisten gehören zu Windows selbst.Deprovisioned-Pakete wurden für neue Benutzer entfernt,EndOfLife\<SID>-Pakete für den jeweiligen Benutzer. - Beschädigte Werte. Fehlerhafte Zahlen, falsche Werttypen und ungültiges UTF-16 werden in
Problemsgemeldet und inDataRawbeibehalten, einschließlich einer leeren Hex-Zeichenfolge für einen vorhandenen Wert mit null Bytes. Eine saubere leere Zeichenfolge in einem optionalen numerischen Feld wird als fehlend behandelt. Eine Paketversion muss aus vier Dezimalkomponenten bestehen, jede im Bereich vorzeichenloser 16-Bit-Werte. Warnungen auf Hive-Ebene bleiben auf stderr, wenn-tDatensätze nach stdout streamt.
Mit Juntei parsen¶
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")'
Die Zusammenfassung listet die zuletzt installierten Programme (nach InstallDate), die Software, die Benutzer für
sich selbst installiert haben, und die WSL-Distributionen auf.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, SourcePath, HiveType |
Host, Hive-Datei und SOFTWARE oder NTUSER.DAT. |
User, UserSID |
Benutzer eines Benutzer-Hives (sein Profilordner und die SID aus ProfileList) oder der Benutzer, für den ein Paket aufgeführt ist. |
Source, Scope |
Die Liste (uninstall, msi_product, app_path, wsl, package) und machine oder user. |
Name, Version, Publisher |
DisplayName, DisplayVersion, Publisher; ProductName und Version eines Produkts; Programmdateiname eines App-Path-Eintrags; Name und WSL-Version einer Distribution; Name und Version eines Pakets. |
InstallDate, InstallDateRaw |
InstallDate als Datum, wenn es als YYYYMMDD geschrieben ist; andernfalls wie geschrieben. |
KeyLastWrittenUTC |
Wann der Schlüssel des Eintrags zuletzt geändert wurde. |
InstallLocation, InstallSource |
InstallLocation (Path eines App-Path-Eintrags, BasePath einer Distribution, Path eines Pakets); InstallSource (zuletzt verwendeter Quellordner eines Produkts). |
Program |
Das Programm eines App-Path-Eintrags. |
UninstallCommand, QuietUninstallCommand |
UninstallString, QuietUninstallString. |
SizeKB, SystemComponent, WindowsInstaller |
EstimatedSize in KiB; ob der Eintrag ausgeblendet ist; ob Windows Installer die Software installiert hat. |
ProductCode |
Der Windows Installer-Produktcode ({GUID}). |
Architecture, WOW64 |
x86 unter Wow6432Node oder die Architektur eines Pakets; ob der Schlüssel unter Wow6432Node liegt. |
Details |
Weiteres: DisplayIcon, ModifyPath, ParentKeyName, ReleaseType, Inno Setup: User (das Konto, das ein Inno-Setup-Installationsprogramm ausgeführt hat); PackageCode, PackageName eines Produkts; Flags, State, DefaultUid, Version, PackageFamilyName, Default einer Distribution; List, ResourceId, PublisherId eines Pakets. |
KeyPath |
Der Schlüssel des Eintrags. |
DataRaw |
Die Bytes (hex) von Werten, die nicht dem entsprechen, was ihre Namen besagen. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Werte, die nicht gelesen werden konnten oder nicht dem entsprechen, was ihre Namen besagen. |
Untersuchungsstrategie¶
- Sortieren Sie rund um den Vorfall nach
InstallDateundKeyLastWrittenUTC; achten Sie auf Fernzugriffswerkzeuge, Tunneling- und Dateiübertragungsclients, Archivierungsprogramme, Skript-Laufzeitumgebungen und Sicherheitswerkzeuge. - Prüfen Sie Datensätze mit
Scopeuser: Software, die ohne Administratorrechte installiert wurde. - Prüfen Sie
InstallLocation,InstallSourceundUninstallCommandauf für Benutzer beschreibbare Ordner (Downloads,AppData,Temp,ProgramData). - Suchen Sie nach WSL-Distributionen und sichern Sie deren
BasePath. - Korrelieren Sie mit Amcache und Prefetch (Ausführung des Installationsprogramms und des Programms), der
$MFT(Erstellung des Installationsordners) und dem Anwendungsereignisprotokoll (MsiInstaller-Ereignisse).