Skip to main content

So verhindern Sie Trojan-Source-Angriffe mit Snyk Code

Artikel von

Frank Fischer

blog feature trojan source unicode

17. November 2021

0 Min. Lesezeit

Anfang des Monats veröffentlichte eine Gruppe von Forschenden der University of Cambridge ein wissenschaftliches Paper samt einer begleitenden Website zu einer neuen Art potenzieller Schwachstelle, die im Quellcode auftreten kann. Sie nannten sie Trojan Source.

Die Schwachstelle beruht im Wesentlichen darauf, Unicode-Zeichen im Code zu verwenden. Während dadurch praktische Möglichkeiten für Variablennamen oder Kommentare entstehen (z. B. Emojis, mit denen Sie in Kommentaren Ihre Gefühle ausdrücken können), lassen sich damit leider auch potenziell bösartige Bedeutungen im Code vor dem menschlichen Auge verbergen. Ein Angreifer könnte beispielsweise Code so aussehen lassen, als enthielte er eine gültige Authentifizierungslogik, obwohl er in Wirklichkeit (bzw. für den Compiler oder Interpreter) eine völlig andere Aktion ausführt. Oder vermeintlich aktiver Code besteht tatsächlich nur aus Kommentaren und wird daher zur Laufzeit ignoriert. All das gelingt durch Unicode-Zeichen, die das menschliche Auge täuschen.

Wenn Sie sich für die Feinheiten dieser Schwachstelle interessieren, empfehlen wir Ihnen die ursprüngliche Website oder das Paper. Und wenn Sie die Schwachstelle in JavaScript in Aktion sehen möchten: Mein Kollege Liran Tal hat einen Blogartikel darüber geschrieben, wie sich Trojan-Source-Angriffe in JavaScript-Codebasen mit ESLint effektiv erkennen und abwehren lassen.

In diesem Beitrag verwenden wir Snyk Code, um Trojan Source im Quellcode zu finden und zu beheben. Los geht’s!

„Kann Snyk Code Trojan Source beheben?“

Diese Frage erhielten wir am selben Tag, an dem die Website veröffentlicht wurde – ein Beleg dafür, wie gut informiert und vernetzt Snyk-Kunden sind. Ich fasse unsere interne Diskussion zusammen: Nachdem wir das Team gefragt hatten, lautete die erste Einschätzung: (1) Es handle sich offenbar um einen möglichen Supply-Chain-Angriff, weniger jedoch um eine Gefahr für Ihren eigenen Code, da dafür Zugriff auf den Quellcode erforderlich ist, und (2) der Angriff funktioniere auf syntaktischer Ebene.

Hinweis: Wie Sie im Artikel von Liran sehen, handelt es sich bei Trojan Source um einen Angriff auf syntaktischer Ebene. Deshalb hilft ESLint JavaScript-Entwicklern. Andere Ökosysteme wie Java, Ruby und C# verfügen möglicherweise nicht über neue Tools, um diesen Angriffsvektor abzuwehren. Dadurch wird Snyk Code zu einem noch wichtigeren Tool in Ihrem Werkzeugkasten.

Angesichts der Reaktionen aus der Community und auf Wunsch unserer Kunden haben wir beschlossen, Regeln zur Behebung von Trojan-Source-Problemen hinzuzufügen. Da es sich nicht um ein Problem mit hohem Schweregrad handelt (es stand nur aufgrund der aktuellen Berichterstattung besonders im Blickpunkt), haben wir die Behebung nicht vorgezogen, sondern als Aufgabe in den laufenden Sprint aufgenommen. Doch dabei sollte es nicht bleiben. Bei der Entwicklung dieser Regel haben wir auch verwandte UTF-Zeichenverwechslungs-Schwachstellen berücksichtigt. Außerdem haben wir sichergestellt, dass die Regelsammlung alle von Snyk Code unterstützten Sprachen abdeckt.

Bemerkenswert ist, dass die Entwicklung und Veröffentlichung der Regeln zu Trojan Source und verwandten Problemen für alle von Snyk Code unterstützten Sprachen nur zehn Tage dauerte – und zwar ohne beschleunigtes Verfahren, allein im laufenden Sprint. Das ist ein perfektes Beispiel für die Agilität von Snyk Code: Entscheidung, Programmierung, Tests in Hunderttausenden Projekten und allen unterstützten Sprachen, Optimierung und Veröffentlichung in nur zehn Tagen. Zugleich zeigt es die Leistungsfähigkeit der ML-optimierten Engine von Snyk Code: Innerhalb weniger Entwicklungsstunden deckten wir nicht nur Trojan Source ab, sondern auch einige verwandte Probleme.

Snyk Code markiert auf dem Bildschirm einen JavaScript-Funktionsnamen mit potenziell verwechselbaren UTF-8-Zeichen und einem Score von 361.
Snyk Code TrojanSourceBidiControl-Warnung mit Go-Code und einem Hinweis, dass Bidi-Steuerzeichen die Bedeutung des Codes verschleiern können.

Snyk Code erkennt Trojan Source und andere gefährliche Varianten

Trojan Source würde wahrscheinlich als Open-Source-Supply-Chain-Angriff auftreten, könnte aber auch durch direktes Kopieren und Einfügen in den Anwendungscode ausgeführt werden (wie in Lirans Blog zu sehen). Deshalb scannt Snyk Code Ihre Codebasis auf Probleme vom Typ Trojan Source.

Hinweis: Snyk ist auch ein leistungsstarkes Tool, um die Open-Source-Supply-Chain abzusichern und Probleme mit der Sicherheit von Abhängigkeiten sowie der Einhaltung von Lizenzbedingungen einfach zu überwachen und zu beheben.

Wie oben erwähnt, brauchte das Team nur wenige Tage, um die Erkennung von Trojan Source zu entwickeln. Snyk Code erkennt jedoch mehr Angriffsvarianten als die meisten anderen Tools. So erkennt Snyk Code nicht nur bidirektionale Steuerzeichen, sondern auch verwechselbare UTF-Zeichen in Methoden- und Variablennamen, die die tatsächliche Bedeutung des Codes verschleiern können. Das bedeutet: Snyk Code erkennt heute mehr der von Trojan Source beschriebenen Probleme als jeder andere uns bekannte Scanner.

Hinweis: Snyk Code unterstützt Java, JavaScript, TypeScript, PHP und Python sowie in der öffentlichen Betaversion C#, Ruby und Go. Trojan Source kann auch andere Sprachen angreifen (z. B. Bash-Skripte), aber Snyk Code kann keine nicht unterstützten Sprachen scannen.

Snyk Code ist die Achillesferse von Trojan Source

Wie oben zu sehen ist, bietet Snyk Code eine leistungsstarke Engine, die eine Vielzahl von Scans durchführen kann. Sie lernt aus dem Wissen der globalen Entwickler-Community und nutzt dafür einen einzigartigen, von Menschen gesteuerten Algorithmus. Zudem können wir schnell auf Marktveränderungen und neue Probleme wie Trojan Source reagieren. So erkennt Snyk Code nicht nur Trojan Source und verwandte Schwachstellen, sondern nutzt auch seine bestehende Wissensbasis, um branchenführende Präzision zu bieten. Die Probleme werden anhand des ursprünglichen Quellcodes erklärt. Zusätzliche Hilfestellungen – bis hin zu Beispielen dafür, wie Open-Source-Projekte ähnliche Probleme gelöst haben – unterstützen Entwickler dabei, sie zu verstehen und zu beheben.

Und das alles mit unvergleichlicher Geschwindigkeit und direkt in Ihrer bevorzugten IDE. Außerdem können Sie Snyk Code kostenlos nutzen – ein mehr als guter Grund, es auszuprobieren!

Sichern Sie Ihren Code mit modernsten Erkenntnissen

Lernen Sie in nur 30 Minuten das gesamte Funktionsspektrum von Snyk Code SAST kennen.