Ymosodiad Trojan Source i gyflwyno newidiadau i'r cod sy'n anweledig i'r datblygwr

Mae ymchwilwyr o Brifysgol Caergrawnt wedi cyhoeddi techneg ar gyfer mewnosod cod maleisus yn dawel mewn cod ffynhonnell a adolygir gan gymheiriaid. Cyflwynir y dull ymosodiad parod (CVE-2021-42574) o dan yr enw Trojan Source ac mae'n seiliedig ar ffurfio testun sy'n edrych yn wahanol i'r casglwr / cyfieithydd a'r sawl sy'n edrych ar y cod. Mae enghreifftiau o'r dull yn cael eu dangos ar gyfer casglwyr a dehonglwyr amrywiol a gyflenwir ar gyfer C, C++ (gcc a clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go a Python.

Mae'r dull yn seiliedig ar y defnydd o nodau Unicode arbennig mewn sylwadau cod sy'n newid trefn arddangos testun deugyfeiriadol. Gyda chymorth cymeriadau rheoli o'r fath, gellir arddangos rhai rhannau o'r testun o'r chwith i'r dde, tra bod eraill - o'r dde i'r chwith. Mewn arfer bob dydd, gellir defnyddio nodau rheoli o'r fath, er enghraifft, i fewnosod llinellau cod yn Hebraeg neu Arabeg mewn ffeil. Ond os ydych chi'n cyfuno llinellau Γ’ gwahanol gyfeiriadau testun mewn un llinell, gan ddefnyddio'r nodau penodedig, gall darnau o destun sy'n cael eu harddangos o'r dde i'r chwith orgyffwrdd Γ’'r testun rheolaidd presennol sy'n cael ei arddangos o'r chwith i'r dde.

Gan ddefnyddio'r dull hwn, gallwch ychwanegu lluniad maleisus i'r cod, ond yna gwneud y testun gyda'r lluniad hwn yn anweledig wrth edrych ar y cod, trwy ychwanegu'r sylw canlynol neu y tu mewn i'r nodau llythrennol a ddangosir o'r dde i'r chwith, a fydd yn arwain at yn gyfan gwbl cymeriadau gwahanol yn cael eu harosod ar y mewnosodiad maleisus. Bydd cod o'r fath yn parhau i fod yn semantig gywir, ond bydd yn cael ei ddehongli a'i arddangos yn wahanol.

Ymosodiad Trojan Source i gyflwyno newidiadau i'r cod sy'n anweledig i'r datblygwr

Wrth adolygu cod, bydd datblygwr yn wynebu trefn weledol y cymeriadau a bydd yn gweld sylw diamheuol mewn golygydd testun modern, rhyngwyneb gwe neu IDE, ond bydd y casglwr a'r cyfieithydd yn defnyddio trefn resymegol y cymeriadau a bydd prosesu'r mewnosodiad maleisus fel y mae, heb dalu sylw i'r testun deugyfeiriadol yn y sylwadau. Mae'r broblem yn effeithio ar olygyddion cod poblogaidd amrywiol (Cod VS, Emacs, Atom), yn ogystal Γ’ rhyngwynebau ar gyfer gwylio cod mewn storfeydd (GitHub, Gitlab, BitBucket a holl gynhyrchion Atlassian).

Ymosodiad Trojan Source i gyflwyno newidiadau i'r cod sy'n anweledig i'r datblygwr

Mae sawl ffordd o ddefnyddio'r dull i weithredu gweithredoedd maleisus: ychwanegu ymadrodd "dychwelyd" cudd, sy'n arwain at gwblhau'r swyddogaeth o flaen amser; rhoi sylwadau ar ymadroddion a fyddai fel arfer yn weladwy fel lluniadau dilys (er enghraifft, i analluogi gwiriadau pwysig); neilltuo gwerthoedd llinynnol eraill sy'n arwain at fethiannau dilysu llinyn.

Er enghraifft, efallai y bydd ymosodwr yn cynnig newid sy'n cynnwys y llinell: if access_level ! = "defnyddiwr{U+202E} {U+2066}// Gwiriwch a yw gweinydd{U+2069} {U+2066}" {

a fydd yn cael ei arddangos yn y rhyngwyneb adolygu fel petai access_level ! = "defnyddiwr" {// Gwiriwch a yw gweinyddwr

Yn ogystal, mae amrywiad ymosodiad arall wedi'i gynnig (CVE-2021-42694), sy'n gysylltiedig Γ’'r defnydd o homoglyffau, cymeriadau sy'n debyg o ran ymddangosiad, ond sy'n wahanol o ran ystyr ac sydd Γ’ chodau unicode gwahanol (er enghraifft, mae'r cymeriad β€œΙ‘β€ yn debyg i β€œ a”, β€œΙ‘β€ – β€œg”, β€œΙ©β€ – β€œl”). Gellir defnyddio nodau tebyg mewn rhai ieithoedd yn enwau swyddogaethau a newidynnau i gamarwain datblygwyr. Er enghraifft, gellir diffinio dwy swyddogaeth ag enwau na ellir eu gwahaniaethu sy'n cyflawni gweithredoedd gwahanol. Heb ddadansoddiad manwl, nid yw'n glir ar unwaith pa un o'r ddwy swyddogaeth hyn a elwir mewn man penodol.

Ymosodiad Trojan Source i gyflwyno newidiadau i'r cod sy'n anweledig i'r datblygwr

Fel mesur diogelwch, argymhellir bod casglwyr, dehonglwyr, ac offer cydosod sy'n cefnogi nodau Unicode yn arddangos gwall neu rybudd os oes nodau rheoli heb eu paru mewn sylwadau, llythrennau llinynnol, neu ddynodwyr sy'n newid cyfeiriad yr allbwn (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ac U+200F). Dylai nodau o'r fath hefyd gael eu gwahardd yn benodol mewn manylebau iaith raglennu a dylid eu parchu mewn golygyddion cod a rhyngwynebau cadwrfeydd.

Atodiad 1: Paratowyd clytiau bregusrwydd ar gyfer GCC, LLVM/Clang, Rust, Go, Python a binutils. Trwsiodd GitHub, Bitbucket a Jira y mater hefyd. Mae atgyweiriad ar gyfer GitLab ar y gweill. I nodi cod problemus, awgrymir defnyddio'r gorchymyn: grep -r $ '[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069/]' / path ffynhonnell

Atodiad 2: Beirniadodd Russ Cox, un o ddatblygwyr Cynllun 9 OS a'r iaith raglennu Go, y sylw gormodol i'r dull ymosod a ddisgrifiwyd, sydd wedi bod yn hysbys ers amser maith (Go, Rust, C ++, Ruby) ac na chafodd ei gymryd o ddifrif . Yn Γ΄l Cox, mae'r broblem yn ymwneud yn bennaf ag arddangos gwybodaeth gywir mewn golygyddion cod a rhyngwynebau gwe, y gellir eu datrys trwy ddefnyddio'r offer cywir a dadansoddwyr cod yn ystod adolygiad. Felly, yn hytrach na thynnu sylw at ymosodiadau hapfasnachol, byddai'n fwy priodol canolbwyntio ar wella prosesau adolygu cod a dibyniaeth.

Mae Ras Cox hefyd yn credu nad casglwyr yw'r lle iawn i ddatrys y broblem, oherwydd trwy wahardd symbolau peryglus ar y lefel casglwr, mae yna haen enfawr o offer o hyd lle mae defnyddio'r symbolau hyn yn parhau i fod yn dderbyniol, megis systemau adeiladu, cydosodwyr, rheolwyr pecyn a pharsers ffurfweddu a data amrywiol. Er enghraifft, rhoddir y prosiect Rust, a waharddodd brosesu cod LTR / RTL yn y casglwr, ond ni ychwanegodd atgyweiriad i'r rheolwr pecyn Cargo, sy'n caniatΓ‘u ymosodiad tebyg trwy'r ffeil Cargo.toml. Yn yr un modd, gall ffeiliau fel BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml a requirements.txt ddod yn ffynonellau ymosodiadau.

Ffynhonnell: opennet.ru

Ychwanegu sylw