Проект по реализации утилит 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 также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

Источник: opennet.ru