Das Unternehmen Kudelski Security, spezialisiert auf Sicherheitsprüfungen, hat Shufflecake veröffentlicht, ein Tool, das es ermöglicht, versteckte Dateisysteme zu erstellen, die über den vorhandenen freien Speicherplatz in bestehenden Partitionen verteilt werden und von zufälligen Restdaten nicht zu unterscheiden sind. Die Partitionen werden so gestaltet, dass ihr Bestehen ohne den Zugangsschlüssel selbst bei einer forensischen Analyse schwer zu beweisen ist. Der Code der Utilities (shufflecake-userland) und des Linux-Kernel-Moduls (dm-sflc) ist in C geschrieben und wird unter der GPLv3-Lizenz verbreitet, was die Integration des veröffentlichten Kernel-Moduls in den Hauptkernel von Linux aufgrund der Inkompatibilität mit der GPLv2-Lizenz, unter der der Kernel ausgeliefert wird, unmöglich macht.
Das Projekt positioniert sich als eine überlegene Lösung im Vergleich zu Truecrypt und Veracrypt, um schützenswerte Daten zu verbergen. Es bietet nativ Unterstützung für die Linux-Plattform und ermöglicht das Einrichten von bis zu 15 ineinander verschachtelten versteckten Partitionen auf einem Gerät, was die Entdeckung ihrer Existenz erschwert. Wenn die Anwendung von Shufflecake selbst keine Geheimnisse birgt, wie anhand der vorhandenen Systemtools ersichtlich ist, bleibt die Gesamtanzahl der erstellten versteckten Partitionen unbestimmt. Die erstellten versteckten Partitionen können nach Belieben des Benutzers für jede Dateisystemart formatiert werden, beispielsweise ext4, xfs oder btrfs. Jede Partition wird als separates virtuelles Blockgerät mit einem eigenen Entsperr-Schlüssel behandelt.
Zur Verwirrung von Spuren wird das Verhaltensmodell "plausible deniability" empfohlen. Hierbei werden wertvolle Daten als zusätzliche Schichten in verschlüsselten Partitionen mit weniger wertvollen Informationen verborgen, wodurch eine Art versteckte Hierarchie von Partitionen entsteht. Steht der Eigentümer des Geräts unter Druck, kann er den Schlüssel zur verschlüsselten Partition offenlegen, jedoch können in dieser Partition weitere Partitionen verborgen sein (bis zu 15 verschachtelte Ebenen), und es ist problematisch, deren Vorhandensein zu bestimmen und die Existenz nachzuweisen.
Die Verschleierung erfolgt durch die Bildung jedes Bereichs als eine Ansammlung von verschlüsselten Stückchen, die an zufälligen Positionen auf dem Speichermedium platziert werden. Jedes Stück wird dynamisch erstellt, sobald im Bereich zusätzlicher Speicherplatz benötigt wird. Um die Analyse zu erschweren, werden Stücke unterschiedlicher Bereiche abgewechselt, d.h. die Shufflecake-Bereiche sind nicht mit kontinuierlichen Flächen verknüpft und die Stücke aller Bereiche werden vermischt. Informationen über die verwendeten und freien Stücke werden in einer an jeden Bereich gebundenen Positionskarte gespeichert, auf die der verschlüsselte Header verweist. Karten und Header sind verschlüsselt und ohne Kenntnis des Zugriffsschlüssels nicht von zufälligen Daten zu unterscheiden.
Der Header ist in Slots unterteilt, von denen jeder seinen eigenen Abschnitt und die damit verbundenen Slices definiert. Die Slots im Header sind stapelbar angeordnet und rekursiv verknüpft – der aktuelle Slot enthält einen Schlüssel zur Entschlüsselung der Parameter des vorherigen Abschnitts in der Hierarchie (weniger verborgen), wodurch ein einziges Passwort verwendet werden kann, um alle weniger verborgenen Abschnitte zu entschlüsseln, die mit dem gewählten Abschnitt verbunden sind. Jeder weniger verborgene Abschnitt betrachtet die Slices der verschachtelten Abschnitte als frei.
Standardmäßig haben alle verschachtelten Abschnitte von Shufflecake die gleiche sichtbare Größe wie der übergeordnete Abschnitt. Wenn beispielsweise auf einem Gerät mit einer Größe von 1 GB drei Abschnitte belegt sind, wird jeder von ihnen für das System als Abschnitt mit einer Größe von 1 GB angezeigt, und der insgesamt verfügbare Speicherplatz wird von allen Abschnitten gemeinsam genutzt – wenn die Summe der gespeicherten Daten die tatsächliche Größe des Geräts überschreitet, wird ein Ein-/Ausgabefehler angezeigt.
Nicht geöffnete untergeordnete Partitionen sind nicht an der Verteilung des Speicherplatzes beteiligt. Das heißt, der Versuch, eine übergeordnete Partition zu füllen, führt zur Überschreibung von Daten in den untergeordneten Partitionen, jedoch wird es nicht möglich sein, deren Existenz durch Analyse der Größe der Daten, die in der Partition vor dem Auftreten eines Fehlers untergebracht werden können, aufzudecken (es wird davon ausgegangen, dass die übergeordneten Partitionen unveränderliche Daten enthalten, um abzulenken, und niemals einzeln verwendet werden; die reguläre Arbeit erfolgt immer mit der letzten untergeordneten Partition. Das Schema impliziert, dass es wichtiger ist, das Geheimnis des Bestehens von Daten zu wahren, als diese Daten zu verlieren).
Tatsächlich werden immer 15 Shufflecake-Partitionen erstellt — den verwendeten Partitionen wird das Benutzerpasswort zugeordnet, während ungenutzte Partitionen mit einem zufällig generierten Passwort versehen werden (es ist unmöglich zu verstehen, wie viele Partitionen tatsächlich verwendet werden). Bei der Initialisierung von Shufflecake-Partitionen wird die für ihre Unterbringung vorgesehene Festplatte, Partition oder das virtuelle Blockgerät mit zufälligen Daten gefüllt, was es unmöglich macht, die Metadaten und Daten von Shufflecake im Gesamtkontext zu identifizieren.
Die Implementierung von Shufflecake bietet eine ausreichend hohe Leistung, leidet jedoch aufgrund der Überkopfkosten, die etwa doppelt so hoch sind, unter einer geringeren Bandbreite im Vergleich zur Festplattenverschlüsselung mit LUKS. Der Einsatz von Shufflecake führt auch zu zusätzlichen Anforderungen an den Arbeitsspeicher und Speicherplatz für Verwaltungsdaten auf der Festplatte. Der Speicherbedarf wird mit 60 MB pro Partition beziffert, während der Speicherplatz 1 % des gesamten Volumens in Anspruch nimmt. Im Vergleich dazu führt eine vergleichbare Technik wie WORAM zu einer Verlangsamung um das 5- bis 200-fache mit einem Verlust von 75 % des nützlichen Speicherplatzes.
Das Toolkit und das Kernel-Modul wurden ausschließlich unter Debian und Ubuntu mit den Kerneln 5.13 und 5.15 getestet (Unterstützung für Ubuntu 22.04 ist gegeben). Es wird darauf hingewiesen, dass das Projekt aktuell als Arbeitsprototyp betrachtet werden sollte und nicht zum Speichern wichtiger Daten verwendet werden sollte. In Zukunft sind zusätzliche Optimierungen in Bezug auf Leistung, Zuverlässigkeit und Sicherheit sowie die Möglichkeit der Boot-Nutzung von Shufflecake-Partitionen geplant.
Quelle: opennet.ru
