10.11 // Повышение безопасности Linux-ядра через использование доступных только на чтение страниц памяти


Кис Кук (Kees Cook[link1]), главный сисадмин kernel.org и лидер Ubuntu Security Team, предложил[link2] в списке рассылки разработчиков Linux-ядра с целью повышения безопасности расширить области использования в ядре страниц памяти, переведенных в режим "только чтение". Данная мера позволит реализовать упреждающую защиту от эксплуатации уязвимостей, связанных с возможностью перезаписи областей памяти ядра, вследствие ошибок.

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

В качестве базиса для реализации данной идеи предложено использовать ранее начатую в рамках проекта PaX работу по реорганизации таблиц указателей на функции в вид с постоянными указателями (перевод указателей в режим только для чтения после их инициализации). Кроме того, предлагается добавить в ядро патч[link4], реализующий механизм повышения безопасности модулей ядра, через реализацию возможности запрещения выполнения кода и операций записи для определенных частей модулей.

С общим планом переноса в основное Linux-ядро различных улучшений из проектов PaX и grsecurity можно познакомиться на данной странице[link5]. Кроме вышеотмеченных функций, можно упомянуть проведение чистки файловой системы /proc на предмет возможной утечки важной для проведения атак информации; добавление возможностей для контроля автозагрузки модулей; поддержка пометки процессов как только 32- или 64-разрядных; ограничение доступа к системным вызовам, связанным с режимом vm86; скрытие служебных символьных таблиц ядра; рандомизация стека ядра и сегментирование памяти (PAX_RANDKSTACK, PAX_MEMORY_UDEREF); поддержка[link6] битовой маски для ограничения доступа к определенным классам системных вызовов.

Источник: http://www.opennet.ru/opennews/art.shtml?num=28587

Ссылки
[link1] http://outflux.net/

[link2] http://lkml.org/lkml/2010/11/7/113

[link3] http://lwn.net/Articles/410606/

[link4] http://git.kernel.org/?p=linux/kernel/git/x86/linux-2.6-tip.git;a=commitdiff;h=65187d24fa3ef60f691f847c792e8eaca7e19251

[link5] https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#Upstream%20Hardening

[link6] http://lwn.net/Articles/332438/