Trojan Source rĂŒnnak koodi muutmise sisestamiseks, mis on arendajale mĂ€rkamatud

Cambridge Ülikooli teadlased avaldasid tehnika pahatahtliku koodi peidetud sisestamiseks arvustatud lĂ€htekoodidesse. RĂŒnnaku ettevalmistatud meetod (CVE-2021-42574) esitatakse nimega Trojan Source ja see pĂ”hineb tekstide moodustamisel, mis nĂ€evad silmale ning kompilaatorile / tĂ”lgile erinevad vĂ€lja. Meetodi rakendamise nĂ€ited on demonstreeritud erinevate kompilaatorite ja tĂ”lgendajate jaoks, nagu C, C++ (gcc ja clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ja Python.

Meetod pĂ”hineb spetsiaalsete Unicode-mĂ€rkide kasutamisel koodikommentaarides, mis muudavad kahepoolselt suunatud teksti kuvamise jĂ€rjekorda. Selliste juhtmĂ€rkide abil vĂ”ivad ĂŒhed tekstijupid olla kuvatud vasakult paremale, teised aga paremalt vasakule. IgapĂ€evases praktikas vĂ”ivad sellised juhtmĂ€rkide kombineerimised olla nĂ€iteks vajalikud heebrea vĂ”i araabia keeles koodi failidesse lisamiseks. Kuid kui kombineerida erineva suunaga tekstirida ĂŒhes ja samas real nende mĂ€rkide abil, vĂ”ivad paremale avanevad tekstilĂ”igud katab olemasolevat tavalist teksti, mis on kuvatud vasakult paremale.

Selle meetodi abil saab koodi lisada pahatahtliku konstruktsiooni, kuid seejĂ€rel saab muuta selle konstruktsiooni nĂ€htamatuks koodi vaatamisel, lisades sellele jĂ€rgnevasse kommentaaridesse vĂ”i sisemisse literali sĂŒmboleid, mis kuvatakse paremalt vasakule, mis toob endaga kaasa, et pahataht kvaliteet jÀÀb tĂ€iesti teistsuguste mĂ€rkide varju. Selline kood jÀÀb semantiliselt korrektseks, kuid seda tĂ”lgendatakse ja kuvatakse erinevalt.

Trojan Source rĂŒnnak koodi muutmise sisestamiseks, mis on arendajale mĂ€rkamatud

Koodi ĂŒlevaatamise kĂ€igus puutub arendaja kokku sĂŒmbolite visuaalse vĂ€ljundjĂ€rjekorraga ja nĂ€eb tĂ€napĂ€evases tekstiredaktorites, veebiliidestes vĂ”i IDEs kahtlust tekitamata kommentaari, kuid kompilaator ja tĂ”lgendaja kasutavad sĂŒmbolite loogilist jĂ€rjekorda ning töötlevad pahatahtliku sisestuse sellisena, ignoreerides kommentaarides olevat kahepoolselt suunatud teksti. Oht on mitmesugustes populaarsetes koodiredaktorites (VS Code, Emacs, Atom), samuti koodide vaatamise liidestes hoidlates (GitHub, Gitlab, BitBucket ja kĂ”ik Atlassiani tooted).

Trojan Source rĂŒnnak koodi muutmise sisestamiseks, mis on arendajale mĂ€rkamatud

Mitmed meetodid, millega saab kasutada kahjulikke toiminguid, hĂ”lmavad jĂ€rgmisi: varjatud „return“ vĂ€ljendi lisamine, mis lĂ”petab funktsiooni tĂ€itmise liiga vara; kommentaaridesse peidetud konstruktsioonid, mis nĂ€ivad normaalselt toimivat (nĂ€iteks oluliste kontrollide keelamiseks); ja teiste stringivÀÀrtuste mÀÀramine, mis pĂ”hjustavad stringide kontrolli ebaĂ”nnestumise.

NĂ€iteks vĂ”ib rĂŒndaja pakkuda muudatust, mis sisaldab jĂ€rgmist rida: if access_level != "user{U+202E} {U+2066}\/\/ Check if admin{U+2069} {U+2066}" {

mis kuvatakse liideses ĂŒlevaatamiseks kui if access_level != "user" { \/\/ Check if admin

TĂ€iendavalt on ette pandud veel ĂŒks rĂŒnnaku variant (CVE-2021-42694), mis on seotud omogliphide kasutamisega, need on mĂ€rgid, mis nĂ€ivad sarnased, kuid erinevad tĂ€henduse ja unicode-koodide poolest (nĂ€iteks mĂ€rk "ɑ" sarnaneb "a"-le, "ÉĄ" - "g"-le, "É©" - "l"-ile). Selliseid mĂ€rke saab kasutada mĂ”nedes keeltes funktsioonide ja muutuja nimedes, et arendajaid petta. NĂ€iteks saab defineerida kaks funktsiooni, mille nimed on eristamatud, kuid mis teevad erinevaid toiminguid. Ilma detailse analĂŒĂŒsita ei saa kohe aru, millist neist kahest funktsioonist kutsutakse konkreetses kohas.

Trojan Source rĂŒnnak koodi muutmise sisestamiseks, mis on arendajale mĂ€rkamatud

Kaitsemeetmena soovitatakse rakendada kompilaatoreis, tÔlgendustes ja koostamisvahendites, mis toetavad Unicode mÀrke, viga vÔi hoiatust, kui kommentaarides, stringides vÔi identifikaatorites on paaritus kontrollmÀrke, mis muudavad vÀljundi suunda (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ja U+200F). Sellised mÀrgid peaksid olema selgelt keelatud ka programmeerimiskeelte spetsifikatsioonides ning need peaksid olema arvesse vÔetud koodiredaktorites ja ladustamisliideses.

TÀiendav teave 1: Haavatavuse kÔrvaldamiseks on parandused valmistatud GCC, LLVM/Clang, Rust, Go, Python ja binutils jaoks. Probleem on samuti lahendatud GitHubis, Bitbucketis ja Jiras. GitLabi jaoks on parandamise ettevalmistamine kÀimas. Probleemse koodi tuvastamiseks on soovitatav kasutada kÀsku: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' \/path\/to\/source

TĂ€iendav 2: Russ Cox, ĂŒks Plan 9 operatsioonisĂŒsteemi ja Go programmeerimiskeele arendajatest, kritiseeris liigset tĂ€helepanu rĂŒnnakumeetodile, mis on juba ammu tuntud (Go, Rust, C++, Ruby) ja mida ei vĂ”etud tĂ”siselt. Koxi arvates on probleem enamasti seotud teabe kuvamise Ă”igusega koodiredaktorites ja veebiliideses, mida saab lahendada nĂ”uetekohaste tööriistade ja koodianalĂŒsaatorite kasutamisega ĂŒlevaatusprotsessides. SeetĂ”ttu oleks Ă”iglasem suunata tĂ€helepanu koodide ja sĂ”ltuvuste ĂŒlevaatusprotsesside parendamisele, mitte abstraktsetele rĂŒnnakutele.

Russ Cox usub ka, et kompilaatorid ei ole see koht, kus probleemi lahendada, kuna keelates ohtlikud sĂŒmbolid kompilaatori tasandil jÀÀb tohutult tööriistu, kus nende sĂŒmbolite kasutamine jÀÀb lubatuks, nagu kogumisse sĂŒsteemid, assemblerid, paketihaldurid ning erinevad konfiguratsiooni- ja andmearvutid. NĂ€iteks on projekt Rust keelanud LTR/RLT koodi töötlemise kompilaatoris, kuid ei ole lisanud parandust paketihaldurisse Cargo, mis lubab sama rĂŒnnaku teostada faili Cargo.toml kaudu. Sarnased rĂŒnnakute allikad vĂ”ivad olla ka sellised failid nagu BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ja requirements.txt.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster