vak: (U.S.A.)
[personal profile] vak

Разработчиков ПО призывают прекратить использование C/C++ к 2026 году

(Меган Крауз, 4 ноября 2024г)

Агентство по кибербезопасности и защите инфраструктуры США (CISA) и Федеральное бюро расследований (FBI) утверждают, что C, C++ и другие языки программирования с небезопасной работой с памятью способствуют возникновению потенциальных уязвимостей.

Федеральное правительство призывает производителей программного обеспечения отказаться от C/C++ и предпринять другие шаги, которые могут "снизить риски для клиентов", говорится в отчёте "Product Security Best Practices". В частности, CISA и ФБР установили срок до 1 января 2026 года для соблюдения рекомендаций по безопасности памяти.

В отчёте изложены именно рекомендации и руководящие принципы, а не обязательные требования, в первую очередь для производителей программного обеспечения, работающих с критически важной инфраструктурой или национально значимыми функциями. Агентства отдельно выделили локальное программное обеспечение, облачные сервисы и программное обеспечение как услугу (SaaS).

Хотя прямо не говорится, что использование "небезопасных" языков может лишить производителей возможности работать по государственным контрактам, и сам отчёт носит "необязывающий" характер, посыл предельно ясен: такие практики считаются неприемлемыми для любой деятельности, относящейся к национальной безопасности.

"Следуя рекомендациям данного руководства, производители подают клиентам сигнал о том, что они берут на себя ответственность за результаты в области безопасности, что является ключевым принципом подхода Secure by Design", — говорится в отчёте.

Языки программирования с небезопасной работой с памятью создают потенциальные уязвимости

В отчёте языки с небезопасной работой с памятью описываются как "опасные и существенно повышающие риски для национальной безопасности". Разработка на таких языках упоминается первой в списке нежелательных практик.

Вопрос безопасности памяти обсуждается как минимум с 2019 года. Языки вроде C и C++ "предоставляют большую свободу и гибкость в управлении памятью, при этом в значительной степени полагаясь на программиста в выполнении необходимых проверок обращений к памяти", отмечалось в отчёте Агентства национальной безопасности США (NSA) за 2023 год, посвящённом безопасности памяти. Однако в нём также подчёркивалось, что этим языкам не хватает встроенных механизмов защиты памяти, которые могли бы предотвращать ошибки управления памятью. Злоумышленники могут эксплуатировать такие проблемы, возникающие в этих языках.

Что производители программного обеспечения должны сделать к январю 2026 года

К 1 января 2026 года производители должны иметь:
  • "Дорожную карту по безопасности памяти" для существующих продуктов, написанных на языках с небезопасной работой с памятью. Она "должна описывать приоритетный подход производителя к устранению уязвимостей безопасности памяти в ключевых компонентах кода".
  • Демонстрацию того, как эта дорожная карта позволит сократить количество уязвимостей, связанных с безопасностью памяти.
  • Подтверждение “разумных усилий” по следованию данной дорожной карте.
  • Либо, в качестве альтернативы, использование языка с безопасной моделью работы с памятью.
К языкам с безопасной работой с памятью, одобренным NSA, относятся:
  • Python
  • Java
  • C#
  • Go
  • Delphi / Object Pascal
  • Swift
  • Ruby
  • Rust
  • Ada

Другие плохие практики: от слабых паролей до отсутствия раскрытия уязвимостей

К другим практикам, которые CISA и ФБР обозначили как "исключительно рискованные", относятся:
  • Прямое использование пользовательского ввода в необработанном содержимом строки SQL-запроса.
  • Прямое использование пользовательского ввода в необработанном содержимом строки команды операционной системы.
  • Использование паролей по умолчанию. Вместо этого производители должны обеспечивать:
    • случайные, уникальные для каждого экземпляра начальные пароли;
    • обязательное создание новых паролей пользователем в начале процесса установки;
    • необходимость физического доступа для первичной настройки;
    • отказ от паролей по умолчанию в уже развернутых системах.
  • Выпуск продукта, содержащего уязвимость из каталога CISA Known Exploited Vulnerabilities (KEV).
  • Использование программного обеспечения с открытым исходным кодом, в котором известны эксплуатируемые уязвимости.
  • Отсутствие многофакторной аутентификации.
  • Отсутствие возможности собирать доказательства вторжения в случае атаки.
  • Несвоевременная публикация CVE, включая указание Common Weakness Enumeration (CWE) — типа уязвимости, лежащей в основе CVE.
  • Отсутствие политики раскрытия уязвимостей.
Полный отчёт также содержит рекомендуемые дальнейшие шаги, которые организации могут использовать для соблюдения руководящих принципов, предложенных ведомствами.

Date: 2026-01-22 07:39 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
При нонешней администрации это наверное устарело, и в моде снова традиционные ценности, в т.ч. C/C++.

Date: 2026-01-22 07:52 (UTC)
itsi: (Default)
From: [personal profile] itsi
Откопают Дельфи!

Date: 2026-01-22 08:35 (UTC)
madef: (Default)
From: [personal profile] madef
Тогда за использование Ассемблера надо заводить уголовное дело. Там вообще всё делается под личную ответственность разработчика.

Date: 2026-01-22 08:47 (UTC)
lxe: (Default)
From: [personal profile] lxe
Несвоевременная публикация CVE

Предыдущая администрация вообще известна чувствительностью к несвоевременным публикациям.

Date: 2026-01-22 09:47 (UTC)
toprunner: (Default)
From: [personal profile] toprunner

Нельзя давать такую опасну вещь как С в руки кому попало. Продавать только в оружейньіх магазинах по лицензии.

Date: 2026-01-22 09:50 (UTC)
dimorlus: (Default)
From: [personal profile] dimorlus
А чем принципиально работа с памятью в Delphi (OP) отличается от C++? На сколько я помню Паскаль, там все примерно тоже самое было, Паскаль даже большие вольности позволял.

Date: 2026-01-22 10:50 (UTC)
norian: (Default)
From: [personal profile] norian
эти сраные двуногие обезьяны вообще не разбираюцца в колбасных обрезках

в их списке половина интерпретаторов, которые вообще про другое плюс те же бейцы только в профиль - системные вызовы для работы с памятью и освобождение лапгами (в паскале совсем в профиль, в аде надо унаследовацца от деаллокатора, в особо извращенной скрытой форме)

то что в крестах с памятью надо аккуратно, это да, хде взял там и положь

Date: 2026-01-22 13:47 (UTC)
ufm: (Default)
From: [personal profile] ufm
Я примерно лет 20 назад пришёл к выводу, что лушая защита от багов в софте - введение уголовной ответственности для программистов за их софт. Взломали что-то через твой софт? Значит сядешь. Вот прям по уровню CVE, какой уровень - на столько и сядешь.

Date: 2026-01-22 14:31 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
А, так уже! Ну хорошо; слава те господи, может быть, и поможет.

Date: 2026-01-22 16:33 (UTC)
straktor: benders (Default)
From: [personal profile] straktor
В паскале динамическая аллокация чувствительна к типу и касты пойнтеров делать не надо. Но да, возможность есть.

Date: 2026-01-22 16:39 (UTC)
straktor: benders (Default)
From: [personal profile] straktor
Ну и никто ничего писать не будет. Как минимум оперсорс.

Во-вторых, есть идея интеграции и ответственность кода непонятна.

Например две строчки кода, ввод числа, вторая извлечение квадратного корня. Ввожу -1, падает, кто виноват? Библиотека ввода или математики? Интегратор? Ну, он напишет юзеру, что сам он интегрировать не будет, а юзеру надо набрать самому первое, потом второе.

Идея дурацкая, на уровне запрещения ножей.
alextr98: (Default)
From: [personal profile] alextr98
Так-то они и Линукс запретят!
То есть попросят(заставят) переписать его.
На Го, например.

Date: 2026-01-22 19:00 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Да-да, сейчас все бросят и прекратят.

Вспомнился анекдот "жаль, а то у меня ещё много идей".
alextr98: (Default)
From: [personal profile] alextr98
Дадут заднюю, как Трамп в Давосе?
spamsink: (Default)
From: [personal profile] spamsink
Зачем же громко давать заднюю? Если никаких более свежих новостей не слышно, значит, поступили по принципу "квакнули, и в тинку".

Date: 2026-01-22 20:08 (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
If you program in C++: Merry Christmas!
If you program in Rust: Happy holidays!

Date: 2026-01-22 21:48 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Хорошо, что C++ перестал быть модным.
Среднее качество кода на нём возрастёт

Date: 2026-01-22 23:48 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
Так одно другому не мешает. Я сейчас смеюсь с роликов с CppCon, у которых в названии "back to the basics". Фундамент гнилой же, и постоянно приходится к нему возвращаться.

Date: 2026-01-22 23:51 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
Я, кстати, не припомню что бы там у них в Delphi помогало избежать проблем с памятью, как в C++.

Date: 2026-01-23 00:13 (UTC)
b0p0h0k: (OSDispak)
From: [personal profile] b0p0h0k
Отбрасывая из списка интерпретаторы,Delphi и Rust (don't ask), остаёмся с Ada.
Нуачё? Мы так и делаем.

Date: 2026-01-23 04:47 (UTC)
b0p0h0k: (OSDispak)
From: [personal profile] b0p0h0k
Для embedded?
У нас, например, динамической памяти не бывает.
Ada/Spark даёт нам formal verification - требование заказчиков.

Date: 2026-01-23 07:15 (UTC)
itsi: (Default)
From: [personal profile] itsi
Ну, тут я уже не подскажу ибо на дельфях погроммировал лет 25 назад в последний раз, равно как и интересовался ими.

Date: 2026-01-23 08:10 (UTC)
b0p0h0k: (OSDispak)
From: [personal profile] b0p0h0k
Да ну прям специфика. Львиная доля всего embedded - это real-time при серьёзном ограничении на объём памяти данных, а это обычно сразу исключает динамическую память.
Был у меня опыт, когда в одном проекте некую flash file system надо было читать-писать. Решено было для этого взять готовую библиотеку, требовавшую malloc()/free(). Ну, пришлось писать махонький malloc() из pre-allocated heap. Привело это к тому, что уже когда начались поставки, пришлось раз или два увеличивать размер этого heap-а. Прикинь, в каком-нибудь условном гугле FW field upgrade десятков тысяч нодов.
Так что нафик-нафик.
И я не понимаю, зачем нам этот Раст, когда у нас на Аде всё очень гладко идёт. Что он нам даст, чего у нас нет?

Date: 2026-01-23 13:38 (UTC)
From: [personal profile] dedekha
А они нормализировали по количеству кода написанного на каждом языке? А есть данные по с++ отдельно от с?