| Запрещение загрузки модулей Linux-ядра | [исправить] | 
| Повысить безопасность серверов и защитить их от внедрения руткитов в системах
на базе 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 $((0xffffffff ^ (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).
 | 
|  | 
| 
 | 
 | | Раздел:    Корень / Администратору / Система / Linux специфика / Увеличение безопасности Linux | 
| | 1.2, Аноним (-), 04:31, 03/04/2011  [ответить] | +/– |  | Что мешает злопыхателю или гадкому процессу изменить значения, если есть рут? А если его нет, то модули не получится загрузить в любом случае. Тем более ядра 2.6.25 - редкая древность.
 Единственная надежда, что хаксор не знает о такой возможности. Но при наличии рута можно много лазеек в системе оставить и без модулей. Это все с точки зрения проникновения, но других причин для такой предосторожности не вижу.
 
 |  |  | 
 
|  | | 2.3, anonymous (??), 08:37, 03/04/2011 [^] [^^] [^^^] [ответить] | +/– |  | как-бы в новости написано, что после установки флага его нельзя сбросить (можно только дальше ставить ограничения). в целом можно отследить откуда ставятся привилегии и ребутнуть (судя по флагам даже ребут можно перехватывать) некоторым особым образом.
 но в целом согласен - система только для ловли попыток нсд.
 |  |  | 
 |  | | 3.5, User294 (ok), 13:19, 03/04/2011 [^] [^^] [^^^] [ответить] | –1 +/– |  |  > судя по флагам даже ребут можно перехватывать В системе с открытыми сорцами вы в принципе можете перехватить все что хотите. Если есть реальное желание - можно очень неслабо доставить хацкерам, немного (или много) изменив работу сисколов и/или системных утилит. Попутно выслав алерт админу, когда ничего не подозревающий хацкер попробует юзать систему "как обычно". А приколитесь, хаксор не сможет например вытереть свои следы в невидимых ему логах. И он не сможет убить невидимые ему процессы ;).
 При этом хаксоры по сути попадут в окружение где УЖЕ запихан руткит. Только вот он играет против них, на стороне админа. Вышибить клин клином в общем то вполне валидный подход. Кто первый встал, того и тапки. У админа в этом плане есть некое преимущество :)
 |  |  | 
 |  | | 4.7, deadless (ok), 21:51, 04/04/2011 [^] [^^] [^^^] [ответить] | +/– |  |  >немного (или много) изменив работу сисколов и/или системных утилит бугога, а User294 будет стоять рядом и гарантировать работу всех остальных честных модулей, которым забыли сказать что работа сислока децл изменилась.
 |  |  | 
 |  | | 5.10, анон (?), 12:03, 07/04/2011 [^] [^^] [^^^] [ответить] | +/– |  | >работа сислока децл изменилась Кого-кого работа? Сислока?
 Вы хоть немного понимаете смысл слов, которыми пытаетесь оперировать?
 |  |  | 
 | 
 | 
 | 
 | 
 
 | 1.4, dry (ok), 10:21, 03/04/2011  [ответить] | +/– |  |  либо я что-то не понимаю, но (1 << 16) != 0xFFFEFFFF
 |  |  | 
 
|  | | 2.6, nobody (??), 16:19, 03/04/2011 [^] [^^] [^^^] [ответить] | +/– |  | и в-правду echo $((0xFFFEFFFF))
4294901759
 echo $((1 << 16))
65536
 
 |  |  | 
 |  | | 3.9, pavlinux (ok), 14:28, 05/04/2011 [^] [^^] [^^^] [ответить] | +/– |  |  (0xFFFFFFFF & ~0xFFFEFFFF) = 1 << 16 от сюда получаем:
 0xFFFFFFFF | (1<<16) = 0xFFFFFFFF | 0xFFFEFFFF
 маска 
 |  |  | 
 | 
 | 
 
 
 |