Добре известно е, че има възможност за създаването на компилатори, които умишлено внасят уязвимости в създавания за тях двоичен код. Ето защо се отделя значително внимание на верификацията на компилаторите и елиминирането на възможността за тяхното злонамерено използване.
Нова статия на двама изследователи от университета в Кеймбридж (Великобритания) е посветена на проучвания относно проблема за генериране на уязвим код от немодифицирани компилатори, чрез манипулиране на кодирането на напълно безобиден изходен код.
В него авторите детайлно описват процедурата, наречена Trojan Source, която може да се използва за скрито внедряване на зловреден софтуер в изходния код.
Използвайки стандарти за кодиране на текст, като Unicode, изследователите са успели логически да кодират зловредни токени в порядък, различен от този, в който те се изобразяват. Тоест, човешките наблюдатели и компилаторите виждат различна логика в такъв изходен код.
Тази техника е демонстрирана на няколко езика за програмиране, включително и на C, C ++, JavaScript, Java, Rust, Go и Python. Изследователите отбелязват, че тяхната методология може да се приложи към почти всеки език за програмиране, който работи със софтуерни компилатори, използващи Unicode.
Концептуалните експлойти, предоставени от Кеймбриджкия университет, не са по своята същност злонамерени. Въпреки това, в ръцете на престъпници, те наистина могат да представляват сериозна заплаха.
Осъзнавайки рисковете от пускането на нов, безопасен инструмент за хакери, авторите на метода прекараха много месеци в координиране на програма за разкриване на информацията, която ще позволи на доставчиците на компилатори, интерпретатори и редактори на код да направят необходимите промени, за защита срещу потенциални атаки. Въпреки това, само около половината от всички тях вече работят върху корекциите.
Разработчиците на Rust бяха едни от първите, които елиминираха потенциалната заплаха. Неговата защитена версия е Rust 1.56.1, пусната на 1 ноември, и включва два нови статични анализатора, които откриват засегнатите кодови точки и забраняват тяхната компилация по подразбиране.