Trojanesche Quellattack fir Ännerunge vum Code aféieren, déi dem Entwéckler onsichtbar sinn

Fuerscher vun der University of Cambridge hunn eng Technik publizéiert fir roueg béiswëlleg Code an peer-reviewed Quellcode anzeginn. Déi preparéiert Attackmethod (CVE-2021-42574) gëtt ënner dem Numm Trojan Source presentéiert a baséiert op der Formatioun vun Text, deen anescht ausgesäit fir de Compiler / Dolmetscher an d'Persoun déi de Code kuckt. Beispiller vun der Method gi fir verschidde Compileren an Dolmetscher bewisen, déi fir C, C++ (gcc a clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go a Python geliwwert ginn.

D'Method baséiert op der Benotzung vu speziellen Unicode Charaktere a Codekommentarer déi d'Displayuerdnung vum bidirektionalen Text änneren. Mat der Hëllef vun esou Kontroll Charaktere kënnen e puer Deeler vum Text vu lénks op riets ugewise ginn, anerer - vu riets op lénks. An der alldeeglecher Praxis kënnen esou Kontrollcharaktere benotzt ginn, zum Beispill fir Codelinnen op Hebräesch oder Arabesch an eng Datei anzeginn. Awer wann Dir Zeilen mat verschiddenen Textrichtungen an enger Zeil kombinéiere kënnt, andeems Dir déi spezifizéiert Zeechen benotzt, Passagen vum Text, dee vu riets op lénks ugewise gëtt, kënnen existent regulären Text vu lénks op riets iwwerlappen.

Mat dëser Methode kënnt Dir e béiswëlleg Konstrukt un de Code addéieren, awer dann den Text mat dësem Konstrukt onsichtbar maachen wann Dir de Code kuckt, andeems Dir an de folgende Kommentar oder an de wuertwiertleche Charaktere vun riets op lénks bäigefüügt gëtt, wat zu komplett féiert verschidde Charaktere ginn op déi béiswëlleg Aféierung iwwerlagert. Esou Code bleift semantesch korrekt, awer wäert anescht interpretéiert an ugewisen ginn.

Trojanesche Quellattack fir Ännerunge vum Code aféieren, déi dem Entwéckler onsichtbar sinn

Wärend de Code iwwerpréift gëtt en Entwéckler mat der visueller Uerdnung vun de Personnagen konfrontéiert a wäert en net verdächtege Kommentar an engem modernen Texteditor, Webinterface oder IDE gesinn, awer de Compiler an den Dolmetscher benotzen déi logesch Uerdnung vun de Charaktere a wäert veraarbecht déi béiswëlleg Insertioun wéi et ass, ouni op de bidirektionalen Text an de Kommentarer opmierksam ze maachen. De Problem beaflosst verschidde populär Code Editoren (VS Code, Emacs, Atom), souwéi Interfaces fir Code an Repositories ze gesinn (GitHub, Gitlab, BitBucket an all Atlassian Produkter).

Trojanesche Quellattack fir Ännerunge vum Code aféieren, déi dem Entwéckler onsichtbar sinn

Et gi verschidde Weeër fir d'Methode ze benotzen fir béiswëlleg Handlungen ëmzesetzen: e verstoppte "Retour" Ausdrock ze addéieren, wat zu der Fäerdegstellung vun der Funktioun viru Zäit féiert; Ausdréck kommentéieren déi normalerweis als valabel Konstruktiounen siichtbar wieren (zum Beispill fir wichteg Kontrollen auszeschalten); aner Stringwäerter zouzeweisen, déi zu Stringvalidatiounsfehler féieren.

Zum Beispill kann en Ugräifer eng Ännerung proposéieren déi d'Linn enthält: if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {

déi an der Iwwerpréiwungsinterface ugewise gëtt wéi wann access_level != "Benotzer" {// Kontrolléiert ob Admin

Zousätzlech ass eng aner Attackvariant proposéiert ginn (CVE-2021-42694), assoziéiert mat der Notzung vun Homoglyphen, Charakteren déi ähnlech am Erscheinungsbild sinn, awer a Bedeitung ënnerscheeden an ënnerschiddlech Unicode Coden hunn (zum Beispill de Charakter "ɑ" gläicht " a", "ɡ" - "g", "ɩ" - "l")). Ähnlech Charaktere kënnen an e puer Sproochen an den Nimm vu Funktiounen a Variablen benotzt ginn fir Entwéckler ze täuschen. Zum Beispill kënnen zwou Funktiounen mat onënnerscheedbaren Nimm definéiert ginn, déi verschidden Aktiounen ausféieren. Ouni eng detailléiert Analyse ass et net direkt kloer wéi eng vun dësen zwou Funktiounen op enger spezifescher Plaz genannt gëtt.

Trojanesche Quellattack fir Ännerunge vum Code aféieren, déi dem Entwéckler onsichtbar sinn

Als Sécherheetsmoossnam ass et recommandéiert datt Compileren, Dolmetscher an Assemblée Tools déi Unicode Charaktere ënnerstëtzen e Feeler oder Warnung weisen wann et onpaarte Kontrollzeechen an Kommentaren, Stringliteralen oder Identifizéierer sinn déi d'Ausgangsrichtung änneren (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E an U+200F). Esou Charaktere sollen och explizit an de Programméierungssprooch Spezifikatioune verbueden ginn a sollen a Code Editoren a Repository Interfaces respektéiert ginn.

Addendum 1: Vulnerabilitéitsflecken goufen fir GCC, LLVM/Clang, Rust, Go, Python a Binutils virbereet. GitHub, Bitbucket a Jira hunn och de Problem fixéiert. Eng Fix fir GitLab ass amgaang. Fir problematesch Code z'identifizéieren, ass et recommandéiert de Kommando ze benotzen: grep -r $'[\u061C\u200E\u200A\u202B\u202A\u202B\u202C\u202D\u2066C\u2067D\u2068E\u2069\uXNUMX\uXNUMX\uXNUMX\uXNUMX/' Quell

Addendum 2: Russ Cox, ee vun den Entwéckler vum Plan 9 OS an der Go Programméiersprooch, kritiséiert déi exzessiv Opmierksamkeet op déi beschriwwe Attacke Method, déi laang bekannt ass (Go, Rust, C++, Ruby) a gouf net eescht geholl . Laut Cox betrëfft de Problem haaptsächlech d'korrekt Affichage vun Informatioun a Code Editoren a Web Interfaces, déi geléist kënne ginn andeems Dir déi richteg Tools a Code Analyser während der Iwwerpréiwung benotzt. Dofir, amplaz d'Opmierksamkeet op spekulativ Attacken ze zéien, wier et méi ubruecht sech op d'Verbesserung vun de Code- an Ofhängegkeetsrevisiounsprozesser ze fokusséieren.

De Ras Cox mengt och datt Compileren net déi richteg Plaz sinn fir de Problem ze fixéieren, well andeems se geféierlech Symboler um Compilerniveau verbidden, bleift et eng rieseg Schicht vun Tools an deenen d'Benotzung vun dëse Symboler akzeptabel bleift, wéi zum Beispill Bausystemer, Assembler, Package Manager a verschidde Konfiguratiounsparser an Daten. Als Beispill gëtt de Rust-Projet uginn, deen d'Veraarbechtung vum LTR / RTL-Code am Compiler verbueden huet, awer keng Fix fir de Cargo Package Manager bäigefüügt huet, wat en ähnlechen Attack duerch d'Cargo.toml Datei erlaabt. Ähnlech kënnen Dateien wéi BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml an requirements.txt Quelle vun Attacke ginn.

Source: opennet.ru

Setzt e Commentaire