Burimi i Trojanit, sulm që lejon shtimin e ndryshimeve të kodit të padukshme për zhvilluesi

Pak ditë më parë Hulumtuesit e Universitetit të Kembrixhit u publikuan botimi i një teknikë për të zëvendësuar në mënyrë delikate kodet me qëllim të keq në kodin burimor të aplikacionit.

Metoda e sulmit e përgatiti atë Tashmë është renditur nën CVE-2021-42574 Ai vjen me emrin Trojan Source dhe bazohet në formimin e tekstit që duket ndryshe nga përpiluesi / interpretuesi dhe personi që shikon kodin.

Rreth Burimit të Trojanit

Metoda mbështetet në aplikimin e karaktereve të veçanta të Unicode në komentet e kodit, të cilat ndryshojnë rendin e shfaqjes së tekstit me dy drejtime. Me ndihmën e këtyre karaktereve të kontrollit, disa pjesë të tekstit mund të shfaqen nga e majta në të djathtë, ndërsa të tjerat nga e djathta në të majtë.

Në praktikën e përditshme, këto karaktere kontrolli mund të përdoren, për shembull, për të futur vargje hebraike ose arabe në një skedar kodi. Megjithatë, nëse i përdorni këto karaktere për të kombinuar rreshta me drejtime të ndryshme teksti në të njëjtën linjë, pasazhet e tekstit të shfaqura nga e djathta në të majtë mund të mbivendosen tekstin normal ekzistues të shfaqur nga e majta në të djathtë.

Me këtë metodë, një konstrukt me qëllim të keq mund të shtohet në kod, por më pas bëjeni tekstin me këtë ndërtim të padukshëm kur shikoni kodin, duke shtuar karakteret e treguara nga e djathta në të majtë në komentin tjetër ose brenda fjalëpërfjalës, gjë që do të rezultojë në një rezultat të karaktereve krejtësisht të ndryshme të mbivendosura në insertin keqdashës. Një kod i tillë do të jetë akoma i saktë semantikisht, por do të interpretohet dhe shfaqet ndryshe.

Ne kemi zbuluar mënyra për të manipuluar kodimin e skedarëve të kodit burimor në mënyrë që shikuesit njerëzorë dhe përpiluesit të shohin logjikë të ndryshme. Një metodë veçanërisht e dëmshme përdor karakteret e anashkalimit të drejtimit të Unicode për të shfaqur kodin si një anagram të logjikës së tij të vërtetë. Ne kemi verifikuar që ky sulm funksionon kundër C, C ++, C #, JavaScript, Java, Rust, Go dhe Python dhe dyshojmë se do të funksionojë kundër shumicës së gjuhëve të tjera moderne.

Gjatë rishikimit të kodit, zhvilluesi do të përballet me rendin vizual të personazheve dhe do të shohë një koment të dyshimtë në një redaktues tekst, ndërfaqe në internet ose IDE, por kompajleri dhe interpretuesi do të përdorin rendin logjik të karaktereve dhe do të trajtojnë kodin keqdashës siç është, pavarësisht nga teksti i dyanshëm në koment. Disa redaktues të njohur të kodit (VS Code, Emacs, Atom), si dhe ndërfaqet për shikimin e kodit në depo (GitHub, Gitlab, BitBucket dhe të gjitha produktet Atlassian) janë prekur.

Ka disa mënyra për të përdorur metodën për të zbatuar veprime me qëllim të keq: shtoni një shprehje të fshehur "kthim", e cila çon në ndërprerjen e parakohshme të ekzekutimit të funksionit; përfundimi në komentin e shprehjeve që normalisht konsiderohen konstruksione të vlefshme (për shembull, për të çaktivizuar kontrolle të rëndësishme); caktimi i vlerave të tjera të vargut që çojnë në dështime të vërtetimit të vargut.

Përveç kësaj, u propozua një opsion tjetër sulmi (CVE-2021-42694), i cili përfshin përdorimin e homoglifeve, simbole që duken të ngjashme në pamje, por ndryshojnë në kuptim dhe kanë kode të ndryshme Unicode. Këto karaktere mund të përdoren në disa gjuhë në emrat e funksioneve dhe variablave për të mashtruar zhvilluesit. Për shembull, mund të përcaktoni dy funksione me emra të padallueshëm që kryejnë veprime të ndryshme. Pa analizë të hollësishme, nuk mund të kuptoni menjëherë se cili nga këto dy funksione quhet në një vend të caktuar.

Si masë mbrojtëse, rekomandohet të zbatohen në përpilues, interpretues dhe mjete montimi që mbështesin karakteret Unicode, duke treguar një gabim ose paralajmërim nëse ka karaktere kontrolli të paçiftuara në komente, literale të vargjeve ose identifikues që ndryshojnë drejtimin e daljes. Këto karaktere duhet gjithashtu të ndalohen në mënyrë eksplicite në specifikimet e gjuhës së programimit dhe duhet të merren parasysh në redaktuesit e kodit dhe ndërfaqet për të punuar me depo.

Përveç kësaj dobësitë tashmë kanë filluar të rregullohen përgatitur për GCC, LLVM / Clang, Rust, Go, Python dhe binutils. GitHub, Bitbucket dhe Jira janë gjithashtu tashmë në përgatitje të një zgjidhjeje së bashku me GitLab.

Më në fund Nëse jeni të interesuar të dini më shumë për këtë, ju mund të konsultoheni detajet në lidhjen vijuese.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: AB Internet Networks 2008 SL
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.