Steganographie im Dateisystem

Hallo, Habr.

Ich möchte Ihnen ein kleines Projekt zur Steganografie, das in meiner Freizeit in der Schule erstellt wurde, vorstellen.

Ich habe ein Projekt zur versteckten Speicherung von Informationen im Dateisystem (im Folgenden FS).
Entwickelt, das für den Diebstahl vertraulicher Informationen zu Bildungszwecken verwendet werden kann.

Steganographie im Dateisystem

Für den Prototyp wurde ein recht altes Linux-Dateisystem ausgewählt ext2.

Implementierung

Überlegungen zur Umsetzung

Wenn man den Standard ext2 gut "aufdröselt", stellt man fest, dass es im FS so genannte Superblocksgibt, in denen grundlegende Informationen über das System enthalten sind. Danach fand ich Block Bitmap und Inode-Tabelle. Fast sofort kam die Idee auf, Informationen in die aktuell leeren Blöcke des FS zu schreiben. Nun musste ich mir Gedanken über den Schutz vor einem Programmierer machen, der mit einem Hex-Editor.

ausgestattet ist. Wenn man versteckte Informationen ohne Verschlüsselung speichert, wird sie, selbst wenn sie über das FS verstreut ist, immer noch zu offensichtlich sein, insbesondere wenn der Programmierer weiß, wonach er suchen soll. Daher wurde beschlossen, alle Blöcke der Quelldatei zu verschlüsseln. Ich wählte den Blockverschlüsselungsalgorithmus Hex-Editor, aber wie Sie verstehen, ist dies nicht entscheidend.

Um beim Lesen die benötigten Blöcke von allen anderen zu trennen, wurde beschlossen, jedem Block zu Beginn einen speziellen Marker hinzuzufügen. Dieser Marker wurde abhängig von der Blocknummer in der Quelldatei verschlüsselt. Diese Maßnahme ermöglichte es, nicht nur die benötigten Blöcke zu finden, sondern auch ihre richtige Reihenfolge zu erkennen.

Allgemeines Funktionsprinzip des Systems.

Steganographie im Dateisystem

Aufzeichnungsalgorithmus

In Schritten:

  • Zuerst Informationen in das ursprüngliche Dateisystem schreiben;
  • Diese Informationen löschen (nicht unbedingt alle);
  • Die Datei zur Versteckung in Blöcke gleicher Länge aufteilen und einen Marker hinzufügen;
  • Diese Blöcke verschlüsseln;
  • Die verschlüsselten Blöcke in leere Blöcke des FS einfügen.

Für Liebhaber von Flussdiagrammen

Im Folgenden ist das Flussdiagramm des Aufzeichnungsalgorithmus dargestellt. Der Algorithmus erhält vier Dateien als Eingabe:
-Abbild des veränderbaren Dateisystems;
-Die Datei, die der Steganografie unterzogen werden soll;
-Eine Datei mit dem Verschlüsselungsschlüssel für AES;
-Eine Datei mit dem Marker.
Steganographie im Dateisystem

Es ist sofort zu beachten, dass dieser Algorithmus einen Nachteil hat: Nach dem Schreiben der Datei ins FS -Datei mit dem AES-Verschlüsselungsschlüssel; Etwas Neues in das Dateisystem zu schreiben, da jede neue Information in jene Blöcke gelangen könnte, die wir unserer gesteganographierten Datei zugewiesen haben, eröffnet jedoch die Möglichkeit, "schnell die Spuren zu verwischen".

Es ist jedoch offensichtlich, wie man das beheben kann: Der Algorithmus zum Schreiben der Blöcke im Dateisystem muss neu geschrieben werden. Das ist eine verständliche, aber unglaublich arbeitsintensive Aufgabe.
Für den Proof Of Concept habe ich das nicht umgesetzt.

Das Ergebnis wird die folgenden Änderungen im Dateisystem bringen, so sieht das Dateisystem vor der Steganographie aus (zuvor wurde eine Audiodatei gespeichert).
Steganographie im Dateisystem
So sieht das Dateisystem mit bereits gesteganographierten Informationen aus.
Steganographie im Dateisystem

Lesealgorithmus

In Schritten:

  • Mit Kenntnis des Schlüssels und der Methode zur Erstellung von Markern die ersten N Marker erstellen, mit der Garantie, dass N, multipliziert mit der Blockgröße des Dateisystems, größer ist als die Länge der gesteganographierten Datei;
  • Suche nach Blöcken im Dateisystem, die mit Markern beginnen;
  • Die erhaltenen Blöcke entschlüsseln und die Marker trennen;
  • Die erhaltenen Blöcke in der richtigen Reihenfolge zusammenfügen und die ursprüngliche Datei erhalten.

Für Liebhaber von Flussdiagrammen

Im Folgenden ist das Flussdiagramm des Schreibalgorithmus dargestellt. Der Algorithmus erhält drei Eingabedateien:
-Abbild des Dateisystems;
-Eine Datei mit dem Verschlüsselungsschlüssel für AES;
-Eine Datei mit dem Marker.
Steganographie im Dateisystem

Nach der Ausführung des Programms erscheint die Datei Read, die die aus dem gesteganographierten Dateisystem extrahierte Datei sein wird. Wenn der Schlüssel oder der Marker falsch angegeben wurden, wird die Datei Read leer sein.
(Für Liebhaber von Schönheiten kann nicht nur die Datei eingefügt werden, sondern auch ein "Header", der Metainformationen enthält: Dateiname, Berechtigungen, Zeit der letzten Änderung usw.)

Automatisierung des Starts

Zur Erleichterung wurden Bash-Skripte geschrieben, die den Start unter Linux automatisieren (getestet auf Ubuntu 16.04.3 LTS).
Lassen Sie uns den Start Schritt für Schritt durchgehen.
Aufzeichnung:

  1. sudo Copy_Flash.sh “DEVICE” – wir erhalten ein Abbild des Dateisystems aus DEVICE (Flash);
  2. .\/Write.sh “FILE” “KEY” “MARKER” – wir erstellen eine virtuelle Umgebung, laden die erforderlichen Bibliotheken herunter und starten das Skript zum Schreiben;
  3. sudo .\/Write_Flash.sh “DEVICE” – wir schreiben das geänderte Dateisystem erneut auf DEVICE.

Lesen:

  1. sudo Copy_Flash.sh “DEVICE” – wir erhalten ein Abbild des Dateisystems aus DEVICE (Flash);
  2. .\/Read.sh “KEY” ‘MARKER” – wir erstellen eine virtuelle Umgebung, laden die erforderlichen Bibliotheken herunter und starten das Skript zum Lesen;
  3. Im aktuellen Verzeichnis öffnen wir die Datei Read – das sind die gesteganographierten Informationen.

Fazit

Diese Methode der Steganographie benötigt wahrscheinlich Überarbeitungen, zusätzliche Tests und eine Erweiterung auf gängigere Dateisysteme wie Fat32, NTFS und ext4.
Das Ziel dieser Arbeit war es, das Prinzip zu zeigen, mit dem man versteckte Informationsspeicherung im Dateisystem realisieren kann.
Mit solchen Algorithmen kann man Informationen sicher speichern, und wenn es möglich ist, ein solches System bei Kenntnis des Schlüssels zu knacken, nicht durch vollständige Durchprobierung (aber durch einen sehr langen Algorithmus), so erscheint mir dieses System ohne Wissen des Schlüssels absolut widerstandsfähig; dies könnte jedoch einen Anlass für einen separaten Artikel geben.

Der gesamte Code ist in Python Version 3.5.2 implementiert. Beispielarbeit ist auf meinem YouTube-Kanal verfügbar. Der vollständige Code des Projekts ist veröffentlicht auf github.
(Ja, ich weiß, dass man für die Produktionsversion in etwas "Schnellem" schreiben sollte, wie z.B. in C 😉 )
In dieser Implementierung darf die Größe der Eingabedatei für die Steganographie 1000 kB nicht überschreiten.

Ich möchte dem Benutzer PavelMSTU für wertvolle Ratschläge bei der Planung der Forschung und Empfehlungen zur Ausgestaltung des Artikels danken.

Quelle: habr.com

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster