Steganographie im Dateisystem

Hallo, Habr.

Ich möchte Ihnen ein kleines Projekt zur Steganographie, das in meiner Freizeit entstanden ist, vorstellen.

Ich habe ein Projekt zur versteckten Speichermethode von Informationen im Dateisystem (im Folgenden FS).
) entwickelt. Dies könnte zu Bildungszwecken genutzt werden, um vertrauliche Informationen zu stehlen.

Steganographie im Dateisystem

Als Testbeispiel wurde ein recht altes Linux-Dateisystem ext2.

Implementierung

ausgewählt.

Implementierungsüberlegungen Wenn man das Standard-Ext2-Dateisystem gut analysiert, wird klar, dass im FS der sogenannteSuperblock existiert, der die grundlegenden Informationen über das System enthält. Ich habe außerdem die und Block-Bitmapund die Inode-Tabelle.

gefunden. Fast sofort kam die Idee auf, Informationen in die derzeit leeren Blöcke des FS zu schreiben. Jetzt musste ich mir einen Schutz gegen einen Programmierer überlegen, der mit einem Hex-Editorausgestattet ist. Wenn versteckte Informationen unverschlüsselt gespeichert werden, wird diese, selbst wenn sie im FS verwischt ist, dennoch zu stark ins Auge fallen, besonders wenn der Programmierer weiß, wonach er suchen soll. Daher wurde beschlossen, alle Blöcke der Quelldatei zu verschlüsseln. Ich wählte den Blockchiffrieralgorithmus

AES

, aber wie Sie verstehen, ist das nicht entscheidend.

Steganographie im Dateisystem

Aufzeichnungsalgorithmus

Schritt für Schritt:

  • Zunächst Informationen in das ursprüngliche Dateisystem schreiben;
  • Diese Informationen löschen (nicht unbedingt alle);
  • Die Datei, die verborgen werden soll, in Blöcke fester 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 Diagrammliebhaber

Nachfolgend ist das Flussdiagramm des Aufzeichnungsalgorithmus dargestellt. Der Algorithmus erhält vier Eingabedateien:
-Abbild des veränderbaren Dateisystems;
-Datei, die der Steganographie unterzogen werden soll;
-Datei mit dem AES-Verschlüsselungsschlüssel;
-Datei mit dem Marker.
Steganographie im Dateisystem

Es ist sofort zu erwähnen, dass dieser Algorithmus einen Nachteil hat: Nach dem Schreiben der Datei in das FS ist es nicht möglich Es ist wichtig, neue Informationen in das Dateisystem zu schreiben, da jede neue Information in die Bereiche gelangen kann, die wir unserem steganografierten Datei zugewiesen haben. Allerdings eröffnet dies auch die Möglichkeit, "Schnell die Spuren zu verwischen."

Es ist offensichtlich, wie das behoben werden kann: Der Schreibalgorithmus für die Blöcke im Dateisystem muss überarbeitet werden. Das ist zwar klar, aber eine unglaublich arbeitsintensive Aufgabe.
Für den Proof Of Concept habe ich das nicht realisiert.

Das Ergebnis sind folgende Änderungen im Dateisystem, so sieht das Dateisystem vor der Steganografie aus (zuvor wurde eine Audiodatei geschrieben).
Steganographie im Dateisystem
So sieht das Dateisystem mit bereits steganografierten Informationen aus.
Steganographie im Dateisystem

Lesealgorithmus

Schritt für Schritt:

  • Mit dem Wissen um den Schlüssel und die Art der Markierung die ersten N Marker erstellen, wobei garantiert wird, dass N multipliziert mit der Blocklänge des Dateisystems länger ist als die Länge der steganografierten Datei.
  • Die Suche nach Blöcken im Dateisystem durchführen, die mit Markern beginnen;
  • Die erhaltenen Blöcke entschlüsseln und die Marker abtrennen;
  • Die erhaltenen Blöcke in der richtigen Reihenfolge zusammenstellen und die ursprüngliche Datei erhalten.

Für Diagrammliebhaber

Nachfolgend ist das Flussdiagramm des Schreibalgorithmus dargestellt. Der Algorithmus erhält drei Dateien als Eingabe:
-Abbild des Dateisystems;
-Datei mit dem AES-Verschlüsselungsschlüssel;
-Datei mit dem Marker.
Steganographie im Dateisystem

Nach dem Ausführen des Programms wird eine Datei namens Read erstellt, die die aus der gesteganografierten Dateisystem-Datei extrahierte Datei sein wird. Wenn der Schlüssel oder der Marker falsch angegeben wurde, bleibt die Datei Read leer.
(Für die Ästheten: Man kann nicht nur die Datei, sondern auch einen „Header“ einfügen, der Metainformationen enthält: Dateiname, Berechtigungen, Zeit der letzten Änderung usw.)

Automatisierung des Starts

Zur Vereinfachung 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.
Schreiben:

  1. sudo Copy_Flash.sh “DEVICE” — wir erhalten ein Abbild des FS von DEVICE (Flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – wir erstellen eine virtuelle Umgebung, laden die benötigten Bibliotheken herunter und führen das Skript zum Schreiben aus;
  3. sudo ./Write_Flash.sh “DEVICE” – wir schreiben das modifizierte FS wieder auf DEVICE.

Lesen:

  1. sudo Copy_Flash.sh “DEVICE” — wir erhalten ein Abbild des FS von DEVICE (Flash);
  2. ./Read.sh “KEY” ‘MARKER” — wir erstellen eine virtuelle Umgebung, laden die benötigten Bibliotheken herunter und führen das Skript zum Lesen aus;
  3. Im aktuellen Verzeichnis öffnen wir die Datei Read – das ist die gesteganografierte Information.

Fazit

Diese Methode der Steganographie bedarf möglicherweise weiterer Verfeinerungen, zusätzlicher Tests und einer Erweiterung auf populärere Dateisysteme wie Fat32, NTFS und ext4.
Ziel dieser Arbeit war es, das Prinzip zu demonstrieren, mit dem man Informationen versteckt im Dateisystem speichern kann.
Mit solchen Algorithmen kann man Informationen sicher speichern. Wenn man den Schlüssel kennt, ist es möglich, ein solches System zwar durch Volltextsuche, jedoch mit einem sehr zeitaufwändigen Algorithmus zu knacken. Ohne den Schlüssel erscheint mir dieses System jedoch als absolut sicher, was jedoch Anlass für einen eigenen Artikel sein könnte.

Der gesamte Code ist in der Programmiersprache Python Version 3.5.2 implementiert. Ein Arbeitsbeispiel ist auf meinem YouTube-Kanal zu finden. Der vollständige Code des Projekts ist auf github.
(Ja, ich weiß, dass man für die Produktionsversion etwas "Schnelleres" wie C schreiben sollte. 😉)
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 für die Gestaltung des Artikels danken.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster