Международная конференция разработчиков
и пользователей свободного программного обеспечения

система обнаружения вторжений 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 предоставляет множество возможностей по совершенствованию безопасности системы. Главными преимуществами этой системы являются работа на уровне ядра использование принудительных правил доступа.