От C към Rust с две кликвания: представен е автоматичен конвертор на софтуерния код
Иновативната разработка трансформира радикално метода към безвредното програмиране.
Изследователи от френския проучвателен център Inria, в съдействие с Microsoft, са създали метод за автоматизирано превръщане на кода на C в по-надеждния код на Rust, с цел да отговорят на възходящото търсене на програмиране с сигурност на паметта.
Езикът за програмиране C, основан през 70-те години на предишния век, е в основата на голям брой сериозно значими системи, приложения и библиотеки, в това число Linux ядрото. Въпреки това C, както и логическото му продължение в лицето на C++, не подсигурява сигурност на паметта. Ръчното ръководство на паметта, въпреки и гъвкаво и ефикасно, е податливо на неточности, като да вземем за пример излизане отвън границите на масивите и потребление на паметта след нейното освобождение (use-after-free).
Тези неточности съставляват забележителна част от уязвимостите в софтуера. Така да вземем за пример през 2019 година те съставляват 76% от уязвимостите в Android, само че с помощта на потреблението на Rust и неговия сигурен код тази цифра е спаднала до 24% през 2024 година
Rust дава опция за писане както на сигурен, по този начин и на небезопасен код, като оставя избора на разработчика. За разлика от тях C и C++ изискват обилни старания, като неподвижен разбор и тестване, с цел да се приближат до обезпечаване на сигурността на паметта, само че не я обезпечават по своята същина.
През последните години се следи мощна поддръжка за прекосяване към езици с вградена сигурност на паметта, като Rust, Go, Python и Java. Въпреки това част от програмистите не престават да търсят способи за безвредно потребление на C и C++, като заобикалят прекосяването към Rust. Гугъл, въпреки и интензивно да разпространява Rust, също по този начин признава, че C и C++ ще продължат да се употребяват още дълги години.
Сред опитите за възстановяване на сигурността на C се открояват планове като TrapC и Fil-C. Първият създава метод към подмножество на езика, до момента в който вторият, въпреки и да обезпечава сигурност, понижава продуктивността и не поддържа цялостна съгласуемост с двоичния интерфейс на приложението.
Изследване, озаглавено „ Compiling C to Secure Rust “ (Компилиране на C в предпазен Rust), на учените Aymeric Fromerz (Inria) и Jonathan Protzenko (Microsoft), предлага различен метод. Те се концентрират върху преобразуването на кода, публично тестван за потребление в промишлеността, в безвреден Rust код. За тази цел те са основали подмножество на езика C, наречено Mini-C, в което са избегнати сложните за превръщане структури като аритметиката на указатели и имплицитната модифицируемост.
Като ползват Mini-C посредством компилатора KaRaMeL, разработчиците реализират автоматизирано превръщане на кода в безвреден Rust. Така да вземем за пример криптографската библиотека HACL, състояща се от 80 000 реда код, беше преобразувана с минимални промени. А библиотеката за сериализация EverParse, съдържаща 1400 реда код, беше преобразувана без никакви промени. Производителността на получения Rust код остава на равнището на истинския C, макар прибавянето на спомагателни инспекции и други усъвършенствания.
Плодовете на работата на откривателите към този момент се употребяват в действителни приложения, свързани със сигурността. Така да вземем за пример Rust версията на HACL неотдавна беше интегрирана в библиотеките NSS и OpenSSH на Mozilla.




