The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

09.11.2010 20:53

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

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

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

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

  1. Главная ссылка к новости (http://lkml.org/lkml/2010/11/7...)
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/28587-linux
Ключевые слова: linux, kernel, security
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (47) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, JL2001 (ok), 21:32, 09/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а почему нельзя весь код сделать запрещённым для записи после инициализации (загрузил модуль и замок на него) а на все данные - запрет на исполнение ?
     
     
  • 2.6, GG (?), 22:30, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +5 +/
    видимо потому, что бывает надо что-нибудь позаписывать
    бывает иногда
     
     
  • 3.34, JL2001 (ok), 13:15, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > видимо потому, что бывает надо что-нибудь позаписывать
    > бывает иногда

    а что надо то позаписывать ? и почему позаписываемое требуется исполнять ??? это специально сделанная задняя калитка для хакеров ?

     
     
  • 4.38, Daemontux (ok), 16:35, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Это наследие костылей x86
     
  • 2.9, demimurych (ok), 22:34, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    если я ничего не забыл
    из за языков высокого уровня компиляторы которых часто перемешивают области данных с областями кода. т.е. нет четкой разницы что обозначив эту страницу памяти только на чтение ты тем самым не поставишь только на чтение часть данных.

    поправьте меня если я подзабыл.

     
     
  • 3.11, segoon (ok), 22:58, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    О чём вы говорите? Linux написан на сях и ассемблере.
     
  • 3.14, Аноним (-), 23:27, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    если ты пытался указать на трамплины, то они только в стеке.
    Остальные компиляторы уже давно не путают код и данные, особенно те которые с модификатором const или static.
     
     
  • 4.32, dq0s4y71 (??), 12:47, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    И я не помню чтобы путали. Си[++] всегда рассовывал код и данные с разными типами хранения по соответствующим сегментам. Не знаю насчет старых версий Паскаля, но сейчас он, вроде бы, делает так же. Может быть, бейсики какие-нибудь валят код и данные в одну кучу?
     
  • 2.29, Frank (ok), 08:27, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мешает отсутствие поддержки такого запрета на уровне процессора для многих архитектур (линукс не ограничивается работой только с современными CPU с поддержкой NX-бита, да).
     
     
  • 3.33, JL2001 (ok), 13:14, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    NX-бит это "новость" конешно.. "The ARM architecture refers to the feature as XN for eXecute Never; it was introduced in ARM v6"
    но со времён пентиумов (или даж 386, не помню) есть же это на x86 ???
    http://fat-crocodile.narod.ru/protected/02_segments.html
    Таблица 1. Формат дескриптора сегмента кода/данных.
    3-й бит пятого байта Code/Data Если флаг установлен, дескриптор описывает сегмента кода, если сброшен – сегмент данных.
    Свойства сегмента определяют его тип и правила использования (попытка использовать сегмент не по правилам обычно приводит к исключению #GP). Не вдаваясь в детали, можно выделить следующие типы сегментов:
        * Сегмент кода (code segment). Допустимо исполнение, может быть разрешено чтение.
        * Сегмент данных (data segment). Допустимо чтение, может быть разрешена запись.
    используется в Глобальная таблица дескрипторов и заполняется при переходе в защищённый режим процессора, является одной из основ защищённого режима

    можно же было для x86 почесаться, это же не один процессор и даже не несколько процессоров одной фирмы !

     
     
  • 4.36, dalco (ok), 13:59, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Кабы не соврать, но NX бит, случаем, не с четвертых пней (Prescott(?)) пошел? Если так, то раритетных компов еще слишком много.

    P.S. Мне так вспоминается, что поддержкой NX оффтопик во времена XP SP2 хвастаться начал. А это не так уж давно было.

     
     
  • 5.37, JL2001 (ok), 14:41, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Кабы не соврать, но NX бит, случаем, не с четвертых пней (Prescott(?))
    > пошел? Если так, то раритетных компов еще слишком много.
    > P.S. Мне так вспоминается, что поддержкой NX оффтопик во времена XP SP2
    > хвастаться начал. А это не так уж давно было.

    я скопипастил описание не NX-бита а механизм защиты памяти защищённого режима 386 процессоров (ну мб 486 или пентиумов), и работал я на 486 с 95 виндой...
    почему сей механизм не используется на x86 компах ?

     
     
  • 6.39, Daemontux (ok), 16:39, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> Кабы не соврать, но NX бит, случаем, не с четвертых пней (Prescott(?))
    >> пошел? Если так, то раритетных компов еще слишком много.
    >> P.S. Мне так вспоминается, что поддержкой NX оффтопик во времена XP SP2
    >> хвастаться начал. А это не так уж давно было.
    > я скопипастил описание не NX-бита а механизм защиты памяти защищённого режима 386
    > процессоров (ну мб 486 или пентиумов), и работал я на 486
    > с 95 виндой...
    > почему сей механизм не используется на x86 компах ?

    в документации к pax и grsecurity все разжеванно

     
     
  • 7.43, JL2001 (ok), 22:55, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Кабы не соврать, но NX бит, случаем, не с четвертых пней (Prescott(?))
    >>> пошел? Если так, то раритетных компов еще слишком много.
    >>> P.S. Мне так вспоминается, что поддержкой NX оффтопик во времена XP SP2
    >>> хвастаться начал. А это не так уж давно было.
    >> я скопипастил описание не NX-бита а механизм защиты памяти защищённого режима 386
    >> процессоров (ну мб 486 или пентиумов), и работал я на 486
    >> с 95 виндой...
    >> почему сей механизм не используется на x86 компах ?
    > в документации к pax и grsecurity все разжеванно

    можно ссылку ? боюсь я не смогу самостоятельно найти

     
     
  • 8.44, Daemontux (ok), 07:25, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    http en wikipedia org wiki PaX http pax grsecurity net docs ... текст свёрнут, показать
     
     
  • 9.45, JL2001 (ok), 13:44, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    документацию я бы нашёл и сам, а вот где в ней про сложности с этим ... текст свёрнут, показать
     
     
  • 10.46, анонимХ (?), 14:42, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ограничение на запись на основе сегментов неудобно и неэффективно с точки зрения... текст свёрнут, показать
     
     
  • 11.47, JL2001 (ok), 19:03, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    зачем выделять для сегмента кода и сегмента данных всю память почему нельзя вы... текст свёрнут, показать
     
     
  • 12.49, анонимХ (?), 21:47, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А сколько требуется Почитайте про используемую по у молчанию в linux модель п... текст свёрнут, показать
     
  • 11.48, paxuser (ok), 20:43, 11/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    В PaX используется на процессорах без поддержки NX Есть много задач, где сегмен... текст свёрнут, показать
     

  • 1.2, segoon (ok), 21:37, 09/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот ещё статья по схожей тематике: http://lwn.net/Articles/413213/
     
  • 1.3, non anon (?), 21:39, 09/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Мило. Только почему-то не упоминается, в результате всего этого счастья в некоторых случаях ядро будет падать при загрузке.

    >The reason the RO/NX patch from Siarhei Liakh is not upstream yet is rather mundane: it introduced regressions - it caused boot crashes on one of my testboxes.

    Надеюсь, что эта инновация не пройдет в апстрим. Ну а в ubuntu она будет смотреться очень органично ;-)

     
     
  • 2.7, GG (?), 22:31, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    врядли изза этого
    просто пока пилили одно - отпилили что-то другое
    так бывает
     
     
  • 3.12, Аноним (-), 23:04, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    там речь о конкретном патче
     
     
  • 4.17, Аноним (-), 01:23, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +2 +/
    "But there is no fundamental reason why it shouldnt be upstream. We can push it
    upstream if the crashes are resolved"

    Там речь о конкретных багах.

     
  • 2.15, Аноним (-), 23:28, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Мило. Только почему-то не упоминается, в результате всего этого счастья в некоторых
    > случаях ядро будет падать при загрузке.
    >>The reason the RO/NX patch from Siarhei Liakh is not upstream yet is rather mundane: it introduced regressions - it caused boot crashes on one of my testboxes.
    > Надеюсь, что эта инновация не пройдет в апстрим. Ну а в ubuntu
    > она будет смотреться очень органично ;-)

    Ну а фигли - пытаются ставить NX bit на стек, а gcc туда сует трамплины.. вот и получаем бяку..

     
     
  • 3.16, Ананимуз (?), 23:59, 09/11/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тогда было бы логично, если бы бяка случалась чуть чаще, чем "on one of testboxes"
     
  • 3.19, Дима (??), 03:29, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Ну а фигли - пытаются ставить NX bit на стек, а gcc туда сует трамплины.. вот и получаем бяку..

    Ещё пять лет назад были патчи на glibc, gcc и остальных, заменящие такой код.

     
     
  • 4.25, Аноним (-), 06:20, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    существуют - только тогда прийдется отказываться от nested functions
    http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html.

    что приводит к нарушению стандарта на язык C.

     
     
  • 5.26, paxuser (ok), 07:03, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, трамплины можно эмулировать: http://pax.grsecurity.net/docs/emutramp.txt
    Во-вторых, вложенные функции для Си *не* стандартизированы и крайне редко встречаются. Но даже при отсутствии эмуляции код с вложенными функциями можно в порядке исключения (!) запускать на исполняемом стеке - paxctl и аналоги в помощь.
     
     
  • 6.35, JL2001 (ok), 13:26, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Во-первых, трамплины можно эмулировать: http://pax.grsecurity.net/docs/emutramp.txt
    > Во-вторых, вложенные функции для Си *не* стандартизированы и крайне редко встречаются.
    > Но даже при отсутствии эмуляции код с вложенными функциями можно в
    > порядке исключения (!) запускать на исполняемом стеке - paxctl и аналоги
    > в помощь.

    или я не понимаю что такое трамплины или вот им замена в x86
    http://stfw.ru/page.php?id=9905
    Команды передачи управления
    JMP target Имеет пять форм, различающихся расстоянием назначения от текущего адреса, и способом задания целевого адреса. При работе в Windows используется в основном внутрисегментный переход (NEAR) в пределах 32-битного сегмента. Адрес перехода может задаваться непосредственно (в программе это метка) или косвенно, т.е. содержаться в ячейке памяти или регистре (JMP [EAX]).

    тоесть можно осуществить переход по заданому в переменной (регистре) адресу, тоесть запись в сегмент кода не требуется !

     

  • 1.4, non anon (?), 21:41, 09/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще PaX печально знаменит тем, что падает по поводу и без.

    Похоже, сотрудники Canonical решили защитить ядро по самой простой схеме: паникующее ядро нельзя взломать.

     
     
  • 2.20, paxuser (ok), 03:30, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Унылый вброс. По делу: разработчики PaX и Grsecurity выпускают стабильные патчи на 2.6.32.х, а hardened-sources-2.6.32-rX в Hardened Gentoo проходят дополнительные этапы стабилизации (и могут использоваться в других дистрибутивах). Не скажу, что всё всегда гладко, но "падает по поводу и без" - явное преувеличение. Сам встречал панику только пару раз и только на этапе загрузки ядра. Если тестировать ядра перед запуском в продакшен, проблем практически нет.
     
     
  • 3.23, анон (?), 04:40, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >По делу: разработчики PaX и Grsecurity выпускают стабильные патчи на 2.6.32.х, а hardened-sources-2.6.32-rX в Hardened Gentoo проходят дополнительные этапы стабилизации (и могут использоваться в других дистрибутивах).

    То-то hardened-sources вечно замаскированы =)

     
     
  • 4.24, paxuser (ok), 05:06, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > То-то hardened-sources вечно замаскированы =)

    В не-hardened профилях - конечно.

     
  • 2.40, Daemontux (ok), 16:45, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Вообще PaX печально знаменит тем, что падает по поводу и без.
    > Похоже, сотрудники Canonical решили защитить ядро по самой простой схеме: паникующее ядро
    > нельзя взломать.

    pax то как раз не падает. Падают проги в которых активно используются "грязные хаки"

     

  • 1.10, Zenitur (?), 22:54, 09/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    сисадмин kernel.org и лидер Ubuntu Security Team? Ничего себе... Убунтоиды делают что-то полезное!
     
     
  • 2.18, Anixx (?), 03:28, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    I am a kernel.org admin, where I work on maintaining the mirror network for the Linux Kernel, as well as handling user accounts.

    https://wiki.ubuntu.com/KeesCook

    То есть, его задача - поддержка сервера kernel.org и управление учетными записями пользователей, а вы что подумали?

    Еще он прославился переводом серверов Linux Foundation с Red Hat на Ubuntu.

     
     
  • 3.21, Viliar (ok), 03:36, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Cуровый убунтоид, однако. Под шапкой таки спокойнее, чем без нее. Зима, вон, впереди :-)
     
  • 3.22, анон (?), 04:36, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Еще он прославился переводом серверов Linux Foundation с Red Hat на Ubuntu.

    kernel.org пока еще на федоре, так что всё хорошо.

    А linux foundation нехай падает =)

     

  • 1.27, rm_ (ok), 07:40, 10/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А разве уже так не делается?

    ...
    [    0.675209] lo: Disabled Privacy Extensions
    [    0.675346] Mobile IPv6
    [    0.675349] NET: Registered protocol family 17
    [    0.675407] PM: Resume from disk failed.
    [    0.675418] registered taskstats version 1
    [    0.675598] rtc_cmos 00:03: setting system clock to 2010-11-10 04:33:07 UTC (
    1289363587)
    [    0.675620] Initalizing network drop monitor service
    [    0.675656] Freeing unused kernel memory: 600k freed
    >>> [    0.675773] Write protecting the kernel read-only data: 6144k

    [    0.675897] Freeing unused kernel memory: 240k freed
    [    0.676015] Freeing unused kernel memory: 448k freed
    [    0.693243] udev[77]: starting version 163
    [    0.693392] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
    [    0.742266] Floppy drive(s): fd0 is 1.44M
    ...

     
     
  • 2.30, Frank (ok), 08:33, 10/11/2010 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А разве уже так не делается?

    А читаем текст новостей по диагонали?
    ..._расширить_ области использования в ядре страниц памяти, переведенных в режим "только чтение"...

     

  • 1.28, i (??), 08:23, 10/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лучше бы перенесли не различные улучшения PaX и grsecurity, а все.
     
  • 1.31, ostin (ok), 12:20, 10/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    vm86 используется в линуксе?
     
  • 1.41, paxuser (ok), 18:44, 10/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Имя поправили, спасибо.
     
  • 1.42, Аноним (-), 20:51, 10/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я все-равно не понимаю, почему  нельзя было изначально в ядре запретить писать в сегмент данных код и запускать код из сегмента данных. Такие ограничения поддерживал еще 80286!!
    Трмаплины gcc для вложенных функций? Это единственная проблема?! Если да -- выжечь трамплины и приделать любой безопасный костыль.
    Честно говоря не понимаю смысла NX-бита, если в 286 уже все было, только не на уровне страниц, а на уровне сегментов.
     
     
  • 2.50, Xaionaro (ok), 10:35, 13/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Припоминается одна ОС, у которой одной из основных задач при разработке ставилось организовать безопасную работу с ОЗУ. Всё разрабатывалась и разрабатывалась. А когда, наконец, было разработана, её потенциальный рынок давно завоевали другие ОС.

    Я сейчас про "OS/2" :)

    Однако вашу мысль я поддерживаю, за такое кол-во времени было бы весьма неплохо всё-таки успеть разобраться с подобными проблемами :)

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру