Минобороны США готовит транслятор TRACTOR для автопреобразования проектов на C в код на Rust

Управление перспективных исследовательских проектов Министерства обороны США анонсировало проект TRACTOR для разработки программного транслятора для автоматического преобразования проектов на языке C в представление на языке Rust.

В рамках проекта TRACTOR планируется улучшить качество автоматического перевода кода с языка C на Rust, задействовав методы машинного обучения для достижения уровня результирующего кода на Rust, близкого по стилю и качеству к коду, написанному опытным программистом, и использующего, когда это возможно, безопасные методы для работы с памятью без включения блоков и функций, помеченных ключевым словом unsafe.

Предполагается, что развиваемый транслятор TRACTOR позволит решить проблему с безопасностью старого кода на языке C и избавиться от потенциальных уязвимостей, вызванных небезопасной работой с памятью и неопределённым поведением.

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

26 августа специалисты DARPA проведут специальное мероприятие, на котором будет рассмотрены предлагаемые идеи по проекту транслятора TRACTOR.

26 июня 2024 года специалисты агентства кибербезопасности и безопасности инфраструктуры США (CISA) опубликовали исследование с подробным анализом 172 ключевых Open Source проектов на предмет уязвимости исходного кода различных языков программирования к ошибкам памяти.

Согласно отчёту CISA:

• 52% критически популярных проектов с открытым исходным кодом содержат код, написанный на небезопасных для памяти языках;

• 55% от общего числа строк кода (LoC) в популярных и ключевых проектах написаны на небезопасных для памяти языках;

• крупнейшие проекты в непропорциональной мере написаны на небезопасных для памяти языках;

• из 10 крупнейших проектов по общему количеству строк кода, каждый имеет долю небезопасного для памяти кода выше 26%;

• медианная доля небезопасного для памяти кода в крупных проектах составляет 62,5%, причём в 4 проектах показатель превышает 94%;

• многие проекты, написанные на безопасных для памяти языках, часто зависят от компонентов, написанных на небезопасных для памяти языках или наследуют код, написанный на небезопасных для памяти языках, через зависимости;

• среди исследованных проектов: ядро Linux (коэффициент небезопасного кода 95%), Tor (93%), Chromium (51%), MySQL Server (84%), glibc (85%), Redis (85%), SystemD (65%) и Electron (47%);

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

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

В выводах своего исследования CISA рекомендует разработчикам:

• использовать для создания нового кода безопасные для памяти языки, включая Rust, Java и Go;

• переводить существующие проекты, особенно их критически важные компоненты и сторонние элементы, на Rust, Java и Go;

• следовать мировым практикам безопасного кодирования;

• тщательнее управлять компонентной базой и проверять зависимости от других проектов и компонентов;

• проводить непрерывное тестирование кода, включая статический и динамический анализ;

• использовать фаззинг-тестирование для выявления и устранения проблем безопасности памяти в исходном коде проектов.

В ноябре 2022 года АНБ выпустило отчёт, в котором указало на то, что широко используемые языки программирования C и C++ дают хакерам больше возможностей для использования эксплойтов. В связи с этим АНБ рекомендует организациям переходить на безопасные языки программирования, такие как C#, Go, Java, Ruby, Rust и Swift. По мнению экспертов, это поможет предотвратить возникновение определённых типов уязвимостей, связанных с памятью.

В январе 2023 года изобретатель языка программирования C++ Бьёрн Страуструп ответил Агентству национальной безопасности (АНБ) США по поводу рекомендации ведомства отказаться от использования языков C и C++, перекладывающих управление памятью на разработчика, в пользу современных языков программирования (C#, Go, Java, Ruby, Rust и Swift), которые обеспечивают автоматическое управление памятью или выполняющие проверки безопасной работы с памятью во время компиляции кода. Страуструп призвал АНБ со своей стороны сначала серьёзно подумать о «безопасности» новых языков и только потом предлагать что-нибудь разумное по этому поводу. Учёный и разработчик считает, что упомянутые в отчёте АНБ «безопасные» языки программирования на самом деле не превосходят C++ в важных с его точки зрения применениях.

В конце февраля 2024 года Офис национального директора по кибербезопасности (ONCD) Белого дома США в рамках доклада о способах снижения количества уязвимостей в проектах и возможности в будущем улучшить надёжность ПО призвал разработчиков ПО в долгосрочной перспективе отказаться от небезопасных (в рамках работы с памятью) языках программирования С и С++ и перейти на более современные решения с высокой безопасностью памяти, например Rust, Python и Java.

Страуструп ответил на призыв Белого дома США переходить на языки с безопасностью памяти: «Я нахожу удивительным, что авторы этих государственных документов, похоже, не знают о сильных сторонах современного C++ и усилиях по обеспечению сильных гарантий безопасности. С другой стороны, они понимают, что язык программирования — это лишь одна часть набора инструментов, поэтому важно улучшать инструменты и процессы разработки». Страуструп напомнил, как он работал десятилетиями над тем, чтобы сделать язык безопаснее. Наконец, он поставил под сомнение само понимание безопасности: критики фокусируются на безопасности памяти, оставляя без внимания многие другие места, где можно проколоться.

Оригинальный текст анонса транслятора TRACTOR

Memory safety vulnerabilities are the most prevalent type of disclosed software vulnerability(1) and affect a computer's memory in two primary ways. First, programming languages like C allow programmers to manipulate memory directly, making it easy to accidentally introduce errors in their program that would enable a seemingly routine operation to corrupt the state of memory. Second, memory safety issues can arise when a programming language exhibits an “undefined behavior.” Undefined behaviors happen when the programming language standard provides no specification or guidance on how the program should behave under conditions not explicitly defined in the standard.

After more than two decades of grappling with memory safety issues in C and C++, the software engineering community has reached a consensus. Relying on bug-finding tools is not enough. Even the Office of the National Cyber Director has called for more proactive approaches to eliminate memory safety vulnerabilities to reduce potential attacks(2).

While it's been no secret that memory safe programming languages can eliminate memory safety vulnerabilities, the challenge has been rewriting legacy code at scale that matches the vastness of the problem. The C language was created in the 1970s and has become ubiquitous. It has been used to develop applications that run everything from modern smartphones to space vehicles and beyond. And the Department of Defense has long-lived systems that disproportionately depend on programming languages like C.

However, in recent years, a cultural shift toward the programming language Rust and recent breakthroughs in machine learning techniques, like large language models (LLMs), have created an environment that may lend itself to a new class of solutions.

DARPA’s Translating All C to Rust (TRACTOR) program wants to seize this opportunity by substantially automating the translation of the world’s legacy C code to Rust.

“You can go to any of the LLM websites, start chatting with one of the AI chatbots, and all you need to say is ‘here's some C code, please translate it to safe idiomatic Rust code,’ cut, paste, and something comes out, and it's often very good, but not always,” said Dr. Dan Wallach, DARPA program manager for TRACTOR. “The research challenge is to dramatically improve the automated translation from C to Rust, particularly for program constructs with the most relevance."

TRACTOR will strive to create the same quality and style that a skilled Rust developer would produce, thereby eliminating the entire class of memory safety security vulnerabilities in C programs.

Wallach anticipates proposals that include novel combinations of software analysis, such as static and dynamic analysis, and large language models. The program will host public competitions throughout the effort to test the capabilities of the LLM-powered solutions.

"Rust forces the programmer to get things right,” said Wallach. “It can feel constraining to deal with all the rules it forces, but when you acclimate to them, the rules give you freedom. They're like guardrails; once you realize they're there to protect you, you'll become free to focus on more important things."

DARPA will sponsor a Proposers Day on Aug. 26, 2024, which attendees can attend in person or virtually. Participants must register by Aug. 19, 2024. Details and registration info are available at SAM.Gov.

[1]https://www.cisa.gov/sites/default/files/2023-12/The-Case-for-Memory-Safe-Roadmaps-508c.pdf

[2]https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/memory-safety-fact-sheet/

Материал опубликован при поддержке сайта habr.com
Комментарии

    Актуальные новости по теме "Array"