Steganographie nach Dateien: Daten direkt in Sektoren verstecken

Kurze Einführung

Steganographie, falls sich jemand nicht daran erinnert, versteckt Informationen in einigen Containern. Zum Beispiel in Bildern (besprochen hier и hier). Sie können Daten auch in Servicetabellen des Dateisystems ausblenden (darüber wurde bereits geschrieben). hier), und selbst in TCP-Protokolldienstpaketen. Leider haben alle diese Methoden einen Nachteil: Um Informationen unmerklich in einen Container „einzufügen“, sind raffinierte Algorithmen erforderlich, die die Besonderheiten der internen Struktur des Containers berücksichtigen. Und es gibt Probleme mit der Manipulationsresistenz des Containers: Wenn man beispielsweise das Bild leicht bearbeitet, gehen versteckte Informationen verloren.

Ist es möglich, irgendwie auf raffinierte Algorithmen und subtile Datenmanipulationen zu verzichten und trotzdem die Funktionalität des Containers und ein akzeptables Maß an Sicherheit versteckter Daten zu gewährleisten? Mit Blick auf die Zukunft sage ich: Ja, das können Sie! Ich werde sogar ein Dienstprogramm anbieten.

Blutige Details der Methode

Die Grundidee ist so einfach wie ein Schlag auf die Stirn: Es gibt Bereiche auf der Festplatte, auf die das Betriebssystem nie (oder in seltenen Fällen) schreibt. Um die Suche nach diesen Bereichen mithilfe raffinierter Algorithmen zu vermeiden, verwenden wir Redundanz – das heißt, wir duplizieren unsere verborgenen Informationen viele, viele Male über alle Sektoren der Festplatte hinweg. Dann können Sie direkt zu all dieser Pracht die notwendigen Partitionen erstellen, Dateisysteme formatieren, Dateien schreiben und Betriebssysteme installieren – trotzdem wird ein Teil der geheimen Daten gespeichert und kann abgerufen werden, und wiederholtes Duplizieren wird uns helfen aus den Einzelteilen das ursprüngliche Ganze zusammensetzen.

Der Vorteil dieser Methode liegt auf der Hand: Wir sind nicht vom Dateiformat oder gar vom Typ des verwendeten Dateisystems abhängig.

Auch die Nachteile liegen meiner Meinung nach auf der Hand:

  • Geheime Daten können nur geändert werden, indem die gesamte Festplatte vollständig neu beschrieben und anschließend der für den Benutzer sichtbare Inhalt wiederhergestellt wird. Sie können jedoch keine Software verwenden, die die Festplatte aus einem Image neu erstellt: Sie erstellt auch die vorherigen geheimen Daten neu.
  • Je größer die Menge an geheimen Daten ist, desto größer ist die Wahrscheinlichkeit, dass einige Informationen verloren gehen.
  • Das Abrufen von Daten von der Festplatte kann lange dauern. Von mehreren Minuten bis zu mehreren Tagen (moderne Festplatten sind groß).

Kommen wir nun zu den Einzelheiten.

Es ist klar, dass, wenn man geheime Daten einfach überall auf der Festplatte verschmiert, diese nur für das bloße Auge verborgen bleiben. Wenn Sie Ihren Blick beispielsweise mit einem Festplatteneditor ausstatten, werden die Daten in ihrer ganzen Pracht angezeigt. Daher wäre es eine gute Idee, die Daten zu verschlüsseln, damit sie nicht angezeigt werden. Wir verschlüsseln einfach, aber geschmackvoll: mit dem aes256-cbc-Algorithmus. Wir fragen den Benutzer nach dem Verschlüsselungsschlüssel und lassen ihn ein gutes Passwort finden.

Die nächste Frage ist, wie wir „gute“ Daten von schlechten Daten unterscheiden können. Hier hilft uns eine Prüfsumme, aber keine einfache, sondern SHA1. Und was? Es ist gut genug für Git, also wird es auch zu uns passen. Beschlossen: Wir versehen jede gespeicherte Information mit einer Prüfsumme. Wenn diese nach der Entschlüsselung übereinstimmt, bedeutet dies, dass die Entschlüsselung erfolgreich war.

Sie benötigen außerdem die Fragmentnummer und die Gesamtlänge der geheimen Daten. Die Fragmentnummer dient dazu, den Überblick darüber zu behalten, welche Stücke wir bereits entziffert haben und welche noch übrig sind. Die Gesamtlänge wird uns bei der Verarbeitung des letzten Fragments nützlich sein, um keine unnötigen Daten zu schreiben (d. h. Auffüllen). Nun, da wir noch eine Kopfzeile haben, fügen wir dort den Namen der geheimen Datei hinzu. Es wird nach der Entschlüsselung nützlich sein, um nicht zu erraten, wie man es öffnet.

Erprobung der Methode in der Praxis

Nehmen wir zur Überprüfung das gängigste Medium – ein Flash-Laufwerk. Ich habe ein altes mit 1 GB Kapazität gefunden, das für Experimente durchaus geeignet ist. Wenn Sie wie ich auf die Idee gekommen sind, sich nicht mit physischen Medien herumzuschlagen, sondern sie an einer Datei – einem Disk-Image – zu testen, dann sage ich gleich: Das wird nicht funktionieren. Beim Formatieren einer solchen „Festplatte“ erstellt Linux die Datei erneut und alle nicht verwendeten Sektoren werden mit Nullen aufgefüllt.

Als Maschine mit Linux musste ich leider auf eine Wetterstation auf dem auf dem Balkon liegenden Raspberry Pi 3 zurückgreifen. Da ist nicht viel Speicher da, große Dateien verstecken wir also nicht. Wir beschränken uns auf eine maximale Größe von 10 Megabyte. Es macht auch keinen Sinn, zu kleine Dateien zu verstecken: Das Dienstprogramm schreibt Daten in 4-KB-Clustern auf die Festplatte. Daher beschränken wir uns im Folgenden auf eine 3-KB-Datei – sie passt in einen solchen Cluster.

Wir werden das Flash-Laufwerk schrittweise verspotten und nach jedem Schritt prüfen, ob die versteckten Informationen lesbar sind:

  1. Schnelle Formatierung im FAT16-Format mit einer Clustergröße von 16 KB. Dies bietet Windows 7 mit einem Flash-Laufwerk ohne Dateisystem.
  2. Das Flash-Laufwerk wird um 50 % mit allerlei Müll gefüllt.
  3. Das Flash-Laufwerk wird um 100 % mit allerlei Müll gefüllt.
  4. „Lange“ Formatierung im FAT16-Format (alles überschreiben).

Die ersten beiden Tests endeten erwartungsgemäß mit einem vollständigen Sieg: Das Dienstprogramm konnte erfolgreich 10 Megabyte geheime Daten vom Flash-Laufwerk extrahieren. Doch nachdem das Flash-Laufwerk bis zur Kapazitätsgrenze mit Dateien gefüllt war, trat ein Fehler auf:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Wie Sie sehen können, wurden nur 158 Cluster erfolgreich entschlüsselt (632 Kilobyte Rohdaten, was 636424 Byte Nutzlast ergibt). Es ist klar, dass es hier keine Möglichkeit gibt, an 10 Megabyte zu kommen, und dennoch gibt es unter diesen Clustern eindeutig Duplikate. Auf diese Weise können Sie nicht einmal 1 Megabyte wiederherstellen. Aber wir können garantieren, dass wir 3 Kilobyte geheimer Daten von einem Flash-Laufwerk wiederherstellen, selbst nachdem es formatiert und auf volle Kapazität geschrieben wurde. Experimente zeigen jedoch, dass es durchaus möglich ist, eine 120 Kilobyte lange Datei von einem solchen Flash-Laufwerk zu extrahieren.

Der letzte Test ergab leider, dass das gesamte Flash-Laufwerk überschrieben wurde:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

Kein einziger Cluster hat überlebt... Traurig, aber nicht tragisch! Versuchen wir vor dem Formatieren, eine Partition auf dem Flash-Laufwerk zu erstellen und darin bereits ein Dateisystem. Es kam übrigens ab Werk mit genau dieser Formatierung, wir machen also nichts Verdächtiges.
Es ist durchaus zu erwarten, dass der verfügbare Speicherplatz auf dem Flash-Laufwerk leicht zurückgegangen ist.

Es ist auch durchaus zu erwarten, dass 10 Megabyte nicht auf einer vollständig vollen Festplatte versteckt werden könnten. Doch mittlerweile hat sich die Zahl der erfolgreich entschlüsselten Cluster mehr als verdoppelt!

Total clusters read: 250752, decrypted: 405

Leider ist es unmöglich, ein Megabyte aus Einzelteilen zusammenzusetzen, aber zweihundert Kilobyte sind einfach.

Nun, die Nachricht über die letzte, vierte Überprüfung ist diesmal erfreulich: Die vollständige Formatierung eines solchen Flash-Laufwerks hat nicht zur Zerstörung aller Informationen geführt! 4 Kilobyte geheime Daten passen perfekt in ungenutzten Raum.

Testzusammenfassungstabelle:

Steganographie nach Dateien: Daten direkt in Sektoren verstecken

Ein wenig theoretisieren: über freien Speicherplatz und ungenutzte Sektoren

Wenn Sie Ihre Festplatte schon einmal in Partitionen unterteilt haben, ist Ihnen vielleicht aufgefallen, dass es nicht immer möglich ist, den gesamten freien Speicherplatz auf der Festplatte zuzuweisen. Der erste Abschnitt beginnt immer mit einer Einrückung (normalerweise 1 Megabyte oder 2048 Sektoren). Hinter dem letzten Abschnitt kommt es auch vor, dass ein kleiner „Schwanz“ ungenutzter Sektoren verbleibt. Und manchmal gibt es Lücken zwischen den Abschnitten, wenn auch selten.

Mit anderen Worten: Es gibt Sektoren auf der Festplatte, auf die während der normalen Arbeit mit der Festplatte nicht zugegriffen werden kann, auf die jedoch Daten geschrieben werden können! Und das bedeutet, es auch zu lesen. Bereinigt um die Tatsache, dass es auch eine Partitionstabelle und einen Bootloader-Code gibt, die sich im leeren Bereich am Anfang der Festplatte befinden.

Machen wir mal eine Pause von den Abschnitten und betrachten wir die Scheibe sozusagen aus der Vogelperspektive. Hier haben wir eine leere Partition auf der Festplatte. Lassen Sie uns darin ein Dateisystem erstellen. Können wir sagen, dass einige Sektoren auf der Festplatte nicht gelöscht werden?

E-e-e – Trommelwirbel! Die Antwort wird fast immer Ja sein! Tatsächlich kommt es beim Erstellen eines Dateisystems in den meisten Fällen darauf an, nur wenige Blöcke mit Dienstinformationen auf die Festplatte zu schreiben, ansonsten ändert sich der Inhalt der Partition nicht.

Und auch – rein empirisch – können wir davon ausgehen, dass das Dateisystem nicht immer den gesamten ihm zugewiesenen Platz bis zum letzten Sektor belegen kann. Beispielsweise kann ein FAT16-Dateisystem mit einer Clustergröße von 64 Kilobyte eine Partition mit einer Größe, die kein Vielfaches von 64 Kilobyte ist, offensichtlich nicht vollständig belegen. Am Ende eines solchen Abschnitts muss ein „Ende“ aus mehreren Sektoren vorhanden sein, auf die zum Speichern von Benutzerdaten nicht zugegriffen werden kann. Diese Annahme konnte jedoch experimentell nicht bestätigt werden.

Um den für das Steganogramm verfügbaren Speicherplatz zu maximieren, müssen Sie ein Dateisystem mit einer größeren Clustergröße verwenden. Sie können auch eine Partition erstellen, auch wenn dies nicht erforderlich ist (z. B. auf einem Flash-Laufwerk). Es besteht keine Notwendigkeit, leere Abschnitte zu schaffen oder nicht zugewiesene Bereiche zu belassen – dies wird die Aufmerksamkeit interessierter Bürger auf sich ziehen.

Dienstprogramm für Experimente

Sie können den Quellcode des Dienstprogramms berühren hier

Zum Erstellen benötigen Sie Qt Version 5.0 oder höher und OpenSSL. Wenn etwas nicht funktioniert, müssen Sie möglicherweise die Datei steganodisk.pro bearbeiten.

Sie können die Clustergröße von 4 KB auf beispielsweise 512 Byte (in Secretfile.h) ändern. Gleichzeitig steigen die Kosten für Serviceinformationen: Header und Prüfsumme belegen feste 68 Bytes.

Sie müssen das Dienstprogramm natürlich mit Root-Benutzerrechten und mit Vorsicht ausführen. Vor dem Überschreiben der angegebenen Datei oder des angegebenen Geräts werden keine Fragen gestellt!

Genießen.

Source: habr.com

Kommentar hinzufügen