Daten|teiler
Kopieren als Kulturtechnik

Steganografie für Anfänger

19. Oktober 2006 von Christian Imhorst

Für die August-Ausgabe der Hakin9 habe ich meinen dieses Posting „recycelt“. Der neue Artikel ist etwas anders strukturiert und um Befehle für die PowerShell erweitert worden:

Steganografie ist die Kunst, Information zu tarnen, um sie verborgen zu übermitteln. Ihr Zweck ist also, geheime Information mithilfe anderer unverfänglicher Information so zu verbergen, dass sie von einem unbedarften Beobachter (Mensch oder Maschine) nicht erkannt wird.

Steganografie kommt aus dem Griechischen und heißt „geheimes Schreiben“. Herodot berichtet, dass einem Sklaven der Kopf geschoren wurde, um die Nachricht auf seine Kopfhaut zu tätowieren. Als das Haar wieder nachgewachsen war, wurde er zum Empfänger der geheimen Nachricht geschickt, der den Kopf des Sklaven wieder rasiert hat, um sie lesen zu können. Die Haare haben also die eigentliche Nachricht verdeckt. Ähnlich funktioniert Steganografie noch 2500 Jahre danach. Eine geheime Nachricht wird in einer anderen Nachricht, zum Beispiel in einer Bilddatei versteckt. Dem Empfänger muss natürlich bekannt sein, dass das Bild eine geheime Nachricht enthält, so wie dem Empfänger in der Antike klar sein musste, dass sich die Nachricht unter dem Haar des Sklaven befindet. Wenn das Originalbild fehlt, ist es sehr schwierig herauszufinden, ob ein Bild eine Geheimbotschaft verdeckt oder nicht. Die meisten Steganogramme werden enttarnt, wenn sie mit der Originaldatei verglichen werden und sich daraus Abweichungen ergeben. Wenn das Original gelöscht wurde und – vorausgesetzt – es wurde ein gutes Bild mit vielen Unschärfen, hoher Pixelzahl und wenig Kanten gewählt, dann ist im Prinzip nicht mehr festzustellen, ob eine Bilddatei ein Steganogramm ist, oder nicht.

Auf der Internet-Seite http://www.thetechtray.net/videos/rar/ (Seite existiert nur noch im Internet Archive) gab es ein kleines Tutorial, das zeigt, wie man eine Textdatei ohne aufwendige Software in einer Bilddatei mit Windows Bordmitteln verstecken kann:

  1. Gather your image and the files you wish to lodge into it. Here I have a meeting.txt which I will slap inside my secret.jpg
  2. Add the files you want to hide into a new RAR archive meeting.txt.rar
  3. Open Command Prompt cmd
  4. Go to the folder where your files are located, in this case C:\hidden
  5. Type copy /b secret.jpg + meeting.txt.rar lizard.jpg where secret.jpg is the original picture, meeting.txt.rar is the file to be hidden, and lizard.jpg is the file which contains both.
  6. Test the JPG by opening it, and verifying it still opens. If it does, try opening the file with WinRar!

Die Macher weisen jedoch darauf hin, dass es nicht die sicherste Methode ist, da die Informationen nicht verschlüsselt werden, und mit einem einfachen Archivprogramm wie unzip oder unrar wieder ausgelesen werden können. Doch zumindest kann man so Dateien vor dem durchschittlichen Computernutzer verstecken.
Die große Stärke des Tutorials ist leider auch seine Schwäche: Es wird zwar gezeigt, wie man allein mit Bordmitteln Steganografie betreiben kann, unglücklicherweise ist das Tutorial aber nur für die Windows-Befehlszeile geschrieben. Hier kommt also die Version mit dem Bordmittel von Unix — der Kommandozeile, die z.B. mit der Bash in vielen Linux-Distributionen und in MacOS X vorhanden ist:

touch meeting.txt
echo "Dies ist der geheime Text" > meeting.txt 

Mit dem Befehl touch erzeugt man die Datei meeting.txt, in die dann der Satz „Dies ist der geheime Text“ eingefügt wird.

zip meeting.txt.zip meeting.txt 
   updating: meeting.txt (stored 0%)

Dann wird die Datei mit einem Archivprogramm gepackt, hier z.B. zip.

cat pingu.jpg meeting.txt.zip > secret.jpg

Der Unix-Befehl cat wird dazu genutzt, um zwei Dateien miteinander zu verketten. In diesem Fall sind es secret.jpg und meeting.txt.zip, die zu der Datei pingu.jpg werden.

Danach löscht man die Original- und die Zip-Datei von meeting mit dem Befehl rm.

rm -rf mee*

Mit dem Befehl unzip kann man sie jeder Zeit wieder aus dem Steganogramm extrahieren.

unzip secret.jpg 
   Archive:  secret.jpg
     extracting: meeting.txt
         
cat meeting.txt
   Dies ist der geheime Text 

Den Inhalt der gelöschten und nun wieder entpackten Datei meeting.txt kann man sich im letzten Schritt mit dem Befehl cat anschauen und erhält: „Dies ist der geheime Text“. Man sieht also, dass das Steganogramm sehr leicht auszulesen ist. Wenn man die Größe der beiden Dateien im Terminal mit ls -l vergleicht, sieht man auch, dass secret.jpg 180 Byte größer ist, als das Originalbild:

-rw-r--r-- 1 christian christian    26   2008-08-28 11:00 meeting.txt
-rw-r--r-- 1 christian christian 37244 2008-05-13 21:07 pingu.jpg
-rw-r--r-- 1 christian christian 37424 2008-08-28 11:00 secret.jpg
 

Dadurch wird sofort klar, dass secret.jpg etwas verbirgt und das Steganogramm ist leicht entarnt. Diese Methode ist also nicht sehr sicher.

secret.jpg

Das Ergebnis ist dieses Bild: secret.jpg

Allerdings wird hier auch ein weiterer Nachteil der Steganografie klar: Sie ist symmetrisch. Das heißt Sender und Empfänger müssen sich gegenseitig darüber informieren, dass ein Steganogramm unterwegs ist und, sollte es verschlüsselt sein, mit welcher Passphrase es verschlüsselt ist. Diese Form der Verschlüsselung ist anfällig für Angriffe, um den Code zu knacken. Z.B. schaltet sich beim Man-in-the-middle-attack jemand zwischen Sender und Empfänger und schneidet die Passphrase und das Steganogramm mit.

Um diese Sicherheitslücke zu umgehen wird Steganografie meist zusammen mit asymmetrischer Verschlüsselung benutzt. Mit einem Programm wie PGP oder GnuPG wird ein Schlüsselpaar erstellt. Das eine ist ein geheimer und das andere ein öffentlicher Schlüssel. Der öffentliche Schlüssel kann möglichst weit verteilt werden, z.B. kann man meinen im Impressum finden. Wenn mir jemand eine Nachricht schreibt, die mit meinem öffentlichen Schlüssel verschlüsselt ist, dann kann nur ich sie mit meinem geheimen Schlüssel entschlüsseln. Wenn jemand nicht wissen soll, dass ich mir mit einer weiteren Person verschlüsselte Botschaften austausche, verstecken wir sie in Steganogramme. Das macht vor allem in Ländern Sinn, die Verschlüsselung verbieten. Sollte das Steganogramm enttarnt werden, dann hat der Angreifer zwar die verschlüsselte Botschaft, kann sie aber ohne meinen geheimen Schlüssel nicht lesen. Selbst wenn er meinen geheimen Schlüssel stehlen sollte, braucht er noch meine Passphrase, um die Botschaft entschlüsseln zu können. Steganografie kombiniert mit asymmetrischer Verschlüsselung ist in der Regel nur dann sinnvoll, wenn geheime Nachrichten zwischen Sender und Empfänger ausgetauscht werden und niemand wissen soll, dass es sich dabei um geheime Nachrichten handelt. Dafür sollte man aber professionellere Methoden und Programme wie Outguess oder Steghide verwenden.

Geschrieben in Gnu/Linux, Krypto