Главная | IT | Методы безопасной работы с памятью позволили существенно снизить число уязвимостей в Android

Методы безопасной работы с памятью позволили существенно снизить число уязвимостей в Android

Компания Google подвела итоги инициативы по внедрению в Android методов безопасной разработки (Safe Coding), таких как использование языков программирования, обеспечивающих безопасную работу с памятью, применение статических анализаторов и проектирование API с оглядкой на безопасность. Изменения позволили снизить долю связанных с памятью уязвимостей в Android c 76% в 2019 году до 24% в 2024 году, что значительно ниже среднего показателя по индустрии – 70%.

Инженеры Google также сделали вывод, что основным источником проблем с безопасностью является новый код и поэтому внимание следует сосредоточить на модернизации методов разработки нового кода. Уже существующий код со временем становится более проверенным и безопасным (наблюдается экспоненциальная зависимость безопасности от времени), что делает не столь выгодными вложения в проекты по переписыванию существующего кода. Например, 5-летний код в среднем имеет в 3.4 раза меньшую плотность уязвимостей, чем новый код. Для проектов Android и Chromium благодаря внедрению методов безопасной работы с памятью разница составляет 7.4 раза.

Таким образом, если предотвратить появление ошибок при работе с памятью в новом коде, со временем в старом коде подобные ошибки будут выявляться всё реже и реже. В общем виде Google рекомендует не переписывать старый код, а сосредоточиться на написании нового кода на языках безопасно работающих с памятью и обеспечении переносимости между новым и старым кодом.

Помимо снижения числа уязвимостей использование безопасных методов программирования повышает производительность разработки, позволяет добиться более высокого качества кода и положительно сказывается на производительности. Например, переписывание в Chromium кода для генерации QR-кодов на языке Rust позволило добиться повышения его производительности на 95% за счёт избавления от накладных расходов, вызванный необходимостью применения дополнительной sandbox-изоляции.

Скорость и качество разработки увеличивается за счёт упрощения тестирования и смещения выявления ошибок на ранние стадии разработки, на которых ошибки становятся заметны ещё до того, как разработчик приступает к проверке кода. В качестве примера приводятся показатели отката изменений – для кода на Rust число откатов изменений в результате выявления непредвиденных ошибок в два раза ниже чем для кода на C++.

В общем виде применение безопасных методов программирования преподносится как наиболее эффективная на сегодняшний день парадигма разработки, пришедшая на смену применявшимся ранее трём подходам:

  • Исправление уязвимостей после их обнаружения. Затратно, требует частого выпуска обновлений и их оперативного доведения до пользователей.
  • Упреждающая защита, сосредоточенная на применении техник, усложняющих эксплуатацию уязвимостей. Ценой подобной защиты было снижение производительности и постоянная игра в кошки-мышки с атакующими.
  • Раннее выявление узявимостей через использование fuzzing-тестирования и инструментов, подобных AddressSanitizer и MemorySanitizer. Метод лишь устранял симптомы, а не причину болезни, и требовал постоянной работы.

Источник