Слайд 2Введение
В традиционной модели Linux могущество рута непоколебимо. root обходит запреты файловой системы,
![Введение В традиционной модели Linux могущество рута непоколебимо. root обходит запреты файловой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-1.jpg)
может выполнять любые операции. На критических системах такое могущество может быть опасным.
Слайд 3Введение
Даже если администратор полностью отдает себе отчёт в своих действиях, это ещё
![Введение Даже если администратор полностью отдает себе отчёт в своих действиях, это](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-2.jpg)
не гарантирует безопасность системы: например процесс, запущенный от его имени может иметь уязвимость. А уж если злоумышленник каким-либо способом добудет пароль рута – сделать что-либо будет уже невозможно.
Слайд 4Введение
LIDS представляет собой патч ядра, который позволяет ограничить могущество рута. Процессам можно
![Введение LIDS представляет собой патч ядра, который позволяет ограничить могущество рута. Процессам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-3.jpg)
назначать разрешенные действия, а доступ к файлам ограничить даже руту.
Слайд 5Функции
LIDS имеет несколько функций. Первое – встроенный детектор сканирования портов. Эта опция
![Функции LIDS имеет несколько функций. Первое – встроенный детектор сканирования портов. Эта](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-4.jpg)
может быть выбрана на этапе сборки ядра. Детектор может быть интегрирован с другими программами (такими как scanlogd), либо просто выдавать информацию через syslog.
Слайд 6Функци
Важнейшая функция LIDS – это принудительные ограничения доступа (ACL). Они делятся на
![Функци Важнейшая функция LIDS – это принудительные ограничения доступа (ACL). Они делятся](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-5.jpg)
две категории: действия, выполняемые над файлами (read/write/append) и действия, которые может выполнить процесс
Слайд 7Конфигурация
После установки патча LIDS и пакета lidsadm создаются файлы:
/etc/lids/lids.cap файл для назначения
![Конфигурация После установки патча LIDS и пакета lidsadm создаются файлы: /etc/lids/lids.cap файл](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-6.jpg)
возможностей
/etc/lids/lids.confLIDS файл для хранения ACL
/etc/lids/lids.pwLIDS файл для хранения пароля
/etc/lids/lids.netLIDS файл сетевой конфигурации LIDS
Каталог /etc/lids всегда закрыт для пользователей, даже для рута и может быть отредактирован только администратором LIDS.
Слайд 8«Опечатывание» ядра
Обычно модули ядра могут подгружаться динамически в процессе работы. Этой возможностью
![«Опечатывание» ядра Обычно модули ядра могут подгружаться динамически в процессе работы. Этой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-7.jpg)
часто пользуются руткиты и, поскольку весь процесс происходит в пространстве ядра, их достаточно трудно обнаружить. LIDS может позволить подгрузку модулей только в процессе запуска системы до момента выполнения команды lidsadm -I. Как только ядро опечатоно никакие модули подгружены быть не могут.
Слайд 9«Опечатывание» ядра
Команду lidsadm -I обычно помещают в стартовые скрипты на момент отработки
![«Опечатывание» ядра Команду lidsadm -I обычно помещают в стартовые скрипты на момент](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-8.jpg)
всех остальных скриптов. Например, если машина загружается на уровень выполнения 2, можно поместить нечто подобное в /etc/rc2.d/S99sealkernel
#!/bin/sh
case "$1" in
start) /sbin/lidsadm -I ;;
stop) ;;
*) echo "Usage: $0 start" >&2; exit 1 ;;
esac
exit 0;
Слайд 10LFS
LFS в данном случае означает LIDS Free Session. Файлы конфигурации LIDS недоступны
![LFS LFS в данном случае означает LIDS Free Session. Файлы конфигурации LIDS](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-9.jpg)
другим пользователям и процессам. Соответственно для конфигурирования LIDS необходима сессия свободная от этих запретов. Такая сессия вызывается командой lidsadm -S -- -LIDS. Она запрашивает пароль администратора LIDS и, если он введен корректно, запускает LFS.
Слайд 11Конфигурирование LIDS с помощью lidsadm
Как только ядро с LIDS загружено единственным способом
![Конфигурирование LIDS с помощью lidsadm Как только ядро с LIDS загружено единственным](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-10.jpg)
повлиять на конфигурацию LIDS остается программа lidsadm. Основными ее аргументами являются:
lidsadm -Z удаление всех ACL
lidsadm -L вывод текущих ACL
lidsadm -V вывод текущего набора возможностей
lidsadm -U обновление таблицы иннодов в /etc/lids/lids.conf
Слайд 12Конфигурирование LIDS с помощью lidsadm
lidsadm -I опечатывание ядра
lidsadm -A ... добавление новых
![Конфигурирование LIDS с помощью lidsadm lidsadm -I опечатывание ядра lidsadm -A ...](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-11.jpg)
ACL
lidsadm -D ... удаление указанных ACL
lidsadm -S -- -LIDS запуск LFS
lidsadm -S -- -LIDS_GLOBAL полное отключение LIDS
lidsadm -S -- +LIDS_GLOBAL включение LIDS
lidsadm -S -- +RELOAD_CONF перезагрузка конфигурации
Эти команды должны выполняться в LFS
Слайд 13Lids.conf
Все созданные ACL хранятся в файле Lids.conf.Записи в нем модифицируются командами lidsadm
![Lids.conf Все созданные ACL хранятся в файле Lids.conf.Записи в нем модифицируются командами](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-12.jpg)
-A и lidsadm -D. Править файл вручную нельзя!
Можно в целях автоматизации организовать добавление ACL скриптом. В его начало следует пометить команду lidsadm -Z во избежании дублирования. После редактирования списка ACL необходимо выполнить команду lidsadm -S -- +RELOAD_CONF чтобы изменения вступили в силу.
Слайд 14Просмотр списка ACL.
Как было сказано выше, все ACL хранятся в файле /etc/lids/lids.conf.
![Просмотр списка ACL. Как было сказано выше, все ACL хранятся в файле](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-13.jpg)
Однако его просмотр даст мало информации, так как все защищаемые объекты хранятся там в виде иннодов. Чтобы просмотреть список существующих ACL достаточно выполнить команду lidsadm -L. Ее выводом будет список файловых и возможностных ACL в том порядке как они записаны в lids.conf.
Слайд 15Перезагрузка конфигурации
Загрузка конфигурации из /etc/lids производится только на этапе старта системы.
![Перезагрузка конфигурации Загрузка конфигурации из /etc/lids производится только на этапе старта системы.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-14.jpg)
Добавление или удаление ACL с помощью lidsadm -A и lidsadm -D влияет только на файл /etc/lids/lids.conf. Чтобы внесенные изменения начали действовать необходимо выполнить команду lidsadm -S -- +RELOAD_CONF. Эта операция будет доступна только если на этапе компиляции были выбраны опции «Allow switching LIDS protections» и «Allow reloading config file». В противном случае потребуется перезагрузка системы.
Слайд 16Lids.net
LIDS включает возможность отсылки предупреждений по сети, если на этапе компиляции была
![Lids.net LIDS включает возможность отсылки предупреждений по сети, если на этапе компиляции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-15.jpg)
выбрана опция «Send Security alerts through network». В файле /etc/lids/lids.net хранятся параметры smtp, которые позволяют отсылку предупреждений безопасности на e-mail.
Слайд 17Файловые ограничения
В LINUX существует 2 вида защиты файлов. Первый способ –
![Файловые ограничения В LINUX существует 2 вида защиты файлов. Первый способ –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-16.jpg)
это стандартные user/group/other разрешения, назначаемые командой chmod. Второй способ – атрбуты файловой системы +a, +i, +s, +d.
Слайд 18Файловые ограничения
LIDS использует свой метод контроля доступа, он итегрирован в виртуальную
![Файловые ограничения LIDS использует свой метод контроля доступа, он итегрирован в виртуальную](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-17.jpg)
файловую систему на уровне ядра и не зависит от конкретной файловой системы. Это значит, что ACL будут действовать на любую, в том числе и удаленно смонтированную файловую систему.
Слайд 19Файловые ограничения
ACL начинают действовать с момента, когда система стартует и прекращают только
![Файловые ограничения ACL начинают действовать с момента, когда система стартует и прекращают](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-18.jpg)
если LIDS будет отключен, что порой является причиной головной боли на машине с только что установленной LIDS.
Слайд 20Файловые ограничения
Существуют 4 типа ACL в LIDS:
DENY - полный запрет доступа
READ
![Файловые ограничения Существуют 4 типа ACL в LIDS: DENY - полный запрет](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-19.jpg)
- доступ только для чтения
APPEND - доступ только для дописывания в конец файла
WRITE - доступ для записи
Слайд 21Файловые ограничения
ACL могут быть назначены, как отдельным файлам, так и директориям, на
![Файловые ограничения ACL могут быть назначены, как отдельным файлам, так и директориям,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-20.jpg)
содержимое которых ACL будут действовать рекурсивно
ACL добавляются так:
lidsadm -A -s <субъект> -o <объект> -j <вид доступа>
Например команда
lidsadm -A -o /etc -j READ
делает каталог /etc доступным только для чтения всем субъектам.
Слайд 22Файловые ограничения
Команда
lidsadm -A -o /etc/shadow -j DENY запрещает всем субъектам доступ
![Файловые ограничения Команда lidsadm -A -o /etc/shadow -j DENY запрещает всем субъектам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-21.jpg)
к файл /etc/shadow Однко в данном случае для таких процессов как login или sshd следует доступ открыть:
lidsadm -A -s /usr/sbin/sshd –o /etc/shadow -j READ
Что разрешит процессу sshd доступ только для чтния
Слайд 23Защита блочных устройств
Даже когда файловая система смонтирована и в ней назначены
![Защита блочных устройств Даже когда файловая система смонтирована и в ней назначены](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-22.jpg)
ACL, это не может уберечь от прямого чтения с блочного устройства. Это можно предотвратить путем установки возможности -17:CAP_SYS_RAWIO в lids.cap. Возможно, единственный субъект, которому можно позволить прямой доступ к устройствам — это графический сервер (если он используется). Сделать это можно так:
lidsadm -A -s /path/to/X_server -o CAP_SYS_RAWIO -j GRANT
Слайд 24Индексные дескрипторы
Если просмотреть файл lids.conf, то можно увидеть, что ACL связаны не
![Индексные дескрипторы Если просмотреть файл lids.conf, то можно увидеть, что ACL связаны](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-23.jpg)
с объектами, а с их инодами. Это имеет как положительные, так и отрицательные стороны. Например, если у файла умется несколько жестких ссылок, то все они защищены одним ACL. Однако это же означает, что при изменении инода ACL разрушаются.
Иоды изменяются при удалении и создании файла с таким же именем. Так что имейте в виду, после подобного рода операций необходимо выполнить команду lidsadm –U, которая обновит ACL в lids.conf
Слайд 25LINUX возможности
В своё время была сделана попытка создать стандартный метод категорирования всех
![LINUX возможности В своё время была сделана попытка создать стандартный метод категорирования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-24.jpg)
проверок доступа в дискретный набор групп, называемых возможностями. Был разработан POSIX 1003.1e где были стандартизованы все возможности *nix-платформ, однако черновик был отклонен и стандартом так и не стал.
Слайд 26LINUX возможности
LINUX включает в себя один из вариантов этой модели. Вместо проверки
![LINUX возможности LINUX включает в себя один из вариантов этой модели. Вместо](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-25.jpg)
UID==0 в ядре используется вызов capable(). Он определяет возможности назначенные процессу. Полный список возможностей можно посмотреть в /usr/include/linux-x.x.xx/capability.h
Слайд 27LINUX возможности
В стандартной Linux-модели дело ограничивается назначением возможностей процессам, которые имеют uid/euid
![LINUX возможности В стандартной Linux-модели дело ограничивается назначением возможностей процессам, которые имеют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-26.jpg)
равный 0. Остальные процессы возможностей не имеют и с ними ядро разбирается по стандартной логике.
Слайд 28LINUX возможности
LIDS дополняет набор возможностей. Возможность можно удалять так что даже процессы
![LINUX возможности LIDS дополняет набор возможностей. Возможность можно удалять так что даже](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-27.jpg)
суперпользвателя не смогут их использовать, к тому же возможности не удаляются перманентно и их можно подключить опять если нужно. Также возможности можно будет добавлять любым процессам на уровне от программы к программе
Слайд 29Lids.cap
Этот файл содержит набор возможностей для ядра. Они записываются в виде
<+/->:<возможность>
+
![Lids.cap Этот файл содержит набор возможностей для ядра. Они записываются в виде](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-28.jpg)
означает, что возможность будет оставлена в наборе, - означает, что возможность не будет доступна ни одному из прцессов.
Слайд 30Lids.cap
Возможности не будут действовать при загрузке машины. Это сделано для того, чтобы
![Lids.cap Возможности не будут действовать при загрузке машины. Это сделано для того,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-29.jpg)
программы из /etc/rcX.d могли отработать без каких-либо ограничений. Возможности начинают действовать только после «опечатывания ядра» командой lidsadm –I
Просмотреть список возможностей можно выполнив команду lidsadm –V Однако опция –V будет доступна только если lidsadm был собран с параметром VIEW=1
Слайд 31Назначение исключений в возможностях
В традиционной linux-модели возможности, удаленные из набора, более недоступны
![Назначение исключений в возможностях В традиционной linux-модели возможности, удаленные из набора, более](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-30.jpg)
никаким процессам. LIDS дает возможность назначать возможности каждому процессу.
Слайд 32Назначение исключений в возможностях
Делается это так
lidsadm -A -s <процесс> -o <возможность>
![Назначение исключений в возможностях Делается это так lidsadm -A -s -o -j](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-31.jpg)
-j GRANT
Например:
lidsadm -A -s /usr/sbin/ntpdate -o CAP_SYS_TIME -j GRANT
разрешает процессу ntpdate менять системное время.
Слайд 33Специальные возможности
Обычно когда программа имеет возможность CAP_BIND_NET_SERVICE она может закрепится за любым
![Специальные возможности Обычно когда программа имеет возможность CAP_BIND_NET_SERVICE она может закрепится за](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-32.jpg)
портом младше 1024. LIDS дает возможность определить конкретный порт. Например 80 для httpd
lidsadm -A -s /usr/sbin/httpd -o CAP_BIND_NET_SERVICE 80-80 -j GRANT
Слайд 34Специальные возможности
Возможность CAP_INIT_KILL защищает демоны от приема сигналов. Если её отключить никакой
![Специальные возможности Возможность CAP_INIT_KILL защищает демоны от приема сигналов. Если её отключить](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-33.jpg)
пользователь или процесс не сможет сигнализировать демону.
Слайд 35Специальные возможности
Возможность CAP_HIDDEN позволяет прятать процессы. Процесс, неделенный такой возможностью не будет
![Специальные возможности Возможность CAP_HIDDEN позволяет прятать процессы. Процесс, неделенный такой возможностью не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420616/slide-34.jpg)
виден в /proc Это однако не 100% гарантия: процесс sshd например можно увидеть через 22 порт. Также можно азослать сигналы по всем PID с 1 по 65535 и, если будет получен отклик, а в /proc соответствующего PID не будет – значит процесс существует. Также определённые выводы можно сделать по содержимому /var/log/NAME.pid