США наконец-то объявили войну C и C++...
Крупнейшие агентства кибербезопасности США — CISA и NSA — выпустили совместный доклад, в котором призывают программистов переходить на так называемые memory-safe языки. Под этим термином понимаются технологии, изначально защищающие от критических сбоев при работе с памятью — одного из самых опасных и распространённых классов уязвимостей.
В документе подчёркивается, что ошибки, связанные с некорректным обращением к памяти, остаются одной из ключевых угроз как для рядовых пользователей, так и для критически важных информационных систем. Rust, Go, C#, Java, Swift, Python и JavaScript либо используют сборку мусора, либо выполняют статическую проверку распределения памяти ещё на этапе компиляции. Эти механизмы помогают существенно снизить вероятность возникновения уязвимостей.
Однако самые популярные системы — C и C++ — по умолчанию таких защитных механизмов не предоставляют. В теории разработчики могут минимизировать риски, применяя статический анализ кода и строго следуя стандартам безопасного программирования. Но на практике не все уделяют этому достаточно внимания.
Кроме того, даже если основная часть программы написана с соблюдением современных требований, использование библиотек на C или C++, подключённых через так называемый Foreign Function Interface (FFI), может свести защиту на нет. Подобные недочеты особенно опасны, поскольку затрагивают проекты, которые внешне кажутся полностью надёжными.
Масштабы проблемы подтверждают и крупнейшие ИТ-компании. По данным Google , в 2018 году 90% всех критических дефектов безопасности в Android были связаны с некорректным использованием памяти. В браузере Chromium, по информации за 2021 год, подобных уязвимостей зафиксировано свыше 70% . Именно к этой категории относился печально известный сбой Heartbleed в криптографической библиотеке OpenSSL, позволявший злоумышленникам получать доступ к данным за пределами выделенной области.
Даже относительно недавний сбой в облачной инфраструктуре Google Cloud , произошедший в июне этого года, оказался связан с классической проблемой — отсутствием проверки нулевых указателей. Такой дефект на практике приводит к сбоям или созданию точек входа для атак в системах, где контроль над хранилищем недостаточно строг.
Так что сейчас гиганты вполне оправданно всё активнее поддерживают внедрение безопасных языков. Уже в 2022 году Microsoft официально рекомендовала разрабатывать новые приложения на Rust или аналогичных технологиях . В 2023 году к этим инициативам подключились и государственные структуры. Глава CISA Джен Истерли публично заявила о необходимости перехода индустрии на более безопасные решения.
Хотя процесс адаптации идёт непросто. За последний год в сообществе разработчиков ядра Linux разгорелись споры вокруг интеграции Rust-драйверов. Сторонники C и C++ также предлагают альтернативы — появились проекты TrapC, FilC, Mini-C и Safe C++, направленные на повышение безопасности кода без отказа от привычных технологий. Одновременно Google совершенствует защиту памяти в C++ , стараясь не жертвовать производительностью.
Согласно новому докладу CISA и NSA, полный переход на безопасные языки требует времени, вложений и кадровых ресурсов. Особенно сложно это для организаций, чей код содержит большое количество устаревших компонентов или используется в критически важных инфраструктурах. Тем не менее, преимущества — от сокращения потенциальных уязвимостей до повышения общей надёжности ПО — делают подобные изменения неизбежными.
Примеры успешного применения таких подходов уже есть. Так, благодаря постепенному переходу Android на более безопасные языки , к 2024 году доля уязвимостей, связанных с памятью, снизилась до 24%.
Американские власти также продвигают собственные инициативы, ускоряющие процесс. Программа DARPA TRACTOR (Translating All C to Rust) должна создать автоматические инструменты для конвертации существующих проектов на C в Rust, минимизируя ручную работу. Исследователи Принстона, UC Berkeley и UC San Diego развивают проект Omniglot, который обеспечит безопасное взаимодействие Rust-кода со сторонними библиотеками через FFI.
CISA и NSA подчёркивают , что государство рассчитывает не только на собственные программы, но и на активность частных компаний. Среди предлагаемых мер — популяризация вакансий, где требуется опыт работы с безопасными языками программирования, чтобы увеличить число квалифицированных специалистов и ускорить внедрение новых стандартов.
По данным Google , переход с C++ на Rust позволил повысить продуктивность программистов в два раза, а Microsoft активно внедряет Rust в Windows и разрабатывает драйверы на его основе.
Спойлер: мы раскрываем их любимые трюки