Компанията Google подложи на оценка инициативата за внедряване на методи за безопасно разработване в Android (Safe Coding), като използването на програмни езици, които осигуряват безопасна работа с паметта, прилагането на статични анализатори и проектирането на API с насоченост към безопасността. Промените позволиха да се намали делът на уязвимостите, свързани с паметта, в Android от 76 % през 2019 г. до 24 % през 2024 г., което е значително по-ниско от средната стойност в индустрията — 70 %.
Инженерите на Google също направиха извода, че основният източник на проблеми с безопасността е новият код, поради което вниманието трябва да бъде концентрано върху модернизацията на методите за разработка на нов код. Съществуващият код с времето става по-надежден и безопасен (наблюдава се експоненциална зависимост на безопасността от времето), което прави инвестициите в проекти за пренаписване на съществуващия код по-малко рентабилни. Например, 5-годишен код в средно е с 3.4 пъти по-ниска плътност на уязвимости в сравнение с новия код. За проектите Android и Chromium благодарение на внедряването на методи за безопасна работа с паметта разликата е 7.4 пъти.

Така че, ако предотвратим възникването на грешки при работа с паметта в новия код, с времето в стария код подобни грешки ще бъдат откривани все по-рядко. Общото становище на Google е, че не трябва да се пренаписва стария код, а да се концентрираме върху написването на нов код на езици, които безопасно работят с паметта, и да се осигури преносимост между новия и стария код.
Освен намаляване на броя на уязвимостите, използването на безопасни методи на програмиране повишава производителността на разработката, позволява постигане на по-високо качество на кода и оказва положително влияние върху производителността. Например, пренаписването на кода за генериране на QR-кодове в Chromium на езика Rust позволи да се постигне увеличение на производителността с 95 % благодарение на премахването на разходите, произтичащи от необходимостта да се прилага допълнителна sandbox-изолация.
Скоростта и качеството на разработката се увеличават благодарение на опростяването на тестването и преместването на откритията на грешки в ранните етапи на разработката, когато грешките стават видими още преди разработчикът да е започнал проверка на кода. За пример се дават показателите за връщане на промени — за кода на Rust броят на връщанията на промени поради откритие на непредвидени грешки е два пъти по-нисък в сравнение с кода на C++.
В общ план приложението на безопасни методи за програмиране се представя като най-ефективната в момента парадигма за разработка, заменяща предишните три подхода:
- Коригиране на уязвимости след тяхното откритие. Разходно, изисква често пускане на актуализации и тяхното бързо предоставяне на потребителите.
- Превантивна защита, фокусирана върху прилагането на техники, които усложняват експлоатацията на уязвимости. Цената на подобна защита беше намаляване на производителността и постоянна игра на котки и мишки с атакуващите.
- Ранно откритие на уязвимости чрез използване на fuzzing тестове и инструменти, подобни на AddressSanitizer и MemorySanitizer. Методът само отстраняваше симптомите, а не причината за проблема, и изискваше постоянна работа.


Източник: opennet.ru
