В последние годы безопасность информационных систем приобрела особое значение для национальной безопасности и функционирования критической инфраструктуры Соединённых Штатов Америки. В связи с растущими угрозами со стороны киберпреступников и государственно-спонсируемых хакерских групп выражается всё большая озабоченность у профильных ведомств, таких как Кибербезопасность и инфраструктурная безопасность США (CISA) и Агентство национальной безопасности (NSA). Недавно эти организации совместно обнародовали рекомендации, которые акцентируют внимание на необходимости перехода на использование память-безопасных языков программирования. Такая инициатива направлена на сокращение уязвимостей, связанных с ошибками при работе с памятью, которые исторически являются одной из основных причин серьезных сбоев и инцидентов безопасности. Память-безопасные языки программирования отличаются тем, что включают системы контроля доступа, управления ресурсами и автоматического обнаружения типичных ошибок, возникающих при обращении к памяти компьютера.
Они минимизируют вероятность появления таких уязвимостей, как переполнение буфера, использование освобождённой памяти или выход за пределы выделенного массива. Языки такие как Rust, Go, C#, Java, Swift, Python и JavaScript содержат встроенные механизмы автоматического управления памятью или строгие проверки на этапе компиляции, что сводит к минимуму риски, связанные с некорректным использованием памяти. В противоположность им находятся C и C++, широко используемые в самых разных индустриях, особенно для разработки системного программного обеспечения и приложений с высокими требованиями к производительности. Однако отсутствующая по умолчанию автоматическая проверка безопасности памяти в этих языках создаёт серьезные риски. Несмотря на существование различных методик и инструментов статического анализа, способных выявлять и частично устранять такие ошибки, гарантировать абсолютную безопасность при использовании C и C++ крайне сложно.
Более того, даже в памяти-безопасных языках возможно нарушение гарантий безопасности при подключении кода на C/C++ через механизмы Foreign Function Interface, что вводит дополнительные сложности и потенциальные бреши. Исторически ошибки, связанные с безопасностью памяти, не раз становились причиной чрезвычайных инцидентов в информационной безопасности. Известнейшей иллюстрацией служит уязвимость Heartbleed в библиотеке OpenSSL, написанной на C, которая позволяла злоумышленникам получить доступ к значительным объемам конфиденциальной информации. Аналогично, масштабные сбои и уязвимости в операционной системе Android и браузере Chromium на протяжении последних лет также связывают с недочётами в управлении памятью. Мировые лидеры в области технологий, такие как Google и Microsoft, серьёзно подходят к решению проблемы безопасности памяти.
В 2022 году представители Microsoft официально выступили с призывом разрабатывать новые приложения на память-безопасных языках, прежде всего на Rust, демонстрируя тенденцию, которая укрепилась и в последующие годы. К 2023 году даже такие массовые издания, как Consumer Reports, обратили внимание на важность перехода к новым языкам программирования с точки зрения кибербезопасности. Руководители профильных ведомств, включая бывшего директора CISA Джен Истерли, активно пропагандировали эту тему на высоком государственном уровне, подчёркивая необходимость трансформации подходов к разработке программного обеспечения. Не обошлось и без проблем. Попытки интегрировать Rust в ядро Linux, центральный элемент многих операционных систем, встретили сопротивление от сообщества разработчиков, приветствующих традиционные подходы на C.
Кроме того, программисты, которые плотно работают с C и C++, усиленно разрабатывают собственные проекты по обеспечению памяти-безопасности на своих языках — такие как TrapC, FilC, Mini-C и Safe C++. Однако эти усилия пока не могут полностью заменить преимущества родных механизмов памяти-безопасных языков. Доклад CISA и NSA подчёркивает, что несмотря на заметные сложности с переходом — особенно в организациях, располагающих крупными устаревшими кодовыми базами и критически важными для функционирования системами — преимущества от применения MSL (memory-safe languages) очевидны и значительны. Повышение надёжности приложений, значительное уменьшение поверхности для атак злоумышленников и снижение долгосрочных затрат на сопровождение и защиту кода формируют весомую мотивацию для перехода. Помимо административного давления, существуют и конкретные технические проекты, призванные ускорить адаптацию память-безопасных языков.
К примеру, DARPA реализует программу TRACTOR, направленную на автоматический транслятор кода с C на Rust. Аналогично исследовательские коллективы элитных университетов США предложили проект Omniglot, который обеспечивает безопасное взаимодействие между небезопасными библиотеками и кодом на Rust через интерфейс Foreign Function Interface. Такие инициативы учитываются и поддерживаются не только государственными учреждениями, но и частными компаниями, что особенно важно в условиях возможного сокращения бюджета CISA и необходимости более эффективного использования ресурсов. Через продвижение вакансий, ориентированных на навыки работы с память-безопасными языками, отрасль стремится формировать новое поколение специалистов, готовых к современным вызовам информационной безопасности. Тем не менее, переход к память-безопасным языкам не является универсальным решением, подходящим для каждой задачи.