Hallo, Habr.
Ich möchte Ihnen ein kleines Projekt zur , 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.

Als Testbeispiel wurde ein recht altes Linux-Dateisystem .
Implementierung
ausgewählt.
Implementierungsüberlegungen Superblock und und die .
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 ausgestattet 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.

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.

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).

So sieht das Dateisystem mit bereits steganografierten Informationen aus.

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.

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:
- sudo Copy_Flash.sh “DEVICE” — wir erhalten ein Abbild des FS von DEVICE (Flash);
- ./Write.sh “FILE” “KEY” “MARKER” – wir erstellen eine virtuelle Umgebung, laden die benötigten Bibliotheken herunter und führen das Skript zum Schreiben aus;
- sudo ./Write_Flash.sh “DEVICE” – wir schreiben das modifizierte FS wieder auf DEVICE.
Lesen:
- sudo Copy_Flash.sh “DEVICE” — wir erhalten ein Abbild des FS von DEVICE (Flash);
- ./Read.sh “KEY” ‘MARKER” — wir erstellen eine virtuelle Umgebung, laden die benötigten Bibliotheken herunter und führen das Skript zum Lesen aus;
- 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 , und .
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. ist auf meinem YouTube-Kanal zu finden. Der vollständige Code des Projekts ist auf .
(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 für wertvolle Ratschläge bei der Planung der Forschung und Empfehlungen für die Gestaltung des Artikels danken.
Quelle: habr.com
