Pull to refresh

Страуструп ответил на призыв Белого дома США переходить на языки с безопасностью памяти

Reading time4 min
Views69K
26 февраля 2024 года Белый дом США выпустил призыв переходить на языки программирования с безопасным доступом к памяти. Бьёрн Страуструп, создатель языка C++, в комментарии для издания InfoWorld ответил на критику его творения.

Часть программных ошибок связана с безопасностью доступа к оперативной памяти. Некоторые языки программирования осложняют введение багов, связанных с использованием памяти. Поскольку подобные баги часто являются уязвимостями, эти языки программирования даже считают в целом более безопасными.

Напротив, язык ассемблера и языки с низким уровнем абстракций по типу C и C++ поддерживают произвольную арифметику указателей с реальными адресами памяти без автоматической проверки границ, что допускает лёгкий «выстрел в ногу». Исторически сложилось, что на таких языках пишут низкоуровневые компоненты компьютерных систем: прошивки микроконтроллеров, операционные системы, критически важные и высоконагруженные приложения.

В индустрии программного обеспечения в последние годы наблюдается призыв уходить в сторону языков с безопасностью доступа к памяти. Наиболее заметный подобный проект Prossimo благотворительной организации Internet Security Research Group поддерживает портал memorysafety.org с блогом и помогает инициативам по введению языков с безопасным доступом к памяти в ключевые компоненты инфраструктуры Интернета. Такие языки не только появляются в ядре Linux и Firefox, на них пытаются переписать некоторые важные утилиты с нуля.

Типичный пример подобных усилий Prossimo выглядит так: команды разработчиков из Ferrous Systems и Tweede Golf при финансовой поддержке Amazon Web Services пытаются написать sudo-rs, аналог sudo и su на Rust. Кстати, недавно блог memorysafety.org поделился рассказом о том, как в sudo-rs избавляются от зависимостей sudo.

Усилия индустрии одобряют на всё более высоком уровне. В ноябре 2022 года перейти на языки с безопасностью доступа к памяти призвало Агентство национальной безопасности США. Совсем недавно, 26 февраля, похожее заявление сделал Офис национального директора по кибербезопасности Белого дома США.


Около 70 % уязвимостей, которые Microsoft добавляет в каталог CVE, связаны с памятью. Microsoft Security Response Center

Проблемы C++ известны. Часто цитируют статистику Google от 2020 года: в Chromium 70 % серьёзных багов безопасности связаны c памятью. Такое же число в 2019 году назвала Microsoft.

Сообщество языка тоже не обходит эту тему вниманием. Если заглянуть в архив выступлений CppCon, каждый год на конференции сразу в нескольких докладах говорят про безопасность. Например, в 2023 году было восемь различных докладов, в названии которых были слово «safe» или его производные: 1, 2, 3, 4, 5, 6, 7, 8. В первом и последнем случае из списка говорил о безопасности сам автор языка программирования C++ Бьёрн Страуструп.

Delivering Safe C++, Бьёрн Страуструп, CppCon 2023

Страуструп не оставил без внимания и заявления государственных органов США. После призыва АНБ 2022 года Бьёрн через месяц опубликовал двухстраничную статью. В ней он пожаловался, что C и C++ опять объединяют в одну категорию, полностью игнорируя более 30 лет развития. Страуструп напомнил, как он работал десятилетиями над тем, чтобы сделать язык безопаснее. Наконец, он поставил под сомнение само понимание безопасности: критики фокусируются на безопасности памяти, оставляя без внимания многие другие места, где можно проколоться.

Похожим образом Страуструп отреагировал на недавний призыв администрации президента США. На этот раз его слова передавало издание InfoWorld. В запросе на комментарий от 15 марта Страуструп ответил InfoWorld: «Я нахожу удивительным, что авторы этих государственных документов, похоже, не знают о сильных сторонах современного C++ и усилиях по обеспечению сильных гарантий безопасности. С другой стороны, они понимают, что язык программирования — это лишь одна часть набора инструментов, поэтому важно улучшать инструменты и процессы разработки».

В остальном аргументация Страструпа схожа с использованной ранее в ответе на призывы АНБ в 2022 году:

  • C++ — это не C. Бьёрн напомнил, что улучшение безопасности было задачей C++ с первого дня и на протяжении всей эволюции языка: «Просто попробуйте сравнить С эпохи Кернигана и Ритчи с самым ранним C++ и ранний C++ с современным C++».
  • C++ далеко продвинулся с 1979 года. «Эта эволюция кратко изложена в моём выступлении 2023 года на CppCon», — указал Страуструп. Он напомнил, что качественный код на С++ пишут с применением концепции RAII (Resource Acquisition Is Initialization, получение ресурса есть инициализация), контейнеров и умных указателей, а не, как выразился Бьёрн, «традиционной мешанины указателей C».
  • Понимание безопасности не всегда корректно. Как жалуется Страуструп, из миллиардов строчек кода на C++ лишь небольшая доля полностью следует современным рекомендациям безопасности, а сообщество по-разному оценивает, какие аспекты безопасности важны. Бьёрн говорит, что он и комитет стандартизации C++ пытаются с этим бороться.

Страуструп упоминает фреймворк Profiles, который призван улучшить гарантии, что относительно быстро устранит большинство ошибок диапазона и поможет ввести гарантии для проектов с большим объёмом кода через локальный статический анализ и минимальные проверки во время исполнения программы. Также автор C++ рекомендует заглянуть на страницу WG21 на сайте комитета и ознакомиться с документами.

Как утверждает Страуструп, в его долгосрочную цель для C++ входило обеспечить в языке безопасность типов и ресурсов в тех местах и в то время, где и когда это нужно. Возможно, что продвижение безопасности доступа к памяти — подмножество гарантий, которые продвигает Бьёрн — поможет его усилиям, уверен Страуструп.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 58: ↑57 and ↓1+56
Comments510

Other news