SCW-Symbole
Held-Hintergrund ohne Trennlinie
Blog

Was ist Trojan Source und wie gelangt es in Ihren Quellcode?

Laura Verheyde
Veröffentlicht Feb 23, 2022
Zuletzt aktualisiert am 06. März 2026

Anfang November veröffentlichte die Universität Cambridge ihre Forschungsarbeit mit dem Titel „Trojan-Source“. Diese Forschungsarbeit befasste sich damit, wie Backdoors mithilfe von Formatierungszeichen im Quellcode und in Kommentaren versteckt werden können. Diese können verwendet werden, um Code zu erstellen, dessen Logik vom Compiler anders interpretiert wird als von einem menschlichen Code-Prüfer.

Diese Schwachstelle ist neu, obwohl Unicode in der Vergangenheit bereits für böswillige Zwecke genutzt wurde, beispielsweise um die tatsächliche Dateiendung einer Datei zu verbergen, indem die Richtung des letzten Teils eines Dateinamens umgekehrt wurde. Jüngste Untersuchungen haben ergeben, dass viele Compiler Unicode-Zeichen im Quellcode ohne Vorwarnung ignorieren, während Texteditoren, einschließlich Code-Editoren, Zeilen, die Kommentare und darauf basierenden Code enthalten, neu anordnen können. Daher ist es möglich, dass der Editor den Code und die Kommentare anders und in einer anderen Reihenfolge anzeigt, als sie vom Compiler analysiert werden, wobei sogar Code und Kommentare vertauscht werden können.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie gleich loslegen und den simulierten Hack von Trojan Source ausprobieren möchten, besuchen Sie unsere kostenlose Seite und öffentliche Mission, um es selbst zu erleben.

Bidirektionaler Text

Einer dieser Angriffe von Trojan-Source nutzt den Unicode-Bidi-Algorithmus (bidirektional), der dafür zuständig ist, wie Text mit unterschiedlicher Anzeigereihenfolge zusammengefügt wird, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Die Zeichen der Richtungsformatierung können verwendet werden, um die Gruppierung neu zu ordnen und die Reihenfolge der Zeichen anzuzeigen.

Die obige Tabelle enthält einige der mit dem Angriff in Verbindung stehenden, annullierten Charaktere aus Bidi. Nehmen wir zum Beispiel

RLI e d a c PDI

Die Abkürzung RLI steht für „Von rechts nach links isolieren”. Der Text wird aus seinem Kontext isoliert (begrenzt durch PDI, Pop-Richtungsisolierung) und von rechts nach links gelesen. Das Ergebnis lautet:

c a d e

Allerdings verarbeiten Compiler und Interpreter Formatsteuerzeichen, einschließlich Bidi-Aufhebungen, in der Regel nicht, bevor sie den Quellcode analysieren. Wenn sie die Richtungsformatzeichen einfach ignorieren, analysieren sie:

e d a c

Alter Wein in neuen Schläuchen?

Natürlich ist das nichts Neues. In der Vergangenheit wurden Richtungsformatzeichen in Dateinamen eingefügt, um deren bösartige Natur zu verschleiern. Ein E-Mail-Anhang mit dem Namen „myspecialexe.doc” könnte recht harmlos erscheinen, wäre da nicht das Zeichen RLO (Right-to-Left Override), das verrät, dass der eigentliche Name „myspecialcod.exe” lautet.

Der Trojaner-Angriff fügt Formatierungszeichen in die Kommentare und Zeichenfolgen des Quellcodes ein, da diese keine Syntax- oder Kompilierungsfehler verursachen. Diese Steuerzeichen ändern die Reihenfolge, in der die Logik des Codes angezeigt wird, sodass der Compiler etwas völlig anderes liest als ein Mensch.

Beispielsweise eine Datei, die die folgenden Bytes in dieser Reihenfolge enthält:

Bidirektionaler Unicode-Text

wird entsprechend den Richtungsformatzeichen wie folgt neu angeordnet

Richtungsweisende Formatierungszeichen

sodass der Code wie folgt dargestellt wird, wenn die Richtungsformatzeichen nicht explizit aufgerufen werden:

Bidirektionale Unicode-Zeichen

Der RLO wandelt das geschlossene Korsett in ein offenes Korsett um und umgekehrt in der letzten Zeile. Das Ergebnis der Ausführung dieses Codes wäre: „Du bist ein Administrator“. Die Administratorprüfung war kommentiert, aber die Steuerzeichen vermitteln den Eindruck, dass sie noch vorhanden war.

(Quelle: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Wie kann sich das auf Sie auswirken?

Viele Sprachen sind anfällig für Angriffe: C, C++, C#, JavaScript, Java, Rust, Go und Python, und es gibt vermutlich noch weitere. Nun könnte der durchschnittliche Entwickler die Anzeige von Richtungszeichen im Quellcode missbilligen, aber ein Neuling würde vielleicht nur mit den Schultern zucken und sich keine weiteren Gedanken darüber machen. Außerdem hängt die Anzeige dieser Zeichen stark von der IDE ab, sodass es keine Garantie dafür gibt, dass sie erkannt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Erstens kann dies passieren, wenn Quellcode aus unzuverlässigen Quellen verwendet wird, in denen böswillige Code-Beiträge unbemerkt geblieben sind. Zweitens könnte dies einfach durch Kopieren und Einfügen von Code aus dem Internet geschehen, was die meisten Entwickler schon einmal getan haben. Die meisten Unternehmen verlassen sich auf Softwarekomponenten verschiedener Anbieter. Dies wirft die Frage auf, inwieweit wir diesem Code vollständig vertrauen können. Wie können wir Quellcode erkennen, der versteckte Hintertüren enthält?

Wessen Problem ist das?

Einerseits sollten Compiler und Compiler-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, es sei denn, eine Richtung ist streng auf Zeichenfolgen und Kommentare beschränkt. Beachten Sie, dass ein Richtungsformatierungszeichen in einer Zeichenfolge oder einem Kommentar, wenn es nicht erscheint, eine Richtungsänderung bis zum Ende der Zeile verlängern kann. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen, wie Homoglyphen und Richtungsformatierungszeichen, explizit darstellen und hervorheben. Seit November fügt GitHub nun ein Signal und eine Warnmeldung zu jeder Codezeile hinzu, die bidirektionalen Unicode-Text enthält, hebt jedoch nicht hervor, an welcher Stelle der Zeile sich diese Zeichen befinden. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit harmlosen Richtungsänderungen eingefügt werden.

Es ist unerlässlich, dass Entwickler und Code-Prüfer sensibilisiert sind. Aus diesem Grund haben wir ein Tutorial erstellt, das die Schwachstelle veranschaulicht. Derzeit ist dieses Tutorial für Java, C#, Python, GO und PHP verfügbar.

Wenn Sie also mehr erfahren möchten, probieren Sie unsere Simulation (öffentliche Missionen) von Trojan Source aus und lesen Sie die Untersuchung zu Trojanischen Quellen.

Simulation in Java

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Fuente troyana
Fuente troyana
Siehe Ressource
Siehe Ressource

Interessiert an mehr?

mehr erfahren

Secure Code Warrior hier, um Ihrem Unternehmen dabei zu helfen, den Code während des gesamten Lebenszyklus der Softwareentwicklung zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie AppSec-Administrator, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Eine Vorführung buchen
Teilen auf:
LinkedIn-MarkenSozialx Logo
Autor
Laura Verheyde
Veröffentlicht Feb 23, 2022

Laura Verheyde ist Softwareentwicklerin bei Secure Code Warrior und beschäftigt sich mit der Erforschung von Schwachstellen und der Erstellung von Inhalten für Missions und Coding Labs.

Teilen auf:
LinkedIn-MarkenSozialx Logo
Fuente troyana
Fuente troyana

Anfang November veröffentlichte die Universität Cambridge ihre Forschungsarbeit mit dem Titel „Trojan-Source“. Diese Forschungsarbeit befasste sich damit, wie Backdoors mithilfe von Formatierungszeichen im Quellcode und in Kommentaren versteckt werden können. Diese können verwendet werden, um Code zu erstellen, dessen Logik vom Compiler anders interpretiert wird als von einem menschlichen Code-Prüfer.

Diese Schwachstelle ist neu, obwohl Unicode in der Vergangenheit bereits für böswillige Zwecke genutzt wurde, beispielsweise um die tatsächliche Dateiendung einer Datei zu verbergen, indem die Richtung des letzten Teils eines Dateinamens umgekehrt wurde. Jüngste Untersuchungen haben ergeben, dass viele Compiler Unicode-Zeichen im Quellcode ohne Vorwarnung ignorieren, während Texteditoren, einschließlich Code-Editoren, Zeilen, die Kommentare und darauf basierenden Code enthalten, neu anordnen können. Daher ist es möglich, dass der Editor den Code und die Kommentare anders und in einer anderen Reihenfolge anzeigt, als sie vom Compiler analysiert werden, wobei sogar Code und Kommentare vertauscht werden können.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie gleich loslegen und den simulierten Hack von Trojan Source ausprobieren möchten, besuchen Sie unsere kostenlose Seite und öffentliche Mission, um es selbst zu erleben.

Bidirektionaler Text

Einer dieser Angriffe von Trojan-Source nutzt den Unicode-Bidi-Algorithmus (bidirektional), der dafür zuständig ist, wie Text mit unterschiedlicher Anzeigereihenfolge zusammengefügt wird, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Die Zeichen der Richtungsformatierung können verwendet werden, um die Gruppierung neu zu ordnen und die Reihenfolge der Zeichen anzuzeigen.

Die obige Tabelle enthält einige der mit dem Angriff in Verbindung stehenden, annullierten Charaktere aus Bidi. Nehmen wir zum Beispiel

RLI e d a c PDI

Die Abkürzung RLI steht für „Von rechts nach links isolieren”. Der Text wird aus seinem Kontext isoliert (begrenzt durch PDI, Pop-Richtungsisolierung) und von rechts nach links gelesen. Das Ergebnis lautet:

c a d e

Allerdings verarbeiten Compiler und Interpreter Formatsteuerzeichen, einschließlich Bidi-Aufhebungen, in der Regel nicht, bevor sie den Quellcode analysieren. Wenn sie die Richtungsformatzeichen einfach ignorieren, analysieren sie:

e d a c

Alter Wein in neuen Schläuchen?

Natürlich ist das nichts Neues. In der Vergangenheit wurden Richtungsformatzeichen in Dateinamen eingefügt, um deren bösartige Natur zu verschleiern. Ein E-Mail-Anhang mit dem Namen „myspecialexe.doc” könnte recht harmlos erscheinen, wäre da nicht das Zeichen RLO (Right-to-Left Override), das verrät, dass der eigentliche Name „myspecialcod.exe” lautet.

Der Trojaner-Angriff fügt Formatierungszeichen in die Kommentare und Zeichenfolgen des Quellcodes ein, da diese keine Syntax- oder Kompilierungsfehler verursachen. Diese Steuerzeichen ändern die Reihenfolge, in der die Logik des Codes angezeigt wird, sodass der Compiler etwas völlig anderes liest als ein Mensch.

Beispielsweise eine Datei, die die folgenden Bytes in dieser Reihenfolge enthält:

Bidirektionaler Unicode-Text

wird entsprechend den Richtungsformatzeichen wie folgt neu angeordnet

Richtungsweisende Formatierungszeichen

sodass der Code wie folgt dargestellt wird, wenn die Richtungsformatzeichen nicht explizit aufgerufen werden:

Bidirektionale Unicode-Zeichen

Der RLO wandelt das geschlossene Korsett in ein offenes Korsett um und umgekehrt in der letzten Zeile. Das Ergebnis der Ausführung dieses Codes wäre: „Du bist ein Administrator“. Die Administratorprüfung war kommentiert, aber die Steuerzeichen vermitteln den Eindruck, dass sie noch vorhanden war.

(Quelle: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Wie kann sich das auf Sie auswirken?

Viele Sprachen sind anfällig für Angriffe: C, C++, C#, JavaScript, Java, Rust, Go und Python, und es gibt vermutlich noch weitere. Nun könnte der durchschnittliche Entwickler die Anzeige von Richtungszeichen im Quellcode missbilligen, aber ein Neuling würde vielleicht nur mit den Schultern zucken und sich keine weiteren Gedanken darüber machen. Außerdem hängt die Anzeige dieser Zeichen stark von der IDE ab, sodass es keine Garantie dafür gibt, dass sie erkannt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Erstens kann dies passieren, wenn Quellcode aus unzuverlässigen Quellen verwendet wird, in denen böswillige Code-Beiträge unbemerkt geblieben sind. Zweitens könnte dies einfach durch Kopieren und Einfügen von Code aus dem Internet geschehen, was die meisten Entwickler schon einmal getan haben. Die meisten Unternehmen verlassen sich auf Softwarekomponenten verschiedener Anbieter. Dies wirft die Frage auf, inwieweit wir diesem Code vollständig vertrauen können. Wie können wir Quellcode erkennen, der versteckte Hintertüren enthält?

Wessen Problem ist das?

Einerseits sollten Compiler und Compiler-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, es sei denn, eine Richtung ist streng auf Zeichenfolgen und Kommentare beschränkt. Beachten Sie, dass ein Richtungsformatierungszeichen in einer Zeichenfolge oder einem Kommentar, wenn es nicht erscheint, eine Richtungsänderung bis zum Ende der Zeile verlängern kann. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen, wie Homoglyphen und Richtungsformatierungszeichen, explizit darstellen und hervorheben. Seit November fügt GitHub nun ein Signal und eine Warnmeldung zu jeder Codezeile hinzu, die bidirektionalen Unicode-Text enthält, hebt jedoch nicht hervor, an welcher Stelle der Zeile sich diese Zeichen befinden. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit harmlosen Richtungsänderungen eingefügt werden.

Es ist unerlässlich, dass Entwickler und Code-Prüfer sensibilisiert sind. Aus diesem Grund haben wir ein Tutorial erstellt, das die Schwachstelle veranschaulicht. Derzeit ist dieses Tutorial für Java, C#, Python, GO und PHP verfügbar.

Wenn Sie also mehr erfahren möchten, probieren Sie unsere Simulation (öffentliche Missionen) von Trojan Source aus und lesen Sie die Untersuchung zu Trojanischen Quellen.

Simulation in Java

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Siehe Ressource
Siehe Ressource

Füllen Sie das folgende Formular aus, um den Bericht herunterzuladen.

Wir möchten Ihre Erlaubnis einholen, Ihnen Informationen über unsere Produkte oder Themen im Zusammenhang mit sicherer Verschlüsselung zuzusenden. Wir werden Ihre personenbezogenen Daten stets mit größter Sorgfalt behandeln und niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Senden
scw Erfolgssymbol
scw-Fehlersymbol
Um das Formular zu senden, aktivieren Sie bitte die „Analyse“-Cookies. Sie können diese nach Abschluss des Vorgangs wieder deaktivieren.
Fuente troyana

Anfang November veröffentlichte die Universität Cambridge ihre Forschungsarbeit mit dem Titel „Trojan-Source“. Diese Forschungsarbeit befasste sich damit, wie Backdoors mithilfe von Formatierungszeichen im Quellcode und in Kommentaren versteckt werden können. Diese können verwendet werden, um Code zu erstellen, dessen Logik vom Compiler anders interpretiert wird als von einem menschlichen Code-Prüfer.

Diese Schwachstelle ist neu, obwohl Unicode in der Vergangenheit bereits für böswillige Zwecke genutzt wurde, beispielsweise um die tatsächliche Dateiendung einer Datei zu verbergen, indem die Richtung des letzten Teils eines Dateinamens umgekehrt wurde. Jüngste Untersuchungen haben ergeben, dass viele Compiler Unicode-Zeichen im Quellcode ohne Vorwarnung ignorieren, während Texteditoren, einschließlich Code-Editoren, Zeilen, die Kommentare und darauf basierenden Code enthalten, neu anordnen können. Daher ist es möglich, dass der Editor den Code und die Kommentare anders und in einer anderen Reihenfolge anzeigt, als sie vom Compiler analysiert werden, wobei sogar Code und Kommentare vertauscht werden können.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie gleich loslegen und den simulierten Hack von Trojan Source ausprobieren möchten, besuchen Sie unsere kostenlose Seite und öffentliche Mission, um es selbst zu erleben.

Bidirektionaler Text

Einer dieser Angriffe von Trojan-Source nutzt den Unicode-Bidi-Algorithmus (bidirektional), der dafür zuständig ist, wie Text mit unterschiedlicher Anzeigereihenfolge zusammengefügt wird, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Die Zeichen der Richtungsformatierung können verwendet werden, um die Gruppierung neu zu ordnen und die Reihenfolge der Zeichen anzuzeigen.

Die obige Tabelle enthält einige der mit dem Angriff in Verbindung stehenden, annullierten Charaktere aus Bidi. Nehmen wir zum Beispiel

RLI e d a c PDI

Die Abkürzung RLI steht für „Von rechts nach links isolieren”. Der Text wird aus seinem Kontext isoliert (begrenzt durch PDI, Pop-Richtungsisolierung) und von rechts nach links gelesen. Das Ergebnis lautet:

c a d e

Allerdings verarbeiten Compiler und Interpreter Formatsteuerzeichen, einschließlich Bidi-Aufhebungen, in der Regel nicht, bevor sie den Quellcode analysieren. Wenn sie die Richtungsformatzeichen einfach ignorieren, analysieren sie:

e d a c

Alter Wein in neuen Schläuchen?

Natürlich ist das nichts Neues. In der Vergangenheit wurden Richtungsformatzeichen in Dateinamen eingefügt, um deren bösartige Natur zu verschleiern. Ein E-Mail-Anhang mit dem Namen „myspecialexe.doc” könnte recht harmlos erscheinen, wäre da nicht das Zeichen RLO (Right-to-Left Override), das verrät, dass der eigentliche Name „myspecialcod.exe” lautet.

Der Trojaner-Angriff fügt Formatierungszeichen in die Kommentare und Zeichenfolgen des Quellcodes ein, da diese keine Syntax- oder Kompilierungsfehler verursachen. Diese Steuerzeichen ändern die Reihenfolge, in der die Logik des Codes angezeigt wird, sodass der Compiler etwas völlig anderes liest als ein Mensch.

Beispielsweise eine Datei, die die folgenden Bytes in dieser Reihenfolge enthält:

Bidirektionaler Unicode-Text

wird entsprechend den Richtungsformatzeichen wie folgt neu angeordnet

Richtungsweisende Formatierungszeichen

sodass der Code wie folgt dargestellt wird, wenn die Richtungsformatzeichen nicht explizit aufgerufen werden:

Bidirektionale Unicode-Zeichen

Der RLO wandelt das geschlossene Korsett in ein offenes Korsett um und umgekehrt in der letzten Zeile. Das Ergebnis der Ausführung dieses Codes wäre: „Du bist ein Administrator“. Die Administratorprüfung war kommentiert, aber die Steuerzeichen vermitteln den Eindruck, dass sie noch vorhanden war.

(Quelle: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Wie kann sich das auf Sie auswirken?

Viele Sprachen sind anfällig für Angriffe: C, C++, C#, JavaScript, Java, Rust, Go und Python, und es gibt vermutlich noch weitere. Nun könnte der durchschnittliche Entwickler die Anzeige von Richtungszeichen im Quellcode missbilligen, aber ein Neuling würde vielleicht nur mit den Schultern zucken und sich keine weiteren Gedanken darüber machen. Außerdem hängt die Anzeige dieser Zeichen stark von der IDE ab, sodass es keine Garantie dafür gibt, dass sie erkannt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Erstens kann dies passieren, wenn Quellcode aus unzuverlässigen Quellen verwendet wird, in denen böswillige Code-Beiträge unbemerkt geblieben sind. Zweitens könnte dies einfach durch Kopieren und Einfügen von Code aus dem Internet geschehen, was die meisten Entwickler schon einmal getan haben. Die meisten Unternehmen verlassen sich auf Softwarekomponenten verschiedener Anbieter. Dies wirft die Frage auf, inwieweit wir diesem Code vollständig vertrauen können. Wie können wir Quellcode erkennen, der versteckte Hintertüren enthält?

Wessen Problem ist das?

Einerseits sollten Compiler und Compiler-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, es sei denn, eine Richtung ist streng auf Zeichenfolgen und Kommentare beschränkt. Beachten Sie, dass ein Richtungsformatierungszeichen in einer Zeichenfolge oder einem Kommentar, wenn es nicht erscheint, eine Richtungsänderung bis zum Ende der Zeile verlängern kann. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen, wie Homoglyphen und Richtungsformatierungszeichen, explizit darstellen und hervorheben. Seit November fügt GitHub nun ein Signal und eine Warnmeldung zu jeder Codezeile hinzu, die bidirektionalen Unicode-Text enthält, hebt jedoch nicht hervor, an welcher Stelle der Zeile sich diese Zeichen befinden. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit harmlosen Richtungsänderungen eingefügt werden.

Es ist unerlässlich, dass Entwickler und Code-Prüfer sensibilisiert sind. Aus diesem Grund haben wir ein Tutorial erstellt, das die Schwachstelle veranschaulicht. Derzeit ist dieses Tutorial für Java, C#, Python, GO und PHP verfügbar.

Wenn Sie also mehr erfahren möchten, probieren Sie unsere Simulation (öffentliche Missionen) von Trojan Source aus und lesen Sie die Untersuchung zu Trojanischen Quellen.

Simulation in Java

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Webinar ansehen
Beginnen
mehr erfahren

Klicken Sie auf den untenstehenden Link und laden Sie die PDF-Datei dieser Ressource herunter.

Secure Code Warrior hier, um Ihrem Unternehmen dabei zu helfen, den Code während des gesamten Lebenszyklus der Softwareentwicklung zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie AppSec-Administrator, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Bericht anzeigenEine Vorführung buchen
Siehe Ressource
Teilen auf:
LinkedIn-MarkenSozialx Logo
Interessiert an mehr?

Teilen auf:
LinkedIn-MarkenSozialx Logo
Autor
Laura Verheyde
Veröffentlicht Feb 23, 2022

Laura Verheyde ist Softwareentwicklerin bei Secure Code Warrior und beschäftigt sich mit der Erforschung von Schwachstellen und der Erstellung von Inhalten für Missions und Coding Labs.

Teilen auf:
LinkedIn-MarkenSozialx Logo

Anfang November veröffentlichte die Universität Cambridge ihre Forschungsarbeit mit dem Titel „Trojan-Source“. Diese Forschungsarbeit befasste sich damit, wie Backdoors mithilfe von Formatierungszeichen im Quellcode und in Kommentaren versteckt werden können. Diese können verwendet werden, um Code zu erstellen, dessen Logik vom Compiler anders interpretiert wird als von einem menschlichen Code-Prüfer.

Diese Schwachstelle ist neu, obwohl Unicode in der Vergangenheit bereits für böswillige Zwecke genutzt wurde, beispielsweise um die tatsächliche Dateiendung einer Datei zu verbergen, indem die Richtung des letzten Teils eines Dateinamens umgekehrt wurde. Jüngste Untersuchungen haben ergeben, dass viele Compiler Unicode-Zeichen im Quellcode ohne Vorwarnung ignorieren, während Texteditoren, einschließlich Code-Editoren, Zeilen, die Kommentare und darauf basierenden Code enthalten, neu anordnen können. Daher ist es möglich, dass der Editor den Code und die Kommentare anders und in einer anderen Reihenfolge anzeigt, als sie vom Compiler analysiert werden, wobei sogar Code und Kommentare vertauscht werden können.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie gleich loslegen und den simulierten Hack von Trojan Source ausprobieren möchten, besuchen Sie unsere kostenlose Seite und öffentliche Mission, um es selbst zu erleben.

Bidirektionaler Text

Einer dieser Angriffe von Trojan-Source nutzt den Unicode-Bidi-Algorithmus (bidirektional), der dafür zuständig ist, wie Text mit unterschiedlicher Anzeigereihenfolge zusammengefügt wird, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Die Zeichen der Richtungsformatierung können verwendet werden, um die Gruppierung neu zu ordnen und die Reihenfolge der Zeichen anzuzeigen.

Die obige Tabelle enthält einige der mit dem Angriff in Verbindung stehenden, annullierten Charaktere aus Bidi. Nehmen wir zum Beispiel

RLI e d a c PDI

Die Abkürzung RLI steht für „Von rechts nach links isolieren”. Der Text wird aus seinem Kontext isoliert (begrenzt durch PDI, Pop-Richtungsisolierung) und von rechts nach links gelesen. Das Ergebnis lautet:

c a d e

Allerdings verarbeiten Compiler und Interpreter Formatsteuerzeichen, einschließlich Bidi-Aufhebungen, in der Regel nicht, bevor sie den Quellcode analysieren. Wenn sie die Richtungsformatzeichen einfach ignorieren, analysieren sie:

e d a c

Alter Wein in neuen Schläuchen?

Natürlich ist das nichts Neues. In der Vergangenheit wurden Richtungsformatzeichen in Dateinamen eingefügt, um deren bösartige Natur zu verschleiern. Ein E-Mail-Anhang mit dem Namen „myspecialexe.doc” könnte recht harmlos erscheinen, wäre da nicht das Zeichen RLO (Right-to-Left Override), das verrät, dass der eigentliche Name „myspecialcod.exe” lautet.

Der Trojaner-Angriff fügt Formatierungszeichen in die Kommentare und Zeichenfolgen des Quellcodes ein, da diese keine Syntax- oder Kompilierungsfehler verursachen. Diese Steuerzeichen ändern die Reihenfolge, in der die Logik des Codes angezeigt wird, sodass der Compiler etwas völlig anderes liest als ein Mensch.

Beispielsweise eine Datei, die die folgenden Bytes in dieser Reihenfolge enthält:

Bidirektionaler Unicode-Text

wird entsprechend den Richtungsformatzeichen wie folgt neu angeordnet

Richtungsweisende Formatierungszeichen

sodass der Code wie folgt dargestellt wird, wenn die Richtungsformatzeichen nicht explizit aufgerufen werden:

Bidirektionale Unicode-Zeichen

Der RLO wandelt das geschlossene Korsett in ein offenes Korsett um und umgekehrt in der letzten Zeile. Das Ergebnis der Ausführung dieses Codes wäre: „Du bist ein Administrator“. Die Administratorprüfung war kommentiert, aber die Steuerzeichen vermitteln den Eindruck, dass sie noch vorhanden war.

(Quelle: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Wie kann sich das auf Sie auswirken?

Viele Sprachen sind anfällig für Angriffe: C, C++, C#, JavaScript, Java, Rust, Go und Python, und es gibt vermutlich noch weitere. Nun könnte der durchschnittliche Entwickler die Anzeige von Richtungszeichen im Quellcode missbilligen, aber ein Neuling würde vielleicht nur mit den Schultern zucken und sich keine weiteren Gedanken darüber machen. Außerdem hängt die Anzeige dieser Zeichen stark von der IDE ab, sodass es keine Garantie dafür gibt, dass sie erkannt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Erstens kann dies passieren, wenn Quellcode aus unzuverlässigen Quellen verwendet wird, in denen böswillige Code-Beiträge unbemerkt geblieben sind. Zweitens könnte dies einfach durch Kopieren und Einfügen von Code aus dem Internet geschehen, was die meisten Entwickler schon einmal getan haben. Die meisten Unternehmen verlassen sich auf Softwarekomponenten verschiedener Anbieter. Dies wirft die Frage auf, inwieweit wir diesem Code vollständig vertrauen können. Wie können wir Quellcode erkennen, der versteckte Hintertüren enthält?

Wessen Problem ist das?

Einerseits sollten Compiler und Compiler-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, es sei denn, eine Richtung ist streng auf Zeichenfolgen und Kommentare beschränkt. Beachten Sie, dass ein Richtungsformatierungszeichen in einer Zeichenfolge oder einem Kommentar, wenn es nicht erscheint, eine Richtungsänderung bis zum Ende der Zeile verlängern kann. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen, wie Homoglyphen und Richtungsformatierungszeichen, explizit darstellen und hervorheben. Seit November fügt GitHub nun ein Signal und eine Warnmeldung zu jeder Codezeile hinzu, die bidirektionalen Unicode-Text enthält, hebt jedoch nicht hervor, an welcher Stelle der Zeile sich diese Zeichen befinden. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit harmlosen Richtungsänderungen eingefügt werden.

Es ist unerlässlich, dass Entwickler und Code-Prüfer sensibilisiert sind. Aus diesem Grund haben wir ein Tutorial erstellt, das die Schwachstelle veranschaulicht. Derzeit ist dieses Tutorial für Java, C#, Python, GO und PHP verfügbar.

Wenn Sie also mehr erfahren möchten, probieren Sie unsere Simulation (öffentliche Missionen) von Trojan Source aus und lesen Sie die Untersuchung zu Trojanischen Quellen.

Simulation in Java

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Inhaltsverzeichnis

PDF herunterladen
Siehe Ressource
Interessiert an mehr?

mehr erfahren

Secure Code Warrior hier, um Ihrem Unternehmen dabei zu helfen, den Code während des gesamten Lebenszyklus der Softwareentwicklung zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie AppSec-Administrator, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Eine Vorführung buchenHerunterladen
Teilen auf:
LinkedIn-MarkenSozialx Logo
Ressourcenzentrum

Ressourcen für den Einstieg

Weitere Veröffentlichungen
Ressourcenzentrum

Ressourcen für den Einstieg

Weitere Veröffentlichungen