The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимостей в ядре Linux, opennews (??), 27-Июн-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


41. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от Павел Отредиезemail (?), 27-Июн-20, 22:41 
Про capabilities, дак лучше неиспользуемые вообще отключать переходом в securelevel. Что вы делаете на вызов cap_capable?
Ответить | Правка | Наверх | Cообщить модератору

43. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от solardiz (ok), 27-Июн-20, 23:06 
Проверяем, что capabilities процесса всё еще соответствуют сохраненным сразу после их корректного изменения одним из предназначенных для этого вызовов. Делаем эту проверку до того как capable(), возможно, подтвердит что процесс имеет право сделать что-то привилегированное. Про неиспользуемые и securelevel - отдельная тема, здесь не об этом.
Ответить | Правка | Наверх | Cообщить модератору

44. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от Павел Отредиезemail (?), 27-Июн-20, 23:13 
Понятно. Вы используете security hooks и ваш модуль оформлен как модуль, я правильно понимаю? Насколько я помню старые версии ядер часть security, не пришлось ли вам экспортировать некоторые символы ядра, а то это не очень разрешено по моему мнению?
Ответить | Правка | Наверх | Cообщить модератору

46. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от solardiz (ok), 27-Июн-20, 23:57 
Используем kprobes. Оформлен как модуль. Экспорт самим ядром мы не трогаем, но для отдельных символов нам приходится использовать kallsyms_lookup_name, а его самого (начиная с 5.7, где его перестали экспортировать) находить с помощью kprobes же. Конечно, это выходит за рамки официального API.
Ответить | Правка | Наверх | Cообщить модератору

48. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от Павел Отредиезemail (?), 28-Июн-20, 00:26 
> Используем kprobes. Оформлен как модуль. Экспорт самим ядром мы не трогаем, но
> для отдельных символов нам приходится использовать kallsyms_lookup_name, а его самого
> (начиная с 5.7, где его перестали экспортировать) находить с помощью kprobes
> же. Конечно, это выходит за рамки официального API.

Если это возможно вашему модулю, то возможно security hooks и другому модулю. Вот и можно предположить почему модуль-эксплоит успешен, он переопределил хуки.

Ответить | Правка | Наверх | Cообщить модератору

50. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +2 +/
Сообщение от solardiz (ok), 28-Июн-20, 01:03 
LKRG не предназначен нарушать работу других модулей, в том числе что-то переопределяющих используя официальные API ядра. Он распознает некоторые атаки на ядро, где слово атака подразумевает что она осуществляется с неразрешенным пересечением уровня привилегий. Например, если простой пользователь эксплуатирует уязвимость в каком-нибудь системном вызове чтобы оттуда переписать свой euid в task_struct на 0 и затем попытается этим euid'ом воспользоваться, LKRG скорее всего это поймает и остановит. Загрузка модуля ядра корректно выглядящим root'ом (не полученным только что совершенной атакой на ядро) не относится к этой категории, здесь нет пересечения уровня привилегий.

Помимо упомянутого, LKRG также распознает некоторые неразрешенные изменения ядра и модулей, то есть осуществляемые не через стандартные API. Например, он может распознать атаку которая перепишет не euid, а sys_call_table или кусок кода в ядре. Он также может распознать корректно загруженный модуль ядра, который сделает подобное - таким образом он смог распознать упомянутые в новости руткиты.

Но если какой-либо модуль и загружен корректно (честно выглядящим root'ом) и ведет себя корректно, LKRG позволит ему работать. Если это нежелательно, есть возможность запретить загрузку модулей с помощью kernel.modules_disabled. Если же какой-нибудь руткит будет загружаться не как модуль (а через /dev/mem и т.п.), LKRG будет иметь выше шанс его поймать. Только для такой модели угроз и настроек системы нам надо еще добавить возможность запрета sysctl'ов LKRG.

И да, если есть интерес к такой конфигурации системы, то мы подошли к теме securelevel (что всякий /dev/mem запретит, и останется загрузка руткитов только через уязвимости и через правку userspace, чтобы загрузиться при ближайшей перезагрузке системы). Адам исходно реализовал в LKRG аналог securelevel'а, но потом мы эту ветку забросили так как большинство установок этим бы не воспользовалось или же воспользовалось не всерьез (оставив обход через userspace). Я сам пользовался securelevel'ом и доводил его до ума в Linux 2.0, еще когда он там был под этим именем, но это или реально неудобно или не всерьез (по крайней мере, на серверах).

Ответить | Правка | Наверх | Cообщить модератору

49. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от Павел Отредиезemail (?), 28-Июн-20, 00:42 
> Используем kprobes. Оформлен как модуль. Экспорт самим ядром мы не трогаем, но
> для отдельных символов нам приходится использовать kallsyms_lookup_name, а его самого
> (начиная с 5.7, где его перестали экспортировать) находить с помощью kprobes
> же. Конечно, это выходит за рамки официального API.

Я не помню сейчас стек вызовов хуков - до первого разрешения или запрета. Но это в общем то не важно. Для меня важно как программировать. Усложненно как хакер-программист, или проще как clean- программист. Clean программист не выходит за рамки api, в данном случае я бы отказался от загрузки модулем, невелика потеря а простоты намного больше.

Ответить | Правка | К родителю #46 | Наверх | Cообщить модератору

51. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +2 +/
Сообщение от solardiz (ok), 28-Июн-20, 01:18 
Мы не используем security hooks и не возвращаем разрешения/запреты. Мы перехватываем наиболее актуальные нам функции и сами отвечаем на распознанные атаки в соответствии со своими настройками. Можем убить процесс, а можем и вызвать kernel panic (в некоторых случаях более мягкий ответ уже не будет эффективным) - это настраиваемо. Насчет стиля программирования согласен - было бы хорошо, если бы LKRG можно было написать чисто, в рамках API, а не по-хакерски, как он написан сейчас. К сожалению, так бы не вышло реализовать то, что он сейчас умеет. Даже если бы он был патчем, а не модулем, нам пришлось бы завязываться на не предназначенные для сторонних проектов внутренние интерфейсы ядра. Также, то что LKRG модуль - очень важно. Потеря была бы очень велика - это бОльшая часть потенциальных пользователей, которые используют ядра из состава дистрибутивов, не пересобирая их.
Ответить | Правка | Наверх | Cообщить модератору

52. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +2 +/
Сообщение от Павел Отредиезemail (?), 28-Июн-20, 01:41 
Хорошо, мои мнения услышаны, спасибо за внимание.
Ответить | Правка | Наверх | Cообщить модератору

45. "Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимосте..."  +1 +/
Сообщение от Павел Отредиезemail (?), 27-Июн-20, 23:40 
Для своего маленького модуля restrictcap я оставил оформление в виде модуля, но возможность сборки только монолитно. Это избавляет от экспорта символов, потому что структуры security это не игрушки. ;)
Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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