Trojan Source árás til að kynna breytingar á kóðanum sem eru ósýnilegar þróunaraðilanum

Vísindamenn frá háskólanum í Cambridge hafa gefið út tækni til að setja skaðlegan kóða hljóðlaust inn í ritrýndan frumkóða. Undirbúna árásaraðferðin (CVE-2021-42574) er sett fram undir nafninu Trojan Source og byggir á myndun texta sem lítur öðruvísi út fyrir þýðanda/túlk og þann sem skoðar kóðann. Dæmi um aðferðina eru sýnd fyrir ýmsa þýðendur og túlka sem eru til staðar fyrir C, C++ (gcc og clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go og Python.

Aðferðin byggir á því að nota sérstaka Unicode stafi í athugasemdum um kóða sem breyta birtingarröð tvíátta texta. Með hjálp slíkra stjórnstafa er hægt að sýna suma hluta textans frá vinstri til hægri, á meðan aðrir - frá hægri til vinstri. Í daglegu starfi er hægt að nota slíka stýristafi til dæmis til að setja kóðalínur á hebresku eða arabísku inn í skrá. En ef þú sameinar línur með mismunandi textastefnu í einni línu, með því að nota tilgreinda stafi, geta textaleiðir sem sýndar eru frá hægri til vinstri skarast fyrirliggjandi venjulegan texta sem birtist frá vinstri til hægri.

Með því að nota þessa aðferð geturðu bætt illgjarnri byggingu við kóðann, en síðan gert textann með þessari byggingu ósýnilegan þegar þú skoðar kóðann, með því að bæta við eftirfarandi athugasemd eða inni í bókstaflegum stöfum sem sýndir eru frá hægri til vinstri, sem mun leiða til algjörlega mismunandi persónur eru lagðar ofan á illgjarna innsetningu. Slíkur kóði verður áfram merkingarlega réttur, en verður túlkaður og sýndur á annan hátt.

Trojan Source árás til að kynna breytingar á kóðanum sem eru ósýnilegar þróunaraðilanum

Þegar þú skoðar kóðann mun verktaki standa frammi fyrir sjónrænni röð persónanna og mun sjá athugasemd sem ekki er grunsamleg í nútíma textaritli, vefviðmóti eða IDE, en þýðandinn og túlkurinn mun nota rökrétta röð persónanna og munu vinna illgjarna innsetninguna eins og hún er, án þess að gefa gaum að tvíátta textanum í athugasemdunum. Vandamálið hefur áhrif á ýmsa vinsæla kóðaritara (VS Code, Emacs, Atom), sem og viðmót til að skoða kóða í geymslum (GitHub, Gitlab, BitBucket og allar Atlassian vörur).

Trojan Source árás til að kynna breytingar á kóðanum sem eru ósýnilegar þróunaraðilanum

Það eru nokkrar leiðir til að nota aðferðina til að innleiða illgjarnar aðgerðir: bæta við falinni „skila“ tjáningu, sem leiðir til þess að aðgerðinni er lokið fyrirfram; gera athugasemdir við tjáningar sem venjulega myndu vera sýnilegar sem gildar smíðar (til dæmis til að slökkva á mikilvægum athugunum); úthluta öðrum strengjagildum sem leiða til bilana í strengjaprófun.

Til dæmis gæti árásarmaður lagt til breytingu sem inniheldur línuna: if access_level != "user{U+202E} {U+2066}// Athugaðu hvort admin{U+2069} {U+2066}" {

sem mun birtast í yfirferðarviðmótinu eins og access_level != “notandi” {// Athugaðu hvort admin

Að auki hefur verið lagt til annað árásarafbrigði (CVE-2021-42694), tengt notkun samhljóða, stafa sem eru svipuð í útliti, en eru mismunandi að merkingu og hafa mismunandi unicode kóða (td stafurinn „ɑ“ líkist „ a", "ɡ" - "g", "ɩ" - "l"). Svipaða stafi er hægt að nota á sumum tungumálum í nöfnum aðgerða og breyta til að villa um fyrir forritara. Til dæmis er hægt að skilgreina tvær aðgerðir með óaðgreinanlegum nöfnum sem framkvæma mismunandi aðgerðir. Án nákvæmrar greiningar er ekki strax ljóst hver þessara tveggja aðgerða er kölluð á tilteknum stað.

Trojan Source árás til að kynna breytingar á kóðanum sem eru ósýnilegar þróunaraðilanum

Sem öryggisráðstöfun er mælt með því að þýðendur, túlkar og samsetningarverkfæri sem styðja Unicode stafi sýni villu eða viðvörun ef það eru óparaðir stjórnstafir í athugasemdum, strengjabókstafi eða auðkenni sem breyta stefnu úttaksins (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E og U+200F). Slíka stafi ætti einnig að vera beinlínis bönnuð í forskriftum forritunarmáls og ætti að virða þær í kóðariturum og viðmótum geymslu.

Viðbót 1: Varnarleysisplástrar hafa verið útbúnir fyrir GCC, LLVM/Clang, Rust, Go, Python og binutils. GitHub, Bitbucket og Jira laguðu líka málið. Lagfæring fyrir GitLab er í vinnslu. Til að bera kennsl á vandamálakóða er mælt með því að nota skipunina: grep -r $'[\u061C\u200E\u200E\u202A\u202B\u202A\u202B\u202C\u2066D\u2067C\u2068D\u2069E\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX/' heimild

Viðbót 2: Russ Cox, einn af þróunaraðilum Plan 9 OS og Go forritunarmálsins, gagnrýndi of mikla athygli á lýstri árásaraðferð, sem hefur lengi verið þekkt (Go, Rust, C++, Ruby) og var ekki tekin alvarlega . Að sögn Cox snýst vandamálið aðallega um rétta birtingu upplýsinga í kóðariturum og vefviðmótum, sem hægt er að leysa með því að nota rétt verkfæri og kóðagreiningartæki við yfirferð. Þess vegna, í stað þess að vekja athygli á spákaupmennskuárásum, væri réttara að einbeita sér að því að bæta kóða og endurskoðunarferli.

Ras Cox telur einnig að þýðendur séu ekki rétti staðurinn til að laga vandamálið, þar sem með því að banna hættuleg tákn á þýðandastigi, er eftir mikið lag af verkfærum þar sem notkun þessara tákna er áfram ásættanleg, eins og smíðakerfi, samsetningartæki, pakkastjórar og ýmsa stillingarþátta og gögn. Sem dæmi er Rust verkefnið gefið, sem bannaði vinnslu á LTR/RTL kóða í þýðandanum, en bætti ekki lagfæringu við Cargo pakkastjórann, sem leyfir svipaða árás í gegnum Cargo.toml skrána. Á sama hátt geta skrár eins og BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml og requirements.txt orðið uppsprettur árása.

Heimild: opennet.ru

Bæta við athugasemd