Hallo Habr.
Ich möchte Ihnen ein kleines Projekt vorstellen
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.
Als Prototyp wurde ein sehr alter Linux FS gewählt
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
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
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.
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.
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).
Und so sieht der FS mit bereits gezippten Informationen aus.
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.
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:
- sudo Copy_Flash.sh "DEVICE" – Holen Sie sich das FS-Image von DEVICE (Flash);
- ./Write.sh „FILE“ „KEY“ „MARKER“ – Erstellen Sie eine virtuelle Umgebung, laden Sie die erforderlichen Bibliotheken herunter und führen Sie das Schreibskript aus;
- sudo ./Write_Flash.sh „DEVICE“ – schreibt den geänderten FS zurück auf DEVICE.
Lektüre:
- sudo Copy_Flash.sh "DEVICE" – Holen Sie sich das FS-Image von DEVICE (Flash);
- ./Read.sh „KEY“ „MARKER“ – Erstellen Sie eine virtuelle Umgebung, laden Sie die erforderlichen Bibliotheken herunter und führen Sie das Skript zum Lesen aus;
- Ö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
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.
(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
Source: habr.com