В Linux 7.3 RandStruct отключат по умолчанию ради поддержки Rust

· Linux и open source
В ядре Linux 7.3 функция защиты RandStruct теперь по умолчанию выключается, если доступна поддержка Rust. Разработчики пошли на компромисс ради полноты сборочного покрытия.

cover.svg

Разработчики ядра Linux приняли изменение, которое меняет поведение конфигурации по умолчанию: защитная функция RandStruct теперь будет отключена, если в системе присутствует рабочий инструментарий Rust и поддержка Rust для соответствующей архитектуры процессора. Патч уже влит в Git-дерево ядра накануне выпуска Linux 7.3-rc2, ожидаемого в эти выходные.

В чём суть конфликта

RandStruct — это механизм усиления безопасности, который на этапе сборки случайным образом перемешивает расположение в памяти чувствительных C-структур ядра. Это затрудняет эксплуатацию уязвимостей, поскольку злоумышленник не может заранее знать, где именно лежат нужные ему поля.

Проблема в том, что RandStruct не умеет работать с кодом на Rust. Из-за этого в Kconfig прописаны зависимости, которые запрещают включать Rust одновременно с RandStruct. На практике это мешало собирать ядро с поддержкой Rust в конфигурации allmodconfig — стандартной сборке, которая включает все модули ядра и используется для проверки покрытия. RandStruct включался по умолчанию, а зависимость !RANDSTRUCT затем автоматически отключала Rust.

Компромиссное решение

Автор изменения Марк Браун объяснил логику в описании патча: обойти проблему решили тем, что RandStruct теперь отключается по умолчанию, если доступны рабочий инструментарий Rust и поддержка Rust для архитектуры. Прямо завязаться на условие !RUST не позволяют циклические зависимости, поэтому решение получилось не идеальным. Как честно признаёт сам Браун, в итоге можно прийти к конфигурации, где отключены и Rust, и RandStruct одновременно — но, по его словам, такой подход «скорее даст ожидаемый результат».

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

Что делать тем, кому важна защита

В Phoronix отмечают: в будущем, вероятно, Rust и RandStruct научатся уживаться, но пока конфигурация по умолчанию идёт по пути отключения защиты там, где доступен Rust. Если же RandStruct нужен, всегда можно собрать ядро с нестандартной конфигурацией, отключив в ней поддержку Rust.


Источник: Phoronix

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.