Troiako iturburuko erasoa garatzailearentzat ikusezinak diren kodean aldaketak sartzeko

Cambridgeko Unibertsitateko ikertzaileek kode gaiztoa isilean txertatzeko teknika bat argitaratu dute parekideek berrikustutako iturburu-kodean. Prestatutako eraso-metodoa (CVE-2021-42574) Troiako Iturria izenarekin aurkezten da eta konpiladore/interpretearentzat eta kodea ikusten duen pertsonarentzat itxura ezberdina den testuaren eraketan oinarritzen da. Metodoaren adibideak C, C++ (gcc eta clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go eta Python-entzat hornitutako hainbat konpilatzaile eta interpretatzailetarako erakusten dira.

Metodoa Unicode karaktere berezien erabileran oinarritzen da, bi norabideko testuaren bistaratzeko ordena aldatzen duten kode iruzkinetan. Kontrol-karaktere horien laguntzaz, testuaren zati batzuk ezkerretik eskuinera bistaratu daitezke, eta beste batzuk eskuinetik ezkerrera. Eguneroko praktikan, horrelako kontrol-karaktereak erabil daitezke, adibidez, hebreeraz edo arabieraz kode-lerroak fitxategi batean txertatzeko. Baina lerro batean testu-norabide desberdinak dituzten lerroak konbinatzen badituzu, zehaztutako karaktereak erabiliz, eskuinetik ezkerrera bistaratuko diren testu-pasarteek ezkerretik eskuinera bistaratutako lehendik dagoen testu arrunta gainjar dezakete.

Metodo hau erabiliz, kodeari eraikuntza maltzur bat gehi diezaiokezu, baina gero eraikuntza honekin testua ikusezin bihurtu kodea ikustean, hurrengo iruzkinean edo eskuinetik ezkerrera erakusten diren karaktere literalen barnean gehituz, eta horrek guztiz eragingo du. txertaketa gaiztoan karaktere desberdinak gainjartzen ari dira. Kode hori semantikoki zuzena izango da, baina beste era batera interpretatu eta bistaratuko da.

Troiako iturburuko erasoa garatzailearentzat ikusezinak diren kodean aldaketak sartzeko

Kodea berrikusten ari den bitartean, garatzaile batek karaktereen ordena bisualari aurre egingo dio eta susmagarria ez den iruzkin bat ikusiko du testu editore, web interfaze edo IDE moderno batean, baina konpilatzaileak eta interpreteak karaktereen ordena logikoa erabiliko du eta txertaketa gaiztoa dagoen bezala prozesatu, iruzkinetako bi norabideko testuari erreparatu gabe. Arazoak hainbat kode editore ezagunei eragiten die (VS Code, Emacs, Atom), baita biltegietan kodea ikusteko interfazeei ere (GitHub, Gitlab, BitBucket eta Atlassian produktu guztiak).

Troiako iturburuko erasoa garatzailearentzat ikusezinak diren kodean aldaketak sartzeko

Hainbat modu daude metodoa ekintza gaiztoak ezartzeko erabiltzeko: ezkutuko "itzulera" adierazpena gehitzea, eta horrek funtzioa aurretik osatzea dakar; normalean baliozko konstruktu gisa ikusgai egongo liratekeen esamoldeak iruzkintzea (adibidez, egiaztapen garrantzitsuak desgaitzeko); kateak baliozkotzeko hutsegiteak eragiten dituzten beste kate-balio batzuk esleitzea.

Adibidez, erasotzaile batek lerroa barne hartzen duen aldaketa bat proposa dezake: if access_level != "erabiltzailea{U+202E} {U+2066}// Egiaztatu administratzailea{U+2069} {U+2066}" {

berrikuspen interfazean bistaratuko dena access_level balitz bezala != "erabiltzailea" { // Egiaztatu administratzailea den

Horrez gain, beste eraso-aldaera bat proposatu da (CVE-2021-42694), homoglifoen erabilerarekin lotutako karaktereak, itxuraz antzekoak diren, baina esanahi desberdina dutenak eta Unicode kode desberdinak dituztenak (adibidez, β€œΙ‘β€ karaktereak β€œ antza du”. a”, β€œΙ‘β€ - β€œg”, β€œΙ©β€ - β€œl”). Hizkuntza batzuetan antzeko karaktereak erabil daitezke funtzioen eta aldagaien izenetan garatzaileak engainatzeko. Esaterako, izen bereiztezinak dituzten bi funtzio defini daitezke ekintza desberdinak egiten dituztenak. Azterketa zehatzik egin gabe, ez dago berehala bi funtzio horietatik zein deitzen den leku zehatz batean.

Troiako iturburuko erasoa garatzailearentzat ikusezinak diren kodean aldaketak sartzeko

Segurtasun neurri gisa, gomendatzen da Unicode karaktereak onartzen dituzten konpiladore, interprete eta muntaia tresnek errore edo abisu bat agertzea iruzkinetan, kate literaletan edo irteeraren norabidea aldatzen duten identifikatzaileetan parekatu gabeko kontrol-karaktereak badaude (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E eta U+200F). Karaktere horiek berariaz debekatu behar dira programazio-lengoaiaren zehaztapenetan eta errespetatu behar dira kode-editoreetan eta biltegi-interfazeetan.

1. gehigarria: ahultasun-adabakiak prestatu dira GCC, LLVM/Clang, Rust, Go, Python eta binutils-entzat. GitHub, Bitbucket eta Jira-k ere konpondu zuten arazoa. GitLab-en konponketa bat abian da. Kode arazotsua identifikatzeko, komandoa erabiltzea gomendatzen da: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\uXNUMX\uXNUMXF\uXNUMXA\uXNUMXB\uXNUMXC\uXNUMXD\uXNUMXE\uXNUMX\uXNUMX\uXNUMX\uXNUMX]' iturria

2. gehigarria: Russ Cox-ek, Plan 9 OS eta Go programazio-lengoaiaren garatzaileetako batek, deskribatutako eraso-metodoari gehiegizko arreta kritikatu zuen, aspalditik ezaguna dena (Go, Rust, C++, Ruby) eta serio hartu gabea. . Cox-en arabera, arazoa kode-editoreetan eta web-interfazeetan informazioaren bistaratzeari dagokio batez ere, berrikuspenean tresna eta kode-analisiatzaile egokiak erabiliz konpon daitekeena. Hori dela eta, eraso espekulatiboei arreta jarri beharrean, egokiago litzateke kodea eta mendekotasunen berrikuspen prozesuak hobetzera bideratzea.

Russ Cox-ek ere uste du konpilatzaileak ez direla leku egokiak arazoa konpontzeko, izan ere, konpiladore mailan sinbolo arriskutsuak debekatuta, tresna-geruza handi bat geratzen da, zeinetan ikur horien erabilera onargarria izaten jarraitzen baitu, hala nola, eraikitze-sistemak, muntatzaileak, paketeen kudeatzaileak eta hainbat konfigurazio analizatzaile eta datu. Adibide gisa, Rust proiektua ematen da, konpilatzailean LTR/RTL kodea prozesatzea debekatu zuena, baina ez zion Cargo paketeen kudeatzaileari konponketarik gehitu, Cargo.toml fitxategiaren bidez antzeko eraso bat ahalbidetzen duena. Era berean, BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml eta requirements.txt bezalako fitxategiak eraso-iturri bihur daitezke.

Iturria: opennet.ru

Gehitu iruzkin berria