In der IT kennen viele den Begriff «Security through Obscurity», zu Deutsch Sicherheit durch Verschleierung. Echte Sicherheit war das nie. Trotzdem hat es lange gut funktioniert, weil das Aufdecken mehr Aufwand kostete, als es einbrachte.
Ein Beispiel: .NET-Anwendungen, die auf Desktops installiert wurden, musste man vor der Auslieferung obfuscaten. Sonst liess sich der Code mit wenig Aufwand zurückübersetzen und damit stehlen. Heute kommt das seltener vor, weil Webanwendungen die Desktop-Anwendungen ersetzen. Dort liegt das Problem anders.
Die Verschleierung ist eine Ebene tiefer gerutscht
Im Web braucht der Quellcode keine Obfuscation, weil er den Server nie verlässt. Dafür ist die Verschleierung eine Ebene tiefer gerutscht, auf die REST-API. Den Verkehr dort kann jeder in den Developer Tools seines Browsers mitlesen. Angreifer lernen daraus, wie ein System intern funktioniert, und manipulieren gezielt Requests, bis das System Informationen herausgibt, die nie für sie gedacht waren.
Häufig hat es an dieser Stelle gereicht, die Daten des Requests zu verschleiern. Zum Beispiel, indem man das JSON vor dem Senden im Browser verschlüsselt und auf dem Server wieder entschlüsselt. Alles, was dafür nötig ist, liegt zwangsläufig im Browser, irgendwo in vielen tausend Zeilen minifiziertem JavaScript. Da hat sich niemand durchgewühlt, um zu verstehen, wie die Verschlüsselung funktioniert. Die Hürde war hoch genug, um Hacker abzuhalten.
KI liest unlesbaren Code in Sekunden
Mit KI sieht die Sache anders aus. Claude und Co. wühlen sich in Sekunden durch diese schwer lesbaren Dateien und helfen dabei, verschlüsselte Inhalte direkt im Browser zu entschlüsseln, mit genau den Funktionen, die die Anwendung dafür mitbringt. Ein Mensch kommt nicht auf die Idee, __func(a,z2) aufzurufen. Für die KI ist das kein Problem, und damit entsteht ein neuer Angriffsvektor.
Ich habe das selbst ausprobiert. Die Anwendung wird als einzelne kompilierte Datei ausgeliefert. Der Code des Herstellers steckt darin nur als Bytecode, der Quelltext ist entfernt. Nach dem Dekompilieren hiessen alle Variablen nur noch r0, r1 oder r8, aber jeder Funktionsname und jeder Text im Code war erhalten. Ein Passwort oder API-Schlüssel, der fest im Programm steht, liegt damit offen. Die interessanten Teile waren zusätzlich verschleiert: Jeder Text lag verschlüsselt vor und wurde erst zur Laufzeit entschlüsselt. Zusammen mit der KI habe ich die Entschlüsselung nachgebaut, ohne das Programm auch nur zu starten, und damit über 95 Prozent der verschlüsselten Texte zurückgewonnen. Am Ende hatte ich den Algorithmus, der mich interessiert hat, als lesbaren Code. Er liefert auf die Stelle genau dieselben Ergebnisse wie das Original.
Für mich war das ein Forschungslauf. Angreifer machen dasselbe mit anderen Absichten. Man muss heute davon ausgehen, dass alles, was ausnutzbar ist, auch ausgenutzt wird. Die Angriffe werden deutlich komplexer. Das sehe ich auch in Kundenprojekten, wenn Kunden eigene Sicherheitstests laufen lassen und Findings melden.
Stellt alles auf den Prüfstand, was nur verschleiert ist
Daher mein Aufruf an alle Entscheider: Stellt jede Stelle auf den Prüfstand, die ihr nur verschleiert statt gelöst habt. Gelöst heisst, dass der Server jede Anfrage selbst prüft und nichts glaubt, was der Browser schickt. Security through Obscurity ist seit KI tot.
Wenn du Unterstützung bei der Analyse eures Codes oder eurer Infrastruktur brauchst, buch unten ein kostenloses Erstgespräch. Dann schauen wir gemeinsam, ob ich einen Mehrwert bieten kann.