Ҳамлаи троянӣ Source барои ворид кардани тағирот ба код, ки ба таҳиягар ноаён аст

Муҳаққиқони Донишгоҳи Кембриҷ як усули бесадо ворид кардани коди зарароварро ба коди сарчашмаи аз ҷониби ҳамсолон баррасӣшуда нашр карданд. Усули ҳамлаи омодашуда (CVE-2021-42574) бо номи Trojan Source муаррифӣ шудааст ва ба ташаккули матне асос ёфтааст, ки барои компилятор/тарҷумон ва шахсе, ки рамзро мебинад, фарқ мекунад. Намунаҳои усул барои компиляторҳо ва тарҷумонҳои гуногун, ки барои C, C++ (gcc ва clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go ва Python дода шудаанд, нишон дода шудаанд.

Ин усул ба истифодаи аломатҳои махсуси Юникод дар шарҳҳои код асос ёфтааст, ки тартиби намоиши матни дуҷонибаро тағйир медиҳанд. Бо ёрии чунин аломатҳои идоракунӣ баъзе қисмҳои матнро аз чап ба рост, қисми дигарро аз рост ба чап намоиш додан мумкин аст. Дар амалияи ҳаррӯза, чунин аломатҳои идоракуниро, масалан, барои ворид кардани сатрҳои рамзӣ ба забони ибрӣ ё арабӣ ба файл истифода бурдан мумкин аст. Аммо агар шумо сатрҳоро бо самтҳои гуногуни матн дар як сатр якҷоя кунед, бо истифода аз аломатҳои муайяншуда, порчаҳои матни аз рост ба чап нишондодашуда метавонанд матни муқаррарии аз чап ба рост нишон додашударо такрор кунанд.

Бо истифода аз ин усул, шумо метавонед як сохтори зарароварро ба код илова кунед, аммо пас матнро бо ин сохтор ҳангоми дидани код бо илова кардани шарҳи зерин ё дар дохили аломатҳои аслӣ аз рост ба чап нишон додашуда ноаён гардонед, ки ин боиси пурра аломатҳои гуногун, ки ба воридкунии шубҳанок гузошта мешаванд. Чунин код аз ҷиҳати маъно дуруст боқӣ мемонад, аммо ба таври гуногун тафсир ва намоиш дода мешавад.

Ҳамлаи троянӣ Source барои ворид кардани тағирот ба код, ки ба таҳиягар ноаён аст

Ҳангоми баррасии код, таҳиякунанда бо тартиби визуалии аломатҳо рӯ ба рӯ мешавад ва дар муҳаррири матнии муосир, веб-интерфейс ё IDE шарҳи шубҳанокро мебинад, аммо компилятор ва тарҷумон тартиби мантиқии аломатҳоро истифода мебаранд ва воридкунии шубҳанокро бидуни таваҷҷӯҳ ба матни дуҷониба дар шарҳҳо тавре коркард кунед. Мушкилот ба муҳаррирони рамзҳои маъмули гуногун (VS Code, Emacs, Atom), инчунин интерфейсҳо барои дидани код дар анборҳо (GitHub, Gitlab, BitBucket ва ҳама маҳсулоти Atlassian) таъсир мерасонад.

Ҳамлаи троянӣ Source барои ворид кардани тағирот ба код, ки ба таҳиягар ноаён аст

Якчанд роҳҳои истифодаи усул барои амалисозии амалҳои зараровар мавҷуданд: илова кардани ифодаи пинҳонии "бозгашт", ки боиси пеш аз мӯҳлат ба итмом расидани функсия мегардад; шарҳ додани ибораҳое, ки одатан ҳамчун сохторҳои дуруст намоён мешаванд (масалан, барои хомӯш кардани чекҳои муҳим); таъин кардани дигар арзишҳои сатр, ки ба нокомии тасдиқи сатр оварда мерасонанд.

Масалан, ҳамлакунанда метавонад тағйиротеро пешниҳод кунад, ки сатрро дар бар мегирад: if access_level != "user{U+202E} {U+2066}// Санҷед, ки оё admin{U+2069} {U+2066}" {

ки дар интерфейси барраси намоиш дода мешавад, ки гӯё access_level != “user” { // Санҷед, ки оё админ

Илова бар ин, варианти дигари ҳамла пешниҳод шудааст (CVE-2021-42694), ки бо истифодаи гомоглифҳо алоқаманд аст, аломатҳое, ки зоҳиран ба ҳам монанданд, вале аз ҷиҳати маъно фарқ мекунанд ва рамзҳои гуногуни Юникод доранд (масалан, аломати “ɑ” ба “ a", "ɡ" - "g", "ɩ" - "l"). Аломатҳои шабеҳро дар баъзе забонҳо дар номи функсияҳо ва тағирёбандаҳо барои гумроҳ кардани таҳиягарон истифода бурдан мумкин аст. Масалан, ду функсияро бо номҳои фарқнашаванда муайян кардан мумкин аст, ки амалҳои гуногунро иҷро мекунанд. Бе тахлили муфассал маълум нест, ки кадоме аз ин ду функсия дар як чои мушаххас даъват карда мешавад.

Ҳамлаи троянӣ Source барои ворид кардани тағирот ба код, ки ба таҳиягар ноаён аст

Ҳамчун чораи амниятӣ тавсия дода мешавад, ки компиляторҳо, тарҷумонҳо ва асбобҳои васлкунандае, ки аломатҳои Юникодро дастгирӣ мекунанд, хато ё огоҳиро нишон диҳанд, агар дар шарҳҳо, сатри литералҳо ё идентификаторҳое, ки самти баромадро тағир медиҳанд, аломатҳои идоранашаванда мавҷуд бошанд (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E ва U+200F). Чунин аломатҳо инчунин бояд дар мушаххасоти забони барномасозӣ ба таври возеҳ манъ карда шаванд ва дар муҳаррирони кодҳо ва интерфейсҳои репозиторий эҳтиром карда шаванд.

Иловаи 1: Часбҳои осебпазирӣ барои GCC, LLVM/Clang, Rust, Go, Python ва binutils омода карда шудаанд. GitHub, Bitbucket ва Jira низ мушкилотро ҳал карданд. Ислоҳ барои GitLab идома дорад. Барои муайян кардани рамзи мушкилот тавсия дода мешавад, ки фармонро истифода баред: grep -r $'[\u061C\u200E\u200A\u202A\u202C\u202C\u202C\u202C\u2066C\u2067C\u2068C\u2069C\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMXC\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX\uXNUMX]\' сарчашма

Замимаи 2: Рус Кокс, яке аз таҳиягарони OS Plan 9 ва забони барномасозии Go, таваҷҷуҳи аз ҳад зиёд ба усули тавсифшудаи ҳамларо, ки кайҳо боз маълум аст (Go, Rust, C++, Ruby) танқид кард ва ба таври ҷиддӣ қабул карда нашуд. . Ба гуфтаи Кокс, мушкилот асосан ба намоиши дурусти иттилоот дар муҳаррирҳои кодҳо ва интерфейсҳои веб дахл дорад, ки онро бо истифода аз абзорҳои дуруст ва таҳлилгари код ҳангоми баррасии ҳал кардан мумкин аст. Аз ин рӯ, ба ҷои ҷалби таваҷҷӯҳ ба ҳамлаҳои тахминӣ, беҳтар мебуд, ки ба такмил додани равандҳои код ва баррасии вобастагӣ тамаркуз кунед.

Рас Кокс инчунин мӯътақид аст, ки компиляторҳо ҷои дурусти ҳалли мушкилот нестанд, зеро бо манъ кардани рамзҳои хатарнок дар сатҳи компилятор, як қабати бузурги абзорҳо боқӣ мемонад, ки дар онҳо истифодаи ин рамзҳо қобили қабул боқӣ мемонад, ба монанди сохтани системаҳо, монтажчиён, менеҷерони бастаҳо ва таҳлилгарон ва маълумотҳои гуногуни конфигуратсия. Ҳамчун мисол, лоиҳаи Rust оварда шудааст, ки коркарди рамзи LTR/RTL-ро дар компилятор манъ кардааст, аммо ба мудири бастаи Cargo ислоҳ илова накардааст, ки имкон медиҳад ҳамлаи шабеҳ тавассути файли Cargo.toml бошад. Ба ҳамин монанд, файлҳо ба монанди BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml ва requirements.txt метавонанд сарчашмаи ҳамлаҳо шаванд.

Манбаъ: opennet.ru

Илова Эзоҳ