Steganographie im Dateisystem der optischen Scheibe

Auf der Suche nach interessanten Informationen über Steganographie stieß ich auf einen unterhaltsamen Artikel über Steganographie im Dateisystem , der mich nach einer Weile auf die Idee brachte, Steganographie im Dateisystem von optischen Datenträgern zu erstellen.

Wahrscheinlich gibt es heutzutage fast keine Menschen mehr, die im Alltag Festplatten verwenden würden, weil eine würdigere Option angesichts von Flash-Laufwerken kam, um sie zu ersetzen.

Mit ein wenig Nachdenken entschied ich, dass die Discs immer noch eine Verwendung finden, zum Beispiel in ihrem Dateisystem. Sie können einige geheime Informationen verbergen und sie dann auf eine andere übertragen, damit niemand etwas ahnt.

Dies ist, was wir tun werden, nämlich: Wir werden die Python-Bibliothek verwenden, die uns hilft, Informationen aus einer Textdatei zu verschlüsseln und sie dann im Darm unserer Festplatte zu verstecken.

Bild

Bevor wir beginnen, werfen wir zunächst einen Blick auf einige der kleinen Dinge und definieren auch das Konzept einer optischen Platte.

Was ist eine optische Platte?


Optische Scheibe (Eng. Optische Scheibe) - der Sammelbegriff für Speichermedien in Form von Scheiben, deren Ablesung mit optischer (Laser-) Strahlung erfolgt.

Bild

Jede Festplatte auf dem Computer wird in einem bestimmten Format in Form eines Abbilds dargestellt , das alle Informationen und die Struktur der Festplatte enthält. Sie wird verwendet, um mit Informationen ohne optisches Medium zu arbeiten und Daten auf festen Medien zu archivieren
Das Standardformat für optische Discs ist iso9660 , aber es gibt immer noch
Beachten Sie, dass das Image weniger Informationen enthält als die Original-CD. Die Disc enthält Serviceinformationen, die insbesondere zum Schutz vor dem Kopieren verwendet werden können. Wir werden mit ISO9660 arbeiten.

Innenblick


Und jetzt schauen wir uns die Struktur von iso9660 von innen an. Detaillierte Informationen finden Sie hier , hier und hier und für diejenigen, die auch hier Englisch können. Ich selbst möchte nur sagen, dass es hauptsächlich aus zwei Deskriptoren besteht: Boot Record und Primary Volume Descriptor (PVD) . Sie können jede ISO in 010editor öffnen und sich selbst davon überzeugen .

Bild

Boot Record kann von Systemen verwendet werden, die viele Datentypen initialisieren müssen, bevor eine Festplatte verfügbar gemacht wird, obwohl ISO 9660 nicht angibt, welche Informationen in Boot Record enthalten sind oder wie sie überhaupt verwendet werden sollen.

PVD ist der Ausgangspunkt für die Identifizierung von iso9660, es sieht so aus:

Bild

Bild

Für Liebhaber von Programmen:

Bild

Weitere Informationen finden Sie hier.

Und wir gehen weiter.

Initialisierung in der ISO-Struktur


Wir werden mit dem Stammverzeichnis arbeiten, darin werden wir unsere eigenen Verzeichnisse erstellen und die erforderlichen Dateien hinzufügen.

Hierfür verwenden wir die pycdlib- Bibliothek, die Sie unter folgendem Link kennenlernen können.

Fahren wir mit dem Schreiben des Programms fort, aber wer nicht Schritt für Schritt vorgehen möchte, findet den Quellcode unter dem Link zu meinem Repository in github:

#     import base64 import pycdlib 

Bereiten Sie Dateien mit Text vor


Jetzt müssen wir unsere Dateien vorbereiten, die wir in die Struktur unserer ISO einfügen werden.

Die Vorgehensweise ist wie folgt:

  1. Wir nehmen den Quelltext in bestimmte Dateien und lesen ihn in Variablen ein - nichts hindert uns daran, viel Text aufzunehmen, aber zur Demonstration habe ich in jeder Datei nur ein paar Sätze verwendet - wir werden diese Variablen weiterhin bearbeiten
  2. Nachdem wir die Sätze betrachtet haben, müssen wir den Inhalt codieren. Wir werden mit base64 codieren
  3. Wir schreiben den codierten Inhalt in neue Dateien mit den Namen UP und DOWN . Die Dateien werden so genannt, weil ich beschlossen habe, sie so neu anzuordnen, dass 1 Teil der 1. Datei und 1 Teil der 2. Datei (d. H. Die oberen Teile) in UP und in DOWN 2 Teile der 1. Datei und 2 Teile der 2. Datei ( d.h. untere Teile)

 with open('/home/ul/stegist1.txt','rb') as stegist1:#   for line1 in stegist1.readlines(2): print(line1)#   1  for line2 in stegist1.readlines(2): print(line2)#   1  stegist1.close() enc_line1=base64.b64encode(line1)#     base64 enc_line2=base64.b64encode(line2) with open('/home/ul/stegist2.txt','rb') as stegist2: for line3 in stegist2.readlines(2):#   2  print(line3) for line4 in stegist2.readlines(2):#   2  print(line4) stegist2.close() enc_line3=base64.b64encode(line3)#   print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up:#  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down:#  DOWN    down.write(enc_line2) down.write(enc_line4) 

Verschleierung


Es ist Zeit, zu der Pycdlib-Bibliothek überzugehen, über die ich am Anfang gesprochen habe. Es ist nicht schwer, damit zu arbeiten: Wir erstellen ein Objekt, über das wir verschiedene Dateien und Verzeichnisse hinzufügen.

 iso=pycdlib.PyCdlib() #   PyCdlib iso.new(rock_ridge='1.09')#  rockridge(    iso   ) iso.add_directory(iso_path='/A1',rr_name='a1')#  (  ) iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a')#   up iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b')#   down iso.write('papastegisto.iso')#  iso () 

Wie wir sehen können, wurde unser Text erfolgreich geschrieben

Bild

Ich möchte darauf hinweisen, dass wir in einem bestimmten Pfad, zum Beispiel / A , entweder eine Datei oder einen Ordner erstellen können.

Wenn wir zuerst die Erstellung eines Verzeichnisses in / A und dann die Erstellung einer Datei in / A angeben , wird eine Fehlermeldung angezeigt, die nicht mit dem Ablegen der Datei in einem Ordner identisch ist.

Erweiterungen für das ISO9660-Dateisystem


Es gibt 2 Haupterweiterungen für das ISO- Dateisystem: RockRidge und Joilet .

Rockidge


Dies ist eine ISO 9660-Dateisystemerweiterung zum Speichern von Dateiattributen, die in POSIX-Betriebssystemen verwendet werden (d. H. Unix-kompatibel).

Rock Ridge-Erweiterungen werden über das ISO 9660-Dateisystem geschrieben, sodass die optische Rock Ridge-Disc von einer Software gelesen werden kann, die für die Verwendung mit ISO 9660 entwickelt wurde.

Weitere Details
Rock Ridge speichert möglicherweise die folgenden zusätzlichen Informationen zum Inhalt der Disc:

  • lange Dateinamen (bis zu 255 Zeichen);
  • weniger Einschränkungen bei der Verwendung von Zeichen in Dateinamen;
  • Verzeichnisstruktur der willkürlichen Verschachtelung.
  • Für jede Datei werden Attribute geschrieben:
  • Dateiberechtigungen, einschließlich UID- und GID-Felder;
  • Anzahl der festen Links zur Datei;
  • Zeiten der Erstellung, Änderung, des Zugriffs, der Änderung von Attributen usw.
  • Unterstützte Spezialdateien:
  • spärliche Dateien;
  • symbolische Links;
  • Gerätedateien
  • Socket-Dateien
  • FIFO-Dateien.

Diese Daten werden in speziellen Verzeichnissen gespeichert, deren Namen normalerweise ausgeblendet sind.

Joilet


Dies ist eine ISO 9660-Dateisystemerweiterung, mit der die durch ISO 9660 auferlegten Dateinamenbeschränkungen vereinfacht werden sollen. Die Spezifikation wurde von Microsoft entwickelt und wird seit Windows 95 und Windows NT 4.0 von allen Versionen von Microsoft Windows unterstützt.
Standardmäßig wird es auf allen CD-ROM-Medien mit Daten verwendet, die nach 1995 veröffentlicht wurden.

Weitere Details
Joliet führt einen zusätzlichen Satz von Dateinamen ein. Namen bestehen aus bis zu 64 Unicode-Zeichen und werden in UCS-2-Codierung gespeichert. Für ihre Speicherung wird ein spezieller zusätzlicher Header (Supplementary Volume Descriptor, SVD) verwendet, der von ISO 9660-kompatiblen Programmen unbedingt ignoriert wird, um die Abwärtskompatibilität sicherzustellen.

Die meisten vorhandenen Softwareplattformen, einschließlich Microsoft Windows, Linux, Mac OS X und FreeBSD, können Speichermedien mit der Dateisystemerweiterung Joliet lesen, mit der Sie Dateien zwischen diesen Betriebssystemen austauschen können, auch wenn nicht lateinische Alphabete (wie Arabisch, Japanisch, Kyrillisch) verwendet werden. was mit der üblichen ISO 9660 nicht möglich war.

Tatsächlich gibt es auch eine 3-Erweiterung für das ISO-Dateisystem, Romeo .

Dies ist eine Erweiterung von ISO 9660 für MS Windows 95, es gibt nicht genügend Informationen im Internet und höchstwahrscheinlich wird diese Erweiterung nirgendwo anders verwendet.

Weitere Informationen zu Erweiterungen und Dateisystemen für CD / DVD finden Sie hier . Kehren wir nun zu unserem Programm zurück.

Der resultierende Code zum Codieren von Informationen aus einer Datei und zum Platzieren von Dateien mit codierten Informationen in ISO sieht folgendermaßen aus:

 #     import base64 import pycdlib #   with open('/home/ul/stegist1.txt','rb') as stegist1: #  for line1 in stegist1.readlines(2): print(line1) #  for line2 in stegist1.readlines(2): print(line2) #  enc_line1=base64.b64encode(line1) print(enc_line1) enc_line2=base64.b64encode(line2) print(enc_line2) with open('/home/ul/stegist2.txt','rb') as stegist2: #  for line3 in stegist2.readlines(2): #  print(line3) for line4 in stegist2.readlines(2): #  print(line4) enc_line3=base64.b64encode(line3) #  print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up: #  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down: #  DOWN    down.write(enc_line2) down.write(enc_line4) #   iso iso=pycdlib.PyCdlib() iso.new(rock_ridge='1.09') iso.add_directory(iso_path='/A1',rr_name='a1') iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a') iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b') iso.write('papastegisto.iso') 

Und ich erinnere Sie daran, dass der vollständige Code auch über den Link zum Github verfügbar ist
Fahren wir nun mit dem letzten Teil fort - schreiben Sie unsere resultierende ISO auf die Festplatte
Sie können aufnehmen, was Sie wollen, ich werde Nero 7 verwenden
Wir werden CD-R verwenden
CD-ROM, CD-R und CD-RW
Sie unterscheiden sich darin, dass die CD-ROM eine schreibgeschützte Festplatte ist und dort nichts geschrieben werden kann. CD-R und CD-RW sind beschreibbare Discs. Mit CD-R können Sie wiederholt auf eine CD, CD-RW, schreiben.

Aber was ist mit der DVD?

Der Hauptunterschied zu CD-R / RW besteht in der Datenmenge, die auf eine 4,7-GB-DVD-ROM geschrieben werden kann, gegenüber 650.700 MB. Einige DVD-Formate unterstützen bis zu 13 und sogar 17 GB
Weitere Disc-Informationen

Wie wir sehen können, wurde das Programm erfolgreich auf die Festplatte geschrieben.

Bild

Jetzt können wir es auf Festplatte an die gewünschten Personen übertragen.

Dekodierung


Warum sollten wir das alles tun, wenn die Informationen nicht zurück dekodiert werden können?

Wenn Sie an der Methode interessiert sind, können Sie ein Programm schreiben, das die angehängten Dateien extrahiert und dekodiert. Es ist genau das, was Ihre Mitarbeiter verwenden werden.

Und das ist alles. Meine Aufgabe war es, eine der Möglichkeiten aufzuzeigen, wie Informationen mithilfe von Datenträgern versteckt werden können, die anscheinend in Vergessenheit geraten sind.

Bild

Ich freue mich über Ihre Vorschläge, Ergänzungen, Korrekturen und sonstigen Rückmeldungen.

PS Ich möchte mich bei @PavelMSTU ganz besonders für die Beratungen und Motivationskicks bedanken .

Source: https://habr.com/ru/post/de449016/


All Articles