Что такое новый безопасный C++ и что нужно знать программистам? (image 5)

Проблемы с безопасностью памяти становятся всё более актуальными для разработчиков. В 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++ пока остаётся целью на будущее, разработчики уже начинают двигаться в этом направлении.

Подпишись на ITZine в Дзен Новостях
Читай ITZine в Telegram
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии