Orakel im Code: Reverse-Engineering lässt sich live aufdecken

Irgend jemand ist gerade dabei, Ihre Software auseinanderzunehmen. Würden Sie das gerne wissen? Das geht, weil auch Reverse Engineerer Abkürzungen lieben.

In Pocket speichern vorlesen Druckansicht 178 Kommentare lesen
Code

(Bild: dpa, Wolfram Steinberg)

Lesezeit: 5 Min.
Inhaltsverzeichnis

Im Code versteckte Orakel können als Köder dienen, mit denen sich selbst statisches Reverse Engineering aufdecken lässt: Fast jeder Reverse Engineer, der das Orakel findet, möchte wissen, ob jemand anderer es bereits gelöst hat. Also sucht er im Internet, oder probiert im Code gefundene URL und Zugangsdaten aus. All das hinterlässt verräterische Spuren. Auf der Security-Konferenz CanSecWest in Vancouver gab Collin Mulliner einen Überblick über diese und ähnliche Methoden, statisches Reverse Engineering aufzudecken.

Das Orakel kann unter anderem als einzigartiger String, als URL, als hardkodierte Zugangsdaten für einen Server, als Verweis auf eine mitgelieferte Datei oder als exportiertes Symbol einer Shared Library ausgestaltet sein. Idealerweise sind diese Informationen Teil eines sowieso obfuskierten Codes und somit erst nach De-Obfuskation sichtbar. Die Methode weist Ähnlichkeiten mit Capture-the-Flag-Bewerben auf und hat verschiedene Namen, deren Bedeutung sich leicht unterscheiden mag: Canary, Orakel, Honeytoken, usw.

Dr.-Ing. Collin Mulliner auf der CanSec West 2018 in Vancouver, Kanada. Er ist insbesondere für seine Security-Forschung über mobile Geräte bekannt.

(Bild: Daniel AJ Sokolov)

Ist das Orakel ein String, muss es eine einzigartige Zeichenfolge sein, die sonst nicht bekannt ist. Sie kann beispielsweise wie eine Anweisung, eine Library oder eine Java-Klasse aussehen, also etwa libcryptolizer_version23.so oder sdj378fwerezus4rcmvf565p. Vor erscheinen dieses Artikels ergaben beide Zeichenfolgen in Suchanfragen bei Google und Duckduckgo null Treffer.

Der ursprüngliche Verfasser eine mit Orakeln gespickten Software muss lediglich eine Webseite online stellen und von Google indizieren lassen, die auf den ersten Blick so aussieht, als würde sie über libcryptolizer_version23.so respektive sdj378fwerezus4rcmvf565p informieren. Ruft jemand anderer als Google diese Webseite auf, sollte der Webserver Alarm schlagen: "Jemand hat soeben von $IP-Adresse mit $Browser und $Spracheinstellungen zugriffen!"

Die Zeichenfolge könnte auch als Adword bei Bing registriert werden. Die Microsoft-Suchmaschine gibt dem "Werbekunden" Bescheid, wenn jemand den Suchbegriff eingibt. Bei Google funktioniert das bei selten verwendeten Suchbegriffen aus Datenschutzgründen offenbar nicht mehr. Dort wäre es aber einen Versuch wert, einen gebührenfreien Google Alert für die Zeichenfolge zu erstellen. Dann erhält man vielleicht einen Hinweis darauf, wenn jemand anderer die Zeichenfolge online verwendet, etwa in einem Hilfe suchenden Posting. Auch bei Twitter lässt sich eine Dauersuche für öffentliche Tweets einrichten.

Alec Baldwin spielte im Film "Das Mercury Puzzle" einen NSA-Offizier, der ein Kind zu töten trachtet, weil es den in einem Rätselheft versteckten Super-Geheimcode gefunden und bei der NSA angerufen hat.

(Bild: Gage Skidmore CC BY-SA 2.0 )

Hardkodierte Zugangsdaten sind in der Regel Ausweis bescheidener Programmierkunst, kommen aber immer wieder vor. Kaum ein Reverse Engineer wird dem Versuch widerstehen können, solche Zugangsdaten auszuprobieren. Der Entwickler muss lediglich einen Server vorhalten, der ihm Bescheid gibt, sobald genau diese Zugangsdaten eingegeben werden. Und wieder gibt der Reverse Engineer zu erkennen, was er gefunden hat.

Gleiches gilt für im Code versteckte Token-URL. Wird dafür ein sonst nicht genutzter Hostname gewählt, kann der Aufruf sowohl am Webserver als auch am DNS registriert werden. Und ein Hinweis auf eine mitgelieferte aber sonst nicht genutzte Datei könnte den Reverse Engineer dazu verleiten, diese Datei zu öffnen. Ist der jeweilige Computer mit dem Internet verbunden, kann diese Datei nach Hause telefonieren.

Die Orakel sollten sich möglichst wenig vom übrigen Code unterscheiden. Mehrere Orakel im Code verstreut können Aufschluss darüber geben, wie weit der Reverse Engineer schon gekommen ist. Gegebenenfalls lässt sich daran auch erkennen, welchen Zweck er verfolgt. Das kann unter Umständen für etwaige spätere Gerichtsverfahren hilfreich sein, um eine Ausrede des Kontrahenten zu widerlegen.

"Das Konzept wird wahrscheinlich bereits von Entwicklern eingesetzt, die nicht darüber reden", betonte Mulliner in Vancouver, "Ich habe diese Methoden nicht erfunden. Und es ist nur ein netter Trick, keine Sicherheitslösung." Die Idee, unnütze oder irreführende Daten in ein Werk einzuschleusen, ist beispielsweise von Telefonbüchern und Landkarten längst bekannt.

Spätere Softwareversionen sollten neue oder zusätzliche Orakel enthalten, rät Mulliner. Und bei in geringen Stückzahlen verbreiteter Software könnten jedem Kunden spezifische Orakel untergejubelt werden. Mulliner warnte aber davon, die Orakel erst beim Download der Software einzuspielen: Das führt bei einem Integritätscheck zu einem Alarm. Und lädt der Abnehmer die Software zweimal herunter, kann er die Orakel mittels diff (Vergleich der beiden Codes) leicht aufstöbern.

Dynamisches Reverse Engineering lässt sich übrigens einfacher aufdecken, zumindest wenn das benutzte System online ist. Weil dabei die untersuche Software ausgeführt wird, könnte eine eingebaute Routine das Reverse Engineeren erkennen und Bescheid geben. Die Orakel bieten sich also vor allem für die Erkennung statischer Analysen an; dabei wird die Software ja nicht ausgeführt. (ds)