Reverse Engineering – Nutzen oder Schaden?

Unter dem Begriff Reverse Engineering wird alles an Tätigkeiten zusammengefasst, bei denen es darum geht, herauszufinden, wie genau ein Produkt, insbesondere im Bereich Software, funktioniert. Es beginnt dabei Gehäuse auseinander zu nehmen, um den Schaltplan der Elektronik zu verstehen und geht bis hin zum Dekodieren der Software, die auf den Chips läuft. Der Name kommt daher, dass die Ingenieurstätigkeit umgekehrt wird und man den Aufbau rekonstruieren möchte.

Methodisch wird bei Hardware bereits damit begonnen, dass die Platinen unters Mikroskop gelegt werden, um Hardwarechips zu verstehen. Im Falle von Software geht es um die Rückgewinnung des Quellcodes. Das Programm wird typischerweise ausgeliefert in direkt ausführbarer Maschinensprache. Damit gibt es zwei Herangehensweisen beim Reverse Engineering. Erstens kann man die Software ausführen und mittels Tools wie Sniffer verstehen, wie die Kommunikation mit anderen Komponenten oder einem Webservice im Internet funktioniert. Der zweite Weg setzt direkt an der Software an und beginnt damit, die Maschinensprache in menschenlesbaren Programmcode zu übersetzen. Von dort aus wird mit manuellem Aufwand versucht, das Programm insoweit zu verstehen, wie man es benötigt.

Warum macht man Reverse Engineering?

Der Beschreibung der Methodik kann man bereits entnehmen, dass Reverse Engineering sehr aufwändig ist. Aus welchem Grund also nimmt man diesen Aufwand auf sich? Ein erster Grund ist, die Auditierung von Software. Tut die Software was der Hersteller behauptet? Sind meine Daten auch wirklich geschützt oder sendet das Produkt meine persönlichen Daten zu einem Webservice ins Internet?

Die gewonnenen Informationen können auch dazu verwendet werden, um Software oder Teile der Software, wie eingebundene Bibliotheken, wiederzuerkennen. Das macht dann Sinn, wenn man Werbebibliotheken identifizieren möchte oder auch als Virenscanner bestimmte Muster von Viren wiedererkennen muss.

Ein weiterer Nutzen des Reverse Engineering ist das Erweitern bzw. Modifizieren von Funktionalität. Gerade unter technikbegeisterten Nutzern ist es oft so, dass genau die eine Funktion noch gewünscht ist, der Hersteller doch nicht jeden Wunsch verfolgen kann. In dem Fall nimmt der „Nerd“ die Sache einfach selbst in die Hand. Eine jedoch oft getätigte Modifikation ist das Umgehen von Lizenzprüfungen, was dann meist als Cracking von Software bezeichnet wird.

Wie verhindert man Reverse Engineering?

Das Cracking ist natürlich vielen Urhebern zu Recht ein Dorn im Auge. Daher macht man es beim Bauen des Produkts dem Reverse Engineer möglichst schwer. Das beginnt schon dabei, dass Produkte teilweise verklebt werden oder proprietäre Schrauben verwendet werden. Die Software wird auch nochmal obfuskiert, um sie schwer verständlich zu machen. Das kann man sich so vorstellen, dass die Software in einen Mixer gesteckt wird und Strukturen zerbrochen werden und unnötige Operationen eingefügt werden. Es ist, als ob man eine Null auf eine Zahl addiert. Das kann man möglichst kompliziert und es damit dem Leser auch schwer zu verstehen machen, dass es wirklich eine Null ist und keine andere Funktionalität. Dieser Ansatz funktioniert besonders gut beim Aushebeln von signaturbasiertem Virenschutz. Diese Form von Virenschutz basiert darauf, dass gewisse Codestücke typisch für einen Virus sind. Der obfuskierende Mixer sorgt jedoch dafür, dass der Virenscanner nicht erkennt, dass diese Signatur zu einem Virus gehört.

Vielversprechender sind systemische Ansätze, bei denen es darum geht, die ungewünschte Auswirkung zu vermeiden. Ein gutes Beispiel ist hier iOS. Das Betriebssystem verhindert die Ausführung von Apps, die nicht offiziell von Apple signiert wurden. Natürlich gibt es hier klar geregelte Ausnahmen für Entwickler und deren Geräte sowie firmenweit genutzte Spezialapps. Insgesamt jedoch schützt Apple hier die Geräte von ungewollter Nutzung. Ein anderes Beispiel für systemische Ansätze wird bei Computerspielen oft verwendet. Eine Onlineprüfung bei der getestet wird, ob eine gültige Lizenz vorhanden ist.

Fazit – Nutzen oder Schaden?

Unabhängig davon, ob man Reverse Engineering gut findet oder nicht, es ist nichts was man verhindern kann. Also sollte man sich eher fragen, wie man damit umgeht. Eine naheliegende Option ist es, die Gegenmaßnahmen des Reverse Engineering zu verbessern. Man kann es im System schwerer machen, an den Code heranzukommen, indem er beispielsweise verschlüsselt ausgeliefert wird und nur von der entsprechenden Hardware entschlüsselt werden kann. Mobilgerätebetriebssysteme gehen ähnlich vor, um den Code von Apps zu schützen, die zur Nutzung bezahlt werden müssen.

Aus IT-Sicherheitsperspektive ist das Phänomen des Reverse Engineering unproblematisch. Wenn ein System nur sicher ist, weil keiner weiß, wie es funktioniert, dann wird es früher oder später gehackt. Ein gutes Beispiel hierfür sind diverse RFID Karten, bei denen ursprünglich selbst ausgedachte Kryptographie genutzt wurde. Mittlerweile wurde aber auch hier auf bewährte Standards zurückgegriffen. Die erwähnte Form von Pseudosicherheit nennt man auch oft Security by Obscurity – also Sicherheit durch Verschleierung der Funktionsweise.