Was ist JavaScript Obfuscation bzw. JavaScript-Verschleierung?

JavaScript Obfuscation ist eine Verschleierungstechnik, bei der JavaScript-Code so umgewandelt wird, dass er für Menschen schwerer lesbar und uverständlich wird, während er dennoch von einem Computer oder einem Browser interpretiert und ausgeführt werden kann. Das Hauptziel dieser Technik besteht darin, den Code für menschliche Leser zu erschweren, ohne die Funktionalität der jeweiligen Anwendung oder der Website zu beeinträchtigen.

Warum verwenden Entwickler JavaScript-Verschleierung?

  1. Schutz des geistigen Eigentums: Entwickler verwenden diese Technik, um ihren Code zu schützen und zu verhindern, dass andere ihren Code leicht kopieren oder verstehen können.
  2. Sicherheit und Reverse Engineering: Bei der Entwicklung von Anwendungen, die im Web ausgeführt werden, kann JavaScript-Verschleierung verwendet werden, um es für Angreifer schwieriger zu machen, Schwachstellen zu identifizieren und auszunutzen.
  3. Code-Optimierung und Ladezeiten: Verschleierungstechniken können dazu beitragen, den Code zu optimieren und die Ladezeiten zu verbessern.

Es ist wichtig zu beachten, dass JavaScript-Verschleierung keine absolute Sicherheit bietet. Ein erfahrener Reverse-Engineer kann oft trotz Verschleierung den Code analysieren und verstehen.

Warum setzen Cyberkriminelle JavaScript-Verschleierung ein?

  1. Entdeckung umgehen: Verschleierung erschwert es Sicherheitswerkzeugen wie Antivirensoftware und Intrusionserkennungssystemen, bösartigen Code zu erkennen. Dies ermöglicht es Betrügern, ihre Skripte ohne sofortige Erkennung einzusetzen.
  2. Analyse verhindern: Verschleierter Code ist schwieriger zu analysieren und zu verstehen. Das erschwert es Sicherheitsforschern und Analysten, den Code mithilfe von Reverse Engineering (rückwärts) zu entschlüsseln, um die böswillige Absicht aufzudecken.
  3. Geistiges Eigentum schützen: In einigen Fällen verwenden Betrüger Verschleierung, um ihre eigenen bösartigen Techniken oder geistiges Eigentum zu schützen. Dies kann verhindern, dass andere Bedrohungsakteure ihren Code kopieren oder ändern können.
  4. Persistenz und Widerstandsfähigkeit aufrechterhalten: Verschleierter Code kann widerstandsfähiger sein, da es für Firewalls und Anti-Viren-Software schwieriger sein kann, ihn auf einem infizierten System zu erkennen und zu entfernen. Dies kann dem Betrüger helfen, die Kontrolle über ein kompromittiertes System für einen längeren Zeitraum zu behalten.
  5. Automatisierte Erkennung abschwächen: Automatisierte Systeme, die nach verdächtigen Mustern oder Schlüsselwörtern im Code suchen, könnten Schwierigkeiten haben, bösartige Absichten in verschleiertem JavaScript zu identifizieren.
  6. Sandboxen und Emulatoren umgehen: Einige Sicherheitssysteme verwenden Sandboxen oder Emulatoren, um Code in einer kontrollierten Umgebung zu analysieren. Verschleierung kann es für diese Systeme schwieriger machen, das tatsächliche Verhalten des Codes zu verstehen.
  7. Vor Sicherheitsupdates bleiben: Betrüger zielen darauf ab, Sicherheitslücken auszunutzen, bevor sie gepatcht werden. Die Verschleierung ihres Codes kann ihnen helfen, anstehenden Sicherheitsupdates einen Schritt voraus zu bleiben, da es länger dauert, bis Sicherheitsforscher den verschleierten Code auseinandernehmen und verstehen.
  8. Die Einstiegshürde erhöhen: Durch die Verschleierung ihres Codes könnten Betrüger weniger erfahrene Personen davon abhalten, den Code zu analysieren oder zu ändern. Dies kann den Kreis derjenigen einschränken, die potenziell ihre Operationen stören könnten.

Es ist wichtig zu beachten, dass die Verschleierung von Code eine Hürde für Sicherheitsexperten und Reverse-Engineers sein kann. Diese Hürde ist aber nicht unüberwindlich. Erfahrene Sicherheitsexperten und Analysten sind oft in der Lage, verschleierten Code zu deobfuskieren und seine eigentliche Absicht zu verstehen, vorausgesetzt, sie haben genügend Zeit und Ressourcen.

Wie funktioniert JavaScript-Verschleierung?

Hier ist ein einfaches Beispiel für JavaScript-Verschleierung:

Ursprünglicher JavaScript-Code:

Verschleierter JavaScript-Code:

In diesem Beispiel wurde die ursprüngliche Funktion addNumbers verschleiert. So funktioniert die Verschleierung:

  1. Verschleierung von Variablen- und Funktionsnamen:
    • Der Funktionsname addNumbers wurde zu _0x1234 geändert.
    • Die Variablennamen a, b und result wurden zu _0x5678, _0x9abc und _0xdef0 geändert.
  2. Verschleierung von Zeichenketten:
    • Die in dem Code verwendeten Zeichenketten wurden verschleiert. Zum Beispiel wurde addNumbers als "\x61\x64\x64\x4E\x75\x6D\x62\x65\x72\x73" codiert.
  3. Umstrukturierung des Codes:
    • Die Code-Struktur kann geändert werden, um die Logik weiter zu verschleiern. Zum Beispiel wurde die Addition a + b in einen Funktionsaufruf _0x1234(2,3) aufgeteilt.

Bedenke, dass dies ein einfaches Beispiel ist. In realen Szenarien können Verschleierungstechniken viel ausgefeilter sein und komplexe Transformationen, Manipulationen und fortgeschrittene Zeichenkettenkodierungstechniken beinhalten.

Im nachfolgenden Beitrag stelle ich ein reales Szenario der JavaScript-Verschleierung dar, das von Cyberkriminellen in einer Phishing-Kampagne genutzt wurde: