LIDS -- система обнаружения и защиты от вторжения

LIDS- Linux Intrusion Detection/Defence System -- это патч для ядра Linux, добавляющий много новых возможностей для увеличения безопасности.LIDSпозволяет запретить или ограничить доступ к файлам, к памяти, блочным устройствам, сетевым интерфейсам, запущенным программам и т.д. даже для root'а. Правильнее сказать, именно для root'а, так как ограничить доступ для простого пользователя можно и стандартными средствами Linux. Данная система предназначена для защиты от хакера, который воспользовавшись "дырой" в какой-нибудь программе, получил права root'а.

В отличие от других средств защиты, входящих в поставку Linux, эту систему выключить нельзя, не зная пароль администратораLIDS, который в зашифрованном виде хранится в специальном файле, который виден только программе администрированияLIDS(не администратору, а именно программе:)). То же самое относится и к другим конфигурационным файламLIDS. Даже узнав каким-то образом пароль администратора, например, напоив настоящего root'а:), хакер не сможет отключитьLIDS, не находясь за взломанным компьютером.

LIDSпозволяет распределять права доступа к файлам, устройствам и т.д. на уровне программ, а не на уровне пользователей. Например, можно запретить доступ к файлу /etc/shadow для всех и вся так, что он даже при ls -a /etc виден не будет, и дать к нему доступ на чтение программам /bin/login, /bin/su, на чтение-запись программе /usr/bin/passwd и т.д., то есть тем программам, которые в нем действительно нуждаются.

LIDSпозволяет запретить перезапуск системы, так что человек, не находящийся в непосредственной близости к кнопке RESET, перегрузить систему не сможет.:)

ПосредствомLIDSможно запретить загрузку/выгрузку модулей ядра, это защитит систему от запуска модулей-троянов, собранных хакером для собственных нехороших нужд.

Информация о всех действиях, совершенных в сторону защищенных при помощиLIDSобъектов, записывается в логи и отправляется на e-mail, указанный в файле конфигурацииLIDS, непосредственно в момент совершения преступления:), что дает возможность администратору реагировать на все происходящее в системе незамедлительно.

ВLIDSесть встроенный детектор сканирования портов, обнаруживающий большинство известных способов сканирования. Работает этот детектор на уровне ядра, то есть отключить его невозможно.:)

LIDSработает только на машинах с i386 архитектурой и с ядром Linux'а не ниже 2.2.13.

АвторамиLIDSявляются два студента:Xie Huagangиз Китая иPhilippe Biondiиз Франции. Все претензии и вопросы по работеLIDS- к ним.

Установка

Существуют различные версииLIDSдля разных версий ядра Linux. К сожалению, авторы не придерживаются определенного дизайнаLIDS, поэтому он постоянно меняется от версии к версии. Документация, лежащая на ихсайтеотносится к версии 0.8.x, и к настройкеLIDSверсии 0.9.8, о которой пойдет речь, она уже не может быть применена. Вообще авторы не очень утруждают себя обновлением документации, но, несмотря на это, разобраться с работой программы не очень сложно. Сложно другое - правильно настроить систему так, чтоб ее работа была незаметной для обычных пользователей в смысле ущемления их обычных прав, но при этом препятствовала бы всем действиям, направленным к взлому системы. При настройкеLIDSнужно учесть работу всех программ, установленных в системе, чтоб их нормальная работа не прекратилась после установкиLIDS. Я сам не решился ставить и тестироватьLIDSна установленном у меня Mandrake 7.0 RE, а поставил Trustix Linux с меньшим количеством приложений и экспериментировал на нем.:)

Версия 0.9.8 была последней для ядра 2.2.16 на момент написания данного руководства. Если у тебя другая версия ядра - выбериздесьподходящую тебе версиюLIDS. Но я не гарантирую, что данное описание подойдет для другой версии.:)

После того, как скачаешь, распакуй полученный архив:

tar xfzLIDS-0.9.8-2.2.16.tar.gz

Появится каталогLIDS-0.9.8 со следующим содержанием:

doc/ - каталог с файлами описаний работы
example/ - каталог с примерами конфигурационных файлов
lidsadm-0.9.8/ - исходники программы администрирования
ChangeLog - история изменений от версии к версии
INSTALL - руководство по установке
README - описание отличий 0.9.7 и 0.9.8 от предыдущих версий
LIDS-0.9.8-2.2.16.patch - патч для ядра

Перед установкой патча советую сохранить исходники ядра. На всякий случай.:)

cd /usr/src cp -R linux-2.2.16 linux-2.2.16.orig

Теперь можно пропатчить ядро:

cd /usr/src patch -p1 </полный_путь_к_файлу_патча/LIDS-0.9.8-2.2.16.patch

Следующий шаг - компиляция и установка утилиты администрирования.

cd /каталог_в_котором_находится_LIDS/lidsadm-0.9.8 make make install

Можно вместо make набрать make VIEW=1. Различие между этими двумя способами сборки заключаются в том, что во втором случае утилита администрирования поддерживает дополнительную опцию - -V, позволяющую выводить текущие установки способностей. Это небезопасно, так как позволяет хакеру просмотреть текущие установкиLIDS, но можно оставить эту опцию включенной до тех пор, пока система не будет окончательно настроена, после чего лучше пересобрать lidsadm без возможности просмотра установок.

Во время установки (при выполнении make install), было выведено сообщение, что файл lidsadm.1.gz не найден. Решается эта проблема просто:

gzip lidsadm.1 make install

Либо можно просто изменить Makefile, либо самому скопировать файл lidsadm.1 в /usr/man/man1.:)

Теперь можно приступать к конфигурации ядра. 

Конфигурация ядра

Чтоб настроить ядро, добавив поддержкуLIDS, воспользуйся make menuconfig или любой другой командой конфигурации ядра, удобной тебе:

cd /usr/src/linux make menuconfig

Первым делом выбери пункт меню Code maturity level options. Внутри ты найдешь опцию Prompt for development and/or incomplete code/drivers(CONFIG_EXPERIMENTAL). Данная опция должна быть включена (CONFIG_EXPERIMENTAL=y).

[*] Prompt for development and/or incomplete code/drivers

Затем выбери пункт меню General setup. Найди опцию Sysctl support(CONFIG_SYSCTL). Данная опция также должна быть включена (CONFIG_SYSCTL=y).

[*] Sysctl support

Затем выбери пункт Linux Intrusion Detection System. Внутри ты найдешь различные параметры настройкиLIDS. Первым идет включение поддержкиLIDSв ядре. Нажми пробел на этом пункте для включения поддержки:

[*] Linux Intrusion Detection System support (EXPERIMENTAL)

После включения поддержкиLIDS, возникнет список различных опций настройкиLIDS:

Maximum protected objects to manage(CONFIG_LIDS_MAX_INODE)

Данный пункт позволяет установить максимальное количество защищаемых объектов. По умолчанию 1024. Чем больше число, тем больше размер ядра.:)

Maximum ACL subjects to manage(CONFIG_LIDS_MAX_SACL)

Позволяет установить максимальное количество субъектов правил доступаLIDS. По умолчанию 1024.

Maximum ACL objects to manage(CONFIG_LIDS_MAX_OACL)

Позволяет установить максимальное количество объектов правил доступаLIDS. По умолчанию 1024. Об объектах, субъектах правил доступа, самих правилах, защите объектов попозже.:)

Maximum protected proceeds(CONFIG_LIDS_MAX_PROTECTED_PID)

Позволяет установить максимальное количество защищаемых процессов. По умолчанию 1024.

Hang up console when raising securit alert(CONFIG_LIDS_HANGUP)

Данный пункт включает/отключает возможность закрытия консоли, с которой произошло нарушение безопасности. Например, при попытке записи в защищенный файл, окно терминала пользователя, пытающегося это сделать, закрывается, выкидывая его таким образом из системы. Рекомендуется включить данную опцию.

Security alert when execing unprotected programs before sealing LIDS(CONFIG_LIDS_SA_EXEC_UP)

Включает/отключает вывод сообщения о нарушении безопасности при запуске незащищенных программ до установки способностей. Рекомендуется включить данную опцию, т.к. это позволит обнаружить программы, которые администратор либо забыл защитить при помощиLIDS, либо которые были установлены в начальную загрузку злобным хакером.:) О способностях позже.:)

Do not execute unprotected programs before sealing LIDS(CONFIG_LIDS_NO_EXEC_UP)

Включает/отключает запрет на запуск незащищенных программ до установки способностей. Не включай эту опцию, пока не будешь уверен в том, что все программы, запускающиеся при начальной загрузке, защищены!

Try not to flood logs(CONFIG_LIDS_NO_FLOOD_LOGS)

При включении этой опцииLIDSне будет записывать в логи подряд идущие сообщения об одном и том же нарушении защиты. Для большей безопасности рекомендуется не включать данную опцию.

Autorized time between two identic logs (seconds)(CONFIG_LIDS_TIMEOUT_AFTER_FLOOD)

Здесь устанавливается время в секундах, в течении которых проверяется появление двух идентичных сообщений, для того, чтоб не записывать одинаковые сообщения в логи. По умолчанию 60 секунд.

Allow switching LIDS protections(CONFIG_LIDS_ALLOW_SWITCH)

Включает/отключает возможность отключения и включенияLIDSв процессе работы системы после ввода пароля. При включение данной опции появляется возможность поменять любые параметры работы без перезагрузки системы. Для лучшей безопасности рекомендуется отключить данную опцию, но пока ты полностью не разобрался с работой и настройкойLIDSлучше оставить ее включенной.

Numbers of attempts to submit password(CONFIG_LIDS_MAX_TRY)

Количество попыток ввода пароля, по истечению которых отключениеLIDSстановится невозможным на заданный промежуток времени. По умолчанию 3. Для большей безопасности поставь 1.:)

Time to wait after fail (seconds)(CONFIG_LIDS_TTW_FAIL)

Время в секундах, в течении которого после ввода неправильного пароля указанное количество раз, отключениеLIDSстановится невозможным. По умолчанию 3 секунды. Для большей безопасности поставь 3600 секунд, чтоб хакер сильнее помучился.:)

Allow remote users to switch LIDS protections(CONFIG_LIDS_REMOTE_SWITCH)

Дает возможность удаленным пользователям отключатьLIDS. Не рекомендуется включать данную опцию.

Allow any program to switch LIDS protections(CONFIG_LIDS_ANY_PROG_SWITCH)

Дает возможность любой программе отключатьLIDS. Для чего может понадобится данная опция даже авторыLIDSне знают. Настоятельно рекомендуется не включать эту опцию!

Allow reloading config. file(CONFIG_LIDS_RELOAD_CONFIG)

Если ты отключаешь защиту, то видимо для того, чтоб изменить какие-то настройки. Эти настройки не вступят в силу до тех пор, пока ты не дашь команду считать заново файлы конфигурации. Данная опция включает возможность переконфигурацииLIDSбез перезагрузки компьютера.

Port Scanner Detector in kernel(CONFIG_LIDS_PORT_SCAN_DETECTOR)

При включении данной опции в ядро вкомпиливается детектор сканирования портов. Детектор очень мощный, определяет практически все известные методы сканирования портов. Рекомендуется включить данную опцию.

Send security alerts through network(CONFIG_LIDS_SA_THROUGH_NET)

Включает/отключает возможность отправки электронной почты при нарушении безопасности на указанный удаленный e-mail с информацией о нарушении. Письмо отправляется незамедлительно при попытке совершения несанкционированных действий. Для отправки может использоваться любой smtp-сервер, как удаленный, так и локальный.

Hide KLIDS network threads(CONFIG_LIDS_SA_HIDE_KLIDS)

Включение данной опции позволяет скрывать сетевые соединенияLIDS. Они не будут видны ни в /proc, ни при запуске netstat. Но в этом случае все ошибки соединения с smtp- сервером не будут записываться в логи.

Number of connection tries before giving up(CONFIG_LIDS_NET_MAX_TRIES)

Здесь указывается количество попыток соединения с smtp-сервером. Если соединение не будет установлено - письмо с информацией о нарушении безопасности не будет отправлено. По умолчанию 3. Для большей уверенности поставь здесь достаточно большое число.

Sleep time after a failed connection(CONFIG_LIDS_NET_TIMEOUT)

Время в секундах между попытками соединения.

Message queue size(CONFIG_LIDS_MSGQUEUE_SIZE)

Максимальное количество сообщений в очереди. При превышении данного количества, самое старое неотправленное сообщение удаляется из очереди.

Use generic mailer pseudo-script(CONFIG_LIDS_MAIL_SCRIPT)

Включении данной опции указываетLIDSиспользовать стандартный скрипт для отправки сообщения. Отключение указывает использовать скрипт пользователя. В версии 0.9.8 эта опция не работает. Поэтому обязательно должна быть включена. В предыдущих версиях работала и позволяла использовать свой скрипт для отправки сообщений на удаленный компьютер. Можно было выбрать протокол (TCP или UDP) и другие параметры передачи сообщения. Хотя если немного поработать над исходниками (/usr/src/linux/kernel/KLIDS.c), можно заставить эту опцию работать.:) Но лучше предоставить эту работу авторам.

LIDS debug(CONFIG_LIDS_DEBUG)

Эта опция добавлена только в версии 0.9.8. Используется для включение вывода отладочных сообщенийLIDS. Если ты не собираешься сам переписывать исходникиLIDS- оставь эту опцию отключенной.

Таким образом, после настройки всех параметров, в /usr/src/linux/.config должны появится строки, примерно такого содержания:

CONFIG_LIDS=y CONFIG_LIDS_MAX_INODE=1024 CONFIG_LIDS_MAX_SACL=1024 CONFIG_LIDS_MAX_OACL=1024 CONFIG_LIDS_MAX_PROTECTED_PID=1024 CONFIG_LIDS_HANGUP=y CONFIG_LIDS_SA_EXEC_UP=y # CONFIG_LIDS_NO_EXEC_UP is not set CONFIG_LIDS_NO_FLOOD_LOG=y CONFIG_LIDS_TIMEOUT_AFTER_FLOOD=60 CONFIG_LIDS_ALLOW_SWITCH=y CONFIG_LIDS_MAX_TRY=3 CONFIG_LIDS_TTW_FAIL=3600 # CONFIG_LIDS_REMOTE_SWITCH is not set # CONFIG_LIDS_ALLOW_ANY_PROG_SWITCH is not set CONFIG_LIDS_RELOAD_CONF=y CONFIG_LIDS_PORT_SCAN_DETECTOR=y CONFIG_LIDS_SA_THROUGH_NET=y CONFIG_LIDS_HIDE_KLIDS=y CONFIG_LIDS_NET_MAX_TRIES=3 CONFIG_LIDS_NET_TIMEOUT=10 CONFIG_LIDS_MSGQUEUE_SIZE=16 CONFIG_LIDS_MAIL_SCRIPT=y # CONFIG_LIDS_DEBUG is not set

Естественно, значения параметров настройки ядра у тебя могут не совпадать с приведенными выше, но имена параметров должны быть такими же.:)

Теперь спокойно можно пересобрать и установить новое ядро.

cd /usr/src/linux make clean dep install modules modules_install

Пока идет компиляции ядра, можно занятся настройкой других параметровLIDS. НО НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ПЕРЕГРУЖАЙ МАШИНУ, ПОКА НЕ ЗАКОНЧИШЬ НАСТРОЙКУLIDS!!!

Установка способностей, параметры отправки сообщения, пароль администратора

При установке LIDSadm в каталоге /etc появляется каталогLIDS, содержащий четыре файла с параметрами настройкиLIDS:

LIDS.cap

В этом файле хранятся текущие значения установок способностей.

LIDS.net

Этот файл содержит настройки отправки сообщения на удаленный почтовый аккаунт.

LIDS.pw

Здесь записан в зашифрованном методом RipeMD-160 виде пароль администратора. Изменять этот файл можно только с помощью LIDSadm!

LIDS.conf

Текущие установки правил доступа. Изменять этот файл можно только с помощью LIDSadm!

Способности

Способности (capabilities) - это привилегии программ совершать какие-либо действия.LIDSпозволяет устанавливать и отменять большое количество способностей.LIDSподдерживает способность перезагружать компьютер (CAP_SYS_BOOT), изменять владельца файла (CAP_CHOWN), загружать/выгружать модули ядра (CAP_SYS_MODULE) и многие другие.

Текущие установки способностей хранятся в файле /etc/LIDS/LIDS.cap в формате: [+|-] Номер:Способность. + включает способность, - - отключает, например +22:CAP_SYS_BOOT разрешает перезагрузку, -22:CAP_SYS_BOOT - запрещает. Изменять его можно (да и нужно) с помощью любого текстового редактора. Выключение способности влияет на все программы, кроме тех, которым напрямую указана данная способность с помощью правил доступа LIDSadm. Включение способности влияет на все программы без исключения. Нельзя включить способность у всех программ, а у нескольких выключить. Первоначальное содержимое файла такое:

+0:CAP_CHOWN +1:CAP_DAC_OVERRIDE +2:CAP_DAC_READ_SEARCH +3:CAP_FOWNER +4:CAP_FSETID +5:CAP_KILL +6:CAP_SETGID +7:CAP_SETUID +8:CAP_SETPCAP -9:CAP_LINUX_IMMUTABLE -10:CAP_NET_BIND_SERVICE +11:CAP_NET_BROADCAST -12:CAP_NET_ADMIN -13:CAP_NET_RAW +14:CAP_IPC_LOCK +15:CAP_IPC_OWNER -16:CAP_SYS_MODULE -17:CAP_SYS_RAWIO -18:CAP_SYS_CHROOT +19:CAP_SYS_PTRACE +20:CAP_SYS_PACCT -21:CAP_SYS_ADMIN +22:CAP_SYS_BOOT +23:CAP_SYS_NICE +24:CAP_SYS_RESOURCE +25:CAP_SYS_TIME +26:CAP_SYS_TTY_CONFIG +27:CAP_HIDDEN+28:CAP_INIT_KILL

Остановлюсь поподробней на каждой из них:

CAP_CHOWN

С помощью этого параметра устанавливается способность программ изменять владельца и группу владельца файла.

CAP_DAC_OVERRIDE

Включает/отключает способность программ, запускаемых под root'ом, не принимать во внимание режимы доступа к файлам. Например, при включенной данной способности root может открыть и изменить файл, который принадлежит dh и имеет режим доступа 0600, при отключенной данной опции, root не в состоянии будет даже открыть данный файл. Короче говоря, root при отключении данной способности приравнивается к обыкновенному пользователю при доступе к файлам.:)

CAP_DAC_READ_SEARCH

Включает/отключает способность программ, запускаемых под root'ом, не принимать во внимание режимы доступа к каталогам (чтение и поиск).

CAP_FOWNER

Запрещает/разрешает операции с файлами, когда владелец файла должен совпадать с пользователем, совершающим операцию. Например, изменение режима доступа к файлу (chmod). Режим доступа может изменять либо владелец файла, либо root. При отключении этой способности, root уже будет не в состоянии изменить режим доступа.:) То же относится к изменению атрибутов файлов (chattr).

CAP_FSETID

Запрещает/разрешает установку SUID'ного или SGID'ного бита на чужих файлах (не принадлежащих root'у).

CAP_KILL

Включает/отключает способность root'овых процессов убивать чужие процессы.

CAP_SETGID

Управляет способностью root'овых программ сменять группу, под которой работает программа. Так работает, например, httpd, sendmail, postfix, ftpd, safe_finger и т.д.

CAP_SETUID

Управляет способностью root'овых программ сменять пользователя, под которым работает программа.

CAP_SETPCAP

Включает/отключает способность программ менять способности.

CAP_LINUX_IMMUTABLE

Управляет способностью снимать атрибуты S_IMMUTABLE (chattr -i) и S_APPEND (chattr -a) с файлов. Рекомендуется отключить данную способность.

CAP_NET_BIND_SERVICE

Включает/отключает способность программ привязываться к порту с номером <1024.

CAP_NET_BROADCAST

Управляет способностью программ рассылать широковещательные пакеты.

CAP_NET_ADMIN

Этот параметр управляет большим количеством различных способностей: конфигурирование сетевых интерфейсов, изменение правил firewall'а, изменение таблиц routing'а и многих других, связанных с сетевыми настройками Linux. Рекомендуется отключить данную способность.

CAP_NET_RAW

Управляет способностью программ использовать сокет-соединения.

CAP_IPC_LOCK

Управляет способностью root'овых процессов блокировать сегменты разделяемой памяти.

CAP_IPC_OWNER

Управляет доступом root'овых программ к ресурсам межпроцессорного взаимодействия чужих процессов.

CAP_SYS_MODULE

Управляет способностью загружать/выгружать модули ядра. Рекомендуется отключить данную способность.

CAP_SYS_RAWIO

Управляет доступом на чтение-запись к таким устройствам, как /dev/mem,/dev/kmem,/dev/port, /dev/hd??, /dev/sd??. Рекомендуется отключить данную способность.

CAP_SYS_CHROOT

Управляет способностью устанавливать корневой каталог для текущего shell'а. Рекомендуется отключить данную способность.

CAP_SYS_PTRACE

Данный параметр включает/отключает способность программ использовать вызов функции ptrace(), которая позволяет управлять выполнением процессов-потомков процессу-родителю. Для более подробной информации смотри man ptrace.

CAP_SYS_PACCT

Управляет способностью конфигурировать учет процессов. Для более подробной информации смотри man ac, man lastcomm, man accton, man sa. Рекомендуется отключить данную способность.

CAP_SYS_ADMIN

Управляет множеством способностей: управление /dev/random, создание новых устройств, конфигурирование дисковых квот, настройка работы klogd, установка имени домена, установка имени хоста, сброс кэша, монтирование/размонтирование дисков, включение/отключение swap-партиции, установка параметров последовательных портов и др. Рекомендуется отключить данную способность.

CAP_SYS_BOOT

Данный параметр управляет способностью перегружать систему.

CAP_SYS_NICE

Управляет способностью изменять приоритет чужих процессов. Рекомендуется выключить данную способность.

CAP_SYS_RESOURCE

Способность изменять лимиты использования ресурсов системы: дисковые квоты, зарезервированное пространство на ext2-партициях, максимальное количество консолей и т.д. Рекомендуется выключить данную способность.

CAP_SYS_TIME

Управляет способностью изменять системное время. Рекомендуется выключить данную способность.

CAP_SYS_TTY_CONFIG

Способность изменять настройки tty-устройств.

CAP_HIDDEN

Способность программ делаться невидимыми в списке процессов. Не влияет на все программы. Рекомендуется включить данную опцию.

CAP_INIT_KILL

Способность убивать процессы-потомки процесса init. К таким процессам относятся практически все демоны.

Первоначально можно установить следующие настройки:

+0:CAP_CHOWN +1:CAP_DAC_OVERRIDE +2:CAP_DAC_READ_SEARCH +3:CAP_FOWNER +4:CAP_FSETID +5:CAP_KILL +6:CAP_SETGID +7:CAP_SETUID +8:CAP_SETPCAP +9:CAP_LINUX_IMMUTABLE +10:CAP_NET_BIND_SERVICE +11:CAP_NET_BROADCAST +12:CAP_NET_ADMIN +13:CAP_NET_RAW +14:CAP_IPC_LOCK +15:CAP_IPC_OWNER -16:CAP_SYS_MODULE -17:CAP_SYS_RAWIO +18:CAP_SYS_CHROOT +19:CAP_SYS_PTRACE +20:CAP_SYS_PACCT -21:CAP_SYS_ADMIN +22:CAP_SYS_BOOT +23:CAP_SYS_NICE +24:CAP_SYS_RESOURCE +25:CAP_SYS_TIME +26:CAP_SYS_TTY_CONFIG +27:CAP_HIDDEN+28:CAP_INIT_KILL

Это защитит систему от простейших атак, а остальное меняй на свое усмотрение.

Для первоначальной (в процессе загрузки) инициализации параметров способностей используется команда LIDSadm -I. Обычно ее ставят в какой-нибудь rc-скрипт, после запуска всех демонов. Можно поставить ее в конце /etc/rc.d/rc.local. Таким образом, отключение способностей сработает только после запуска всех необходимых для работы сервера программ. Например, если ты отключил CAP_NET_ADMIN - это никак не повлияет на инициализацию твоих сетевых интерфейсов lo, ethX, pppX и т.д. при начальной загрузке.

Параметры отправки сообщения

Файл /etc/LIDS/LIDS.net, отвечающий за параметры отправки сообщения о нарушении безопасности, состоит из строк, имеющих следующий формат:

ПАРАМЕТР=ЗНАЧЕНИЕ_ПАРАМЕТРА

Параметры могут быть следующие:

MAIL_SWITCH

Данный параметр показывает, включена (значение 1) или отключена (значение 0) функция отправки сообщения.

MAIL_SWITCH=1

MAIL_RELAY

Здесь указывается IP и порт удаленного или локального smtp сервера в формате IP:ПОРТ. Рекомендуется использовать удаленный smtp-сервер.

MAIL_RELAY=127.0.0.1:25

MAIL_SOURCE

Указывается имя хоста, с которого отправляется сообщение.

MAIL_SOURCE=localhost

MAIL_FROM

Указывается адрес отправителя.

MAIL_FROM=LIDS@my_domain.com

MAIL_TO

Адрес получателя.

MAIL_TO=someone@other_domain.com

MAIL_SUBJECT

Тема сообщения.

MAIL_SUBJECT=SOS! I'm cracked!

Пароль администратора

Пароль администратора вводится при запуске команды LIDSadm -P. В отличие от предыдущих версийLIDS, где пароль забивался в ядро, в версии 0.9.8 пароль можно менять периодически, что повышает безопасность.

# lidsadm -P MAKE PASSWD enter password: Verifying enter password: Writed password into the files

В файле /etc/lids/lids.pw появилось слово из 32 символов - это и есть твой пароль в зашифрованном виде.

Следующий шаг - прописывание правил доступа.

Правила доступа

Вся настройкаLIDSделается с помощью одной программы -LIDSadm.LIDSadm работает в двух режимах - настройки правил доступа и ввода команд администрирования. Каждому режиму соответствует несколько параметров запуска.

Как я уже указывал, установки правил доступа находятся в файле /etc/LIDS/LIDS.conf. Изначально он не пустой. Авторы внесли туда наиболее часто используемые правила доступа. Можешь посмотреть его содержимое - все равно ничего не поймешь.:) Да оно и не надо. Файл этот просматривается и изменяется посредствомLIDSadm. Посмотреть установки можно с помощью командыLIDSadm -L. Ты должен увидеть следующее:

LIST Subject ACCESS TYPE Object Any File READ /sbin Any File READ /bin Any File READ /boot Any File READ /lib Any File READ /usr Any File DENY /etc/shadow /bin/login READ /etc/shadow /bin/su READ /etc/shadow Any File APPEND /var/log Any File WRITE /var/log/wtmp /sbin/fsck.ext2 WRITE /etc/mtab Any File WRITE /etc/mtab Any File WRITE /etc /usr/sbin/sendmail WRITE /var/log/sendmail.st /bin/login WRITE /var/log/lastlog /bin/cat READ /home/xhg Any File DENY /home/httpd /usr/sbin/httpd READ /home/httpd Any File DENY /etc/httpd/conf /usr/sbin/httpd READ /etc/httpd/conf /usr/sbin/sendmail WRITE /var/log/sendmail.st /usr/X11R6/bin/XF86_SVGA NO_INHERIT RAWIO /usr/sbin/in.ftpd READ /etc/shadow /usr/sbin/httpd NO_INHERIT HIDDEN

Данные правила доступа прекрасно подходят для большинства случаев. Но использовать ты их не сможешь, т.к. в файле /etc/LIDS/LIDS.conf кроме имен файлов, хранятся также номера inode'ов, а они не будут совпадать с номерами inode'ов на твоей Linux-партиции.:) Информацию об inode'ах можно обновить. Делается это командой LIDSadm -U. Кроме этого некоторые правила доступа неправильны. Объекты типа RAWIO и HIDDEN в данной версии не работают. Советую очистить все правила доступа и создать их заново. Очистить можно командой LIDSadm -Z.

Правила доступа состоят из трех элементов: субъекта (в оригинале subject), объекта (в оригинале object) и цели (в оригинале target). Объектом является любой файл или каталог, на который и должны действовать правила доступа и защитаLIDS. Если в качестве объекта указывается каталог, то все файлы в нем и вложенные каталоги с их файлами автоматически становятся объектами. Субъектом является любая защищенная программа, которой дают доступ к защищаемому объекту, т.е. прежде чем использовать программу в качестве субъекта, ее саму надо защитить средствамиLIDSот посягательств, применив к ней правила доступа как к объекту. Если субъект не указан, то субъектом является любая программа. Целью является тип доступа - доступ на чтение (READ), запись (WRITE), запрет на какой-либо доступ (DENY), открытие только для дозаписи (APPEND) и игнорирование защиты (IGNORE). Не слишком замудренно?:) Покажу на примерах.

Добавление нового правила происходит по команде:

LIDSadm -A -s субъект -o объект -j цель

Для начала необходимо защитить каталоги /bin, /sbin, /etc, /usr/bin, /usr/sbin, /lib, /boot определив для них доступ только на чтение всем программам.

LIDSadm -A -o /bin -j READ LIDSadm -A -o /sbin -j READ LIDSadm -A -o /etc -j READ LIDSadm -A -o /usr/bin -j READ LIDSadm -A -o /usr/sbin -j READ LIDSadm -A -o /lib -j READ LIDSadm -A -o /boot -j READ

Данные настройки защитят систему от установки rootkit'а или какого другого "трояна". Но в Linux'е есть программы, которые пишут в вышеперечисленные каталоги. Например, /bin/mount, /bin/umount, /sbin/fsck.ext2 пишут в файл /etc/mtab и создают временные файлы в /etc. В каталог /etc также пишут /etc/rc.d/rc.local (создает файлы /etc/issue и /etc/issue.net) и /etc/rc.d/rc.sysinit (очищает /etc/mtab и создает /etc/HOSTNAME). Лучше закомментировать строки, отвечающие за запись в /etc в этих скриптах. Но можно и дать им доступ - хуже не будет. В каталог /lib/modules/2.2.16-5tr пишет /sbin/depmod (пересоздает /lib/modules/2.2.16-5tr/modules.dep, название каталога зависит от версии твоего ядра). Таким образом получается:

LIDSadm -A -s /bin/mount -o /etc -j WRITE LIDSadm -A -s /bin/umount -o /etc -j WRITE LIDSadm -A -s /sbin/fsck.ext2 -o /etc/mtab -j WRITE LIDSadm -A -s /etc/rc.d/rc.local -o /etc -j WRITE LIDSadm -A -s /etc/rc.d/rc.sysinit -o /etc/HOSTNAME -j WRITE LIDSadm -A -s /etc/rc.d/rc.sysinit -o /etc/mtab -j WRITE LIDSadm -A -s /sbin/depmod -o /lib/modules/2.2.16-5tr -j WRITE

Естественно, я указал не все программы, которые должны иметь доступ в каталог /etc. Вычислять остальные программы я предоставляю тебе.:)

Файл /etc/shadow лучше спрятать вообще. Это защитит от кражи паролей пользователей.

LIDSadm -A -o /etc/shadow -j DENY

Если оставить все так, ни один пользователь (как и сам root) не сможет зарегистрироваться в системе.:) Доступ к /etc/shadow требуют многие программы. К ним можно смело отнести /bin/login, /bin/su. Также пользователям может потребоваться доступ по ftp.

LIDSadm -A -s /bin/login -o /etc/shadow -j READ LIDSadm -A -s /bin/su -o /etc/shadow -j READ LIDSadm -A -s /usr/sbin/in.ftpd -o /etc/shadow -j READ

В описанииLIDSесть прекрасный пример защиты от замены головной страницы web-сервера, самой любимой шутки хакеров.:) Сначала прячем от всех и вся каталог /home/httpd:

LIDSadm -A -o /home/httpd -j DENY

Затем даем демону httpd доступ на чтение на этот каталог:

LIDSadm -A -s /usr/sbin/httpd -o /home/httpd -j READ

То же можно сделать и с файлами конфигурации web-сервера:

LIDSadm -A -o /etc/httpd/conf -j DENY LIDSadm -A -s /usr/sbin/httpd -o /etc/httpd/conf -j READ

Неплохо было бы также защитить от изменений файлы логов. Сначала надо сделать каталог /var/log доступным только для дозаписи:

LIDSadm -A -o /var/log -j APPEND

Некоторые файлы дожны быть доступны для записи:

LIDSadm -A -s /bin/login -o /var/log/lastlog -j WRITE LIDSadm -A -o /var/log/wtmp -j WRITE LIDSadm -A -s /usr/sbin/sendmail -o /var/log/sendmail.st -j WRITE

Если ты пользуешься /usr/sbin/logrotate, то лучше предоставить этой программе доступ на запись ко всему каталогу:

LIDSadm -A -s /usr/sbin/logrotate -o /var/log -j WRITE

В качестве объекта правил доступа может также служить способность, т.е. если ты отключил какую-то способность для всех программ, ты можешь предоставить ее какой-то определенной. Целью в данном случае могут являться - предоставлять потомкам процесса данную способность (INHERIT) или не предоставлять (NO_INHERIT). Предположим, если ты убрал способность CAP_SYS_RAWIO у всех программ, то такая способность должна быть предоставлена X-серверу, причем этой способностью не должны обладать его потомки.

LIDSadm -A -s /usr/X11R6/bin/XF86_SVGA -t -o CAP_SYS_RAWIO -j NO_INHERIT

Заметь: для использования способности в качестве объекта правил доступа, должно применяться сочетание параметров -t -o, а не просто -o, как в случае с доступом к файлам.

Еще один пример: если ты отменил способность CAP_SYS_ADMIN, то она понадобиться /bin/update и ее потомкам.

LIDSadm -A -s /bin/update -t -o CAP_SYS_ADMIN -j INHERIT

Существует одна способность, которая не влияет на все программы, но может предоставлена какой-то определенной - эта способность скрывать себя во время выполнения CAP_HIDDEN. Программа, имеющая такую способность не видна в списке процессов, а следовательно с ней ничего нельзя сделать.:)

LIDSadm -A -s /usr/sbin/httpd -t -o CAP_HIDDEN -j NO_INHERIT LIDSadm -A -s /sbin/syslogd -t -o CAP_HIDDEN -j NO_INHERIT LIDSadm -A -s /sbin/klogd -t -o CAP_HIDDEN -j NO_INHERRIT

Таким образом в списке процессов не будет видет http-сервер, system logger и kernel logger, хотя они могут быть запущены.:)

Если какое-то правило доступа тебе уже не нужно, или оно внесено ошибочно, его можно удалить командой LIDSadm -D.

LIDSadm -D -s субъект -o объект -j цель

Можно указывать только субъект или только объект, в этом случае удалятся все правила, в которых встречается указанный субъект или объект. Если указан и субъект, и объект, удалится правило, в котором присутствует и указанный субъект, и указанный объект одновременно.

Это далеко не полный список правил, который должен быть. Список правил зависит от программного обеспечения, которое у тебя установлено и работает, и от тех способностей, что ты отключил. Тебе придется попотеть, прежде чем твоя система заработает должным образом.:)

Сейчас уже ты можешь перегрузить систему, после чего сможешь убедится в работоспособности системы. Если что-то пойдет не так, ты всегда сможешь загрузить Linux c выключеннымLIDS. Для этого в строке ввода lilo надо указать security=0.

LILO boot: linux security=0

Также в процессе работы можно отключитьLIDSи изменить любые способности и правила доступа.

Команды администрирования

АдминистрированиеLIDSв процессе работы системы осуществляется при помощи ключа -S команды LIDSadm.

LIDSadm -S -- [+|-] флаг

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

Первое, что может понадобиться - это отключениеLIDS. Делается это так:

LIDSadm -S -- -LIDS

После запуска этой команды работаLIDSбудет прекращена в текущем командном интерпретаторе и его потомках, т.е. программах, которые ты будешь в нем запускать. Это никак не повлияет на другие программы и систему в целом. После этого тебе будет доступен каталог /etc/LIDS и все файлы находящиеся в нем. Ты можешь изменить установки способностей, добавить или убрать какие-либо правила доступа, изменить парольLIDSи поменять настройки отправки сообщения так, как ты это делал при первоначальной настройке. После этого надо дать команду на пересчитывание файлов конфигурации:

LIDSadm -S -- +RELOAD_CONF

Только после этого внесенные тобою изменения вступят в действие. Включить сноваLIDSможно командой:

LIDSadm -S -- +LIDS

Может случится так, чтоLIDSпридется отключать глобально во всей системе. Делается это так:

LIDSadm -S -- -LIDS_GLOBAL

Обратно включается командой:

LIDSadm -S -- +LIDS_GLOBAL

Существует возможность на какое-то время включить определенную способность, а затем отключить. Например, если ты отключил способность CAP_SYS_MODULE, а тебе потребовалось загрузить какой-то модуль, то сделать это можно так:

LIDSadm -S -- -CAP_SYS_MODULE insmod some_module LIDSadm -S -- +CAP_SYS_MODULE

Выполнение каждой из вышеперечисленных команд происходит только после ввода пароля администратора. После выполнения любой команды администрирования, информация об этом записывается в логи и, в зависимости от настроек, отправляется на введенный e-mail. Каждый неправильный ввод пароля фиксируется.

Заключение

  • Не стоит браться за установкуLIDSчеловеку, не знающему азов системного администрирования - чревато большими головными болями вплоть до полного краха системы.
  • СтавитьLIDSна домашний компьютер или на компьютер, стоящий в офисе и находящийся за firewall'ом - бессмысленно, т.к. навряд ли кто-то из-вне будет его взламывать, а от вандалов, умеющих создавать загрузочную дискету, это не спасет.
  • Система находится еще в разработке и не исключено наличие "багов". "Дыры" еще никто не обнаруживал, но может и не искал :)


Сетевые решения. Статья была опубликована в номере 10 за 2000 год в рубрике save ass…

©1999-2024 Сетевые решения