Sichere Kommunikation ohne Verschlüsselung – Wie man Nachrichten in Dateien versteckt
Steganographie ist die Kunst, Mitteilungen getarnt zu verschicken. Versteckt in anderen Nachrichten bleiben sie vor fremden Blicken bewahrt – egal, ob es sich dabei um Dateien oder Eure Kopfhaut handelt. Wir erklären die Theorie hinter Steganographie, etwa wie sich Nachrichten in ganz normalen Dateien verstecken lassen, ohne deren Inhalte oder Attribute zu verändern. Und auch die Gegenspionage kommt nicht zu kurz - aber das Entlarven ist schwierig. Und natürlich zeigen wir auch die erfreulich simple praktische Seite des Hightech-Spickens - per Workshop geht das auch ohne Therie mit ein paar Klicks.
Steganographie einfach erklärt
Die einfachste Art zu erklären, was genau Steganographie ist, ist zu sagen, was sie nicht ist – nämlich Kryptographie. Bei der Kryptographie werden Nachrichten verschlüsselt, Außenstehende sehen also eine Botschaft, nicht aber ihren Inhalt. Nun lässt in vielen Situationen aber schon der eigentliche Versand ungewollte Rückschlüsse zu; wenn Schüler sich etwa gegenseitig Zettelchen zustecken, um zu spicken, reicht es, wenn der Lehrer dies mitbekommt, um Ärger zu bekommen – vollkommen egal, was auf dem Zettel steht und ob es zu entziffern ist. Also geht man besser steganographisch vor und versteckt die Nachricht in etwas Unauffälligem.
Natürlich benötigt der Empfänger auch hier wie bei der Kryptographie einen Schlüssel, um die Nachricht auszulesen. Ein ganz einfaches Beispiel wäre etwa ein Text, dessen jeweils erste Buchstaben einer jeden Zeile eine Nachricht darstellen. Wer dieses System nicht kennt, sieht nur den offensichtlichen, unverfänglichen Text, ohne auch nur zu ahnen, dass eine versteckten Botschaft darin steckt.
Eine kleine Geschichte der Steganographie
Eine andere simple Technik wurde schon in fernster Vergangenheit zur Kommunikation in Kriegszeiten genutzt: Dem Überbringer, einem Sklaven, wurde die Nachricht in die Kopfhaut tätowiert und sobald die ersten Haare nachgewachsen waren, hatte man eine versteckte Botschaft, die sicherlich nur entdeckte, wer explizit danach suchte – eine arg zeitaufwändige Methode und eine eher schlecht versteckte Botschaft, aber sie zeigt gut, wie vielfältig Steganographie ist.
Bekanntere Methoden sind der doppelte Boden im Koffer, unsichtbare Tinte oder so genannte Mikropunkte. Solche Mikropunkte könnten etwa die i-Punkte in einem Text sein, die bei extremer Vergrößerung einen mikroskopisch kleinen Text offenbaren. Von einigen Druckerherstellern ist bekannt, dass Ausdrucke derartige Punkte mit Informationen zum Druckermodell und so weiter enthalten – winzig klein, hellgelb, in den Ecken und somit kaum erkennbar. Nun gehen wir aber mal davon aus, dass Ihr weder spickender Schüler, noch Druckerhersteller geschweige denn antiker Feldherr seid. Wie sieht es also mit der Steganographie heute aus, für Euch als IT-Nutzer? Aber vorweg: Keine Sorge, so kompliziert die Theorie klingen mag, so einfach ist später Praxis.
Steganographie am PC nutzen
Am PC lässt sich Steganographie hervorragend nutzen, um über Kanäle wie E-Mail, WWW oder soziale Netzwerke unerkannt zu kommunizieren. Die bekanntesten Möglichkeiten sind hier das Verstecken von Botschaften in Bildern oder Audiodateien sowie die Verteilung über Webseiten, Blogs und ähnliches. Für die Verteilung via Webseiten könntet Ihr etwa Fragmente Eurer Botschaft, der Einfachheit halber gehen wir mal von einem einzelnen Wort aus, als Kommentar auf wenig besuchten oder gar verwaisten Blogs hinterlassen. Nur wer alle zur Nachricht gehörenden Kommentare kennt, kann sie zusammensetzen – und dass so leicht niemand zufällig ein solches Schema erkennen wird, dürfte klar sein. Gängiger, nützlicher und vor allem auch praktisch nutzbar ist aber vor allem das Verbergen von Botschaften in Dateien, worauf wir uns im Folgenden auch konzentrieren wollen. Computergestützte Steganographie ist alles in allem ein sehr komplexes Thema, das viel mit Mathematik und Detailkenntnissen über Dateistrukturen zu tun hat und auch weltweit Wissenschaftler beschäftigt.
Verschiedene Methoden zum Verstecken
Fangen wir aber ganz einfach an: Grundsätzlich könnt Ihr Botschaften auf zwei Arten in einer Datei verstecken. Erstens könnt Ihr die Botschaft an die Datei anhängen beziehungsweise sie hinzu addieren. Dateien beginnen in der Regel mit einem so genannten Header; in diesem Anfangsbereich steckt etwa die Information, um was für eine Dateiart (JPG, MP3, usw.) es sich handelt. Dann folgen der eigentliche Inhalt und die Markierung des Dateiendes. Nun ließe sich eine Nachricht beispielsweise als Kommentar in einen solchen Header integrieren oder hinter das eigentliche Dateiende hängen. Für den Betrachter sähe eine derart manipulierte Bilddatei in einem Bildbetrachter genau so aus wie das Original. Diese Methode ist allerdings wenig elegant und bringt ein massives Problem mit: Die Dateigröße wächst. Dazu ein Beispiel: Eine Botschaft muss natürlich kein Text sein, es kann sich genauso gut um ein weiteres Bild handeln, das Ihr in einem anderen verbergt. Wenn Ihr nun ein 3-MB-großes Bild in einem 5-MB-großen Bild versteckt, habt Ihr schlussendlich eine rund 8-MB-große Datei – spätestens wenn das Original vorliegt, würde also jeder mit bloßem Auge eine Manipulation erkennen; mehr dazu unter Steganalyse. Dem Ziel der Steganographie, der Nichterkennbarkeit von Nachrichten, wird der folgende übliche Ansatz eher gerecht – jetzt wird’s technisch!
Das langweilige BIT
Zweitens: Statt die Daten der Nachricht einfach einer Datei hinzuzufügen, kann man auch Bereiche der Originaldatei entfernen und durch die Bestandteile der zu versteckenden Nachricht ersetzen. Der Clou: Das ganze funktioniert, ohne dass der Inhalt der Trägerdatei, also das Bild oder der Ton, anders wahrgenommen wird. (Denkt mal an verlustfrei komprimierte Audiodateien, auch da wird die Datei selbst massiv verändert, ohne dass der Inhalt anders klingt.) Dateien bestehen aus Bytes, die wiederum jeweils aus acht Bit bestehen, also Werten in der Form von 01, 11 und so weiter. Nun ist aber nicht jedes Bit jedes Bytes nötig, um etwa eine Bitmap-Grafik korrekt darzustellen, es gibt, lapidar ausgedrückt, ein unwichtiges, langweiliges Bit, in der Fachsprache Least Significant Bit (LSB) genannt, also das am wenigsten signifikante Bit. Um eine Nachricht zu verstecken, werden bei dieser sehr bekannten Methode die LSBs durch die Bits der Nachricht ersetzt. So könntet Ihr bei einem RGB-Bild in jedem Pixel 3 Bit verstecken, indem Ihr den jeweiligen LSB der einzelnen RGB-Farbinformationen (Rot '(R), Grün (G) und Blau (B)) ersetzt. Anschließend können gezielt diese Bits sehr einfach wieder ausgelesen und zu der Nachricht zusammengesetzt werden.
Audiodateien zum Datenverstecken
Noch mehr Möglichkeiten zum Verstecken von Nachrichten bieten die komplexen Datenstreams von Audiodateien, hier werden Informationen meist beim Kodieren von WAV nach MP3 mit eingefügt. Überhaupt: Audiodateien rauschen ja mitunter, etwa bei schlechten oder besonders alten Aufnahmen oder digitalisierten Vinyl-Platten. Und natürlich findet sich auch dieses Rauschen innerhalb der Datei als Bits und Bytes wieder – was wiederum ein perfekter Platz zum Verstecken ist, denn das Rauschen selbst fällt kaum auf, von minimalen Veränderungen im Rauschen ganz zu schweigen. (Datei-) Rauschen nennt man generell auch die natürlichen Variationen in Bild- und sonstigen Dateien, die das unbemerkte Verstecken und Austauschen von einzelnen (unwichtigen) Bits ermöglichen. Neben dem Tauschen von LSBs gibt es noch viele weitere Verfahren, Botschaften zu verstecken, die LSB-Methode ist aber wohl die gängigste und sie zeigt sehr gut, welche komplexen Möglichkeiten sich mit Steganographie ergeben.
Nicht nur Nachrichten, sondern ganze Dateien!
Und wie gesagt, es können auch ganze Dateien versteckt werden. Dazu gibt es ein interessantes Beispiel mit praktischer Bedeutung: Kennt Ihr das verbotene Programm DeCSS? Die Bibliothek dient zur Umgehung des DVD-Kopierschutzes und darf entsprechend auch nicht wirklich verteilt werden (in der Praxis findet sich die DeCSS-DLL sehr wohl in einige Tools wie VLC). Hier findet Ihr kreative steganographische Ansätze, DeCSS zu verteilen. Beispielsweise mit einer GIF-ZIP-Hybrid-Datei: GIF-Dateien haben die Definition über ihre Länge am Dateianfang, alles nach der definierten Länge wird ignoriert. ZIP-Dateien haben diese Längenangabe am Ende, alles vor dem definierten Anfang wird ignoriert. Die Folge: Ihr könnt die Datei einfach per Umbenennen wahlweise als GIF-Bild oder eben als ZIP-Archiv nutzen, in diesem Fall mit dem gepackten DeCSS-Quellcode. Linux-Kernel-Entwickler Phil Carmody hat sogar eine Primzahl entdeckt, die die GZIP-Version von DeCSS enthält - verrückt!
Steganalyse
Nun werfen wir noch einen kurzen Blick auf die Gegenseite, die Steganalyse, mit dem Ziel, zu ermitteln, ob eine Datei eine versteckte Botschaft enthält oder nicht. Im einfachsten Fall habt Ihr die Möglichkeit, eine Datei mit dem Original zu vergleichen, was Manipulationen meist recht einfach finden lässt. Ansonsten müsst Ihr einer zu untersuchenden Datei mit Mathematik zu Leibe rücken. Im Detail ist das freilich ziemlich kompliziert, aber das Prinzip recht simpel:
Versteckte Botschaften hinterlassen Muster.
Teils können diese Muster von Steganalyse-Tools entdeckt werden, ähnlich wie Viren von Anti-Virus-Tools, sofern Signaturen der Versteck-Methode bekannt sind. Andernfalls muss man die verdächtigen Bits, also die LSBs, wenn man von einem solchen Versteck ausgeht, statistisch untersuchen. Untersucht wird hier, stark vereinfacht ausgedrückt, wie wahrscheinlich es ist, dass sich etwa in einem Bild eine Nachricht versteckt, indem geprüft wird, ob die Verteilung der möglichen LSB-Werte (01, 10, etc.) in einem bestimmten Bereich der Datei vom Rest abweicht. Dazu ein kurzes Beispiel: Stellt Euch ein unifarbenes, weißes Bild vor. Die LSB-Werte der Farbtonangaben der Pixel sind hier überall identisch. Bettet Ihr nun eine kleine Botschaft ein, sind die LSBs in einem Bereich der Datei alle völlig unterschiedlich. Meist sind versteckte Botschaften auch noch verschlüsselt und entsprechen in dieser verschlüsselten Form einer rein zufälligen Zeichenkette – folglich sind auch die LSB-Werte zufällig verteilt. Und diese zufällige Verteilung ist das Gegenteil der komplett einseitigen Verteilung des weißen Hintergrunds – und schon habt Ihr ein Versteck entlarvt. Die Botschaft dann zu entschlüsseln ist dann wieder Aufgabe der Kryptographie. Einen sehr guten, praxisnahen Artikel zu solch einem Statistikangriff findet Ihr hier – allerdings nicht ganz trivial und auf Englisch. Der Autor hat auch das Programm Chi-Square entwickelt, das die oben beschriebene Analyse mit 24-Bit-Bitmapgrafiken durchführen kann.
Nicht trivial, aber spannend!
Ihr seht: Selbst stark vereinfacht sind Steganographie und vor allem Steganalyse nicht ganz trivial – aber spannend! Schön ist allerdings, dass die Nutzung in der Praxis ein Kinderspiel ist. Mit Tools wie Stegano.NET, OpenStego und Steganography.exe könnt Ihr einfach ein Trägerbild auswählen, die zu versteckende Botschaft eintippen beziehungsweise eine zu versteckende Datei und das ganze als neue Datei speichern – fertig!
Tools für die Steganographie
Das bekannteste Tool ist vermutlich Steghide. Wie Ihr mit dem Kommandozeilenprogramm Daten in Audiodateien versteckt, lest Ihr im Workshop unten. Mit SteghideUI gibt es auch eine komfortable grafische Variante, die bei uns allerdings auf zwei Testsystemen nicht funktionieren wollte – schade, denn ansonsten wäre sie wohl die beste Lösung! Versucht es einfach, die hiesige Version war auch nicht die aktuellste. Zum Thema Tools lässt sich ansonsten festhalten, dass es vor allem viele eher frickelige Spezialisten für einzelne Zwecke gibt, viele davon schon sehr betagt aus den späten 1990ern. Gute kostenlose, grafische Tools gibt es fast nur für Grafik-Dateien – aber wie Ihr unten seht, ist auch die Kommandozeile sehr simpel gehalten. Ausgestattet mit den wichtigsten Tools und soliden Grundkenntnissen, liegt alles Weitere nun an Euch – Steganographie verlangt nach Kreativität!
Und jetzt direkt zu den Workshops...
Mit Steganography.exe und VSL verstecken und entdecken
Was in der Theorie noch kompliziert klang, zeigen wir hier in der Praxis im Crash-Kurs: In wenigen Schritten verstecken wir hier eine Bilddatei in einer Bilddatei und entdecken und extrahieren sie gleich wieder mit Mitteln der Steganalyse – und einem verblüffendem Tool, dem Virtual Steganographic Laboratory, kurz VSL.
1. Nachricht verstecken
Öffnet Stegano.Net und wählt eine Trägerdatei, hier unseren Rhino-Hintern. Als versteckte Botschaft wählt Ihr ein Bild über den Link „Anhänge hinzufügen“ beziehungsweise gebt einen Text ein (nicht alle Versionen scheinen den Anhang-Tab zu haben). Verzichtet, zu Demonstrationszwecken, auf eine Verschlüsselung via Passwort.
2. Ausgabedatei speichern
Als Ausgabedatei speichern wir in unserem Beispiel „steg2test.png“.
3. Gegenspionage starten
Öffnet nun das VSL. Mit dem Tool könnt Ihr Ablaufdiagramme für Staganalyse-Experimente erstellen und ablaufen lassen. Zieht zunächst per Drag&Drop die soeben erstellte Datei steg2test.png auf die Arbeitsfläche, diese erscheint hier als „Input“-Kasten. Um die Datei zu analysieren, zieht aus dem Menü unter „Steganalysis“ den Eintrag „LSB-RS“ auf die Fläche. Klickt nun mit Rechts auf den „Input“-Kasten, wählt „Connect“ und verbindet „Input“ mit dem „LSB-RS“-Kasten. Als Ausgabe möchten wir die versteckte Datei und einen Report haben. Zieht dazu die Einträge „Output“ und „Report“ auf die Fläche und verbindet sie wie hier zu sehen mit „Connect“. Klickt Ihr nun auf den grünen Play-Button, läuft das Experiment ab. Das Tool mag kompliziert wirken, bietet aber eine unglaubliche Flexibilität zum Analysieren, aber auch En- und Dekodieren, so dass sich auch größere Datenmengen detailliert auswerten oder bearbeiten lassen.
4. Versteckte Nachricht auslesen
Im VSL-Programmverzeichnis findet Ihr nun unter „results“ mehrere Dateien: Den gewünschten Report als CSV-Datei sowie bestenfalls das versteckte Bild. So faszinierend VSL ist, leider lässt sich das Experiment (die VSL-Screens stammen von 2012) heute nicht mehr erfolgreich nachstellen - zu viele Änderungen an den anderen Beteiligten Produkten wohlmöglich. Eine sichere Möglichkeit den versteckten Text wieder sichtbar zu machen ist natürlich Stegano.NET oder was auch immer zum Verstecken genutzt wurde. Solange also Sender und Empfänger dieselbe Software nutzen, ist die Kommunikation über Text in Bildern ziemlich problemlos. VSL ist eher interessant, wenn tatsächlich unbekannte Dateien analysiert werden sollen, da sich auch komplexere Experimente aufbauen lassen.
Nachrichten mit Steghide in WAVs verstecken
Für Steghide gibt es mit SteghideUI auch eine grafische Version, die bei uns allerdings auf zwei Plattformen nicht fehlerfrei läuft. Daher empfehlen wir die extrem einfache Kommandozeilenversion. Wechselt in der Eingabeaufforderung in den Steghide-Ordner. Der Einfachheit halber haben wir unsere Trägerdatei stegtest.wav und die geheime Botschaft botschaft.txt im selben Ordner untergebracht. Ansonsten müsst Ihr die Dateipfade mit in den Befehl übernehmen: steghide embed -cf stegtest.wav -ef botschaft.txt -p test -v
Hier steht embed für das Einbetten, cf für das Cover File (Trägerdatei), ef steht für Embed File (geheime Botschaft), p fügt einen Passwortschutz ein (hier mit dem Passwort test) und v steht letztlich für Verbose, also die Anzeige weiterer Details Genauso einfach ist die Extraktion der botschaft.txt, die sich jetzt in der stegtest.wav steckt: steghide extract stegtest.wav
Wie gesagt, die Praxis ist recht simpel.