Êrîşa Çavkaniya Trojan ji bo danasîna guhertinên kodê yên ku ji pêşdebiran re nayê dîtin

Lekolînwanên ji Zanîngeha Cambridge teknîkek weşandine ku bi bêdengî koda xirab têxe nav koda çavkaniyê ya peer-peer-nirxand. Rêbaza êrîşê ya amadekirî (CVE-2021-42574) di bin navê Çavkaniya Trojan de tê pêşkêş kirin û li ser damezrandina nivîsê ye ku ji bo berhevkar/wergêr û kesê ku kodê dibîne cûda xuya dike. Nimûneyên rêbazê ji bo berhevkar û wergêrên cihêreng ên ji bo C, C++ (gcc û clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go û Python têne peyda kirin têne destnîşan kirin.

Rêbaz li ser bingeha karanîna tîpên Unicode yên taybetî yên di şîroveyên kodê de ye ku rêza pêşandana nivîsa dualî diguhezîne. Bi alîkariya karakterên kontrolê yên weha, hin beşên nivîsê dikarin ji çepê ber bi rastê ve werin xuyang kirin, lê yên din - ji rast berbi çepê. Di pratîka rojane de, karakterên kontrolê yên weha dikarin werin bikar anîn, mînakî, ji bo ku rêzikên kodê yên bi Îbranî an Erebî têxin nav pelek. Lê ger hûn rêzikên bi rêwerzên nivîsê yên cihêreng di yek rêzê de bi kar bînin, bi karekterên diyarkirî re, beşên nivîsê yên ku ji rastê ber bi çepê têne xuyang kirin dikarin li ser nivîsa birêkûpêk a heyî ya ku ji çepê ber bi rastê ve hatî xuyang kirin li hev bikin.

Bi karanîna vê rêbazê, hûn dikarin avahiyek xirab li kodê zêde bikin, lê dûv re dema ku kodê temaşe dikin, nivîsa bi vê avahîsaziyê nayê dîtin, bi lê zêdekirina şîroveya jêrîn an jî di hundurê tîpên rastgir ên ku ji rastê ber bi çepê ve têne destnîşan kirin, ku dê bi tevahî rê li ber çavan bigire. karakterên cihêreng li ser têketina xerab têne danîn. Koda wusa dê ji hêla semantîkî ve rast bimîne, lê dê bi rengek cûda were şîrove kirin û xuyang kirin.

Êrîşa Çavkaniya Trojan ji bo danasîna guhertinên kodê yên ku ji pêşdebiran re nayê dîtin

Dema ku kodê dinirxîne, pêşdebirek dê bi rêzika dîtbarî ya karakteran re rû bi rû bimîne û dê şîroveyek ne gumanbar di edîtorek nivîsê ya nûjen, navgîniya malperê an IDE-ê de bibîne, lê berhevkar û wergêr dê rêzika mantiqî ya karakteran bikar bîne û dê têketina xerab wekî ku heye, bêyî ku bala xwe bidin nivîsa dualî ya di şîroveyan de bişopînin. Pirsgirêk bandor li edîtorên kodê yên cihêreng (VS Code, Emacs, Atom), û her weha navberên ji bo dîtina kodê li depoyan (GitHub, Gitlab, BitBucket û hemî hilberên Atlassian) dike.

Êrîşa Çavkaniya Trojan ji bo danasîna guhertinên kodê yên ku ji pêşdebiran re nayê dîtin

Gelek awayên karanîna rêbazê ji bo pêkanîna kiryarên xerab hene: lê zêdekirina vegotinek veşartî ya "veger"ê, ku dibe sedema temamkirina fonksiyonê di pêşiya demê de; şîrovekirina îfadeyên ku bi gelemperî wekî çêkirinên derbasdar têne xuyang kirin (mînak, neçalakkirina kontrolên girîng); danasîna nirxên rêzikên din ên ku dibin sedema têkçûna erêkirina rêzikê.

Mînakî, êrîşkarek dikare guherînek ku rêzê dihewîne pêşniyar bike: eger access_level != "bikarhêner{U+202E} {U+2066}// Binêre ka rêvebir{U+2069} {U+2066}" {

ya ku dê di navbera vekolînê de wekî ku access_level were xuyang kirin != "bikarhêner" { // Kontrol bike ka rêvebir

Wekî din, guhertoyek din a êrîşê hatî pêşniyar kirin (CVE-2021-42694), ku bi karanîna homoglyphs ve girêdayî ye, karakterên ku di xuyangê de dişibin hev, lê di wateyê de cûda ne û kodên unicode yên cihêreng hene (mînak, karaktera "ɑ" dişibe " a", "ɡ" - "g", "ɩ" - "l"). Karakterên weha dikarin di hin zimanan de di navên fonksiyon û guherbaran de werin bikar anîn da ku pêşdebiran bixapînin. Mînakî, dibe ku du fonksiyonên bi navên nediyar werin destnîşankirin ku kiryarên cûda pêk tînin. Bêyî analîzek berfireh, tavilê ne diyar e ka kîjan ji van her du fonksiyonan li cîhek taybetî tête navandin.

Êrîşa Çavkaniya Trojan ji bo danasîna guhertinên kodê yên ku ji pêşdebiran re nayê dîtin

Wekî tedbîrek ewlehiyê, tê pêşniyar kirin ku berhevkar, wergêr û amûrên kombûnê yên ku karakterên Unicode piştgirî dikin xeletiyek an hişyariyek nîşan bidin heke di şîroveyan de, rêzikên rêzikan, an nasnameyên ku arastekirina derketinê diguhezînin (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E û U+200F). Karakterên weha divê di taybetmendiyên zimanê bernamekirinê de jî bi eşkereyî bêne qedexe kirin û divê di edîtorên kod û navrûyên depoyê de rêz werin girtin.

Pêvek 1: Ji bo GCC, LLVM/Clang, Rust, Go, Python û binutils deqên zerarê hatine amadekirin. GitHub, Bitbucket û Jira jî pirsgirêk rast kirin. Serastkirinek ji bo GitLab di pêş de ye. Ji bo naskirina koda pirsgirêk, tê pêşniyar kirin ku emrê bikar bînin: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\uXNUMX/uXNUMX/' kanî

Pêvek 2: Russ Cox, yek ji pêşdebirên Plan 9 OS û zimanê bernamenûsê Go, baldariya zêde ya li ser rêbaza êrîşê ya diyarkirî, ya ku demek dirêj tê zanîn (Go, Rust, C++, Ruby) rexne kir û bi ciddî nehat girtin. . Li gorî Cox, pirsgirêk bi piranî bi nîşana rast a agahdariyê di edîtorên kodê û navgînên malperê de têkildar e, ku dikare bi karanîna amûrên rast û analîzkerên kodê di dema vekolînê de were çareser kirin. Ji ber vê yekê, li şûna ku balê bikişîne ser êrîşên spekulatîf, dê guncantir be ku meriv balê bikişîne ser başkirina pêvajoyên vekolîna kod û girêdanê.

Ras Cox di heman demê de bawer dike ku berhevkar ne cîhê rast e ku pirsgirêkê çareser bike, ji ber ku bi qedexekirina sembolên xeternak di asta berhevkerê de, qatek mezin a amûran dimîne ku tê de karanîna van sembolan qebûlkirî dimîne, wek avakirina pergalê, komker, gerînendeyên pakêtê û parser û daneyên cihêreng ên mîhengê. Wekî mînak, projeya Rust tê dayîn, ku pêvajokirina koda LTR/RTL di berhevkerê de qedexe kir, lê sererastkirinek li rêveberê pakêtê Cargo zêde nekir, ku destûrê dide êrîşek bi vî rengî bi pelê Cargo.toml. Bi heman awayî, pelên wekî BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml û daxwazên.txt dikarin bibin çavkaniyên êrîşan.

Source: opennet.ru

Add a comment