Firma Google podsumowała inicjatywę wdrożenia metod bezpiecznego programowania (Safe Coding) w Androidzie, takich jak użycie języków programowania zapewniających bezpieczne zarządzanie pamięcią, zastosowanie analizatorów statycznych oraz projektowanie API z myślą o bezpieczeństwie. Zmiany te pozwoliły na obniżenie udziału powiązanych z pamięcią luk w Androidzie z 76% w 2019 roku do 24% w 2024 roku, co jest znacznie poniżej średniego wskaźnika w branży wynoszącego 70%.
Inżynierowie Google doszli również do wniosku, że głównym źródłem problemów z bezpieczeństwem jest nowy kod, dlatego należy skupić się na modernizacji metod tworzenia nowego kodu. Istniejący kod z czasem staje się bardziej sprawdzony i bezpieczny (obserwowana jest wykładnicza zależność bezpieczeństwa od czasu), co sprawia, że inwestycje w projekty dotyczące przepisywania istniejącego kodu nie są tak opłacalne. Na przykład, 5-letni kod ma średnio 3,4 razy niższą gęstość luk niż nowy kod. W projektach Android i Chromium dzięki zastosowaniu metod bezpiecznego zarządzania pamięcią różnica ta wynosi 7,4 razy.

W ten sposób, jeżeli uda się zapobiec pojawianiu się błędów związanych z pamięcią w nowym kodzie, z czasem w starym kodzie podobne błędy będą wykrywane coraz rzadziej. W ogólnym ujęciu Google zaleca nie przepisywanie starego kodu, lecz skoncentrowanie się na pisaniu nowego kodu w językach zapewniających bezpieczne zarządzanie pamięcią oraz zapewnienie przenośności między nowym a starym kodem.
Oprócz zmniejszenia liczby luk, stosowanie bezpiecznych metod programowania zwiększa wydajność rozwoju, pozwala osiągnąć wyższą jakość kodu i ma pozytywny wpływ na wydajność. Na przykład, przepisanie w Chromium kodu do generowania kodów QR w języku Rust pozwoliło na zwiększenie jego wydajności o 95% poprzez eliminację narzutów związanych z koniecznością stosowania dodatkowej izolacji sandbox.
Szybkość i jakość rozwoju wzrasta dzięki uproszczeniu testowania oraz przesunięciu wykrywania błędów na wczesne etapy rozwoju, na których błędy stają się widoczne jeszcze przed rozpoczęciem przez programistę przeglądu kodu. Na przykład, liczba wycofań zmian w przypadku kodu napisanego w Rust jest dwa razy niższa niż w przypadku kodu w C++.
Ogólnie rzecz biorąc, stosowanie bezpiecznych metod programowania prezentowane jest jako najbardziej efektywna dzisiaj paradygma rozwoju, która zastąpiła wcześniejsze trzy podejścia:
- Poprawa luk po ich wykryciu. Kosztowne, wymaga częstego wydawania aktualizacji oraz ich szybkiego dostarczania do użytkowników.
- Proaktywna ochrona, skoncentrowana na zastosowaniu technik, które utrudniają wykorzystanie luk. Kosztem takiej ochrony była obniżona wydajność i ciągła gra w kotka i myszkę z atakującymi.
- Wczesne wykrywanie luk za pomocą testów fuzzingowych i narzędzi podobnych do AddressSanitizer oraz MemorySanitizer. Metoda ta jedynie usuwała objawy, a nie przyczynę choroby i wymagała nieustannej pracy.


Źródło: opennet.ru
