ISRG (Internet Security Research Group), założyciel projektu Let's Encrypt i propagator protokołu HTTPS oraz rozwoju technologii poprawiających bezpieczeństwo internetu, zaprezentował projekt Sudo-rs, którego celem jest stworzenie implementacji narzędzi sudo i su napisanych w języku Rust, umożliwiających wykonywanie poleceń w imieniu innych użytkowników. Wstępna wersja Sudo-rs została już opublikowana na licencjach Apache 2.0 i MIT, ale nie jest jeszcze gotowa do powszechnego użytku. Projekt, nad którym prace rozpoczęły się w grudniu 2022 roku, ma zostać ukończony we wrześniu 2023 roku.
Obecnie prace skupiają się na wdrażaniu funkcji w Sudo-rs, które umożliwiają używanie tego narzędzia jako transparentnego zamiennika sudo w typowych scenariuszach użytkowania (domyślne konfiguracje sudoers w Ubuntu, Fedora i DebianW przyszłości planujemy stworzyć bibliotekę, która umożliwi osadzanie funkcjonalności sudo w innych programach i zapewni alternatywną metodę konfiguracji, eliminującą konieczność analizowania składni pliku konfiguracyjnego sudoers. Zostanie również opracowana wersja narzędzia su oparta na zaimplementowanej funkcjonalności sudo. W planach jest również wspomniana obsługa SE.Linux, AppArmor, LDAP, narzędzia audytowe, możliwość uwierzytelniania bez użycia PAM i implementacja wszystkich opcji wiersza poleceń sudo.
Według Microsoftu i Google, około 70% luk w zabezpieczeniach jest spowodowanych niebezpiecznym przetwarzaniem pamięci. Zakłada się, że użycie języka Rust do tworzenia su i sudo zmniejszy ryzyko wystąpienia luk w zabezpieczeniach spowodowanych niebezpiecznym przetwarzaniem pamięci i wyeliminuje błędy, takie jak dostęp do obszaru pamięci po jego zwolnieniu i przekroczenie granic bufora. Sudo-rs jest rozwijany przez inżynierów z Ferrous Systems i Tweede Golf, korzystających ze środków takich firm jak Google, Cisco i Amazon Web Services.
Bezpieczna obsługa pamięci w Rust jest zapewniona w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektu i czasu życia obiektu (zakres), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.
Źródło: opennet.ru
