SCW-Symbole
Held-Hintergrund ohne Trennlinie
Blog

Was ist Trojaner-Software und wie gelangt sie in den Quellcode?

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

Anfang November veröffentlichte die Universität Cambridge folgende Forschungsergebnisse: Trojanisches Pferd – Quelle. Diese Studie konzentrierte sich auf die Möglichkeit, mithilfe von gerichteten Formatierungszeichen Hintertüren in Quellcode und Kommentaren zu verstecken. Dies kann dazu genutzt werden, Code zu erstellen, den Compiler anders interpretieren als menschliche Code-Prüfer.

Zwar wurde Unicode in der Vergangenheit schon einmal böswillig eingesetzt, beispielsweise um die tatsächliche Dateinamenerweiterung einer Datei zu verbergen, doch diese Schwachstelle ist neu. Umkehrung der letzten Zeichen des Dateinamens. Jüngsten Untersuchungen zufolge ignorieren viele Compiler Unicode-Zeichen im Quellcode ohne Warnung, während Texteditoren, darunter auch Code-Editoren, Zeilen mit Kommentaren und Code auf dieser Grundlage neu formatieren können. Daher können Editoren Code und Kommentare in einer anderen Reihenfolge anzeigen als Compiler sie parsen. Dies gilt sogar dann, wenn Code und Kommentare vertauscht werden.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie die Hacking-Simulation von Trojan Source ausprobieren möchten, können Sie sich direkt über den kostenlosen Service anmelden. Erleben Sie selbst, wie es ist, eine öffentliche Aufgabe zu erfüllen.

bidirektionaler Text

Eine dieser Trojaner-Angriffe nutzt den Unicode-Bidi-Algorithmus (bidirektional). Dieser Algorithmus behandelt die Ausrichtung von Texten mit unterschiedlicher Anzeigereihenfolge, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Mit Hilfe von Richtungsformatierungszeichen können Gruppen neu angeordnet und die Zeichenreihenfolge angezeigt werden.

Die obige Tabelle enthält einige Bidi-Überschreibungszeichen, die mit Angriffen in Verbindung stehen. Beispielsweise:

RLI e d o c PD

Die Abkürzung RLI steht für „Right-to-Left Isolation“. Der Text wird vom Kontext (durch PDI getrennt) isoliert. Klicken Sie auf „Pop Directional Isolate“ und lesen Sie von rechts nach links. Das Ergebnis sieht wie folgt aus:

c o d e

Compiler und Interpreter verarbeiten jedoch in der Regel keine Formatsteuerzeichen, einschließlich Bidi-Overrides, bevor sie den Quellcode parsen. Wenn die Richtungsformatierungszeichen einfach ignoriert werden, wird der Code wie folgt geparst.

e d o c

Ein alter Wein in einer neuen Flasche?

Natürlich ist dies nichts Neues unter der Sonne. In der Vergangenheit wurden Richtungszeichen verwendet. Sie wurden in Dateinamen eingefügt, um ihre bösartige Natur zu verbergen. Eine E-Mail-Anhang mit dem Namen „myspecialexe.doc“ könnte völlig harmlos erscheinen, wenn es sich nicht um RLO (Right-to-Left Override) handeln würde, das darauf hinweist, dass der tatsächliche Name „myspecialcod.exe“ lautet.

Trojanische Code-Angriffe fügen Steuerzeichen in Kommentare und Zeichenfolgen im Quellcode ein. In solchen Fällen treten keine Syntax- oder Kompilierungsfehler auf. Diese Steuerzeichen ändern die Anzeigereihenfolge der Codelogik, sodass der Compiler etwas völlig anderes liest als das, was für Menschen lesbar ist.

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

Bidirektionaler Unicode-Text

Die Ausrichtung wird für jedes Zeichen wie folgt neu angeordnet.

Richtungsweisende Formatierungszeichen

Wenn das Richtungsformatzeichen nicht explizit aufgerufen wird, wird der Code wie folgt gerendert.

Bidirektionale Unicode-Zeichen

RLO kehrt die schließende Klammer in der letzten Zeile in eine öffnende Klammer um und umgekehrt. Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis: „Sie sind Administrator.“ Die Administratorprüfung wurde auskommentiert, aber wenn man sich die Steuerzeichen ansieht, hat man den Eindruck, dass diese Prüfung immer noch vorhanden ist.

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

Wie könnte sich das auf Sie auswirken?

C, C++, C#, JavaScript, Java, Rust, Go, Python und viele andere Sprachen sind anfällig für Angriffe, und es wird vermutet, dass noch mehr Sprachen anfällig für Angriffe sind. Nun mögen erfahrene Entwickler beim Anblick von Richtungszeichen im Quellcode die Stirn runzeln, aber Anfänger sollten vielleicht besser mit den Schultern zucken und sich keine Gedanken darüber machen. Außerdem hängt die Visualisierung dieser Zeichen stark von der IDE ab, sodass nicht garantiert ist, dass sie entdeckt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Vor allem kann dies passieren, wenn Quellcode aus einer nicht vertrauenswürdigen Quelle verwendet wird, in der bösartige Code-Beiträge nicht auffallen. Zweitens kann dies auch passieren, wenn man einfach Code aus dem Internet kopiert und einfügt. Das haben die meisten unserer Entwickler schon einmal gemacht. Die meisten Unternehmen sind auf Softwarekomponenten verschiedener Anbieter angewiesen. Dies wirft die Frage auf, inwieweit dieser Code vertrauenswürdig und zuverlässig ist. Wie kann man Quellcode mit versteckten Hintertüren herausfiltern?

Wessen Problem ist das?

Einerseits sollten Compiler und Build-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, sofern diese nicht streng auf Zeichenfolgen und Kommentare beschränkt sind.Beachten Sie, dass Zeichen zur Formatierung der Richtung von Zeichenfolgen oder Kommentaren die Richtungsänderung bis zum Zeilenende verlängern können, wenn sie nicht gepoppt werden. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen wie Homoglyphen und Zeichen zur Formatierung der Richtung explizit rendern und hervorheben. Seit November fügt GitHub nun allen Codezeilen, die bidirektionalen Unicode-Text enthalten, ein Warnsymbol und eine Meldung hinzu. Die Zeilenposition dieser Zeichen wird jedoch nicht hervorgehoben. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit böswilligen Richtungsänderungen heimlich eingeschleust werden.

Da die Kommunikation zwischen Entwicklern und Code-Reviewern unerlässlich ist, haben wir einen Leitfaden zur Erläuterung von Schwachstellen erstellt. Derzeit ist diese Übung in Java, C#, Python, GO und PHP verfügbar.

Wenn Sie mehr erfahren möchten, probieren Sie unser Produkt aus: Trojan Source Simulation (öffentliche Mission) und lesen Sie Trojan Source Research.

Java-Simulation

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

트로이 소스
트로이 소스
Ressourcen anzeigen
Ressourcen anzeigen

Sind Sie an weiteren Informationen interessiert?

mehr erfahren

Secure Code Warrior ist für Unternehmen da, um den Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Unabhängig davon, ob Sie AppSec-Manager, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind, können wir Ihnen dabei helfen, die Risiken zu reduzieren, die mit unsicherem Code verbunden sind.

Demo-Termin vereinbaren
Freigabeziel:
LinkedIn-MarkenSozialx Logo
Verfasser
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.

Freigabeziel:
LinkedIn-MarkenSozialx Logo
트로이 소스
트로이 소스

Anfang November veröffentlichte die Universität Cambridge folgende Forschungsergebnisse: Trojanisches Pferd – Quelle. Diese Studie konzentrierte sich auf die Möglichkeit, mithilfe von gerichteten Formatierungszeichen Hintertüren in Quellcode und Kommentaren zu verstecken. Dies kann dazu genutzt werden, Code zu erstellen, den Compiler anders interpretieren als menschliche Code-Prüfer.

Zwar wurde Unicode in der Vergangenheit schon einmal böswillig eingesetzt, beispielsweise um die tatsächliche Dateinamenerweiterung einer Datei zu verbergen, doch diese Schwachstelle ist neu. Umkehrung der letzten Zeichen des Dateinamens. Jüngsten Untersuchungen zufolge ignorieren viele Compiler Unicode-Zeichen im Quellcode ohne Warnung, während Texteditoren, darunter auch Code-Editoren, Zeilen mit Kommentaren und Code auf dieser Grundlage neu formatieren können. Daher können Editoren Code und Kommentare in einer anderen Reihenfolge anzeigen als Compiler sie parsen. Dies gilt sogar dann, wenn Code und Kommentare vertauscht werden.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie die Hacking-Simulation von Trojan Source ausprobieren möchten, können Sie sich direkt über den kostenlosen Service anmelden. Erleben Sie selbst, wie es ist, eine öffentliche Aufgabe zu erfüllen.

bidirektionaler Text

Eine dieser Trojaner-Angriffe nutzt den Unicode-Bidi-Algorithmus (bidirektional). Dieser Algorithmus behandelt die Ausrichtung von Texten mit unterschiedlicher Anzeigereihenfolge, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Mit Hilfe von Richtungsformatierungszeichen können Gruppen neu angeordnet und die Zeichenreihenfolge angezeigt werden.

Die obige Tabelle enthält einige Bidi-Überschreibungszeichen, die mit Angriffen in Verbindung stehen. Beispielsweise:

RLI e d o c PD

Die Abkürzung RLI steht für „Right-to-Left Isolation“. Der Text wird vom Kontext (durch PDI getrennt) isoliert. Klicken Sie auf „Pop Directional Isolate“ und lesen Sie von rechts nach links. Das Ergebnis sieht wie folgt aus:

c o d e

Compiler und Interpreter verarbeiten jedoch in der Regel keine Formatsteuerzeichen, einschließlich Bidi-Overrides, bevor sie den Quellcode parsen. Wenn die Richtungsformatierungszeichen einfach ignoriert werden, wird der Code wie folgt geparst.

e d o c

Ein alter Wein in einer neuen Flasche?

Natürlich ist dies nichts Neues unter der Sonne. In der Vergangenheit wurden Richtungszeichen verwendet. Sie wurden in Dateinamen eingefügt, um ihre bösartige Natur zu verbergen. Eine E-Mail-Anhang mit dem Namen „myspecialexe.doc“ könnte völlig harmlos erscheinen, wenn es sich nicht um RLO (Right-to-Left Override) handeln würde, das darauf hinweist, dass der tatsächliche Name „myspecialcod.exe“ lautet.

Trojanische Code-Angriffe fügen Steuerzeichen in Kommentare und Zeichenfolgen im Quellcode ein. In solchen Fällen treten keine Syntax- oder Kompilierungsfehler auf. Diese Steuerzeichen ändern die Anzeigereihenfolge der Codelogik, sodass der Compiler etwas völlig anderes liest als das, was für Menschen lesbar ist.

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

Bidirektionaler Unicode-Text

Die Ausrichtung wird für jedes Zeichen wie folgt neu angeordnet.

Richtungsweisende Formatierungszeichen

Wenn das Richtungsformatzeichen nicht explizit aufgerufen wird, wird der Code wie folgt gerendert.

Bidirektionale Unicode-Zeichen

RLO kehrt die schließende Klammer in der letzten Zeile in eine öffnende Klammer um und umgekehrt. Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis: „Sie sind Administrator.“ Die Administratorprüfung wurde auskommentiert, aber wenn man sich die Steuerzeichen ansieht, hat man den Eindruck, dass diese Prüfung immer noch vorhanden ist.

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

Wie könnte sich das auf Sie auswirken?

C, C++, C#, JavaScript, Java, Rust, Go, Python und viele andere Sprachen sind anfällig für Angriffe, und es wird vermutet, dass noch mehr Sprachen anfällig für Angriffe sind. Nun mögen erfahrene Entwickler beim Anblick von Richtungszeichen im Quellcode die Stirn runzeln, aber Anfänger sollten vielleicht besser mit den Schultern zucken und sich keine Gedanken darüber machen. Außerdem hängt die Visualisierung dieser Zeichen stark von der IDE ab, sodass nicht garantiert ist, dass sie entdeckt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Vor allem kann dies passieren, wenn Quellcode aus einer nicht vertrauenswürdigen Quelle verwendet wird, in der bösartige Code-Beiträge nicht auffallen. Zweitens kann dies auch passieren, wenn man einfach Code aus dem Internet kopiert und einfügt. Das haben die meisten unserer Entwickler schon einmal gemacht. Die meisten Unternehmen sind auf Softwarekomponenten verschiedener Anbieter angewiesen. Dies wirft die Frage auf, inwieweit dieser Code vertrauenswürdig und zuverlässig ist. Wie kann man Quellcode mit versteckten Hintertüren herausfiltern?

Wessen Problem ist das?

Einerseits sollten Compiler und Build-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, sofern diese nicht streng auf Zeichenfolgen und Kommentare beschränkt sind.Beachten Sie, dass Zeichen zur Formatierung der Richtung von Zeichenfolgen oder Kommentaren die Richtungsänderung bis zum Zeilenende verlängern können, wenn sie nicht gepoppt werden. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen wie Homoglyphen und Zeichen zur Formatierung der Richtung explizit rendern und hervorheben. Seit November fügt GitHub nun allen Codezeilen, die bidirektionalen Unicode-Text enthalten, ein Warnsymbol und eine Meldung hinzu. Die Zeilenposition dieser Zeichen wird jedoch nicht hervorgehoben. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit böswilligen Richtungsänderungen heimlich eingeschleust werden.

Da die Kommunikation zwischen Entwicklern und Code-Reviewern unerlässlich ist, haben wir einen Leitfaden zur Erläuterung von Schwachstellen erstellt. Derzeit ist diese Übung in Java, C#, Python, GO und PHP verfügbar.

Wenn Sie mehr erfahren möchten, probieren Sie unser Produkt aus: Trojan Source Simulation (öffentliche Mission) und lesen Sie Trojan Source Research.

Java-Simulation

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Ressourcen anzeigen
Ressourcen anzeigen

Um den Bericht herunterzuladen, füllen Sie bitte das folgende Formular aus.

Wir bitten um Ihre Zustimmung, Ihnen Informationen zu unseren Produkten und/oder verwandten Themen der Sicherheitscodierung zukommen zu lassen. Wir behandeln Ihre personenbezogenen Daten stets mit größter Sorgfalt und verkaufen sie niemals zu Marketingzwecken an andere Unternehmen.

Einreichung
scw Erfolgssymbol
scw-Fehlersymbol
Um das Formular zu senden, aktivieren Sie bitte das „Analytics“-Cookie. Nach Abschluss können Sie es jederzeit wieder deaktivieren.
트로이 소스

Anfang November veröffentlichte die Universität Cambridge folgende Forschungsergebnisse: Trojanisches Pferd – Quelle. Diese Studie konzentrierte sich auf die Möglichkeit, mithilfe von gerichteten Formatierungszeichen Hintertüren in Quellcode und Kommentaren zu verstecken. Dies kann dazu genutzt werden, Code zu erstellen, den Compiler anders interpretieren als menschliche Code-Prüfer.

Zwar wurde Unicode in der Vergangenheit schon einmal böswillig eingesetzt, beispielsweise um die tatsächliche Dateinamenerweiterung einer Datei zu verbergen, doch diese Schwachstelle ist neu. Umkehrung der letzten Zeichen des Dateinamens. Jüngsten Untersuchungen zufolge ignorieren viele Compiler Unicode-Zeichen im Quellcode ohne Warnung, während Texteditoren, darunter auch Code-Editoren, Zeilen mit Kommentaren und Code auf dieser Grundlage neu formatieren können. Daher können Editoren Code und Kommentare in einer anderen Reihenfolge anzeigen als Compiler sie parsen. Dies gilt sogar dann, wenn Code und Kommentare vertauscht werden.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie die Hacking-Simulation von Trojan Source ausprobieren möchten, können Sie sich direkt über den kostenlosen Service anmelden. Erleben Sie selbst, wie es ist, eine öffentliche Aufgabe zu erfüllen.

bidirektionaler Text

Eine dieser Trojaner-Angriffe nutzt den Unicode-Bidi-Algorithmus (bidirektional). Dieser Algorithmus behandelt die Ausrichtung von Texten mit unterschiedlicher Anzeigereihenfolge, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Mit Hilfe von Richtungsformatierungszeichen können Gruppen neu angeordnet und die Zeichenreihenfolge angezeigt werden.

Die obige Tabelle enthält einige Bidi-Überschreibungszeichen, die mit Angriffen in Verbindung stehen. Beispielsweise:

RLI e d o c PD

Die Abkürzung RLI steht für „Right-to-Left Isolation“. Der Text wird vom Kontext (durch PDI getrennt) isoliert. Klicken Sie auf „Pop Directional Isolate“ und lesen Sie von rechts nach links. Das Ergebnis sieht wie folgt aus:

c o d e

Compiler und Interpreter verarbeiten jedoch in der Regel keine Formatsteuerzeichen, einschließlich Bidi-Overrides, bevor sie den Quellcode parsen. Wenn die Richtungsformatierungszeichen einfach ignoriert werden, wird der Code wie folgt geparst.

e d o c

Ein alter Wein in einer neuen Flasche?

Natürlich ist dies nichts Neues unter der Sonne. In der Vergangenheit wurden Richtungszeichen verwendet. Sie wurden in Dateinamen eingefügt, um ihre bösartige Natur zu verbergen. Eine E-Mail-Anhang mit dem Namen „myspecialexe.doc“ könnte völlig harmlos erscheinen, wenn es sich nicht um RLO (Right-to-Left Override) handeln würde, das darauf hinweist, dass der tatsächliche Name „myspecialcod.exe“ lautet.

Trojanische Code-Angriffe fügen Steuerzeichen in Kommentare und Zeichenfolgen im Quellcode ein. In solchen Fällen treten keine Syntax- oder Kompilierungsfehler auf. Diese Steuerzeichen ändern die Anzeigereihenfolge der Codelogik, sodass der Compiler etwas völlig anderes liest als das, was für Menschen lesbar ist.

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

Bidirektionaler Unicode-Text

Die Ausrichtung wird für jedes Zeichen wie folgt neu angeordnet.

Richtungsweisende Formatierungszeichen

Wenn das Richtungsformatzeichen nicht explizit aufgerufen wird, wird der Code wie folgt gerendert.

Bidirektionale Unicode-Zeichen

RLO kehrt die schließende Klammer in der letzten Zeile in eine öffnende Klammer um und umgekehrt. Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis: „Sie sind Administrator.“ Die Administratorprüfung wurde auskommentiert, aber wenn man sich die Steuerzeichen ansieht, hat man den Eindruck, dass diese Prüfung immer noch vorhanden ist.

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

Wie könnte sich das auf Sie auswirken?

C, C++, C#, JavaScript, Java, Rust, Go, Python und viele andere Sprachen sind anfällig für Angriffe, und es wird vermutet, dass noch mehr Sprachen anfällig für Angriffe sind. Nun mögen erfahrene Entwickler beim Anblick von Richtungszeichen im Quellcode die Stirn runzeln, aber Anfänger sollten vielleicht besser mit den Schultern zucken und sich keine Gedanken darüber machen. Außerdem hängt die Visualisierung dieser Zeichen stark von der IDE ab, sodass nicht garantiert ist, dass sie entdeckt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Vor allem kann dies passieren, wenn Quellcode aus einer nicht vertrauenswürdigen Quelle verwendet wird, in der bösartige Code-Beiträge nicht auffallen. Zweitens kann dies auch passieren, wenn man einfach Code aus dem Internet kopiert und einfügt. Das haben die meisten unserer Entwickler schon einmal gemacht. Die meisten Unternehmen sind auf Softwarekomponenten verschiedener Anbieter angewiesen. Dies wirft die Frage auf, inwieweit dieser Code vertrauenswürdig und zuverlässig ist. Wie kann man Quellcode mit versteckten Hintertüren herausfiltern?

Wessen Problem ist das?

Einerseits sollten Compiler und Build-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, sofern diese nicht streng auf Zeichenfolgen und Kommentare beschränkt sind.Beachten Sie, dass Zeichen zur Formatierung der Richtung von Zeichenfolgen oder Kommentaren die Richtungsänderung bis zum Zeilenende verlängern können, wenn sie nicht gepoppt werden. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen wie Homoglyphen und Zeichen zur Formatierung der Richtung explizit rendern und hervorheben. Seit November fügt GitHub nun allen Codezeilen, die bidirektionalen Unicode-Text enthalten, ein Warnsymbol und eine Meldung hinzu. Die Zeilenposition dieser Zeichen wird jedoch nicht hervorgehoben. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit böswilligen Richtungsänderungen heimlich eingeschleust werden.

Da die Kommunikation zwischen Entwicklern und Code-Reviewern unerlässlich ist, haben wir einen Leitfaden zur Erläuterung von Schwachstellen erstellt. Derzeit ist diese Übung in Java, C#, Python, GO und PHP verfügbar.

Wenn Sie mehr erfahren möchten, probieren Sie unser Produkt aus: Trojan Source Simulation (öffentliche Mission) und lesen Sie Trojan Source Research.

Java-Simulation

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Webinar ansehen
Beginnen
mehr erfahren

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

Secure Code Warrior ist für Unternehmen da, um den Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Unabhängig davon, ob Sie AppSec-Manager, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind, können wir Ihnen dabei helfen, die Risiken zu reduzieren, die mit unsicherem Code verbunden sind.

Bericht anzeigenDemo-Termin vereinbaren
Ressourcen anzeigen
Freigabeziel:
LinkedIn-MarkenSozialx Logo
Sind Sie an weiteren Informationen interessiert?

Freigabeziel:
LinkedIn-MarkenSozialx Logo
Verfasser
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.

Freigabeziel:
LinkedIn-MarkenSozialx Logo

Anfang November veröffentlichte die Universität Cambridge folgende Forschungsergebnisse: Trojanisches Pferd – Quelle. Diese Studie konzentrierte sich auf die Möglichkeit, mithilfe von gerichteten Formatierungszeichen Hintertüren in Quellcode und Kommentaren zu verstecken. Dies kann dazu genutzt werden, Code zu erstellen, den Compiler anders interpretieren als menschliche Code-Prüfer.

Zwar wurde Unicode in der Vergangenheit schon einmal böswillig eingesetzt, beispielsweise um die tatsächliche Dateinamenerweiterung einer Datei zu verbergen, doch diese Schwachstelle ist neu. Umkehrung der letzten Zeichen des Dateinamens. Jüngsten Untersuchungen zufolge ignorieren viele Compiler Unicode-Zeichen im Quellcode ohne Warnung, während Texteditoren, darunter auch Code-Editoren, Zeilen mit Kommentaren und Code auf dieser Grundlage neu formatieren können. Daher können Editoren Code und Kommentare in einer anderen Reihenfolge anzeigen als Compiler sie parsen. Dies gilt sogar dann, wenn Code und Kommentare vertauscht werden.

Lesen Sie weiter, um mehr zu erfahren. Oder wenn Sie die Hacking-Simulation von Trojan Source ausprobieren möchten, können Sie sich direkt über den kostenlosen Service anmelden. Erleben Sie selbst, wie es ist, eine öffentliche Aufgabe zu erfüllen.

bidirektionaler Text

Eine dieser Trojaner-Angriffe nutzt den Unicode-Bidi-Algorithmus (bidirektional). Dieser Algorithmus behandelt die Ausrichtung von Texten mit unterschiedlicher Anzeigereihenfolge, wie beispielsweise Englisch (von links nach rechts) und Arabisch (von rechts nach links). Mit Hilfe von Richtungsformatierungszeichen können Gruppen neu angeordnet und die Zeichenreihenfolge angezeigt werden.

Die obige Tabelle enthält einige Bidi-Überschreibungszeichen, die mit Angriffen in Verbindung stehen. Beispielsweise:

RLI e d o c PD

Die Abkürzung RLI steht für „Right-to-Left Isolation“. Der Text wird vom Kontext (durch PDI getrennt) isoliert. Klicken Sie auf „Pop Directional Isolate“ und lesen Sie von rechts nach links. Das Ergebnis sieht wie folgt aus:

c o d e

Compiler und Interpreter verarbeiten jedoch in der Regel keine Formatsteuerzeichen, einschließlich Bidi-Overrides, bevor sie den Quellcode parsen. Wenn die Richtungsformatierungszeichen einfach ignoriert werden, wird der Code wie folgt geparst.

e d o c

Ein alter Wein in einer neuen Flasche?

Natürlich ist dies nichts Neues unter der Sonne. In der Vergangenheit wurden Richtungszeichen verwendet. Sie wurden in Dateinamen eingefügt, um ihre bösartige Natur zu verbergen. Eine E-Mail-Anhang mit dem Namen „myspecialexe.doc“ könnte völlig harmlos erscheinen, wenn es sich nicht um RLO (Right-to-Left Override) handeln würde, das darauf hinweist, dass der tatsächliche Name „myspecialcod.exe“ lautet.

Trojanische Code-Angriffe fügen Steuerzeichen in Kommentare und Zeichenfolgen im Quellcode ein. In solchen Fällen treten keine Syntax- oder Kompilierungsfehler auf. Diese Steuerzeichen ändern die Anzeigereihenfolge der Codelogik, sodass der Compiler etwas völlig anderes liest als das, was für Menschen lesbar ist.

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

Bidirektionaler Unicode-Text

Die Ausrichtung wird für jedes Zeichen wie folgt neu angeordnet.

Richtungsweisende Formatierungszeichen

Wenn das Richtungsformatzeichen nicht explizit aufgerufen wird, wird der Code wie folgt gerendert.

Bidirektionale Unicode-Zeichen

RLO kehrt die schließende Klammer in der letzten Zeile in eine öffnende Klammer um und umgekehrt. Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis: „Sie sind Administrator.“ Die Administratorprüfung wurde auskommentiert, aber wenn man sich die Steuerzeichen ansieht, hat man den Eindruck, dass diese Prüfung immer noch vorhanden ist.

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

Wie könnte sich das auf Sie auswirken?

C, C++, C#, JavaScript, Java, Rust, Go, Python und viele andere Sprachen sind anfällig für Angriffe, und es wird vermutet, dass noch mehr Sprachen anfällig für Angriffe sind. Nun mögen erfahrene Entwickler beim Anblick von Richtungszeichen im Quellcode die Stirn runzeln, aber Anfänger sollten vielleicht besser mit den Schultern zucken und sich keine Gedanken darüber machen. Außerdem hängt die Visualisierung dieser Zeichen stark von der IDE ab, sodass nicht garantiert ist, dass sie entdeckt werden.

Aber wie konnte diese Schwachstelle überhaupt in den Quellcode gelangen? Vor allem kann dies passieren, wenn Quellcode aus einer nicht vertrauenswürdigen Quelle verwendet wird, in der bösartige Code-Beiträge nicht auffallen. Zweitens kann dies auch passieren, wenn man einfach Code aus dem Internet kopiert und einfügt. Das haben die meisten unserer Entwickler schon einmal gemacht. Die meisten Unternehmen sind auf Softwarekomponenten verschiedener Anbieter angewiesen. Dies wirft die Frage auf, inwieweit dieser Code vertrauenswürdig und zuverlässig ist. Wie kann man Quellcode mit versteckten Hintertüren herausfiltern?

Wessen Problem ist das?

Einerseits sollten Compiler und Build-Pipelines keine Quellcodezeilen mit mehr als einer Richtung zulassen, sofern diese nicht streng auf Zeichenfolgen und Kommentare beschränkt sind.Beachten Sie, dass Zeichen zur Formatierung der Richtung von Zeichenfolgen oder Kommentaren die Richtungsänderung bis zum Zeilenende verlängern können, wenn sie nicht gepoppt werden. Im Allgemeinen sollten Code-Editoren verdächtige Unicode-Zeichen wie Homoglyphen und Zeichen zur Formatierung der Richtung explizit rendern und hervorheben. Seit November fügt GitHub nun allen Codezeilen, die bidirektionalen Unicode-Text enthalten, ein Warnsymbol und eine Meldung hinzu. Die Zeilenposition dieser Zeichen wird jedoch nicht hervorgehoben. Dadurch können weiterhin böswillige Richtungsänderungen zusammen mit böswilligen Richtungsänderungen heimlich eingeschleust werden.

Da die Kommunikation zwischen Entwicklern und Code-Reviewern unerlässlich ist, haben wir einen Leitfaden zur Erläuterung von Schwachstellen erstellt. Derzeit ist diese Übung in Java, C#, Python, GO und PHP verfügbar.

Wenn Sie mehr erfahren möchten, probieren Sie unser Produkt aus: Trojan Source Simulation (öffentliche Mission) und lesen Sie Trojan Source Research.

Java-Simulation

Simulation in C#

Simulation in PHP

Simulation in GO

Simulation in Python

Inhaltsverzeichnis

PDF herunterladen
Ressourcen anzeigen
Sind Sie an weiteren Informationen interessiert?

mehr erfahren

Secure Code Warrior ist für Unternehmen da, um den Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Unabhängig davon, ob Sie AppSec-Manager, Entwickler, CISO oder in einem anderen Bereich der Sicherheit tätig sind, können wir Ihnen dabei helfen, die Risiken zu reduzieren, die mit unsicherem Code verbunden sind.

Demo-Termin vereinbarenDownload
Freigabeziel:
LinkedIn-MarkenSozialx Logo
Ressourcen-Hub

Hilfreiche Ressourcen für den Einstieg

Weitere Beiträge
Ressourcen-Hub

Hilfreiche Ressourcen für den Einstieg

Weitere Beiträge