Бесплатно Экспресс-аудит сайта:

18.09.2024

Неуязвимый код на «плюсах»: реальность или обман с Safe C++

Сообщество C++ представило предложение, направленное на повышение безопасности программирования на этом языке. Спустя 2 года обсуждений проблем с безопасностью памяти, разработчики представили проект Safe C++ Extensions , который должен помочь программистам писать более защищённый код.

Предложение включает новые функции, позволяющие предотвратить уязвимости, связанные с безопасностью памяти, такие как переполнение буфера ( Buffer Overflow ) и использование памяти после освобождения (Use-After-Free, UAF ). По словам Винни Фалко, президента C++ Alliance, это важный шаг для экосистемы языка, так как необходимость повышения безопасности программного кода никогда не была столь актуальной.

На протяжении последних 2-х лет различные организации, как в государственном, так и в частном секторе, настойчиво призывали к использованию языков с поддержкой безопасности памяти. В частности, внимание было сосредоточено на таких языках, как C#, Go, Java, Python и Swift, а также Rust, который известен своей производительностью и низкоуровневой системной программой.

Вопрос о безопасности памяти поднимался ещё в 2019 году инженером-программистом Алексом Гейнором, который отмечал, что большинство серьёзных уязвимостей в больших кодовых базах связано именно с проблемами безопасности памяти. Примером могут служить переполнения буфера и ошибки использования освобождённой памяти, которые часто приводят к сбоям в работе программ.

К 2022 году обсуждения на тему безопасности памяти стали занимать центральное место на технических конференциях и в академических работах. В сентябре того же года технический директор Microsoft Azure Марк Руссинович предложил отказаться от использования C и C++ в пользу Rust. А в 2023 году вопрос безопасности памяти был уже на слуху у широкой общественности, включая АНБ и другие организации.

Однако создатель языка C++ Бьёрн Страуструп заявил, что его язык может обеспечить полную безопасность типов и памяти, однако эти утверждения вызвали скепсис среди некоторых экспертов. Соучредитель Internet Security Research Group (ISRG) Джош Аас в 2023 году указал, что, несмотря на теоретическую возможность обеспечения безопасности, в реальной практике C++ не был создан для этого с самого начала.

Проект Safe C++ Extensions стал ответом на критику и требования госструктур АНБ, CISA и DARPA улучшить безопасность кода. Однако даже среди сторонников идеи есть сомнения в том, насколько реально сделать C++ таким же безопасным, как Rust или другие языки. Алекс Гейнор, например, выразил мнение, что полностью решить проблему безопасности памяти в C++ сложно, хотя некоторые улучшения возможны.

Разработчики Шон Бакстер (создатель компилятора Circle ) и Кристиан Мазакас из C++ Alliance признают, что Rust предоставляет строгие гарантии безопасности памяти, но переход на него может вызвать сложности. C++ и Rust сильно различаются по функционалу, что затрудняет взаимодействие этих языков и автоматизацию процесса миграции.

Проект Safe C++ предполагает использование новых инструментов для предотвращения наиболее распространённых уязвимостей. Бакстер пояснил, что в отличие от прежних подходов, Safe C++ не просто повторяет лучшие практики, а предлагает решения, такие как анализ на этапе компиляции для предотвращения ошибок использования освобождённой памяти и анализ инициализации для повышения безопасности типов.

Основная цель проекта — сделать безопасность памяти доступной, сохраняя при этом возможность работать с существующим кодом на C++. Разработчики могут постепенно внедрять новые функции безопасности, что делает проект более гибким и экономически выгодным по сравнению с полной перепиской программ на другом языке.

Для реализации Safe C++ потребуется дальнейшее участие сообщества разработчиков и промышленности, однако, по словам Бакстера, проект уже достиг важных успехов. В ближайшем будущем планируется подробный анализ всех функций C++ и их адаптация к новым стандартам безопасности.