keepass_dumper.py
Python-Port von vdohney/keepass-password-dumper
(CVE-2023-32784) – alle Anerkennung für die ursprüngliche C#-Implementierung und die
zugrunde liegende Technik gebührt vdohney.
Das Skript durchsucht einen Prozessspeicher-Dump nach den übrig gebliebenen Render-Strings, die
KeePass 2.x' SecureTextBoxEx hinterlässt, während der Benutzer das
Master-Passwort eingibt, und rekonstruiert jedes Zeichen dieses Passworts außer dem
ersten. Optional brute-forct es anschließend das unbekannte erste Zeichen
gegen eine KDBX-Datei mit keepassxc-cli.
Betroffene Versionen
- Verwundbar: KeePass 2.53.1 und früher (Windows und Linux).
- Behoben: KeePass 2.54 und neuer.
- KeePassXC, KeePass 1.x und Strongbox sind nicht betroffen.
Der Fehler liegt im benutzerdefinierten SecureTextBoxEx-Steuerelement: Für jedes eingegebene
Zeichen behält .NET einen Rest-String im verwalteten Speicher der Form
●a, ●●s, ●●●s, … zurück, aus dem jedes Passwortzeichen nach dem ersten
rekonstruiert werden kann.
Angriffsvoraussetzungen & Einschränkungen
- Erfordert ein Speicher-Artefakt des KeePass-Prozesses: einen Prozess-Dump, die
Auslagerungs-/Swap-Datei, eine Ruhezustandsdatei, einen Kernel-Crash-Dump oder eine vollständige RAM-
Erfassung. Keine Codeausführung auf dem Zielhost ist erforderlich.
- Funktioniert, ob der Arbeitsbereich gesperrt oder entsperrt ist, und sogar nachdem der
KeePass-Prozess beendet wurde (solange Speicherseiten irgendwo überleben).
- Das allererste Passwortzeichen ist aus dem Leck nicht rekonstruierbar.
- Das Leck erfasst druckbares ASCII zuverlässig; Nicht-ASCII-Zeichen sind
weniger zuverlässig.
- Mehrere in derselben Sitzung eingegebene Master-Passwörter können
überlappende Rest-Strings erzeugen und die Genauigkeit beeinträchtigen.
Abhilfe
Wenn Sie KeePass ≤ 2.53.1 verwendet haben, gehen Sie davon aus, dass das Master-Passwort kompromittiert ist:
- Aktualisieren Sie KeePass auf 2.54 oder neuer.
- Ändern Sie das Master-Passwort (und rotieren Sie alle hochwertigen Geheimnisse, die in
der Datenbank gespeichert sind und eingegeben wurden, während das alte Master-Passwort in Gebrauch war).
- Bereinigen Sie Speicher-Artefakte, die die Rest-Strings noch enthalten könnten:
- Löschen Sie Crash-Dumps (z. B.
C:\Windows\memory.dmp),
- Deaktivieren/Löschen Sie den Ruhezustand (
powercfg /h off unter Windows),
- Löschen oder überschreiben Sie die Auslagerungsdatei / Swap-Datei,
- Überschreiben Sie freien Speicherplatz (z. B.
cipher /w: unter Windows), damit die
Reste nicht aus zuvor zugewiesenen Sektoren extrahiert werden können,
- Starten Sie neu – oder, für Szenarien mit hoher Sicherheitsanforderung, installieren Sie das Betriebssystem neu.
Anforderungen
- Python 3.10+ (nur Standardbibliothek – keine Drittanbieter-Pakete)
keepassxc-cli in $PATH (nur für --kdbx erforderlich)
Installation
Installieren Sie unter Debian / Ubuntu die KeePassXC-CLI, wenn Sie brute-forcen möchten:
sudo apt install keepassxc
Verwendung
# Kandidatenzeichen wiederherstellen und ausgeben
python3 keepass_dumper.py memory.dmp
# Die generierte Kandidatenliste in eine Datei ausgeben
python3 keepass_dumper.py memory.dmp -p candidates.txt
# Das fehlende erste Zeichen wiederherstellen und gegen eine KDBX brute-forcen
python3 keepass_dumper.py memory.dmp --kdbx db.kdbx
Führen Sie python3 keepass_dumper.py --help aus, um die vollständige Optionsliste zu sehen.
Was sich vom Original unterscheidet
- Engerer Scan-Filter (standardmäßig druckbares ASCII), um Fehlalarme zu reduzieren.
- Prioritätsgeordneter Zeichensatz (Buchstaben → Ziffern → häufige Satzzeichen → Rest),
sodass die wahrscheinlichsten Kandidaten zuerst versucht werden.
- mmap-basierter Dump-Leser, einzeiliger Fortschrittsbalken, leisere Ausgabe.