Грег Кроа-Хартман: Rust спасет Linux от проблем безопасности, выявленных ИИ


Опубликовано 27.05.2026 | Автор: kmveg

0

Грег Кроа-Хартман: Rust спасет Linux от проблем безопасности, выявленных ИИ

На конференции Rust Week в Утрехте (Нидерланды) Грег Кроа-Хартман, один из основных сопровождающих стабильного ядра Linux, заявил, что язык программирования Rust призван обеспечить безопасность операционной системы, особенно в контексте обработки недоверенных данных. Он подчеркнул, что будущее Linux во многом зависит от внедрения Rust.

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

Почему Linux нуждается в спасении?

По словам Кроа-Хартмана, актуальность этой темы обусловлена внезапным всплеском серьезных уязвимостей в Linux, таких как Dirty Frag, Copy Fail и Fragnesia. Эти проблемы были выявлены благодаря новым программам обнаружения ошибок, использующим искусственный интеллект.

С 2005 года Кроа-Хартман, наблюдавший за всеми уязвимостями ядра, отметил, что команда ядра сейчас публикует около 13 новых CVE (Common Vulnerabilities and Exposures – общеизвестные уязвимости и воздействия) ежедневно, что является беспрецедентным числом. Эксперт считает, что Rust — один из немногих реалистичных способов значительно сократить число ошибок, возникающих из-за традиционных проблем с обработкой ошибок и управлением ресурсами в C.

Преимущества Rust: устранение типичных ошибок C

Кроа-Хартман проиллюстрировал типичные ошибки языка C на реальных примерах из ядра: от 15-летней ошибки Bluetooth, связанной с разыменованием указателя без проверки, до бага в Xen, где разработчики забыли снять блокировку на пути обработки ошибки. Он объяснил, что большинство ошибок в ядре — это «мелкие недочеты»: непроверенные условия ошибок, забытые блокировки, утечки незанятой памяти. Эти накапливающиеся уязвимости приводят к сбоям ядра, что является распространенной проблемой при использовании C.

Главное преимущество Rust, по мнению Кроа-Хартмана, заключается в обнаружении таких ошибок на этапе компиляции, а не во время проверки кода. В качестве примера он привел абстракции блокировок в Rust-ядре: единственный способ получить доступ к внутренним указателям структур — это захватить соответствующую блокировку, которая затем автоматически снимается. Компилятор гарантирует корректность этого процесса, предотвращая ошибочный доступ к значениям без блокировки. По оценкам специалиста, такой подход способен устранить до 60% существующих ошибок в ядре.

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

Влияние Rust за пределами его кода

Даже если бы Rust исчез завтра, его влияние уже заставило сообщество разработчиков ядра очистить и улучшить код и интерфейсы на C. Грег Кроа-Хартман отметил, что многие идеи были заимствованы у Rust, что привело к появлению новых «защит» и ограниченных блокировок на C, а также к более простым в кодировании механизмам распределения памяти.

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

Взаимодействие Rust с C также вынуждает к более глубоким изменениям на стороне C. Вспоминая ранние конференции по Rust для Linux, Кроа-Хартман привел пример, когда сотни строк кода на Rust требовались для взаимодействия с всего двумя строками на C. Это привело к пониманию, что можно изменить код на C, чтобы упростить взаимодействие с Rust. Команда Rust-for-Linux добилась значительных успехов в переработке интерфейсов драйверов, сделав их более простыми для написания и менее подверженными ошибкам.

Безопасность через недоверенные данные

Кроа-Хартман также связал Rust с более широкой инициативой по работе с недоверенными данными, основываясь на принципе, что «любой ввод злонамерен». Заимствуя опыт отдела безопасности Microsoft, он подчеркнул: «Всегда помните эти четыре слова: необходимо проверять любой ввод».

В настоящее время ведутся работы над специальной «недоверенной» оберткой типа и методом валидации в Rust, которые обязывают к явной проверке данных в момент их перехода из недоверенного состояния в доверенное. Это позволяет сосредоточить усилия по проверке на точках перехода, где данные поступают из пользовательского пространства в ядро. Такой подход распространяется и на постоянно усложняющееся оборудование, которое также может быть злонамеренным. По мнению Кроа-Хартмана, такой механизм позволит устранить до 80% всех известных уязвимостей (CVE), что является весьма значительным показателем.

Rust — не волшебная палочка

Несмотря на энтузиазм, Грег Кроа-Хартман предостерегает от восприятия Rust как «волшебной палочки». Он привел пример одного из первых компонентов на Rust, интегрированных в ядро — логики отображения QR-кода при сбоях ядра. В этой логике был обнаружен известный баг, связанный с памятью: код не проверял размер буфера, что позволяло перезаписывать произвольные участки памяти. Это продемонстрировало, что Rust, как и C, может приводить к сбоям при некорректном использовании.

Кроа-Хартман не призывает к полной переделке существующего кода ядра Linux на Rust. Он подчеркнул, что Rust следует использовать для нового функционала, оставляя существующий код на C нетронутым. В качестве примера он привел Binder, систему межпроцессного взаимодействия (IPC) Android*, где временно сосуществуют реализации на C и Rust до достижения паритета, после чего версия на C будет удалена.

Эволюция и будущее Rust в Linux

Ожидается, что со временем поддержка нового оборудования будет все больше склоняться в сторону Rust. Некоторые подсистемы уже заявили, что новые драйверы для графики должны быть написаны именно на Rust. Кроа-Хартман прогнозирует, что в течение одного-двух лет разработчики смогут создавать высококачественные драйверы для различных подсистем Linux на Rust. Он описывает этот процесс как эволюционный: «Linux — это эволюция, а не интеллектуальный дизайн. Мы развиваемся со временем, и появляются новые драйверы для нового оборудования. Старые драйверы перестают использоваться и со временем удаляются, как это происходит примерно через 20 лет».

На сегодняшний день ядро Linux содержит 36 миллионов строк кода на C и 113 000 строк на Rust. Большая часть кода на Rust представлена связующими компонентами (bindings). Разработчикам Rust-for-Linux, в том числе Алисе Рил, пришлось написать множество таких связующих компонентов, чтобы иметь возможность создать даже небольшой драйвер на Rust. Это привело к некоторому смягчению обычного правила сообщества, запрещающего добавление неиспользуемого кода, поскольку связующие компоненты часто добавляются до появления конкретного пользователя для них.

Вскоре ожидается реальное применение Rust: телефоны Android*, работающие на коде Rust в Binder, должны появиться в ближайшее время, что означает, что миллиарды устройств скоро будут использовать Rust в Linux.

Признание и дальнейшее развитие

Что в конечном итоге убедило многих основных сопровождающих ядра, включая Грега Кроа-Хартмана, в ценности Rust, так это его способность упрощать проверку кода. Благодаря автоматизированным системам непрерывной интеграции (CI) и строгой системе типов Rust, сопровождающие могут сосредоточиться на логике, а не на ручном учете ресурсов и управлении ими. Это позволяет уделять внимание конкретным функциям, полагая, что остальной код работает корректно благодаря проверкам на этапе сборки.

Кроа-Хартман сообщил, что ведущие сопровождающие ядра уже приняли решение о статусе Rust: «В прошлом году мы заявили, что эксперимент с Rust окончен. Это уже не эксперимент, это всерьез». Он объяснил это тем, что за проектом стоят надежные люди, которым доверяют, и которые проделали огромную работу, чтобы сделать Rust жизнеспособным языком для ядра. «Мы будем придерживаться этого курса. Полный вперед», — заявил он, и, как всегда, в шутку добавил, что «мировое господство продолжается».




Comments are closed.

Наверх ↑
  • Категории
    • Болезни и вредители (36)
    • Новости (2653)
    • Полезные свойства и вред (33)
    • Садовый инвентарь (18)
    • Удобрения (33)
    • Цветы (34)
  • Свежие статьи
  • Свежие комментарии
  • Товары для дачи