Кому это нужно?
X Server (Video Memory & Control Registers)Из всего, что я нашел в результате поиска, до сих пор кажется, что эти 2 пули являются передовыми для законного использования.
Ссылки
Энтони Лайнберри на /dev/mem Rootkits - LJ 8/2009 от Мика Бауэра
Как вы знаете, /dev/mem
обеспечивает доступ к физической памяти работающей системы. /dev/kmem
обеспечивает доступ к виртуальной памяти ядра. Оба этих символьных устройства могут быть постоянно отключены с помощью параметров конфигурации ядра (. Код является наиболее авторитетным источником информации, поэтому он используется для справки ). Отключение первых двух опций ниже приведет к отключению соответствующих устройств.
CONFIG_DEVKMEM
:определяет, создается ли /dev/kmem
при загрузке CONFIG_DEVMEM
:определяет, создается ли /dev/mem
при загрузке CONFIG_STRICT_DEVMEM
:если /dev/mem
существует, определяет, ограничен ли доступ к нему В зависимости от вашего дистрибутива текущую конфигурацию ядра можно увидеть с помощью чего-то вроде zless /proc/config.gz
или less /boot/config-$(uname -r)
.
Я думаю, что первоначальной целью /dev/mem
была поддержка взаимодействия с памятью, -отображенными периферийными устройствами. Очевидные негативные последствия доступности этих виртуальных устройств для безопасности (, например. возможность злоумышленника «на лету» исправить память другого процесса или даже ядра )известна уже как минимум десятилетие. Ограничение доступа к /dev/mem
поддерживается в основном ядре с начала 2008 года , /dev/kmem
также является необязательным с тех пор .
Десять лет назад казалось, что X
зависел от /dev/mem
, я не думаю, что это все еще верно. Чтобы проверить заявления о том, что X
нуждается в /dev/mem
, вчера я удалил виртуальное устройство со своего ноутбука, и с тех пор оно работает, казалось бы, идеально. В 2017 году кажется, что эти устройства не имеют практического применения , кроме исследований и разработок.
С точки зрения безопасности рекомендуется удалить эти устройства. Еще стоит отметить, что удаленный злоумышленник с повышенными привилегиями,может читать память за пределами своего адресного пространства. Доступ к памяти других приложений пользовательского пространства можно получить с помощью /proc/<pid>/mem
. Доступ к памяти ядра можно получить с помощью /proc/kcore
.
Я не включал /dev/mem
в свою систему с самого начала. Я использую Gentoo Linux, так что это неудивительно, поскольку с этим дистрибутивом Linux вы практически сами собираете каждый пакет, включая ядро Linux.
Никогда не замечал проблем из-за отсутствия /dev/mem
, даже при использовании X.org X11. Только сегодня я заметил, что emerge пакета x11-drivers/xf86-video-vesa
выводит сообщение о том, что он требует /dev/mem
, вот так:
* This driver requires /dev/mem support in your kernel
* Device Drivers --->
* Character devices --->
* [*] /dev/mem virtual device support
Поскольку я не устанавливал драйвер VESA для XServer намеренно, а если и так, то только в качестве запасного варианта, мне никогда не приходилось его использовать, и поэтому я не замечал его — до сих пор.
Но это доказывает, что a)X11 больше не нужен /dev/mem
, а b)что некоторые видеодрайверы X11 все равно могут это делать.
Более новые видеодрайверы для определенного оборудования, скорее всего, будут работать без него. Точно так же, как современный X.org -X11 (на Gentoo,x11-base/xorg-server
)даже не обязательно должен быть suid root , так выглядит прогресс...