2.12.20224 min
Maciej Olanicki

Maciej OlanickiRedakcja Bulldogjob

Rust działa. Następca C i C++ szturmem bierze Androida

Google podzieliło się statystykami w zakresie wpływu użycia nowych języków programowania na bezpieczeństwo swojego mobilnego systemu. Robią wrażenie.

Rust działa. Następca C i C++ szturmem bierze Androida

Wiele, nawet bardzo wiele, mówi się o tym, że należy popularyzować nowe języki w programowaniu systemowym. Mowa przede wszystkim o zastępowaniu C i C++ Rustem w celu zwiększenia bezpieczeństwa aplikacji, bo to właśnie mechanizmy obsługi pamięci w C i C++ mają stać za lwią częścią podatności odnajdywanych dziś w oprogramowaniu.


Bezpieczeństwo Rusta w teorii

W ostatnim czasie z ust CTO Microsoft Azure, Marka Russinovicha padł nawet postulat, by w nowych projektach całkowicie porzucić C i C++ i jak najszybciej zawiązać ponadkorporacyjną, ogólnobranżową deklarację, że odtąd nowe projekty systemowe wszyscy najwięksi gracze będą pisać wyłącznie w Ruście. Oczywiście trudno uznać, aby w najbliższym czasie wezwania do takich inicjatyw traktowano szczególnie serio, niemniej takich głosów jest więcej

W Microsofcie entuzjazm i podobne wnioski nie są zresztą zbyt nowym i są słyszane nagminnie. Zaczęło się to, gdy Microsoft Security Response Centre ujawniło, że w ciągu ostatnich 12 lat 70% wszystkich podatności w oprogramowaniu z Redmond było podatnościami związanymi z pamięcią, a te wynikały ze specyfiki zarządzania nią w językach C i C++. Microsoft nie kieruje się wolą bycia bardziej innowacyjnym producentem oprogramowania, choć w pewnym stopniu także. Dla korporacji łatanie luk i zmaganie się z kryzysami wynikającymi z ich odnajdywania to ogromne koszty. Rust to zatem droga do oszczędności.

Wielokrotnie donosiliśmy także, że z optymizmem na Rusta spogląda zespół rozwijający jądro Linux. W efekcie końcu po wielu miesiącach zakończyły się już wysiłki nad dopracowaniem implementacji Rusta w Linuksie i wstępna wersja trafiła już w gałęzi mainline, a w stabilnej wersji kernela pojawi się jeszcze w tym roku, w wydaniu 6.1. To oczywiście zaledwie początek drogi – konieczne jest zbudowanie całej infrastruktury narzędzi, dzięki którym w stabilnym Linuksie pojawią się pełnoprawne sterowniki napisane w Ruście. Wiemy już jednak na pewno, że prędzej czy później do tego dojdzie.


Memory-safety w praktyce

Dotąd jednak dysponowaliśmy głównie zapewnieniami, że języki memory-safe, jak Rust, rzeczywiście mogą coś zmienić w bezpieczeństwie oprogramowania i w gruncie rzeczy w tym, jak się programuje. Oczywiście poparte były one licznymi wewnętrznymi testami, wiadomo choćby, że wewnętrznie Microsoft śmiało eksperymentuje z Rustem w przepisywaniu na niego komponentów Windowsa, choć rezultatów na razie nie mieliśmy okazji uświadczyć nawet w wersjach testowych Windowsa czy też Office’a.

W rezultacie brakowało praktycznych, dostępnych już dla każdego do zweryfikowania przykładów, że zastosowanie języków wykorzystujących bezpieczny dostęp do pamięci faktycznie przekłada się na bezpieczeństwo dużych programów, np. systemów operacyjnych. To się właśnie zmieniło. Jeffrey Vander Stoep z departamentu bezpieczeństwa Google poinformował bowiem, że liczba podatności w Androidzie spadła od 2019 roku z 223 do 85. I ma to być zasługa właśnie nowych języków programowania: Rusta i Kotlina, które systematycznie wypierają C/C++ oraz Javę.


Bezpieczeństwo Androida


Trzeba przyznać, że statystyki opublikowane przez Google napawają optymizmem. Głównie za sprawą nowej wersji systemu, Androida 13, które to jest pierwszym wydaniem, w którym większość nowego kodu została napisana w językach zapewniających bezpieczny dostęp do pamięci, 2022 rok jest pierwszym w historii systemu, w którym podatności związane z pamięcią nie stanowią większości wszystkich podatności odnalezionych w ogóle w Androidzie. 

Choć Jeffrey Vander Stoep słusznie zauważa, że korelacja nie oznacza przyczynowości, to jednak dane to odpowiadają dokładnie prognozom Google sprzed dwóch lat, gdy rozpoczęto pisać nowe komponenty w Ruście. Do świetnych statystyk przyczyniły się także zabiegi, by utwardzić androidową implementację C i C++. Wdrożono między innymi utwardzony alokator pamięci Scudo oraz narzędzia służące detekcji błędów pamięci HWAddressSanitizer czy KFENCE. To oczywiście także przełożyło się na wzrost bezpieczeństwa, jednak pierwsze skrzypce ma w tym procesie grać Rust.

Co zaś najważniejsze, jak dotąd liczba podatności odnalezionych w androidowym kodzie napisanym w Ruście wynosi okrągłe zero.


Rust w AOSP

Od Androida 12 także developerzy mogą w ramach Android Open Source Project korzystać z Rusta jako zamiennik dla C i C++. Przy okazji publikacji danych o bezpieczeństwie, Google poinformowało także o zainteresowaniu tym językiem już stricte wśród współtwórców AOSP . Widoczna jest pewna tendencja, która nie stanowi zresztą większego zaskoczenia. Jeśli developerzy wybierają Rusta, to w celu pisania nowego kodu, niechętnie przepisują natomiast na niego kod z C i C++. 


Rust w Androidzie


W tej chwili już 1,5 mln linijek kodu w Androidzie zostało napisanych w Ruście. Napisanow  nim między innymi drugą odsłonę KeyStore’a, implementację standardu pozwalającego na obsługę połączeń z DNS-ami z użyciem HTTP3 czy framework służący do wirtualizacji na Androidzie,  Biorąc pod uwagę, jaki znaczący i potwierdzony już wynikami wpływ ma to na bezpieczeństwo systemu, pozostaje się tylko cieszyć. Zachęcamy do lektury całego wpisu opublikowanego na Google Security Blog.

<p>Loading...</p>