Definition

Obfuscation bezeichnet im Zusammenhang mit Angriffen das absichtliche Verschleiern von Dateien, Skripten oder Befehlen, damit Abwehrmaßnahmen und Analysten sie nur schwer entdecken oder auswerten können, ohne dass sich die beabsichtigte Funktion ändert.

Auf einen Blick

Obfuscation ist ein Vorgehen, kein einzelnes Schadprogramm: Dieselbe Methode kann ganze Dateien, Teile davon oder einzelne Befehlszeilen betreffen.

Laut MITRE ATT&CK können verhaltensbasierte Erkennungen helfen, bösartige Dateien zu identifizieren, die stark auf Junk-Code setzen, statt sich auf statische Code-Analyse zu verlassen.

Verschleierte PowerShell-Skripte in Malspam-Kampagnen können von VBA-Makros in Office-Dokumenten gestartet werden und als Download-Cradle weiteren Schadcode nachladen.

Was ist Obfuscation?

Obfuscation ist eine Verschleierungstechnik, bei der der Inhalt von Dateien, Skripten oder Befehlen so verändert wird, dass Erkennung und Analyse erschwert werden, die beabsichtigte Funktion aber erhalten bleibt. Laut MITRE ATT&CK können Angreifer versuchen, eine ausführbare Datei schwer auffindbar oder analysierbar zu machen, indem sie ihren Inhalt verschlüsseln, kodieren oder anderweitig verschleiern. Laut MITRE ATT&CK ist Befehlszeilen-Verschleierung ein Verfahren, das es erschwert, Zeichenketten und Muster in Befehlen und Skripten mit Erkennungssignaturen zu erfassen und zu analysieren. Auf verschiedenen Plattformen und im Netzwerk lässt sich dieses Vorgehen einsetzen, um Abwehrmaßnahmen zu umgehen. Verschleierungstechniken für PowerShell-Skripte können sich gegen statische, signaturbasierte Erkennung als recht wirksam erweisen.

Weil Obfuscation die tatsächliche Funktionsweise eines Programms verbirgt, kann verschleierter Schadcode Antivirenprogramme und Sicherheitsanalysten eines Versicherers täuschen, ohne dass sich seine beabsichtigte Funktionalität ändert. Ein unauffälliger Scan-Befund schließt deshalb nicht aus, dass eine Datei verschleierten Schadcode enthält. Für die IT-Sicherheit zählt deshalb nicht nur, wie eine Datei aussieht, sondern auch, was sie beim Ausführen bewirkt. Manche Schadprogramme verraten sich durch ihr Verhalten, sobald sie auf dem Rechner aktiv werden.

Wie funktioniert Obfuscation?

Obfuscation wirkt über unterschiedliche Verfahren, die lesbare Merkmale einer Datei oder eines Befehls verdecken, ohne den Zweck des Codes zu verändern. Laut MITRE ATT&CK können Nutzlasten komprimiert, archiviert oder verschlüsselt werden, um eine Erkennung zu vermeiden. Teile von Dateien lassen sich zudem kodieren, sodass Klartext-Zeichenketten verborgen bleiben, die Verteidigern sonst bei der Entdeckung helfen würden. Nutzlasten können außerdem in mehrere, scheinbar harmlose Dateien aufgeteilt werden, die ihre schädliche Funktion erst beim Zusammensetzen offenbaren.

Eingefügter Junk-Code soll die Funktionsweise von Schadsoftware verschleiern; gemeint ist Code, der entweder nicht ausgeführt wird oder die Funktionalität des Codes nicht verändert. Das macht die Analyse schwieriger und zeitaufwendiger, weil der Analyst nicht funktionalen Code durchgeht, statt den eigentlichen Code zu untersuchen. Bei Befehlen unterstützen laut MITRE ATT&CK viele Sprachen eine eingebaute Verschleierung in Form von Base64- oder URL-Kodierung, und Tricks wie Directory Traversal können Verweise auf die aufgerufene Programmdatei verschleiern.

Woran erkenne ich Obfuscation?

Signal Woran erkennbar
Übermäßiger Einsatz von Escape-Zeichen in Befehlszeilen Muster der Befehlszeilen-Verschleierung in der Befehlszeilen-Aktivität
Base64-kodierte oder zusammengesetzte (konkatenierte) Befehle Syntaktische Verschleierungsmuster in Befehlen und Skripten, etwa Base64-Kodierung oder aneinandergehängte Befehlsteile; für sich genommen ein Hinweis, der zu prüfen ist
Befehle mit ungewöhnlicher Länge oder Entropie Ausreißer bei Länge und Entropie im Vergleich zur übrigen Befehlszeilen-Aktivität

Schutz im Ernstfall

Vorbeugen

  • Virenschutz einsetzen, der verdächtige Dateien automatisch erkennen und in Quarantäne verschieben kann; ein unauffälliger Scan-Befund schließt verschleierten Schadcode nicht aus
  • Auf Windows-Systemen ab Windows 10 das Antimalware Scan Interface (AMSI) nutzen, damit Befehle nach der Verarbeitung beziehungsweise Interpretation analysiert werden
  • Zusätzlich zur statischen Code-Analyse verhaltensbasierte Erkennung einsetzen, die verdächtige Dateien auch dann auffällig machen kann, wenn sie stark auf Junk-Code setzen

Was tun im Ernstfall

  • Das System, auf dem die verdächtige Datei geöffnet oder der verdächtige Befehl ausgeführt wurde, vom Netzwerk trennen
  • Den Vorfall sofort der internen IT-Sicherheit melden, bevor Mitarbeiter selbst Dateien löschen oder das Gerät bereinigen
  • Zugangsdaten, die auf dem System verwendet wurden, umgehend und von einem nicht betroffenen Gerät aus ändern
  • Erst danach durch die IT-Sicherheit analysieren lassen, was die Datei oder der Befehl beim Ausführen bewirkt hat; sie entscheidet nach dem Befund über das weitere Vorgehen

Beispiele aus der Praxis

  • Ein PowerShell-Skript aus einer Malspam-Kampagne, die den Infostealer Azorult auslieferte, ist zunächst in zwei Schichten Base64 kodiert; erst nach dem Dekodieren beider Schichten werden die Klartext-Zeichenketten sichtbar.
  • Ein Befehl wird mit Base64- oder URL-Kodierung so umgeformt, dass seine Muster in der Befehlszeile schwerer mit Erkennungssignaturen zu erfassen sind, seine beabsichtigte Funktionalität aber erhalten bleibt.
  • Laut MITRE ATT&CK hat die Gruppe APT32 das Invoke-Obfuscation-Framework eingesetzt, um ihren PowerShell-Code zu verschleiern.
  • Ein Mitarbeiter eines Versicherers öffnet eine Datei mit verschleiertem Schadcode: Weil die tatsächliche Funktionsweise verborgen bleibt, können Antivirenprogramm und Sicherheitsanalyst getäuscht werden, ohne dass sich die beabsichtigte Funktionalität des Programms ändert.

Die Varianten im Detail (16)

Code-Obfuskation Code-Obfuskation bezeichnet das Verschleiern von Programmcode, damit er schwer lesbar und analysierbar ist.

Schadsoftware nutzt Verfahren wie Umbenennen, Verschlüsseln oder Umstrukturieren von Code, um Analyse und signaturbasierte Erkennung zu erschweren. Das Verhalten des Programms bleibt dabei unverändert.

Dead-Code-Insertion Dead-Code-Insertion ist das Einfügen von funktionslosem Code, um die Analyse eines Programms zu erschweren.

Der zusätzliche Code verändert das Verhalten nicht, vergrößert aber das Programm und verschleiert den eigentlichen Ablauf. Dadurch weichen Signaturen ab und manuelle Analysen werden aufwendiger.

Dynamische Payload Dynamische Payload bezeichnet Schadcode, der erst zur Laufzeit erzeugt, nachgeladen oder entschlüsselt wird.

Weil der eigentliche Schadteil nicht im Ausgangsprogramm liegt, findet eine statische Prüfung zunächst nur harmlos wirkenden Code. Die Nutzlast kann sich zudem je nach Umgebung unterscheiden.

Java-Code-Obfuskation Java-Code-Obfuskation ist das Verschleiern von Java-Programmen, sodass sich ihr Aufbau schwer nachvollziehen lässt.

Typische Mittel sind das Umbenennen von Klassen, Methoden und Variablen sowie das Umstrukturieren des Kontrollflusses. Sie schützt geistiges Eigentum, wird aber auch von Schadsoftware verwendet.

JavaScript-Obfuskation JavaScript-Obfuskation ist das gezielte Unleserlichmachen von JavaScript-Code, damit er sich schwer analysieren lässt.

Skripte werden etwa durch Kodierung von Zeichenketten, Umbenennung und verschachtelte Funktionen verändert. Der Browser führt sie unverändert aus, während Analysten den Zweck erst nach Entschlüsselung erkennen.

JavaScript-Polymorphismus JavaScript-Polymorphismus bezeichnet Skripte, die ihre Gestalt bei jeder Verbreitung ändern, aber gleich funktionieren.

Durch automatisch erzeugte Varianten desselben Codes entgehen die Skripte signaturbasierter Erkennung. Das Prinzip entspricht dem polymorpher Malware, angewandt auf Web-Skripte.

Junk-Byte-Padding Junk-Byte-Padding ist das Anfügen bedeutungsloser Bytes an eine Datei, um ihren Fingerabdruck zu verändern.

Die Füllbytes beeinflussen die Ausführung nicht, verändern aber Größe und Hashwert. So können Prüfungen umgangen werden, die auf bekannten Dateisignaturen beruhen.

LNK-Obfuscation LNK-Obfuscation bezeichnet das Verschleiern von Befehlen in Windows-Verknüpfungsdateien mit der Endung LNK.

Die Verknüpfung enthält verschleierte Aufrufe, die beim Öffnen Skripte oder Programme starten. Weil Verknüpfungen harmlos wirken, werden sie häufig als Auslöser in Infektionsketten eingesetzt.

Metamorphe Malware Metamorphe Malware ist Schadsoftware, die bei jeder Vervielfältigung ihren eigenen Code vollständig umschreibt.

Anders als bei einfacher Verschlüsselung bleibt kein gleichbleibender Kern erkennbar, da sich Struktur und Befehlsfolge neu zusammensetzen. Die Erkennung per Signatur wird dadurch stark erschwert.

NTFS-ADS-Missbrauch NTFS-ADS-Missbrauch bezeichnet das Verstecken von Daten oder Code in alternativen Datenströmen des Dateisystems NTFS.

Alternative Datenströme hängen an einer Datei, ohne in üblichen Verzeichnisansichten sichtbar zu sein. Angreifer nutzen sie, um Nutzlasten zu verbergen und Spuren zu verwischen.

Oligomorphe Malware Oligomorphe Malware ist Schadsoftware, die aus wenigen Entschlüsselungsroutinen jeweils eine auswählt.

Sie wechselt ihre Routine zwischen Infektionen, jedoch nur in wenigen Ausprägungen. Damit steht sie zwischen einfach verschlüsselter und polymorpher Malware und lässt sich leichter erkennen als diese.

Quellcode-Verschleierung Quellcode-Verschleierung ist das absichtliche Verändern von Quelltext, sodass er schwer lesbar bleibt.

Sie schützt Programme vor Nachbau oder Analyse, etwa bei kommerzieller Software, und wird in Lieferketten gelegentlich für schädlichen Code missbraucht. Die Programmlogik bleibt dabei unverändert.

Schadsoftware-Variante Schadsoftware-Variante bezeichnet eine abgewandelte Fassung einer bereits bekannten Schadsoftware.

Varianten entstehen, wenn Autoren Code, Verpackung oder Verschleierung anpassen, damit bestehende Erkennungsmuster nicht mehr greifen. Die Grundfunktion bleibt meist erhalten, während sich äußere Merkmale ändern.

Verschleierter Code Verschleierter Code bezeichnet Programmcode, dessen Aufbau und Zweck durch Verschleierung verborgen wird.

Der Ausdruck beschreibt das Ergebnis der Verschleierung: Programmtext, dessen Aufbau und Zweck für Analysten und Erkennungswerkzeuge nicht unmittelbar erkennbar ist. Er findet sich häufig in Skripten und nachgeladenen Modulen.

Verschleierung Verschleierung ist eine andere Bezeichnung für Obfuscation, also das Unkenntlichmachen von Code oder Daten.

Der deutsche Begriff wird für das Unkenntlichmachen von Code, Dateien oder Befehlen verwendet, in der Malware-Analyse ebenso wie beim Schutz von Software. Er steht oft für Obfuscation im weiteren Sinn.

XOR-Verschleierung XOR-Verschleierung ist das Maskieren von Daten oder Code mit einer XOR-Verknüpfung und einem Schlüsselwert.

Die einfache Rechenoperation lässt sich mit demselben Schlüssel umkehren und eignet sich daher für schnelles Ver- und Entschlüsseln. Malware setzt sie ein, um Zeichenketten oder Nutzlasten vor einfachen Prüfungen zu verbergen.

Häufiger Irrtum

Mythos „Ein Antivirenprogramm mit Signaturabgleich erkennt Schadsoftware auch dann zuverlässig, wenn ihr Code verändert oder verschleiert wurde.“

Richtig Signaturbasierte Scans funktionieren nur bei bekannter Malware und erfordern eine vorherige Analyse der Datei; mit Tricks wie polymorphen Schädlingen lassen sie sich täuschen.