ionnsaigh Trojan Source gus atharrachaidhean a thoirt a-steach don chòd nach fhaic an leasaiche

Tha luchd-rannsachaidh bho Oilthigh Chambridge air innleachd fhoillseachadh airson còd droch-rùnach a chuir a-steach gu sàmhach ann an còd stòr air a sgrùdadh le co-aoisean. Tha an dòigh ionnsaigh ullaichte (CVE-2021-42574) air a thaisbeanadh fon ainm Trojan Source agus tha e stèidhichte air cruthachadh teacsa a tha a ’coimhead eadar-dhealaichte airson an neach-cruinneachaidh / eadar-theangair agus an neach a tha a’ coimhead air a ’chòd. Tha eisimpleirean den dòigh air an sealltainn airson diofar luchd-cruinneachaidh agus eadar-mhìnearan a chaidh a sholarachadh airson C, C ++ (gcc agus clang), C #, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go agus Python.

Tha an dòigh stèidhichte air cleachdadh charactaran sònraichte Unicode ann am beachdan còd a dh’ atharraicheas òrdugh taisbeanaidh teacsa dà-thaobhach. Le cuideachadh bho leithid de charactaran smachd, faodar cuid de phàirtean den teacsa a thaisbeanadh bho chlì gu deas, agus cuid eile - bho dheas gu clì. Ann an cleachdadh làitheil, faodar caractaran smachd mar sin a chleachdadh, mar eisimpleir, gus loidhnichean còd ann an Eabhra no Arabais a chuir a-steach do fhaidhle. Ach ma cheanglas tu loidhnichean le diofar stiùiridhean teacsa ann an aon loidhne, a’ cleachdadh nan caractaran ainmichte, faodaidh earrannan teacsa a thèid a thaisbeanadh bho dheas gu clì a dhol thairis air an teacsa àbhaisteach a tha air a thaisbeanadh bho chlì gu deas.

A’ cleachdadh an dòigh seo, faodaidh tu dealbh droch-rùnach a chur ris a’ chòd, ach an uairsin dèan an teacsa leis an togalach seo do-fhaicsinneach nuair a choimheadas tu air a’ chòd, le bhith a’ cur a-steach a’ bheachd a leanas no taobh a-staigh nan caractaran litireil a chithear bho dheas gu clì, a bheir gu tur caractaran eadar-dhealaichte gan cur thairis air an cuir a-steach droch-rùnach. Bidh an còd sin fhathast ceart gu semantach, ach thèid a mhìneachadh agus a thaisbeanadh ann an dòigh eadar-dhealaichte.

ionnsaigh Trojan Source gus atharrachaidhean a thoirt a-steach don chòd nach fhaic an leasaiche

Fhad ‘s a bhios e ag ath-sgrùdadh còd, bidh leasaiche a’ dol an aghaidh òrdugh lèirsinneach nan caractaran agus chì e beachd neo-amharasach ann an deasaiche teacsa ùr-nodha, eadar-aghaidh lìn no IDE, ach cleachdaidh an cruinniche agus eadar-theangair òrdugh loidsigeach nan caractaran agus cleachdaidh e. pròiseas an cuir a-steach droch-rùnach mar a tha, gun a bhith a’ toirt aire don teacsa dà-thaobhach anns na beachdan. Bidh an duilgheadas a’ toirt buaidh air grunn luchd-deasachaidh còd mòr-chòrdte (Còd VS, Emacs, Atom), a bharrachd air eadar-aghaidh airson còd fhaicinn ann an stòran (GitHub, Gitlab, BitBucket agus a h-uile toradh Atlassian).

ionnsaigh Trojan Source gus atharrachaidhean a thoirt a-steach don chòd nach fhaic an leasaiche

Tha grunn dhòighean ann air an dòigh a chleachdadh gus gnìomhan droch-rùnach a chuir an gnìomh: cuir abairt “tilleadh” falaichte ris, a bheir gu buil a’ ghnìomh ro-làimh; a' toirt iomradh air abairtean a bhiodh mar as trice rim faicinn mar dhealbhaidhean dligheach (mar eisimpleir, gus sgrùdaidhean cudromach a chur à comas); a 'sònrachadh luachan sreang eile a dh' adhbhraicheas fàilligidhean dearbhaidh sreang.

Mar eisimpleir, dh'fhaoidte gum moladh neach-ionnsaigh atharrachadh a tha a' gabhail a-steach an loidhne: if access_level ! = "cleachdaiche{U+202E} {U+2066}// Thoir sùil a bheil an rianaire{U+2069} {U+2066}" {

a thèid a thaisbeanadh san eadar-aghaidh ath-bhreithneachaidh mar gum biodh access_level! = “cleachdaiche” {// Thoir sùil air a bheil admin

A bharrachd air an sin, chaidh tionndadh ionnsaigh eile a mholadh (CVE-2021-42694), co-cheangailte ri cleachdadh homoglyphs, caractaran a tha coltach ri coltas, ach eadar-dhealaichte ann an ciall agus aig a bheil còdan unicode eadar-dhealaichte (mar eisimpleir, tha an caractar “ɑ” coltach ri “ a”, “ɡ” - “g”, “ɩ” - “l”). Faodar caractaran coltach ris a chleachdadh ann an cuid de chànanan ann an ainmean ghnìomhan agus caochladairean gus luchd-leasachaidh a mhealladh. Mar eisimpleir, faodar dà ghnìomh le ainmean neo-aithnichte a mhìneachadh a nì diofar ghnìomhan. Às aonais mion-sgrùdadh mionaideach, chan eil e soilleir sa bhad dè an dà ghnìomh sin a chanar ann an àite sònraichte.

ionnsaigh Trojan Source gus atharrachaidhean a thoirt a-steach don chòd nach fhaic an leasaiche

Mar cheum tèarainteachd, thathas a’ moladh gum bi luchd-cruinneachaidh, eadar-mhìnearan, agus innealan cruinneachaidh a bheir taic do charactaran Unicode a’ nochdadh mearachd no rabhadh ma tha caractaran smachd gun chàradh ann am beachdan, litrichean sreang, no aithnichearan a dh’ atharraicheas stiùireadh toraidh (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E agus U+200F). Bu chòir caractaran mar seo a bhith air an toirmeasg gu sònraichte ann an sònrachaidhean cànain prògramadh agus bu chòir spèis a thoirt dhaibh ann an luchd-deasachaidh còd agus eadar-aghaidh tasgaidh.

Adendum 1: Chaidh pìosan so-leòntachd ullachadh airson GCC, LLVM/Clang, Rust, Go, Python agus binutils. Shuidhich GitHub, Bitbucket agus Jira a’ chùis cuideachd. Tha fuasgladh airson GitLab a’ dol air adhart. Gus còd trioblaideach a chomharrachadh, thathar a' moladh an àithne a chleachdadh: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069/]' / path tùs

Adendum 2: Chàin Russ Cox, aon de luchd-leasachaidh Plana 9 OS agus cànan prògramadh Go, an cus aire don dòigh ionnsaigh a chaidh a mhìneachadh, a tha air a bhith aithnichte o chionn fhada (Go, Rust, C ++, Ruby) agus nach deach a ghabhail gu dona . A rèir Cox, tha an duilgheadas sa mhòr-chuid a’ buntainn ri taisbeanadh ceart fiosrachaidh ann an luchd-deasachaidh còd agus eadar-aghaidh lìn, a dh’ fhaodar fhuasgladh le bhith a’ cleachdadh na h-innealan ceart agus sgrùdairean còd rè ath-bhreithneachaidh. Mar sin, an àite a bhith a’ tarraing aire gu ionnsaighean tuairmeasach, bhiodh e na b’ iomchaidh fòcas a chuir air leasachadh còd agus pròiseasan ath-bhreithneachaidh eisimeileachd.

Tha Ras Cox cuideachd den bheachd nach e luchd-cruinneachaidh an t-àite ceart airson an duilgheadas a rèiteachadh, oir le bhith a’ toirmeasg samhlaidhean cunnartach aig ìre cruinneachaidh, tha sreath mhòr de dh’ innealan ann fhathast far a bheilear fhathast a’ gabhail ri cleachdadh nan samhlaidhean sin, leithid siostaman togail, co-chruinneachaidhean, manaidsearan pacaid agus diofar parsers rèiteachaidh agus dàta. Mar eisimpleir, tha am pròiseact Rust air a thoirt seachad, a chuir casg air giullachd còd LTR / RTL anns an inneal-cruinneachaidh, ach nach do chuir socrachadh ris a’ mhanaidsear pacaid Cargo, a leigeas le ionnsaigh coltach ris tro fhaidhle Cargo.toml. San aon dòigh, faodaidh faidhlichean leithid BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml agus requirements.txt a bhith nan stòran ionnsaigh.

Source: fosgailtenet.ru

Cuir beachd ann