Kurze Einführung
Steganographie ist, wenn sich jemand nicht erinnert, das Verbergen von Informationen in Behältern. Zum Beispiel in Bildern (
hier und
hier besprochen). Sie können Daten auch in den Diensttabellen des Dateisystems (dies wurde
hier geschrieben) und sogar
in den Dienstpaketen des TCP-Protokolls ausblenden. Leider haben alle diese Methoden einen Nachteil: Um Informationen in einem Container leise zu „verteilen“, benötigen Sie knifflige Algorithmen, die die Merkmale der internen Struktur des Containers berücksichtigen. Ja, und mit dem Manipulationswiderstand des Containers treten Probleme auf: Wenn Sie beispielsweise das Bild leicht bearbeiten, gehen versteckte Informationen verloren.
Ist es möglich, auf listige Algorithmen und subtile Datenmanipulationen zu verzichten und gleichzeitig die Leistung des Containers und ein akzeptables Sicherheitsniveau für versteckte Daten sicherzustellen? Mit Blick auf die Zukunft werde ich sagen - ja, das können Sie! Und ich werde ein Dienstprogramm anbieten.
Details zur blutigen Methode
Die Grundidee ist so einfach wie ein Schlag auf die Stirn: Es gibt Bereiche auf der Festplatte, in die das Betriebssystem niemals schreibt (oder in seltenen Fällen schreibt). Um diese Bereiche nicht mit gerissenen Algorithmen suchen zu müssen, verwenden wir Redundanz - das heißt, wir werden unsere verborgenen Informationen viele, viele Male über alle Sektoren der Festplatte duplizieren. Zusätzlich zu dieser Größe können Sie die erforderlichen Partitionen erstellen, Dateisysteme formatieren, Dateien schreiben und das Betriebssystem installieren. Auf jeden Fall wird ein Teil der geheimen Daten gespeichert und extrahiert, und durch wiederholtes Duplizieren können wir das Original aus Teilen zusammensetzen.
Der Vorteil dieser Methode liegt auf der Hand: Wir sind nicht vom Dateiformat oder sogar vom Typ des verwendeten Dateisystems abhängig.
Die Nachteile liegen meines Erachtens auch auf der Hand:
- Geheime Daten können nur durch vollständiges Umschreiben der gesamten Festplatte geändert werden, wobei die anschließende Rekonstruktion des Inhalts für den Benutzer sichtbar ist. Gleichzeitig können Sie keine Software verwenden, die eine Festplatte aus einem Image neu erstellt: Sie erstellt frühere geheime Daten neu.
- Je größer die Menge der klassifizierten Daten ist, desto größer ist die Wahrscheinlichkeit, dass einige Informationen verloren gehen.
- Das Abrufen von Daten von der Festplatte kann lange dauern. Von einigen Minuten bis zu mehreren Tagen (moderne Discs sind groß).
Kommen wir nun zu den Details.
Es ist klar, dass wenn Sie einfach geheime Daten auf der Festplatte verschmieren, diese nur mit bloßem Auge verborgen bleiben. Wenn Sie Ihre Augen beispielsweise mit einem Festplatteneditor ausstatten, erscheinen die Daten in ihrer ganzen Pracht. Daher wäre es schön, die Daten so zu verschlüsseln, dass sie nicht blinken. Wir werden einfach, aber mit Geschmack verschlüsseln: nach dem aes256-cbc-Algorithmus. Wir fragen den Benutzer nach dem Verschlüsselungsschlüssel, lassen ihn sich ein gutes Passwort ausdenken.
Die nächste Frage ist, wie wir "richtige" Daten von beschädigten Daten unterscheiden können. Hier hilft uns die Prüfsumme, aber nicht einfach, sondern SHA1. Und was? Für Git ist es gut genug, was bedeutet, dass es zu uns passt. Es wurde entschieden: Wir versorgen jedes gespeicherte Informationsfragment mit einer Prüfsumme, und wenn es nach der Entschlüsselung zusammenfiel, war die Entschlüsselung erfolgreich.
Sie benötigen auch die Fragmentnummer und die Gesamtlänge der geheimen Daten. Fragmentnummer - um zu verfolgen, welche Teile wir bereits entschlüsselt haben und welche übrig geblieben sind. Die Gesamtlänge ist für uns bei der Verarbeitung des letzten Fragments nützlich, um keine zusätzlichen Daten zu schreiben (dh Auffüllen). Da wir immer noch eine Überschrift erhalten, fügen wir dort den Namen der geheimen Datei hinzu. Es wird sich nach der Entschlüsselung als nützlich erweisen, um nicht zu erraten, wie es geöffnet werden soll.
Überprüfen Sie die Methode in der Praxis
Zur Überprüfung verwenden wir die gängigsten Medien - ein Flash-Laufwerk. Ich habe eine alte mit 1 GB gefunden, die sich gut für Experimente eignet. Wenn Sie wie ich auf die Idee gekommen sind, kein Dampfbad mit physischen Medien zu nehmen, sondern eine Datei zu testen - ein Disk-Image, sage ich sofort: Es wird nicht funktionieren. Bei der Formatierung einer solchen „Festplatte“ erstellt Linux die Datei erneut und alle nicht verwendeten Sektoren werden mit Nullen gefüllt.
Als Linux-Maschine musste ich leider die Wetterstation auf dem Raspberry Pi 3 auf dem Balkon benutzen. Da dort nicht viel Speicher ist, werden wir keine großen Dateien verstecken. Wir beschränken uns auf eine maximale Größe von 10 Megabyte. Es macht auch keinen Sinn, zu kleine Dateien auszublenden: Das Dienstprogramm schreibt Daten in Clustern von 4 KB auf die Festplatte. Daher beschränken wir uns von unten auf eine 3-KB-Datei - sie passt in einen solchen Cluster.
Wir werden das Flash-Laufwerk schrittweise verspotten und nach jeder Phase prüfen, ob versteckte Informationen gelesen werden:
- Schnelle Formatierung im FAT16-Format mit einer Clustergröße von 16 KB. Dies schlägt Windows 7 für ein Flash-Laufwerk ohne Dateisystem vor.
- Füllen eines Flash-Laufwerks mit 50% aller Arten von Müll.
- Das Befüllen des Flash-Laufwerks mit allen Arten von Müll beträgt 100%.
- "Lange" Formatierung im FAT16-Format (mit Überschreiben von allem).
Die ersten beiden Tests endeten erwartungsgemäß mit einem vollständigen Sieg: Das Dienstprogramm konnte erfolgreich 10 Megabyte vertrauliche Daten von einem Flash-Laufwerk extrahieren. Nachdem das Flash-Laufwerk mit Dateien für die Augäpfel gefüllt wurde, 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 keine Möglichkeit gibt, 10 Megabyte zu erhalten, und es gibt offensichtlich Duplikate zwischen diesen Clustern. Selbst 1 Megabyte kann auf diese Weise nicht wiederhergestellt werden. Es kann jedoch garantiert werden, dass wir 3 Kilobyte sensibler Daten von einem Flash-Laufwerk wiederherstellen, selbst nachdem diese formatiert und in die Augäpfel geschrieben wurden. Experimente zeigen jedoch, dass es durchaus möglich ist, eine 120-Kilobyte-Datei von einem solchen Flash-Laufwerk zu extrahieren.
Der letzte Test hat leider gezeigt, dass das Flash-Laufwerk alle ü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 ... Leider, aber nicht tragisch! Versuchen wir, vor dem Formatieren eine Partition auf dem Flash-Laufwerk zu erstellen, und zwar bereits darin - im Dateisystem. Übrigens kam sie mit dieser Formatierung aus der Fabrik, also machen wir nichts Verdächtiges.
Es wird erwartet, dass der verfügbare Speicherplatz auf dem Flash-Laufwerk geringfügig reduziert wird.
Es wird auch erwartet, dass 10 Megabyte auf einem vollständig verstopften Laufwerk immer noch nicht ausgeblendet werden können. Aber jetzt hat sich die Anzahl der erfolgreich entschlüsselten Cluster mehr als verdoppelt!
Total clusters read: 250752, decrypted: 405
Leider kann ein Megabyte nicht aus Teilen zusammengesetzt werden, aber zweihundert Kilobyte sind einfach.
Nun, die Nachricht von der letzten, vierten Überprüfung, diesmal ist erfreulich: Die vollständige Formatierung eines solchen Flash-Laufwerks hat nicht zur Zerstörung aller Informationen geführt! 120 Kilobyte geheimer Daten passen perfekt in ungenutzten Raum.
Übersichtstabelle zum Testen:

Ein bisschen theoretisieren: über freien Speicherplatz und nicht genutzte Sektoren
Wenn Sie eine Festplatte einmal partitioniert haben, stellen Sie möglicherweise fest, dass es nicht immer möglich ist, den gesamten freien Speicherplatz auf der Festplatte zuzuweisen. Der erste Abschnitt beginnt immer mit einem Einzug (normalerweise 1 Megabyte oder 2048 Sektoren). Auch hinter dem letzten Abschnitt bleibt ein kleiner „Schwanz“ ungenutzter Sektoren. Und manchmal gibt es Lücken zwischen 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, aber Sie können Daten in diese Sektoren schreiben! Was bedeutet auch zu lesen. Bereinigt um die Tatsache, dass es auch eine Partitionstabelle und einen Bootloader-Code gibt, die sich nur in einem leeren Bereich am Anfang der Festplatte befinden.
Lassen Sie uns für eine Weile von den Trennwänden ablenken und die Scheibe sozusagen aus der Vogelperspektive betrachten. Hier haben wir eine leere Partition auf der Festplatte. Erstellen Sie ein Dateisystem darin. Kann man sagen, dass einige Sektoren auf der Festplatte entsperrt geblieben sind?
Und-und-und-Trommelwirbel! Die Antwort wird fast immer sein - ja! In den meisten Fällen läuft die Erstellung eines Dateisystems darauf hinaus, dass nur wenige Blöcke von Dienstinformationen auf die Festplatte geschrieben werden, ansonsten ändert sich der Inhalt des Abschnitts nicht.
Und doch können wir - rein empirisch - davon ausgehen, dass das Dateisystem nicht immer den gesamten dem letzten Sektor zugewiesenen Speicherplatz einnehmen kann. Beispielsweise kann ein FAT16-Dateisystem mit einer Clustergröße von 64 Kilobyte eine Partition mit einer Größe von nicht mehr als 64 Kilobyte offensichtlich nicht vollständig belegen. Am Ende eines solchen Abschnitts sollte ein Schwanz in mehreren Sektoren verbleiben, auf die zum Speichern von Benutzerdaten nicht zugegriffen werden kann. Experimentell konnte diese Annahme jedoch nicht bestätigt werden.
Um den für das Steganogramm verfügbaren Speicherplatz zu maximieren, müssen Sie ein größeres Dateisystem mit einer Clustergröße verwenden. Sie können weiterhin eine Partition erstellen, auch wenn diese optional ist (z. B. auf einem Flash-Laufwerk). Es ist nicht notwendig, leere Bereiche zu erstellen oder nicht zugewiesene Bereiche zu belassen - dies wird die Aufmerksamkeit interessierter Bürger auf sich ziehen.
Dienstprogramm für Experimente
Dienstprogrammquellen finden Sie
hier.Zum Erstellen benötigen Sie Qt Version 5.0 und höher sowie OpenSSL. Wenn etwas nicht passieren soll, müssen Sie möglicherweise die Datei steganodisk.pro reparieren.
Sie können die Clustergröße von 4 KB auf beispielsweise 512 Byte (in secretfile.h) ändern. Gleichzeitig steigen die Kosten für offizielle Informationen: Der Header und die 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ße es.