Проект з реалізації утиліт sudo та su мовою Rust

Організація ISRG (Internet Security Research Group), яка є засновником проекту Let's Encrypt та сприяє просуванню HTTPS та розвитку технологій для підвищення захищеності інтернету, представила проект Sudo-rs зі створення написаних мовою Rust реалізацій утиліт sudo та su, що дозволяють виконувати команди від імені інших. користувачів. Під ліцензіями Apache 2.0 і MIT вже опубліковано попередню версію Sudo-rs, поки не готову до повсюдного використання. Проект, робота над яким розпочалася у грудні 2022 року, планують завершити у вересні 2023 року.

В даний час робота зосереджена на реалізації в Sudo-rs функцій, що дозволяють використовувати утиліту як прозору заміну sudo у типових сценаріях використання (конфігурації sudoers за замовчуванням в Ubuntu, Fedora та Debian). У майбутньому планується створити бібліотеку, що дозволяє вбудовувати функціональність sudo в інші програми, і надати альтернативний метод налаштування, що дає можливість обійтися без аналізу синтаксису файлу конфігурації sudoers. На базі реалізованої функціональності sudo також буде підготовлено варіант утиліти su. Додатково у планах згадується підтримка SELinux, AppArmor, LDAP, засобів аудиту, можливість аутентифікації без використання PAM та реалізація всіх опцій командного рядка sudo.

За даними компаній Microsoft і Google, близько 70% уразливостей викликані небезпечною роботою з пам'яттю. Передбачається, що використання мови Rust для розробки su та sudo дозволить знизити ризик появи вразливостей, спричинених небезпечною роботою з пам'яттю, та виключити появу таких помилок, як звернення до області пам'яті після її звільнення та вихід за межі буфера. Розробка Sudo-rs ведеться інженерами з Ferrous Systems та Tweede Golf на кошти, надані такими компаніями як Google, Cisco, Amazon Web Services.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами та облік часу життя об'єктів (області видимості), а також оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

Джерело: opennet.ru

Додати коментар або відгук