Повысить безопасность серверов и защитить их от внедрения руткитов в системах на базе Linux-ядра младше 2.6.25 (например, CentOS/RHEL 5) можно используя режим Capability Bounding, включаемый через файл /proc/sys/kernel/cap-bound. Capability Bounding действует на все процессы, если какой-то из Capability-режимов запрещен через /proc/sys/kernel/cap-bound, то использовать данную возможность не сможет ни один процесс, независимо от его привилегий. Используя данный режим можно блокировать для пользователя root возможность загрузки модулей ядра, изменения правил пакетного фильтра, использования raw-сокетов, изменения владельца файлов, монтирования разделов и других системных действий.
Посмотреть текущее состояние режима можно командой:cat /proc/sys/kernel/cap-bound
а для установки нового значения, можно использовать команду:
echo значение > /proc/sys/kernel/cap-bound
Значение содержит шестнадцатеричное или десятичное представление битовой маски, кодирующей устанавливаемые флаги.
Например, установив режим CAP_SYS_MODULE (для установки нужно очистить бит номер 16):
echo $((1 << 16)) > /proc/sys/kernel/cap-bound
или в шестнадцатеричном виде:
echo 0xFFFEFFFF > /proc/sys/kernel/cap-bound
будет заблокирована загрузка любых модулей ядра.
Попытка загрузить или выгрузить модуль приведет к выводу ошибки.
modprobe ide_cd
приведет к выводу ошибки:
FATAL: Error inserting ide_cd (/lib/modules/2.6.18-194.3.1.el5/kernel/drivers/ide/ide-cd.ko): Operation not permitted
Изменять /proc/sys/kernel/cap-bound нужно с большой осторожностью, так как установка неверного значения может привести к неработоспособности системы. Установленный флаг уже не может быть изменен, т.е. злоумышленник не может записать 0xFFFFFFFF и отменить установку маски 0xFFFEFFFF.
Список других Capability-режимов можно посмотреть в файле /usr/src/linux/include/linux/capability.h:grep '#define CAP' /usr/src/linux/include/linux/capability.h
#define CAP_CHOWN 0
#define CAP_DAC_OVERRIDE 1
#define CAP_DAC_READ_SEARCH 2
#define CAP_FOWNER 3
#define CAP_FSETID 4
#define CAP_KILL 5
#define CAP_SETGID 6
#define CAP_SETUID 7
#define CAP_SETPCAP 8
#define CAP_LINUX_IMMUTABLE 9
#define CAP_NET_BIND_SERVICE 10
#define CAP_NET_BROADCAST 11
#define CAP_NET_ADMIN 12
#define CAP_NET_RAW 13
#define CAP_IPC_LOCK 14
#define CAP_IPC_OWNER 15
#define CAP_SYS_MODULE 16
#define CAP_SYS_RAWIO 17
#define CAP_SYS_CHROOT 18
#define CAP_SYS_PTRACE 19
#define CAP_SYS_PACCT 20
#define CAP_SYS_ADMIN 21
#define CAP_SYS_BOOT 22
#define CAP_SYS_NICE 23
#define CAP_SYS_RESOURCE 24
#define CAP_SYS_TIME 25
#define CAP_SYS_TTY_CONFIG 26
#define CAP_MKNOD 27
#define CAP_LEASE 28
#define CAP_AUDIT_WRITE 29
#define CAP_AUDIT_CONTROL 30
#define CAP_SETFCAP 31
#define CAP_MAC_OVERRIDE 32
#define CAP_MAC_ADMIN 33
Описание можно найти в стандартном системном руководстве:man 7 capabilities
Возможность /proc/sys/kernel/cap-bound работает только для Linux-ядер до версии 2.6.25. Начиная с ядра 2.6.25 прекращена поддержка глобального общесистемного Capability Bounding, маску можно указывать с использованием системного вызова prctl только для отдельных нитей (установка Capability Bounding для процесса, отражается и на всех его потомках).
Для блокирования загрузки модулей в более новых ядрах следует использовать файл /proc/sys/kernel/modules_disabled (для запрета загрузки модулей в него достаточно записать 1).
URL: http://www.cyberciti.biz/tips/linux-advanced-hardening.html
Обсуждается: http://www.opennet.me/tips/info/2554.shtml
Что мешает злопыхателю или гадкому процессу изменить значения, если есть рут? А если его нет, то модули не получится загрузить в любом случае.
Тем более ядра 2.6.25 - редкая древность.
Единственная надежда, что хаксор не знает о такой возможности. Но при наличии рута можно много лазеек в системе оставить и без модулей. Это все с точки зрения проникновения, но других причин для такой предосторожности не вижу.
как-бы в новости написано, что после установки флага его нельзя сбросить (можно только дальше ставить ограничения).в целом можно отследить откуда ставятся привилегии и ребутнуть (судя по флагам даже ребут можно перехватывать) некоторым особым образом.
но в целом согласен - система только для ловли попыток нсд.
> судя по флагам даже ребут можно перехватыватьВ системе с открытыми сорцами вы в принципе можете перехватить все что хотите. Если есть реальное желание - можно очень неслабо доставить хацкерам, немного (или много) изменив работу сисколов и/или системных утилит. Попутно выслав алерт админу, когда ничего не подозревающий хацкер попробует юзать систему "как обычно". А приколитесь, хаксор не сможет например вытереть свои следы в невидимых ему логах. И он не сможет убить невидимые ему процессы ;).
При этом хаксоры по сути попадут в окружение где УЖЕ запихан руткит. Только вот он играет против них, на стороне админа. Вышибить клин клином в общем то вполне валидный подход. Кто первый встал, того и тапки. У админа в этом плане есть некое преимущество :)
>немного (или много) изменив работу сисколов и/или системных утилитбугога, а User294 будет стоять рядом и гарантировать работу всех остальных честных модулей, которым забыли сказать что работа сислока децл изменилась.
он такой, он всем свечку держит
>работа сислока децл измениласьКого-кого работа? Сислока?
Вы хоть немного понимаете смысл слов, которыми пытаетесь оперировать?
либо я что-то не понимаю, но
(1 << 16) != 0xFFFEFFFF
и в-правдуecho $((0xFFFEFFFF))
4294901759echo $((1 << 16))
65536
(0xFFFFFFFF & ~0xFFFEFFFF) = 1 << 16от сюда получаем:
0xFFFFFFFF | (1<<16) = 0xFFFFFFFF | 0xFFFEFFFF
маска