Офис национального директора по кибербезопасности (ONCD) Белого дома США призвал разработчиков отказаться от использования языков программирования C и C++ в разработке критически важного ПО. Этот совет основывается на опасениях, связанных с безопасностью управления памятью — аспекте, который играет критическую роль в предотвращении уязвимости, таких как переполнение буфера и висячие указатели.
Неправильное управление памятью в программном коде может привести к серьезным уязвимости, позволяя злоумышленникам совершать кибератаки. Языки программирования, такие как Java благодаря своим механизмам обнаружения ошибок во время выполнения, считаются безопасными для управления памятью. В отличие от них, C и C++ позволяют разработчикам выполнять операции с указателями и обращаться к адресам в памяти компьютера. Это включает в себя чтение и запись данных в любом месте памяти, к которому они могут получить доступ через указатель.
Однако эти языки не проводят автоматическую проверку на то, выходят ли эти операции за пределы выделенного для данных или структур пространства в памяти. Такая проверка называется проверкой границ. Отсутствие такой проверки означает, что программист может случайно или намеренно записать данные за пределы выделенного блока памяти, что может привести к перезаписи других данных, испорченных данных или, в худшем случае, к уязвимости безопасности, которые могут использовать злоумышленники для выполнения вредоносного кода или получение контроля за системой.
Отчет ONCD подчеркивает, что около 70% всех уязвимостей в системе безопасности, обнаруженных инженерами Microsoft в 2019 году и Google в 2020 году, были связаны именно с нарушениями безопасности памяти. Эта статистика ясно показывает необходимость переосмысления подходов к разработке программного обеспечения в контексте сегодняшней стратегии кибербезопасности США.
В отчете не только указывается на проблемы с C и C++, но предлагается ряд альтернатив — языков программирования, признанных «безопасными для памяти». Среди рекомендованных Агентством национальной безопасности (NSA) языков находятся: Rust, Go, C#, Java, Swift, JavaScript и Ruby. Эти языки включают механизмы, предотвращающие распространенные типы атак на память, тем самым повышая безопасность разрабатываемых систем.
Анализ популярности языков программирования по версии индекса TIOBE показывает, что из предложенных языков NSA C# занимает пятое место по популярности, Java – четвертое, JavaScript – шестое, а Go – восьмое. Эти данные указывают на то, что часть рекомендованных языков уже имеет широкое распространение и признание в профессиональном сообществе разработчиков.
Инициатива Белого дома выходит за рамки простого перечисления рекомендаций. Она включает стратегический план по укреплению кибербезопасности на национальном уровне, отраженный в исполнительном приказе президента Джо Байдена (Joe Biden) от марта 2023 года. Этот документ задает направление всестороннего сотрудничества между государственным сектором, технологическими компаниями и общественностью с целью разработки и внедрения безопасного программного обеспечения и аппаратных решений.
Вывод отчета ONCD призывает к сознательному выбору языков программирования с учетом их способности обеспечивать безопасное управление памятью. Это не только техническое руководство для разработчиков, но и стратегическое направление для организаций, занимающихся разработкой критически важного ПО. Переход на использование языков программирования, обеспечивающих безопасность памяти, может существенно снизить риск возникновения уязвимостей, повысить надежность и безопасность цифровой инфраструктуры.
Если вы заметили ошибку, выделите ее мышкой и нажмите CTRL+ENTER.