Steganographie im Dateisystem

Hallo Habr.

Ich möchte Ihnen ein kleines Projekt vorstellen Steganographiein meiner Freizeit gemacht.

Ich habe ein Projekt zur versteckten Speicherung von Informationen im Dateisystem erstellt (weiter). FS).
Dies kann dazu genutzt werden, vertrauliche Informationen zu Bildungszwecken zu stehlen.

Steganographie im Dateisystem

Als Prototyp wurde ein sehr alter Linux FS gewählt ext2.

Implementierung

Überlegungen zur Implementierung

Wenn es gut ist, den ext2-Standard zu „irritieren“, dann können wir ersetzen, dass es im FS einen sogenannten gibt Superblöcke, das grundlegende Informationen über das System liefert. Nachdem ich gefunden wurde Block-Bitmap и Inode-Tabelle. Fast sofort wurde die Idee geboren, Informationen in derzeit leere FS-Blöcke zu schreiben. Nun lohnt es sich, über den Schutz vor einem damit bewaffneten Programmierer nachzudenken Hex-Editor.

Wenn Sie versteckte Informationen unverschlüsselt speichern, sind sie im FS zwar verschwommen, aber dennoch zu auffällig, insbesondere wenn der Programmierer weiß, wonach er suchen muss. Daher wurde beschlossen, alle Blöcke der Quelldatei zu verschlüsseln. Ich habe mich für Blockverschlüsselung entschieden AES, aber wie Sie sehen, spielt es keine Rolle.

Um beim Lesen die notwendigen Blöcke von allen anderen zu trennen, wurde beschlossen, jedem Block am Blockanfang eine spezielle Markierung hinzuzufügen. Dieser Marker wurde abhängig von der Blocknummer in der Quelldatei verschlüsselt. Ein solcher Trick ermöglichte es nicht nur sofort, die richtigen Blöcke zu finden, sondern auch deren richtige Reihenfolge herauszufinden.

Das allgemeine Prinzip des Systems.

Steganographie im Dateisystem

Algorithmus schreiben

Auf Gegenstände:

  • Schreiben Sie zunächst einige Informationen in das ursprüngliche Dateisystem.
  • Löschen Sie diese Informationen (nicht unbedingt alle);
  • Teilen Sie die zu verbergende Datei in Blöcke gleicher Länge auf, indem Sie eine Markierung hinzufügen.
  • Verschlüsseln Sie diese Blöcke;
  • Platzieren Sie verschlüsselte Blöcke in leeren FS-Blöcken.

Für Liebhaber von Flussdiagrammen

Unten finden Sie ein Blockdiagramm des Aufnahmealgorithmus. Als Eingabe erhält der Algorithmus vier Dateien:
-Image des veränderbaren Dateisystems;
-Datei unterliegt der Steganographie;
-Datei mit Verschlüsselungsschlüssel für AES;
-Datei mit einem Marker.
Steganographie im Dateisystem

Es sollte gleich angemerkt werden, dass dieser Algorithmus einen Nachteil hat: Nach dem Schreiben der Datei in den FS, darf nicht Schreiben Sie etwas Neues in den FS, da jede neue Information in die Blöcke gelangen kann, die wir unserer ZIP-Datei zugewiesen haben, obwohl dies auch die Möglichkeit eröffnet, „Spuren schnell zu verwischen“.

Es ist jedoch ganz offensichtlich, wie dies behoben werden kann: Es ist notwendig, den Algorithmus zum Schreiben von Blöcken in den FS neu zu schreiben. Dies ist eine verständliche, aber unglaublich zeitaufwändige Aufgabe.
Zum Proof of Consept habe ich dies nicht implementiert.

Das Ergebnis werden die folgenden Änderungen im FS sein, so sieht das FS vor der Steganographie aus (zuvor wurde eine Audiodatei aufgenommen).
Steganographie im Dateisystem
Und so sieht der FS mit bereits gezippten Informationen aus.
Steganographie im Dateisystem

Lesealgorithmus

Auf Gegenstände:

  • Erstellen Sie mit Kenntnis des Schlüssels und der Methode zum Erstellen von Markierungen die ersten N Markierungen, mit der Garantie, dass N multipliziert mit der Länge des Dateisystemblocks größer als die Länge der komprimierten Datei ist.
  • Suche nach Blöcken im FS beginnend mit Markierungen;
  • Empfangene Blöcke entschlüsseln und Markierungen trennen;
  • Setzen Sie die resultierenden Blöcke in der richtigen Reihenfolge zusammen und erhalten Sie die Quelldatei.

Für Liebhaber von Flussdiagrammen

Unten finden Sie ein Blockdiagramm des Aufnahmealgorithmus. Als Eingabe erhält der Algorithmus drei Dateien:
- Bilddateisystem;
-Datei mit Verschlüsselungsschlüssel für AES;
-Datei mit einem Marker.
Steganographie im Dateisystem

Nachdem das Programm ausgeführt wurde, erscheint die Read-Datei, bei der es sich um die aus dem steganographierten FS extrahierte Datei handelt. Wenn der Schlüssel oder die Markierung falsch angegeben wurde, ist die Read-Datei leer.
(Für Liebhaber von Schönheit können Sie nicht nur die Datei, sondern auch den „Header“ mit Metainformationen einfügen: Dateiname, Rechte, Zeitpunkt der letzten Änderung usw.)

Automatisierung starten

Der Einfachheit halber wurden Bash-Skripte geschrieben, die den Start unter Linux automatisieren (getestet unter Ubuntu 16.04.3 LTS).
Schauen wir uns den Start Schritt für Schritt an.
Rekord:

  1. sudo Copy_Flash.sh "DEVICE" – Holen Sie sich das FS-Image von DEVICE (Flash);
  2. ./Write.sh „FILE“ „KEY“ „MARKER“ – Erstellen Sie eine virtuelle Umgebung, laden Sie die erforderlichen Bibliotheken herunter und führen Sie das Schreibskript aus;
  3. sudo ./Write_Flash.sh „DEVICE“ – schreibt den geänderten FS zurück auf DEVICE.

Lektüre:

  1. sudo Copy_Flash.sh "DEVICE" – Holen Sie sich das FS-Image von DEVICE (Flash);
  2. ./Read.sh „KEY“ „MARKER“ – Erstellen Sie eine virtuelle Umgebung, laden Sie die erforderlichen Bibliotheken herunter und führen Sie das Skript zum Lesen aus;
  3. Öffnen Sie im aktuellen Verzeichnis die Read-Datei – dies sind die komprimierten Informationen.

Abschluss

Diese Methode der Steganographie muss wahrscheinlich verbessert, weiter getestet und auf gängigere Dateisysteme ausgeweitet werden, z Fat32, NTFS и ext4.
Ziel dieser Arbeit war es jedoch, das Prinzip aufzuzeigen, mit dem eine versteckte Speicherung von Informationen im Dateisystem möglich ist.
Mit Hilfe solcher Algorithmen können Sie Informationen furchtlos speichern, und wenn ein solches System mit Kenntnis des Schlüssels nicht durch erschöpfende Suche (sondern durch einen sehr langen Algorithmus) gehackt werden kann, dann ohne Kenntnis des Schlüssels dieses System scheint mir absolut stabil zu sein, dies könnte jedoch Anlass für einen separaten Artikel sein.

Der gesamte Code ist in Python Version 3.5.2 implementiert. Beispiel der Arbeit auf meinem YouTube-Kanal vorgestellt. Der vollständige Projektcode ist verfügbar unter github.
(Ja, ja, ich weiß, dass man für die Produktionsversion etwas „Schnelles“ schreiben muss, zum Beispiel in C 😉 )
In dieser Implementierung sollte die Größe der Eingabedatei für die Steganographie 1000 kB nicht überschreiten.

Ich möchte dem Benutzer danken PavelMSTU für wertvolle Ratschläge bei der Planung der Studie und Empfehlungen für die Gestaltung des Artikels.

Source: habr.com

Kommentar hinzufügen