Projekt implementacji narzędzi sudo i su w Rust

Grupa ISRG (Internet Security Research Group), która jest założycielem projektu Let's Encrypt i propaguje HTTPS oraz rozwój technologii zwiększających bezpieczeństwo Internetu, przedstawiła projekt Sudo-rs mający na celu stworzenie implementacji narzędzi sudo i su napisanych w Rust, które umożliwiają wykonywanie poleceń w imieniu innych użytkowników. W ramach licencji Apache 2.0 i MIT opublikowano już przedpremierową wersję Sudo-rs, która nie jest jeszcze gotowa do powszechnego użytku. Projekt, którego realizacja rozpoczęła się w grudniu 2022 roku, ma zakończyć się we wrześniu 2023 roku.

Obecnie prace koncentrują się na implementacji funkcji w Sudo-rs, które pozwolą na użycie go jako przezroczystego zamiennika sudo w typowych przypadkach użycia (domyślne konfiguracje sudoers w Ubuntu, Fedorze i Debianie). W przyszłości planowane jest utworzenie biblioteki umożliwiającej osadzenie funkcjonalności sudo w innych programach i zapewnienie alternatywnej metody konfiguracji, która pozwoli uniknąć analizowania składni pliku konfiguracyjnego sudoers. W oparciu o zaimplementowaną funkcjonalność sudo zostanie również przygotowany wariant narzędzia su. Dodatkowo w planach jest wsparcie dla SELinux, AppArmor, LDAP, narzędzi audytowych, możliwość uwierzytelniania bez użycia PAM oraz implementacja wszystkich opcji wiersza poleceń sudo.

Według Microsoft i Google około 70% luk jest spowodowanych przez niebezpieczne zarządzanie pamięcią. Używanie języka Rust do tworzenia su i sudo ma zmniejszyć ryzyko podatności spowodowanej niebezpieczną obsługą pamięci i wyeliminować błędy, takie jak dostęp do obszaru pamięci po jego zwolnieniu i przepełnienie bufora. Sudo-rs jest rozwijany przez inżynierów z Ferrous Systems i Tweede Golf przy wsparciu finansowym takich firm jak Google, Cisco, 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

Dodaj komentarz