система обнаружения вторжений LIDS
Алексей Бутько, Главный информационно-вычислительный центр Вооруженных Сил, Минск, Беларусь, gnomsa@yandex.ru
LVEE 2009
LIDS – расширение для ядра Linux, включающее в себя возможности контроля доступа, не реализованные в Linux непосредственно: принудительный контроль доступа (Madatory Access Cotrol), детектор сканирования портов, защита файлов (даже от администратора) и защита процессов.
Linux, вопреки распространенному мнению, имеет множество проблем безопасности, и самая главная из них – всемогущество пользователя root. Для защиты как файлов, так и процессов, LIDS реализует списки контроля доступа, которые могут запретить доступ всем, включая администратора.
введение
В традиционной модели Linux могущество рута непоколебимо. root обходит запреты файловой системы, может выполнять любые операции. На критических системах такое могущество может быть опасным. Даже если администратор полностью отдает себе отчёт в своих действиях, это ещё не гарантирует безопасность системы: например, процесс, запущенный от его имени, может иметь уязвимость. А если злоумышленник каким-либо способом добудет пароль рута – сделать что-либо будет уже невозможно.
LIDS представляет собой патч ядра, который позволяет ограничить могущество рута. Процессам можно назначать разрешенные действия, а доступ к файлам ограничить даже руту.
функции
LIDS имеет несколько функций. Первая – встроенный детектор сканирования портов. Эта опция может быть выбрана на этапе сборки ядра. Детектор может быть интегрирован с другими программами (такими как scanlogd), либо просто выдавать информацию через syslog.
Важнейшая функция LIDS – принудительные ограничения доступа (ACL). Они делятся на две категории: действия, выполняемые над файлами (read/write/append) и действия, которые может выполнить процесс.
Большинство функций LIDS включаются на этапе сборки ядра, и если какие-то из них не были выбраны, подключить их потом будет невозможно.
конфигурация
После установки патча LIDS и пакета lidsadm создаются файлы:
/etc/lids/lids.cap – файл для назначения возможностей;
/etc/lids/lids.confLIDS – файл для хранения ACL;
/etc/lids/lids.pwLIDS – файл для хранения пароля;
/etc/lids/lids.netLIDS – файл сетевой конфигурации LIDS.
Каталог /etc/lids всегда закрыт для пользователей, даже для рута, и может быть отредактирован только администратором LIDS.
«опечатывание» ядра
Часто модули ядра подгружаются динамически в процессе работы. Этой возможностью охотно пользуются руткиты и, поскольку весь процесс происходит в пространстве ядра, их достаточно трудно обнаружить. LIDS может позволить подгрузку модулей только в процессе запуска системы до момента выполнения команды lidsadm -I. Как только ядро опечатоно, никакие модули подгружены быть уже не могут.
Команду lidsadm -I обычно помещают в стартовые скрипты на момент отработки всех остальных скриптов. Например, если машина загружается на уровень выполнения 2, можно поместить нечто подобное в /etc/rc2.d/S99sealkernel
#!/bin/sh
case “0 start” >&2; exit 1 ;;
esac
exit 0;
LFS
LFS в данном случае означает LIDS Free Session. Файлы конфигурации LIDS недоступны другим пользователям и процессам. Соответственно, для конфигурирования LIDS необходима сессия, свободная от этих запретов. Такая сессия вызывается командой lidsadm S - -LIDS. Она запрашивает пароль администратора LIDS и, если он введен корректно, запускает LFS.
конфигурирование LIDS с помощью lidsadm
Как только ядро с LIDS загружено, единственным способом повлиять на конфигурацию LIDS остается программа lidsadm. Основными ее аргументами являются:
lidsadm -Z – удаление всех ACL;
lidsadm -L – вывод текущих ACL;
lidsadm -V – вывод текущего набора возможностей;
lidsadm -U – обновление таблицы иннодов в /etc/lids/lids.conf;
lidsadm -I – опечатывание ядра;
lidsadm -A … – добавление новых ACL;
lidsadm -D … – удаление указанных ACL;
lidsadm S - -LIDS – запуск LFS;
lidsadm S - -LIDS_GLOBAL – полное отключение LIDS;
lidsadm S - +LIDS_GLOBAL – включение LIDS;
lidsadm S - +RELOAD_CONF – перезагрузка конфигурации;
Эти команды должны выполняться в LFS.
Lids.conf
Все созданные ACL хранятся в файле Lids.conf.Записи в нем модифицируются командами lidsadm -A и lidsadm -D. Править файл вручную нельзя!
Можно в целях автоматизации организовать добавление ACL скриптом. В его начало следует пометить команду lidsadm Z во избежание дублирования. После редактирования списка ACL необходимо выполнить команду lidsadm -S - +RELOAD_CONF, чтобы изменения вступили в силу.
просмотр списка ACL.
Как было сказано выше, все ACL хранятся в файле /etc/lids/lids.conf. Однако его просмотр даст мало информации, так как все защищаемые объекты хранятся там в виде инодов. Чтобы просмотреть список существующих ACL, достаточно выполнить команду lidsadm -L. Ее выводом будет список файловых и возможностных ACL в том порядке, в каком они записаны в lids.conf.
перезагрузка конфигурации
Загрузка конфигурации из /etc/lids производится только на этапе старта системы. Добавление или удаление ACL с помощью lidsadm A и lidsadm -D влияет только на файл /etc/lids/lids.conf. Чтобы внесенные изменения начали действовать, необходимо выполнить команду lidsadm -S - +RELOAD_CONF. Эта операция будет доступна только если на этапе компиляции были выбраны опции «Allow switching LIDS protections» и «Allow reloading config file». В противном случае потребуется перезагрузка системы.
lids.net
LIDS включает возможность отсылки предупреждений по сети, если на этапе компиляции была выбрана опция «Send Security alerts through network». В файле /etc/lids/lids.net хранятся параметры smtp, которые разрешают отсылку предупреждений безопасности на e-mail.
файловые ограничения
LIDS использует свой метод контроля доступа, итегрированный в виртуальную файловую систему на уровне ядра и не зависящий от конкретной файловой системы. Это значит, что ACL будут действовать на любую, в том числе и удаленно смонтированную файловую систему.
Существуют 4 типа ACL в LIDS:
DENY – полный запрет доступа;
READ – доступ только для чтения;
APPEND – доступ только для дописывания в конец файла;
WRITE – доступ для записи;
ACL добавляются так:
lidsadm -A -s <субъект> -o <объект> -j <вид доступа>
защита блочных устройств
Даже когда файловая система смонтирована и в ней назначены ACL, это не может уберечь от прямого чтения с блочного устройства. Последнее можно предотвратить путем установки возможности -17:CAP_SYS_RAWIO в lids.cap. Возможно, единственный субъект, которому можно позволить прямой доступ к устройствам — это графический сервер (если он используется). Сделать это можно так:
lidsadm -A -s /path/to/X_server -o CAP_SYS_RAWIO -j GRANT
lids.cap
Этот файл содержит набор возможностей для ядра. Они записываются в виде <+/→:<возможность>
заключение
LIDS предоставляет множество возможностей по совершенствованию безопасности системы. Главными преимуществами этой системы являются работа на уровне ядра использование принудительных правил доступа.