Западное издание пошутило над докладом CISA о небезопасности ключевого кода
Большую долю кода на небезопасных языках программирования обнаружило в проектах на небезопасных языках Агентство кибербезопасности и безопасности инфраструктуры США (CISA), 28 июня пишет интернет-издание о технологиях The Register.
Материал в The Register озаглавлен «CISA изучило проекты на C/C++ и обнаружило много кода на C/C++. Хотите переписать что-нибудь из этого на Rust?». Он посвящен докладу CISA о потенциальной небезопасности кода ключевых программных продуктов.
Согласно докладу CISA, такие значимые для программной инфраструктуры проекты, как операционная система Linux, виртуальная машина KVM, наборы компиляторов и языковые виртуальные машины JDK, GCC и LLVM, движки веб-браузеров Chromium и Gecko более, чем на половину состоят из кода, написанного на языках C и C++.
Языки C/C++ позволяют операции с оперативной памятью, которые могут приводить к ошибкам, приводящим от сбоя процесса работы программного обеспечения (ПО) до появления критической уязвимости. Наиболее частые ошибки — это выход за границы выделенной памяти и считывание ранее внесенных другим процессом в память значений.
Первый тип ошибок формирует потенциальную уязвимость исполнения произвольного кода злоумышленника, второй дает шанс считать данные, на получение которых у пользователя нет прав. Такие ошибки возникают в основном в силу невнимательности программиста и недостаточности тестирования ПО, но бывает, что их очень сложно обнаружить.
Ряд языков программирования обеспечивает более безопасную работу с памятью. Например, C#, Go, Java, Python, Rust и Swift. Часть из них недостаточно производительна для системного программирования, часть жестко связана с компаниями-разработчиками. Постепенно внедряется системный язык Rust, который не связан так жестко с коммерческими компаниями и ключевой особенностью которого является реализация безопасной работы с памятью.
Проблема заключается всё в той же производительности. Такое ПО как ядро операционной системы, компилятор, виртуальная машина должно работать быстро. Код в режиме безопасной работы с памятью компилируется в программу с накладными расходами, то есть менее эффективную по производительности. Небезопасный режим в Rust есть, но он не дает преимуществ в безопасности относительно C/C++.
По сути, в CISA сделали доклад в парадигме быстрого вывода новых версий ПО на рынок, что приводит к недостаточности тестирования и оптимизации. Компенсировать это предлагается, по всей видимости, регулярной покупкой нового более производительного аппаратного обеспечения.
При этом западное вычислительное оборудование не обеспечивает в значительной мере защиты от некорректного обращения с памятью, а гонится за всеядностью и производительностью. Поскольку ПО обладает свойством информации почти бесконечного тиражирования, а вычислительное средство надо произвести материально, то доклад вольно или невольно выступает в пользу разработчиков и производителей вычислительной электроники.