В Linux 7.3 RandStruct отключат по умолчанию ради поддержки Rust
Разработчики ядра 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
Комментарии
Войдите, чтобы комментировать.