Die Microsoft Data Protection API ist ein Feature, das Microsoft mit Windows 2000 eingeführt hat. Der Sinn der DPAPI ist es, Daten für den Benutzer transparent verschlüsselt ablegen zu können. Transparent bedeutet, dass der Benutzer von der Verschlüsselung nichts mitbekommt. Das passiert mit Hilfe der Anmeldeinformationen des Benutzers. Hier möchte ich einen kurzen Überblick darüber geben, wie die DPAPI funktioniert, wo sie zum Einsatz kommt und wie gut die DPAPI Ihre Daten schützt.
Das grundsätzliche Problem, dass die DPAPI lösen soll, ist eine einfache Verschlüsselungsmethode zur Verfügung zu stellen, von der der Benutzer nichts mitbekommt. Eine Verschlüsselung soll also einfach per Mausklick initiiert werden können, ohne dass der Benutzer ein Kennwort eingeben muß, und genauso einfach soll die Entschlüsselung wieder entfernt werden können, indem der Benutzer einfach einen Haken setzt - unter der Voraussetzung, dass der Benutzer nur Daten für sich selber vor dem Zugriff von anderen schützen will. Eine Datenübertragung über ein unsicheres Netzwerk lässt sich so nicht absichern.
Hierfür erstellt die DPAPI bei der ersten Verwendung einen Master-Key (Hauptschlüssel) und verschlüsselt ihn mit einem Schlüssel, der aus dem Kennwort des Benutzers generiert wird. Für alle folgenden Verschlüsselungen kommt nur noch der Master-Key zum Einsatz, nicht das Kennwort des Benutzers. Der oder die Master-Keys werden als Datei im Benutzerprofil unter %appdata%\Microsoft\Protect\<User SID>\ abgelegt. Es handelt sich um Dateien mit dem System-Attribut - sie werden also Standardmässig im Explorer nicht angezeigt. Wenn ein Programm die DPAPI zum Verschlüsseln von Daten aufruft, verwendet Windows den Master-Key, um die Daten per AES256 zu ver- oder entschlüsseln. Ist der Client Mitglied einer Domäne, legt er zusätzlich eine zweite Version des Master-Keys ab, und verschlüsselt ihn mit einem öffentlichen Schlüssel, den er vom Domänen-Controller bekommt. Der zweite Master-Key kann nur von den Domänen-Controllern entschlüsselt werden.
Der Master-Key liegt zwar auch für Administratoren zugänglich im Dateisystem, aber da er mit dem Kennwort des Benutzers verschlüsselt ist, kann der Masterkey erst nach der Anmeldung des Benutzers verwendet werden. AES 256 ist zudem eines der sichersten Verschlüsselungsverfahren, die man kennt, und gilt als aktuell praktisch nicht knackbar
Da jedes einfache Verfahren immer einen Haken hat, gilt das natürlich auch für die DPAPI. Sie haben sich nämlich sicher schon gefragt, was passiert, wenn der Benutzer sein Kennwort ändert. In diesem Fall muß der Computer mit der Kennwortänderung auch den Master-Key neu verschlüsseln, da der Master-Key, der ja mit dem alten Kennwort verschlüsselt ist, sonst nicht mehr zugänglich wäre.
Soweit, so gut. Was aber passiert, wenn der Benutzer in einer Domäne arbeitet und sich an unterschiedlichen Rechnern anmeldet? Dann wird der Master-Key ja nur auf dem Rechner neu verschlüsselt, auf dem der Benutzer sein Kennwort geändert hat, aber nicht auf allen anderen Rechnern, auf denen er Daten verschlüsselt hat. In diesem Fall schickt der Client den zweiten, mit dem öffentlichen Schlüssel des DC gesicherten Master-Key an einen Domänencontroller. Dieser entschlüsselt den Master-Key mit seinem privaten Schlüssel und schickt ihn wieder zurück an den Client. Der kann den Schlüssel jetzt neu mit dem Kennwort des Benutzers verschlüsseln und sicher in der Registry speichern.
Dieses Verfahren kann man grundsätzlich als sicher betrachten, und es wird auch von diversen Microsoft-Diensten verwendet, um private Schlüssel zu Zertifikaten, Kennwörter im Webbrowser (Chrome, IE), PIN und Fingerabdrücke oder im Kennwort-Tresor gespeicherte Kennwörter zu sichern. Tatsächlich gibt es aber eine Reihe von Angriffspunkten gegen die DPAPI:
- Wenn ein Angreifer Zugriff auf das Kennwort des Benutzers bekommt, kann er den Masterkey entschlüsseln
- Wenn ein Angreifer einen Prozess im Benutzerkonto starten kann, kann er Daten direkt entschlüsseln lassen - das Verfahren ist ja transparent
- Wenn der Angreifer Mimikatz auf dem Client des Benutzers starten kann, kann er den Masterkey entschlüsseln lassen (Mimikatz hat ein Arsenal von Optionen, um an den Master-Key zu gelangen)
- Wenn ein Angreifer Zugriff auf den Backup-Key der Domäne bekommt, kann er alle (!) Masterkeys aller Benutzer entschlüsseln
Weiterführende Informationen zur DPAPI:
Windows Data Protection (nicht mehr ganz aktuell, aber der umfassendste Artikel, den ich finden konnte)
Operational Guidance for Offensive User DPAPI Abuse (Will Harmjoy aka harmj0y)
How to troubleshoot the Data Protection API (DPAPI) (Microsoft Knowlegdebase-Artikel mit vielen Grundlagen)
DPAPI and DPAPI-NG: Decrypting All Users' Secrets and PFX Passwords (Paula Januszkewicz auf der Black Hat 2017, Youtube)
Data Protection API (Wikipedia)
Windows Password Recovery - DPAPI Master Key analysis (Aufbau des Master-Key)
Audit DPAPI Activity (DPAPI Audit Events)