У Google есть Ржавчина приветствуетязык программирования, безопасный для памяти, как важный фактор в способности устранять уязвимости в своих Безопасное кодирование Инициатива.
Уязвимости доступа к памяти часто возникают в языках программирования, небезопасных для памяти. В 2019 году проблемы безопасности памяти составили 76% всех уязвимостей Android.
В ответ многие разработчики и технологические гиганты все чаще используют языки, безопасные для памяти, чтобы помочь им разрабатывать принципиально безопасное программное обеспечение и технологии.
Слабые места Ржавчина
В своем блоге Google представила моделирование перехода на безопасные для памяти языки путем постепенного использования безопасного для памяти кода в новых проектах и разработках в течение пятилетнего периода. Результаты показали, что, несмотря на постепенное увеличение количества кода, написанного на языках с небезопасной памятью, уязвимости безопасности памяти значительно снизились.
По мнению Google, это связано с тем, что количество уязвимостей сокращается в геометрической прогрессии. Новый код, написанный на языках с небезопасной памятью, часто содержит ошибки и уязвимости, но по мере проверки и обновления кода уязвимости постепенно удаляются, что со временем делает код более безопасным. Итак, основным источником уязвимостей является новый код, и если при запуске новых проектов и разработок в приоритете будет использование языков программирования, безопасных для памяти, количество уязвимостей существенно снижается.
По мере перехода Google на языки программирования, безопасные для памяти, количество уязвимостей, связанных с памятью, значительно сократилось. В 2024 году доля уязвимостей, безопасных для памяти, составила всего 24%. Это резко контрастирует с 2019 годом и значительно ниже среднего показателя по отрасли (70%).
Однако использование языков, безопасных для памяти, не является панацеей, и Google признает, что «оглядываясь назад, становится ясно, что мы еще не нашли по-настоящему масштабируемого и устойчивого решения, отвечающего приемлемому уровню риска».
Стратегии борьбы с уязвимостями памяти начались с реактивного исправления, при котором поставщики программного обеспечения отдавали приоритет уязвимостям памяти, что позволяло быстрее использовать другие проблемы.
Второй подход заключался в упреждающем снижении риска. При этом разработчикам было предложено включить меры по снижению рисков, такие как канарейки стека и целостность потока управления, но за счет скорости выполнения, времени автономной работы, задержек и потребления памяти. Разработчики также не смогли справиться с возможностями злоумышленников использовать уязвимости новыми и творческими способами.
В-третьих, это превентивное обнаружение уязвимостей, направленное на выявление уязвимостей посредством «фаззинга», который предполагает поиск уязвимостей на основе симптомов небезопасного хранилища. Однако, как отмечает Google, эти инструменты неэффективны и требуют много времени для использования командами и часто не обнаруживают все уязвимости даже после нескольких запусков.
Таким образом, четвертая тактика Google заключается в обеспечении высоконадежного предотвращения и фундаментально безопасной разработки. Используя такие языки программирования, как Rust, разработчики знают и понимают свойства кода, который они пишут, и могут использовать эти свойства для выявления уязвимостей. Это снижает затраты разработчиков за счет сокращения, в первую очередь, количества уязвимостей, в том числе уязвимостей, не связанных с проблемами безопасности памяти. Такое совокупное снижение затрат также дает дополнительное преимущество, повышая продуктивность разработчиков.
«Идея проста: — говорится в блоге Google, — когда мы перекрываем доступ к новым уязвимостям, они уменьшаются в геометрической прогрессии, делая весь наш код более безопасным, повышая эффективность проектирования безопасности и уменьшая существующие проблемы масштабируемости». с существующими стратегиями безопасности памяти связанные проблемы должны быть смягчены, чтобы их можно было использовать более эффективно и целенаправленно».