Как стать автором
Обновить

Проект Prossimo перепишет sudo и su на Rust

Время на прочтение3 мин
Количество просмотров14K
Команды разработчиков из Ferrous Systems и Tweede Golf при финансовой поддержке Amazon Web Services начали работы по реализации sudo и su на Rust. Об этом 26 апреля объявил Prossimo — проект Internet Security Research Group, в рамках которого идут планирование и координация деятельности по замене программного обеспечения на небезопасных при работе с памятью языках.

Активность в репозитории sudo-rs на GitHub началась ещё в январе этого года, но процесс продолжается, и к реальному использованию продукт пока не готов.

За Prossimo стоит благотворительная некоммерческая корпорация Internet Security Research Group, которая также создала проекты Let’s Encrypt (бесплатные криптографические сертификаты X.509 для TLS) и Divvi Up (сфокусированный на уважении к приватности пользователей сервис статистики).

Миссия Prossimo — переписать ключевые свободные программные продукты на безопасном при работе с памятью языке, избавив их от уязвимостей кода на C и C++. Так проект надеется изменить само восприятие софта до такой степени, чтобы безопасность доступа к памяти считалась обязательным качеством для программного обеспечения.

Программ на C и C++ в мире много, чаще всего они и так неплохо работают. Цели Prossimo выбирает по нескольким факторам:

  • Широко используется: на почти каждом сервере и/или клиенте.
  • Работает на сетевом уровне и/или имеет критическую функцию.
  • Написана на небезопасном при работе с памятью языке (C, C++, язык ассемблера и так далее), ключевые компоненты поддаются лёгкой замене.
  • Спонсор согласен профинансировать работы, а мейнтейнеры готовы сотрудничать.

На главной странице memorysafety.org перечислены несколько инициатив, к которым проект успел приложить руку. Это, например, декодер стандарта сжатия видео AV1, сервер и клиент синхронизации времени NTP и резольвер DNS — все переписаны на Rust, но на разных стадиях работ и не всегда готовы к реальному использованию. В других случаях Prossimo пытается помочь встроить инструменты на Rust или интегрировать модули: для curl протолкнули безопасные библиотеки TLS и HTTP, а для Linux добились поддержки драйверов на Rust в ядре.

sudo — консольная утилита Unix-подобных операционных систем для запуска команд с привилегиями другого пользователя, по умолчанию — суперпользователя root. Хорошей практикой безопасности считается ограничить права обычных пользователей системы и при необходимости привилегий root не входить под суперпользователя командой su без аргументов, а вызывать команды с помощью sudo. В некоторых случаях также ограничивают команды, которые могут вызываться из под sudo.

Как sudo, так и su хорошо попадают в многие из факторов отбора: это не новомодный doas, а популярные компоненты с историей из семидесятых и восьмидесятых годов прошлого века, заслужившие статус стандартного компонента Unix-подобных систем. Также в них регулярно находятся уязвимости: 172 различных записи базы данных CVE (Common Vulnerabilities and Exposures) упоминают sudo. Многие из «дыр» связаны с ошибками доступа к памяти: выход за пределы массива (CVE-2022-43995), переполнение буфера (CVE-2021-3156), а в этом году в sudo нашлась уязвимость double free (CVE-2023-27320).

Возможности sudo и su в sudo-rs напишут с нуля на Rust — языке программирования, в котором реализуются механики безопасности доступа к памяти. Rust всё чаще используют и рекомендуют в индустрии: он стал одним из основных языков для Android, Microsoft объявила о намерении переписать на нём ядро и часть библиотек Windows, а Агентство национальной безопасности США призывает отказаться от C и C++, называя в качестве одной из замен Rust.

Код sudo-rs распространяется под лицензиями MIT и Apache 2.0. Это куда лучше, чем неразбериха в лицензии sudo.

Процесс разработки только начинается. Документация предупреждает:

  • Продукт не готов для реального использования, он рекомендуется для тестирования и разработки. Например, для запуска в системе придётся указать переменную окружения SUDO_RS_IS_UNSTABLE на значение I accept that my system may break unexpectedly.
  • Поддерживаются системы на Linux. На других Unix-подобных системах sudo-rs может заработать, но без поддержки.
  • Аутентификация в sudo-rs идёт только через PAM, компонент должен присутствовать в системе.

Некоторые из фич sudo не в приоритете. Авторы sudo-rs объясняют, что оригинал имеет глубокую историю, и некоторые из функций актуальны только для устаревших систем. Оценку, какие части взять, а какие выкинуть, обещают проводить на основе критериев современности, реальной востребованности и безопасности.

Вариант su на Rust будет проще оригинала, в программу добавят только базовую функциональность. Вообще, отдельного репозитория для клона su нет: документация объясняет, что из кирпичиков реализации sudo построят поведение su.

Prossimo разбила план работ над sudo-rs на 5 этапов (от 0 до 4). Реализация su планируется, например, на этапе 2, а на последнем этапе добавят корпоративные функции.

На данном этапе идёт работа над созданием базовой инфраструктуры и архитектуры sudo-rs. Авторы принимают мелкие изменения и предложения, но предупреждают, что для работы над более крупными частями sudo-rs лучше сначала спросить.

github.com/memorysafety/sudo-rs
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 40: ↑36 и ↓4+32
Комментарии73

Другие новости

Истории

Работа

Программист С
44 вакансии
Rust разработчик
10 вакансий

Ближайшие события