Obfuskation (engl. obfuscate „vernebeln“, „unklar machen“, „verwirren“, „verschleiern“) ist ein Begriff aus der Softwaretechnik und beschreibt die absichtliche Veränderung von Programmcode, so dass der Quelltext für Menschen schwer verständlich oder schwer rückgewinnbar wird. Ziel ist es, den Aufwand für Reverse Engineering stark zu erhöhen, um Veränderung, unerwünschtes Kopieren von Programmteilen oder Diebstahl von geistigem Eigentum zu erschweren oder um die Funktionalität z. B. von Schadsoftware zu verschleiern.
Bei Interpreter- oder Skriptsprachen, sofern der Quelltext ausgeliefert wird, bedeutet das, die ausgelieferte Kopie des Quelltextes unkenntlich und (für Menschen) schwerer lesbar zu machen. Bei einem kompilierten Programm verwürfelt und verschleiert ein Obfuskator nicht den Quellcode, sondern das Kompilat oder eine Kopie des Quellcodes unmittelbar vor dem Kompilieren. Hier soll vor allem das (maschinelle) Dekompilieren verhindert werden bzw. das Dekompilat soll möglichst unverständlich werden.
Eigenschaften Bearbeiten
Obfuskation verändert ausführbaren Programm-Code ohne Änderung der Programmfunktion. Zum Beispiel werden Variablen- und Funktionsnamen umbenannt, sofern sie aus dem Programm rückgewinnbar wären. Ebenfalls kann (bei einem kompilierten Programm) der Maschinen- oder Bytecode so verwürfelt werden, dass die Befehlsabschnitte, die einem Hochsprachenbefehl entsprechen, sich mit denen des vorherigen/nachfolgenden Hochsprachenbefehls mischen; oft werden auch zusätzliche nicht notwendige (Maschinen-)Befehle eingefügt. Das kann ein maschinelles Dekompilieren in die ursprüngliche Hochsprache deutlich erschweren oder sogar unmöglich machen.
Ein Nebeneffekt kann je nach Beschaffenheit des Codes auch die Verkleinerung seines Speicherbedarfs sein (v. a. bei Skriptsprachenprogrammen), z. B. durch die Umbenennung langer Identifier in kürzere. Das ist für Website-Skripte vorteilhaft, um das Übertragungsvolumen zu reduzieren. Ebenfalls kann es vorteilhaft sein bei Anwendungsprogrammen für Endgeräte mit geringer Speicherkapazität oder Rechenleistung.
Abgrenzung Bearbeiten
Im Allgemeinen verschlüsselt Obfuskation nicht das Programm und ist daher keine Anwendung der Steganografie und im Allgemeinen auch nicht der Kryptographie. Es können allerdings u. U. im Programm hinterlegte Zeichenketten, Dateien oder ganze Klassen verschlüsselt werden, damit diese nicht im Klartext lesbar sind (siehe unten).
Beispiele für Methoden der Code-Obfuskation Bearbeiten
Programme Bearbeiten
Für das Verschleiern von Software gibt es je nach Programmiersprache und Plattform eine unterschiedlich große Zahl an Obfuskatoren. Viele davon sind für die direkte Anwendung auf den Quellcode, oder für Plattformen erhältlich, deren Quellcode ohne den Einsatz von Obfuskatoren leicht zugänglich wäre, etwa durch die Verwendung einer Bytecode-ähnlichen Zwischensprache vor der Ausführung. Es gibt allerdings auch Obfuskatoren, die Programme verschleiern, die in Programmiersprachen geschrieben wurden, die direkt in ausführbaren Code kompilieren.
C / C++ Bearbeiten
Folgende Obfuskatoren für C/C++ werden aktiv gewartet: Stunnix C++ Obfuscator, StarForce C++ Obfuscate, Morpher C/C++ Obfuscator, Semantic Design C und C++ Obfuscators
Windows Script Encoder Bearbeiten
Um verschiedene Skripte wie JScript-, VBScript- und insbesondere ASP-Dateien zu verschleiern, empfiehlt Microsoft, den Windows Script Encoder zu benutzen. Im Falle einer Kompromittierung des Webservers soll der Angreifer nicht in der Lage sein, zu verstehen, wie die ASP-Anwendung funktioniert. Mittlerweile gibt es jedoch Decoder, um die Verschleierung rückgängig zu machen.
Java-Bytecode und MSIL Bearbeiten
Für das Verschleiern von Java-Bytecode und der Common Intermediate Language von .NET gibt es eine Reihe von proprietären und Open-Source-Obfuskatoren.
Folgende Obfuskatoren für Java Bytecode werden aktiv gewartet: DashO, JavaGuard, ProGuard, yGuard und Zelix Klassmaster. ProGuard wird von Google für die Obfuskation von Android-Programmen empfohlen.
JavaScript Bearbeiten
Für das Verschleiern von JavaScript-Code gibt es eine große Anzahl an Obfuskatoren. Ein Großteil dieser Obfuskatoren unterstützt auch die Verkleinerung des Codes, bzw. es gibt viele Minimizer, die auch Obfuskationstechniken enthalten. Die folgende Liste an JavaScript-Obfuskatoren sind Programme, deren Hauptmerkmal die Obfuskation von JavaScript-Code ist: JScrambler, JSObfuscator, Javascript Obfuscator, UglifyJS, Compressor and Minimizer, Stunnix, Jasob.
Nachteile von Obfuskation Bearbeiten
Obfuskation kann Reverse Engineering eines Programms erschweren bzw. zeitaufwändiger werden lassen, aber nicht notwendigerweise unmöglich machen. Darüber hinaus beschränkt es die Anwendungsmöglichkeiten der Reflexion auf verschleierten Code.
Einige Antivirus-Programme, wie etwa AVG, alarmieren den Benutzer beim Besuch einer Website mit verschleiertem JavaScript-Code, da Obfuskation auch dazu benutzt werden kann, schädlichen Code zu verbergen.
Obfuskation erschwert es, aussagekräftige Fehlermeldungen zu erstellen, da Standard-Fehlermeldungen wie beispielsweise Stack-Traces kaum noch Aussagekraft besitzen und den Entwicklern keine Rückschlüsse auf die betroffene Sourcecodestelle ermöglichen.
Obfuskation und die Copyleft-Lizenz Bearbeiten
Ob es legal ist, eine Copyleft-Softwarelizenz zu umgehen, indem verschleierter Quelltext herausgegeben wird, war Gegenstand von Debatten innerhalb der Open-Source-Community. Diese Art der Umgehung kommt vor, wenn der Autor wenig gewillt ist, den Quelltext des eigenen Programms zu veröffentlichen, durch die Lizenz des ursprünglichen Programms jedoch dazu gezwungen wird. Die Thematik wird in der GNU General Public License behandelt, indem sie Quellcode als die bevorzugte Version von veröffentlichtem Code bezeichnet. Die GNU-Website teilt mit, dass verschleierter Quellcode kein echter Quellcode ist und nicht als Quellcode zählt, womit die Anwendung von Obfuskatoren auf GPL-geschützten Quellcode in den Augen des GNU-Projekts eine Lizenzverletzung darstellt.
Sonstiges Bearbeiten
Es gibt Programmierwettbewerbe für kreativ verschleierte Programm-Quelltexte, was jedoch nur für Skriptsprachen einer Obfuskation entspricht:
Weblinks Bearbeiten
- (Memento vom 16. Januar 2012 im Internet Archive) (englisch)
- Erica Klarreich: Cryptography Breakthrough Could Make Software Unhackable. (englisch)
Einzelnachweise Bearbeiten
- Richard R. Brooks: Disruptive Security Technologies with Mobile Code and Peer-to-Peer Networks. CRC Press, 14. Mai 2012, Kap. 7, S. 155 ff. (englisch).
- ↑ (Memento vom 25. Dezember 2014 im Internet Archive) - "Control Flow Obfuscation. Control Flow Obfuscation scrambles the execution paths of the method bodies of your application making decompilers crash."
- Proguard Results - "It primarily reduces the size of the processed code, with some potential increase in efficiency as an added bonus."
- Control Flow Obfuscation, Microsoft Developer Network, Visual Studio 2005
- JBCO: the Java ByteCode Obfuscator - "JBCO has been shown to cause failure or crashes in two of the more modern decompilers Dava and SourceAgain"
- DexGuard Website - Encrypt strings, encrypt entire classes, encrypt native libraries, encrypt assets
- Open Directory - Computers: Programming: Languages: JavaScript: Tools: Obfuscators. Dmoz.org, 3. August 2013, abgerufen am 25. November 2013.
- Open Directory - Computers: Programming: Languages: PHP: Development Tools: Obfuscation and Encryption. Dmoz.org, 19. September 2013, abgerufen am 25. November 2013.
- Stunnix C++ Obfuscator Homepage
- Star-Force Obfuscator Homepage
- Morpher Homepage
- Semantic Design C Obfuscator
- Semantic Design C++ Obfuscator
- Liste von Java Code-Obfuskatoren bei java2s.com
- ProGuard Alternativen lt. ProGuard
- neo-ConfuserEx OpenSource Homepage
- DashO Homepage
- JavaGuard Homepage
- YGuard Homepage
- Zelix Klassmaster Homepage
- ProGuard in der Android Entwicklerdokumentation
- (Memento vom 20. März 2015 im Internet Archive)
- JSObfuscator Homepage
- Javascript Obfuscator Homepage
- UglifyJS Homepage
- Javascript Obfuscator Homepage
- Stunnix Homepage
- Jasob Homepage
- Math.ias.edu, archiviert vom 10. August 2014; abgerufen am 25. November 2013. am
- AVG ThreatLabs (Virendatenbank) über verschleiertes JavaScript, abgerufen am 1. März 2015
- securityfocus.com, abgerufen am 8. Februar 2015.
- Reasoning behind the "preferred form of the work for making modifications to it language in the GPL. Lwn.net. Aufgerufen am 25. November 2013
- Freie-Software-Definition - www.gnu.org