Что такое новый безопасный C++ и что нужно знать программистам?
Проблемы с безопасностью памяти становятся всё более актуальными для разработчиков. В 2020 году Google сообщила, что более 70% серьёзных ошибок безопасности в браузере Chrome были вызваны проблемами с безопасностью памяти.
«Эти ошибки,» пояснила команда Chrome, «возникают из-за ошибок с указателями в языках C или C++, которые приводят к неправильной интерпретации памяти.»
В 2022 году к обсуждению подключилась и NSA, где технический директор по кибербезопасности Нил Зиринг отметил:
«Проблемы с управлением памятью эксплуатируются уже десятилетиями и остаются слишком распространёнными и сегодня. Необходимо использовать безопасные языки программирования и другие меры защиты, чтобы предотвратить эти уязвимости.»
Содержание
Зачем нужна безопасность памяти?
Вопросы безопасности памяти стали важной темой для обсуждения на самом высоком уровне. В феврале этого года Офис Национального директора по кибербезопасности США (ONCD) опубликовал отчёт, рекомендующий всем разработчикам переходить на языки программирования с безопасностью памяти. В отчёте подчёркивается, что нагрузка по защите от киберугроз сегодня лежит на конечных пользователях, и необходимо прокативно устранять целые категории уязвимостей в ПО.
Документ также упоминает, что эксперты выделили несколько языков программирования, которые не обеспечивают безопасность памяти, но широко используются в критически важных системах, например, C и C++.
Вопросы безопасности памяти стали особенно актуальными из-за роста цифровых технологий. Пандемия ускорила внедрение e-commerce, онлайн-платежей и цифровой рекламы, что привело к увеличению потенциальных уязвимостей. Stack Overflow отмечает, что многие из крупнейших инцидентов с безопасностью в прошлом были связаны именно с проблемами безопасности памяти.
К числу таких случаев относятся:
- Heartbleed (2014) — уязвимость в OpenSSL, позволявшая злоумышленникам красть X.509 сертификаты, пароли, сообщения и другие данные.
- WannaCry (2017) — атака с использованием программ-вымогателей, поразившая более 230 000 компьютеров по всему миру.
Переход C++ к безопасному будущему
Существуют языки с встроенной безопасностью памяти, такие как Rust, Go, Java, Swift и Python, но C++ остаётся под особым контролем из-за огромного объёма критически важного кода, написанного на нём.
Понимая сложившуюся ситуацию, сообщество C++ представило в сентябре этого года проект под названием Safe C++ Extensions. Эту инициативу поддерживает C++ Alliance, президент и исполнительный директор которого Винни Фалько назвал проект «революционным предложением, добавляющим функции безопасности памяти в язык программирования C++.»
«Потребность в безопасном коде никогда не была столь острой,» добавляет Фалько. «С ростом важности безопасности и надёжности ПО разработчики сталкиваются с необходимостью внедрять более безопасные методы кодирования. Safe C++ Extensions направлен на предотвращение типичных ошибок, связанных с памятью.»
Исправит ли это проблему?
Скептики не убеждены, что новые дополнения решат проблему раз и навсегда. Шон Бакстер, разработчик из C++ Alliance, отмечает:
«Единственный популярный системный язык без сборщика мусора, который обеспечивает строгую безопасность памяти, — это Rust. Хотя C++ и Rust имеют схожие области применения, у них разные архитектуры, и ограниченные возможности взаимодействия затрудняют постепенную миграцию с C++ на Rust.»
Safe C++ Extensions предлагает ряд мер для обеспечения производительности, включая запрет на создание операций, которые могут привести к ошибкам в управлении временем жизни объектов, безопасности типов и потокобезопасности. Однако внедрение этих принципов требует значительных усилий и времени.
Поддержка искусственного интеллекта для перехода на безопасные языки
Для упрощения миграции DARPA разрабатывает инструмент на базе искусственного интеллекта под названием TRACTOR (Translating All C TO Rust), который предназначен для автоматического перевода кода на Rust.
Цель проекта заключается в том, чтобы сгенерированный код соответствовал стилю и качеству, которого мог бы достичь опытный разработчик на Rust. Это поможет устранить класс уязвимостей, связанных с безопасностью памяти, присутствующих в C-программах.
Будущее C++: на пути к большей безопасности
Safe C++ Extensions — это важный шаг в сторону повышения безопасности одного из самых популярных языков программирования. Но путь к полному устранению уязвимостей будет долгим и трудоёмким. Тем не менее, такие проекты, как TRACTOR, предлагают инструменты для более плавного перехода к безопасному программированию, и даже если полная безопасность C++ пока остаётся целью на будущее, разработчики уже начинают двигаться в этом направлении.