Steganographie

Seit 2002 veranstaltet der Entropia e.V. in Karlsruhe jährlich die Gulaschprogrammiernacht, das ist ein mehrtägiger Kongress, wo Nerds, Häcksen und Maker ihre Projekte vorstellen, Erfahrungen austauschen und Vorträgen lauschen. Die GPN15 fand Anfang Juni 2015 im ZKM und der HfG Karlsruhe statt. Hier hat Marius Musch in einem Vortrag eine Einführung in die Steganographie gegeben, und spricht nun mit Sebastian Ritterbusch im Podcast.

Bei der Steganographie geht es darum, eine geheime Nachricht so zu versenden, dass niemand außer dem gewünschten Empfänger die Existenz dieser Nachricht überhaupt vermutet. Der Begriff kommt aus dem griechischen und bedeutet in etwa "geheimes Schreiben". So wurden schon in der Antike erste simple Formen der Steganographie verwendet. Statt wie üblich die Nachricht in der Wachs auf einer Wachstafel zu kratzen, wurde die geheime Nachricht in das Holz darunter geritzt und wieder Wachs darüber gegossen. Anschließend konnte eine harmlose Nachricht in das Wachs geschrieben werden und die geheime Nachricht war verdeckt darunter.

Mit der Zeit wurden die Verfahren dann raffinierter, so wurde im Zweiten Weltkrieg aus einem japanischen Kriegsgefangenenlager eine scheinbar harmlose Postkarte verschickt. Liest man aber nur die ersten beiden Wörter jeder Zeile ergibt sich ein völlig neues Bild und es werden die Truppenverluste der Amerikaner kommuniziert. In in einem anderen Fall vereitelte amerikanische Kriegsgefangene Jeremiah Denton die Propagandaversuche in Vietnam während des Kalten Krieges. Während eines TV-Interviews blinzelte er wiederholt das Wort T-O-R-T-U-R-E in Morsecode.

In der heutigen Zeit ist es natürlich naheliegend die Steganographie in der digitalen statt der analogen Welt einzusetzen. So kann man zum Beispiel schon in (Plain-)Text eine geheime Nachricht verstecken. Viele Texteditoren zeigen standardmäßig Leerzeichen und Tabs am Zeilenende (trailing whitespace) nicht an. Dies macht sich das Tool SNOW (steganographic nature of whitespace) zu nutze, um geheime Nachrichten zu verstecken, oder man schreibt gleich komplette Programme in der etwas verrückten Programmiersprache Whitespace.

Deutlich verbreiteter und effektiver ist es aber als Tarn-Medium (das so genannter Cover) ein Bild zu nehmen. Bilder haben viele nützliche Eigenschaften, insbesondere dass geringe Änderungen für das menschliche Auge unsichtbar bleiben. Aber auch ihre Größe ist vorteilhaft da ein Bild leicht um den Faktor 1000 größer ist, als die darin zu versteckende Nachricht.

Bei einem Grauwertbild wird typischerweise ein Byte pro Pixel verwendet, also die Helligkeit jedes Bildpunktes wird durch einen Wert zwischen 0 für Schwarz und 255 für Weiß repräsentiert. Dieses Byte besteht wiederum aus 8 Bits, zum Beispiel der Folge 11110000 für den Wert 120. In der Steganographie kann man sich zu Nutze machen, dass das hinterste Bit (least significant bit) nur sehr wenig zum eigentlichen Farbwert beträgt. Es entscheidet nur ob die Zahl gerade oder ungerade ist und wenn der Wert geändert wird, fällt einem Menschen dieser geringe Helligkeitsunterschied gar nicht auf. Somit kann man nun seine geheime Nachricht von den ASCII-Werten in Binärzahlen konvertieren und anschließend in den least significant Bits (LSBs) einbetten. Man braucht also 8 Pixel pro Buchstabe. Weitere Verfahren gibt es auf Basis spezieller Eigenschaften von Datenformaten wie GIF, PNG oder JPEG.

Bei der Steganographie gibt es aber auch einiges zu beachten. Besonders wichtig ist es die Nachricht vor dem Einbetten zu verschlüsseln. Zum einen kann uns ein Angreifer, der das Verfahren kennt und die Nachricht extrahiert, sie trotzdem nicht lesen. Zum anderen lässt sich ein gut verschlüsselter Ciphertext nicht von echtem Zufall unterscheiden, um Angriffe zu erschweren. Hat man aber Zugriff auf das Orginalbild, so wird der Unterschied und damit die Nachricht offensichtlich- hier sind besonders umgekehrte Bildersuchen hilfreich.

Im realen Einsatz sind meist Wasserzeichen, die Verfahren der Steganographie verwenden. Anders als bei der Steganographie, wo das Cover völlig irrelevant für die geheime Nachricht war, bezieht sich bei den Wasserzeichen die versteckte Nachricht auf das Cover. So bestätigt das Wasserzeichen auf einem Geldschein die Authentizität eben dieses Scheines. Es gibt aber auch Wasserzeichen die lange unbekannt waren. Zum Beispiel gibt es einige Drucker bekannter Hersteller, die in die ausgedruckten Seiten ein kaum sichtbares gelbes Punktemuster einbauen. In diesem Wasserzeichen steht sowohl das Datum des Druckes als auch die Seriennummer des Druckers. Auf Geldscheinen gibt es gelben Punkte in der EURion-Konstellation, die von Kopierern, Scannern und Software erkannt werden. Aber auch Spieler von Onlinerollenspielen wie World of Warcraft sind vor Wasserzeichen nicht sicher. So wurde 2012 in einem Forum bemerkt, dass die Screenshots aus dem Spiel per Wasserzeichen den Accountname und die Server-IP des Spielers beinhalten.

Allerdings hinterlässt die Steganographie auch immer zwangsweise ihre Spuren, da das Bild manipuliert werden muss. Um die oben beschriebene LSB-Methode durch eine Steganalyse zu erkennen, reicht es sich das Histogramm des Bildes anzuschauen, denn durch das Verfahren ergeben sich treppenartige Abstufungen. Dies wiederum versucht das Tool Outguess zu vermeiden, indem es die LSB Änderungen geschickt über die Datei verteilt und das Histogramm unauffällig bleibt. Beliebte Angriffsmethoden sind auch die Autokorrelation und die FFT über das Wiener-Chintschin-Theorem, womit eine sehr effiziente Berechnung möglich wird.

Das aktuelle Folgenbild des Podcasts zeigt ein Bild mit steganographisch versteckter Nachricht, das Marius für einen Capture the Flag-Wettbewerb auf der GPN14 im letzten Jahr erstellt hatte und jetzt erklärt.

Auch auf der GPN15 gab es dieses Jahr wieder einen Capture the Flag Wettbewerb, veranstaltet von den Squareroots aus Mannheim und KITCTF aus Karlsruhe. Auch dieses Jahr lag der Fokus auf IT-Sicherheit: Die teilnehmenden Teams erhalten eine virtuelle Maschine (Vulnbox) mit mehreren verwundbaren Diensten, die sie analysizeren, die Ausnutzbarkeit prüfen und letztlich absichern sollen. Ein zentraler Gameserver verteilt sogenannte Flaggen an alle Teams, das sind lange zufällige Zeichenketten. Diese Flaggen gilt es zu verteidigen und durch Finden und Ausnutzen von Sicherheitslücken in den Diensten der anderen Teams zu stehlen und für Punkte beim Veranstalter einzureichen.

Beim CTF auf der GPN15 gab es 11 teilnehmende Teams, die sich über einen Zeitraum von 5 1/2 Stunden insgesamt 7600 Flaggen gestohlen haben. Wer mehr über CTFs erfahren möchte, sollte insbesondere den CTF Field Guide lesen. Eine Übersicht über anstehende Veranstaltungen und die verschiedenen Teams findet man unter CTF Time.

Literatur und Zusatzinformationen