Trojan Source-attack för att införliva Àndringar i koden som Àr osynliga för utvecklaren.

Forskare vid Cambridge University har publicerat en teknik för osynlig införande av skadlig kod i granskade kÀllkoder. Den förberedda attackmetoden (CVE-2021-42574) presenteras under namnet Trojan Source och baseras pÄ att texten formar sig sÄ att den ser annorlunda ut för kompilatorn/interpreten och för en mÀnniska som granskar koden. Exempel pÄ tillÀmpning av metoden har demonstrerats för olika kompilatorer och interpreters som anvÀnds för sprÄken C, C++ (gcc och clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go och Python.

Metoden bygger pÄ anvÀndning av speciella Unicode-tecken i kommentarer i koden som Àndrar visningsordningen av tvÄvÀgs text. Genom sÄdana kontrolltecken kan vissa delar av texten visas vÀnster-till-höger, medan andra kan visas höger-till-vÀnster. I praktiken kan sÄdana kontrolltecken till exempel anvÀndas för att införa rader med hebreiska eller arabiska tecken i en kodfil. Men om man kombinerar strÀngar med olika textinriktningar i en och samma rad, kan delar av texten som visas höger-till-vÀnster, med hjÀlp av nÀmnda tecken, överlappa vanlig text som visas vÀnster-till-höger.

Genom att anvÀnda denna metod kan en skadlig konstruktion lÀggas till i koden, men sedan göras osynlig vid granskning av koden genom att lÀgga till tecken som visas höger-till-vÀnster i efterföljande kommentar eller inom en litterÀr strÀng, vilket resulterar i att dessa tecken överlappar den skadliga infogningen med helt andra tecken. SÄdan kod kommer att förbli semantiskt korrekt, men kommer att tolkas och visas olika.

Trojan Source-attack för att införliva Àndringar i koden som Àr osynliga för utvecklaren.

Vid kodgranskning kommer utvecklaren att stöta pÄ den visuella ordningen för tecken och se en oklanderlig kommentar i en modern textredigerare, webbadministratör eller IDE, medan kompilatorn och interpreten kommer att anvÀnda den logiska teckenordningen och bearbeta den skadliga infogningen som den Àr, utan att uppmÀrksamma den tvÄvÀgs texten i kommentaren. Problemet gÀller olika populÀra kodredigerare (VS Code, Emacs, Atom) samt grÀnssnitt för att visa kod i repositorier (GitHub, Gitlab, BitBucket och alla produkter frÄn Atlassian).

Trojan Source-attack för att införliva Àndringar i koden som Àr osynliga för utvecklaren.

Det finns flera sÀtt att anvÀnda metoden för att utföra skadliga handlingar: att lÀgga till ett dolt uttryck "return", vilket leder till att funktionen avslutas i förtid; att dölja uttryck i kommentarer, som normalt visas som giltiga konstruktioner (till exempel för att inaktivera viktiga kontroller); att tilldela andra strÀngvÀrden som orsakar att strÀngkontroller misslyckas.

Till exempel kan en angripare föreslÄ en Àndring som inkluderar raden: if access_level != «user{U+202E} {U+2066}// Kontrollera om admin{U+2069} {U+2066}» {

som kommer att visas i grÀnssnittet för granskning som if access_level != «user» { // Kontrollera om admin

Dessutom har en annan attackvariant föreslagits (CVE-2021-42694), relaterad till anvĂ€ndning av homoglyfer, tecken som liknar varandra i utseende men skiljer sig Ă„t i betydelse och har olika unicode-koder (till exempel symbolen «ɑ» pĂ„minner om «a», «ɥ» — «g», «ɩ» — «l»). SĂ„dana tecken kan anvĂ€ndas i vissa sprĂ„k i funktions- och variabelnamn för att förvirra utvecklare. Till exempel kan tvĂ„ funktioner definieras med oidentifierbara namn som utför olika Ă„tgĂ€rder. Utan noggrann granskning Ă€r det svĂ„rt att avgöra vilken av dessa tvĂ„ funktioner som anropas pĂ„ en viss plats.

Trojan Source-attack för att införliva Àndringar i koden som Àr osynliga för utvecklaren.

Som en skyddsÄtgÀrd rekommenderas att implementera felmeddelanden eller varningar i kompilatorer, tolkare och byggverktyg som stöder Unicode-tecken, nÀr udda kontrolltecken som Àndrar utmatningsriktning (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E och U+200F) finns i kommentarer, strÀnglitteraler eller identifierare. SÄdana tecken bör ocksÄ vara uttryckligen förbjudna i programmeringssprÄkets specifikationer och beaktas i kodredigerare och grÀnssnitt för arbete med databaser.

TillÀgg 1: Korrigeringar för att ÄtgÀrda sÄrbarheten har förberetts för GCC, LLVM/Clang, Rust, Go, Python och binutils. Problemet har ocksÄ ÄtgÀrdats av GitHub, Bitbucket och Jira. Ett fix för GitLab Àr under beredning. För att identifiera problematisk kod föreslÄs kommandot: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/source

TillÀgg 2: Russ Cox, en av utvecklarna av operativsystemet Plan 9 och programmeringssprÄket Go, har kritiserat den överdrivna uppmÀrksamheten pÄ den beskrivna attackmetoden, som lÀnge har varit kÀnd (Go, Rust, C++, Ruby) och som inte har tagits pÄ allvar. Enligt Cox rör sig problemet frÀmst kring korrekt visning av information i kodredigerare och webgrÀnssnitt, vilket kan lösas genom att anvÀnda rÀtt verktyg och kodanalysatorer vid granskning. DÀrför skulle det vara mer korrekt att fokusera pÄ att förbÀttra processerna för kodgranskning och beroenden istÀllet för att rikta uppmÀrksamhet mot hypotetiska attacker.

Russ Cox anser ocksÄ att kompilatorer inte Àr den rÀtta platsen att ÄtgÀrda problemet, eftersom det finns ett enormt antal verktyg dÀr anvÀndning av dessa symboler förblir tillÄten, sÄsom byggsystem, assemblatorer, paketchefer och olika konfigurations- och dataparserare. Ett exempel Àr projektet Rust, som förbjöd bearbetning av LTR/RTL-kod i kompilatorn, men inte lade till en lösning i paketchefen Cargo, vilket gör att en liknande attack kan utföras genom filen Cargo.toml. PÄ samma sÀtt kan filerna BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml och requirements.txt fungera som angreppskÀllor.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster