Beim Portieren des Tools cryptsetup-suspend für NixOS wurde ein Fehler im LUKS (Linux Unified Key Setup)-Subsystem zur Festplattenverschlüsselung festgestellt. Seit Kernel 6.9 (problematischer Commit), der im Mai 2024 veröffentlicht wurde, funktioniert die Bereinigung der Verschlüsselungsschlüssel im RAM beim Übergang des Systems in den Ruhezustand nicht mehr.
Das Tool cryptsetup-suspend wird in Debian verwendet, um LUKS-Partitionen automatisch zu sperren, bevor das System in den Schlafmodus wechselt. Es wird angenommen, dass im Falle eines Diebstahls eines Laptops, der in den Schlafmodus versetzt wurde, ein Angreifer keinen Zugang zu den Daten erhält, da beim Aufwachen aus dem Schlafmodus ein Passwort eingegeben werden muss, um den Zugriff auf die verschlüsselten Daten wiederherzustellen. Aufgrund eines Fehlers im Linux-Kernel wurden nach dem Sperren der LUKS-Partition mit dem Befehl „cryptsetup luksSuspend“ die Schlüssel nicht aus dem RAM gelöscht und waren über /proc/keys sichtbar, was es einem Angreifer ermöglichte, sie beispielsweise durch einen „Cold Boot“-Angriff zu extrahieren und für den Zugriff auf die Daten zu verwenden.
Während der Fehlersuche eines Race Conditions wurde festgestellt, dass keine Schlüsselbereinigung durchgeführt wurde, was zu Problemen beim Wechsel in den Standby-Modus führte. Der Fehler trat nach einer Refaktorisierung im Kernel 6.9 auf, bei der die Schlüssel an den aufrufenden Thread gebunden wurden und beim Beenden dieses Threads gelöscht werden sollten, tatsächlich jedoch im Speicher verblieben. Ein einzeiliger Patch wurde vorgeschlagen, um den Fehler im Linux-Kernel zu beheben.
Dieser Patch wurde nicht im Kernel akzeptiert, weil er eine Mängel aufweist - der Patch wirkt sich nur auf physische Speichergeräte aus, funktioniert jedoch nicht für virtuelle Loop-Geräte. Anstelle der Behebung des Problems im Kernel wurde von den Entwicklern des Tools cryptsetup ein Workaround zur Bereinigung der Schlüssel vorgeschlagen. Diese Änderung wurde bereits akzeptiert und wird Teil des Releases cryptsetup 2.8.7 sein.
Darüber hinaus wurde für NixOS eine eigene Implementierung von Skripten erstellt, um verschlüsselte Laufwerke vor dem Wechsel in den Standby-Modus zu sperren, wobei ein alter Patch für den Kernel verwendet wird, der 2015 abgelehnt wurde und der die Schlüssel vor dem Wechsel in den Schlafmodus gewaltsam aus dem Speicher löscht.
Quelle: opennet.ru
