Versteck im Code: geheime Nachrichten in Executables

Die diesjährige CodeCon 2003, ein nicht kommerzieller Entwickler-Event mit Workshop-Charakter, nutzte der Informatik-Student Rakan El-Khalil, um sein Projekt Hydan vorzustellen.

In Pocket speichern vorlesen Druckansicht 141 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Andreas Stiller

Die diesjährige CodeCon 2003, ein nicht kommerzieller Entwickler-Event mit Workshop-Charakter, auf dem letztes Jahr beispielsweise die erste öffentliche Demonstration von Peek-A-Booty stattfand, nutzte der Informatik-Student Rakan El-Khalil, um sein Projekt Hydan (alt-englisch für verstecken) vorzustellen. Hydan weitet das Konzept der Steganografie auf Binärcode aus: Unscheinbarer Inhalt wird benutzt, um geheime Nachrichten zu transportieren. Was bei Bildern durch die für den Menschen nicht direkt sichtbare Manipulation von einzelnen Bits geschieht, bedarf bei Executables großer Sorgfalt, denn die Lauffähigkeit des Codes darf nicht beeinträchtigt werden. El-Khalil erreicht dies, indem funktional äquivalente Funktionspaare gleicher Länge einen versteckten Strom aus Nullen und Einsen kodieren. Im konkreten Fall verwendet Hydan Additions- und Subtraktions-Operationen des Intel Instruction-Set:

ADD reg, KONSTANTE und SUB reg, -KONSTANTE führen zum gleichen Ergebnis, könnten also im Code vertauscht werden, wobei jedoch das Carry-Bit von beiden Operationen konträr gesetzt wird. Coder/Decoder müssen den Code eindeutig als Code erkennen, ihn analysieren und sich im Zweifelsfall gegen eine Vertauschung aussprechen. Dazu verwendet Hydan einen Disassembler, der bislang zwar MMX, aber weder 3Dnow noch SSE oder gar SSE2 kennt und so zuweilen an seine Grenzen stößt. Die Software ist allerdings als gut kommentierte C-Source auf El-Khalils Website verfügbar, sodass sie sich leicht ergänzen ließe.

Die Kodierung von Informationen mit den beiden ADD- und SUB-Befehlen ist dann recht einfach: ADD steht für eine Null, SUB für eine Eins. Konsequent fortgeführt über ein ganzes Binary lässt sich so ein Binärstring zusammenbasteln, ohne dass die Länge des Binary verändert wird. Mittels statistischer Untersuchungen ließe sich der Unterschleif auffällig vieler SUB-Operationen aber wohl ebenso entdecken wie durch einen direkten Vergleich mit dem Original, so es denn vorhanden ist. Obwohl noch nicht optimiert, bringt Hydan zurzeit immerhin schon die US-Verfassung und die Declaration of Independence in Microsoft Word unter -- Microsoft wird sich geehrt fühlen. Das Verhältnis Nutzdaten zu Code liegt dabei bei circa 1/150, in der Bild-Steganografie werden üblicherweise Raten erreicht, die bis um den Faktor 10 höher ausfallen. Zukünftige Versionen von Hydan sollen laut Autor weitere Redundanzen im Code-Set ausnutzen können und sich robuster gegenüber Attacken wie dem Überschreiben zeigen, die vorliegende Ausgabe verschlüsselt Nachrichten bereits via Blowfish. Anwendungszwecke sieht der eifrige Student neben der Geheimnisträgerei in einer Art eingebetteter Signatur sowie als binäres Wasserzeichen.

Ganz neu ist die Technik allerdings nicht: Eric Isaacson hat schon in den 80er Jahren mit ähnlichen Methoden den von unregistrierten Versionen seines A86-Assemblers erzeugten Object-Code gekennzeichnet. A86 nutzt die Tatsache aus, dass etwa der Befehl MOV AX,BX durch zwei verschiedene Opcodes vollkommen gleichwertig und in derselben Länge kodiert werden kann. Das binäre Wasserzeichen soll als Beweismittel gegen Raubkopierer vor Gericht dienen. Auch die Spezies der Cavity-Viren platziert sich in Executables, ohne deren Länge zu verändern. Solche Viren bedienen sich instruktionsfreier Platzhalter (mit Konstanten) im Code, wie sie etwa das Portable-Executable-Format (PE) unter Windows offeriert. (Tobias Engler) / (as/c't) / (jk)