Shambulio la Chanzo cha Trojan ili kuanzisha mabadiliko kwenye msimbo ambayo hayaonekani kwa msanidi programu

Watafiti kutoka Chuo Kikuu cha Cambridge wamechapisha mbinu ya kuweka kimyakimya msimbo hasidi katika msimbo wa chanzo uliopitiwa na marafiki. Mbinu ya kushambulia iliyotayarishwa (CVE-2021-42574) inawasilishwa chini ya jina Chanzo cha Trojan na inategemea uundaji wa maandishi ambayo yanaonekana tofauti kwa mkusanyaji/mkalimani na mtu anayetazama msimbo. Mifano ya mbinu inaonyeshwa kwa wakusanyaji na wakalimani mbalimbali wanaotolewa kwa C, C++ (gcc na clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go na Python.

Njia hiyo inategemea matumizi ya wahusika maalum wa Unicode katika maoni ya msimbo ambayo hubadilisha utaratibu wa maonyesho ya maandishi ya pande mbili. Kwa msaada wa wahusika wa udhibiti huo, baadhi ya sehemu za maandishi zinaweza kuonyeshwa kutoka kushoto kwenda kulia, wakati wengine - kutoka kulia kwenda kushoto. Katika mazoezi ya kila siku, vibambo vile vya udhibiti vinaweza kutumika, kwa mfano, kuingiza mistari ya msimbo katika Kiebrania au Kiarabu kwenye faili. Lakini ukichanganya mistari yenye maelekezo tofauti ya maandishi katika mstari mmoja, kwa kutumia herufi zilizobainishwa, vifungu vya maandishi vinavyoonyeshwa kutoka kulia kwenda kushoto vinaweza kuingiliana na maandishi ya kawaida yaliyopo yanayoonyeshwa kutoka kushoto kwenda kulia.

Kutumia njia hii, unaweza kuongeza muundo mbaya kwa nambari, lakini kisha ufanye maandishi na muundo huu kutoonekana wakati wa kutazama msimbo, kwa kuongeza katika maoni yafuatayo au ndani ya herufi halisi zilizoonyeshwa kutoka kulia kwenda kushoto, ambayo itasababisha kabisa. herufi tofauti zikiwekwa juu ya uchopekaji hasidi. Nambari kama hiyo itabaki kuwa sahihi kisemantiki, lakini itafasiriwa na kuonyeshwa tofauti.

Shambulio la Chanzo cha Trojan ili kuanzisha mabadiliko kwenye msimbo ambayo hayaonekani kwa msanidi programu

Wakati wa kukagua msimbo, msanidi programu atakabiliwa na mpangilio wa kuona wa wahusika na ataona maoni yasiyo ya kutiliwa shaka katika kihariri cha maandishi cha kisasa, kiolesura cha wavuti au IDE, lakini mkusanyaji na mkalimani atatumia mpangilio wa kimantiki wa wahusika na atafanya. kuchakata uwekaji hasidi kama ulivyo, bila kuzingatia maandishi yanayoelekeza pande mbili kwenye maoni. Tatizo huathiri wahariri mbalimbali wa msimbo maarufu (VS Code, Emacs, Atom), pamoja na miingiliano ya kutazama msimbo kwenye hazina (GitHub, Gitlab, BitBucket na bidhaa zote za Atlassian).

Shambulio la Chanzo cha Trojan ili kuanzisha mabadiliko kwenye msimbo ambayo hayaonekani kwa msanidi programu

Kuna njia kadhaa za kutumia njia ya kutekeleza vitendo vibaya: kuongeza usemi wa "kurudi" uliofichwa, ambao unasababisha kukamilika kwa kazi kabla ya muda; kutoa maoni kwa misemo ambayo kwa kawaida inaweza kuonekana kama miundo halali (kwa mfano, kuzima ukaguzi muhimu); kugawa maadili mengine ya kamba ambayo husababisha kushindwa kwa uthibitishaji wa kamba.

Kwa mfano, mshambulizi anaweza kupendekeza mabadiliko yanayojumuisha laini: if access_level != "user{U+202E} {U+2066}// Angalia kama msimamizi{U+2069} {U+2066}" {

ambayo itaonyeshwa katika kiolesura cha ukaguzi kana kwamba access_level != "mtumiaji" {// Angalia kama msimamizi

Kwa kuongezea, lahaja nyingine ya shambulio imependekezwa (CVE-2021-42694), inayohusishwa na utumiaji wa homoglyphs, herufi zinazofanana kwa sura, lakini zinatofautiana kwa maana na zina nambari tofauti za unicode (kwa mfano, herufi "Ι‘" inafanana na " a”, β€œΙ‘β€ - β€œg”, β€œΙ©β€ - β€œl”). Herufi zinazofanana zinaweza kutumika katika baadhi ya lugha katika majina ya vitendakazi na viambajengo ili kuwapotosha wasanidi programu. Kwa mfano, kazi mbili zilizo na majina yasiyoweza kutofautishwa zinaweza kufafanuliwa ambazo hufanya vitendo tofauti. Bila uchambuzi wa kina, haijulikani mara moja ni kazi gani kati ya hizi mbili inaitwa mahali maalum.

Shambulio la Chanzo cha Trojan ili kuanzisha mabadiliko kwenye msimbo ambayo hayaonekani kwa msanidi programu

Kama hatua ya usalama, inashauriwa kuwa wakusanyaji, wakalimani, na zana za kuunganisha zinazotumia herufi za Unicode zionyeshe hitilafu au onyo ikiwa kuna vibambo vya udhibiti ambavyo havijaoanishwa katika maoni, maandishi halisi, au vitambulishi vinavyobadilisha mwelekeo wa matokeo (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067,U+2068,U+2069,U+061C,U+200E na U+200F). Vibambo kama hivyo pia vinapaswa kupigwa marufuku wazi katika ubainifu wa lugha ya programu na vinapaswa kuheshimiwa katika vihariri vya msimbo na violesura vya hazina.

Nyongeza ya 1: Viraka vya athari vimetayarishwa kwa GCC, LLVM/Clang, Rust, Go, Python na binutils. GitHub, Bitbucket na Jira pia walisuluhisha suala hilo. Marekebisho ya GitLab yanaendelea. Ili kutambua msimbo wenye matatizo, inashauriwa kutumia amri: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\uXNUMX/' chanzo

Nyongeza ya 2: Russ Cox, mmoja wa watengenezaji wa Plan 9 OS na lugha ya programu ya Go, alikosoa umakini mkubwa kwa njia iliyoelezewa ya shambulio, ambayo imejulikana kwa muda mrefu (Go, Rust, C++, Ruby) na haikuchukuliwa kwa uzito. . Kulingana na Cox, shida inahusu uonyeshaji sahihi wa habari katika wahariri wa nambari na miingiliano ya wavuti, ambayo inaweza kutatuliwa kwa kutumia zana sahihi na wachambuzi wa nambari wakati wa ukaguzi. Kwa hivyo, badala ya kuzingatia mashambulizi ya kubahatisha, itakuwa sahihi zaidi kuzingatia uboreshaji wa kanuni na michakato ya ukaguzi wa utegemezi.

Ras Cox pia anaamini kuwa wakusanyaji sio mahali pazuri pa kurekebisha shida, kwani kwa kupiga marufuku alama hatari kwenye kiwango cha mkusanyaji, bado kuna safu kubwa ya zana ambayo utumiaji wa alama hizi unabaki kukubalika, kama vile mifumo ya ujenzi, wakusanyaji, wasimamizi wa vifurushi na vichanganuzi mbalimbali vya usanidi na data. Kwa mfano, mradi wa Rust umetolewa, ambao ulipiga marufuku uchakataji wa msimbo wa LTR/RTL kwenye mkusanyaji, lakini haukuongeza urekebishaji kwa msimamizi wa kifurushi cha Cargo, ambayo inaruhusu shambulio kama hilo kupitia faili ya Cargo.toml. Vile vile, faili kama vile BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml na requirements.txt zinaweza kuwa vyanzo vya mashambulizi.

Chanzo: opennet.ru

Kuongeza maoni