Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/article.php on line 21

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 218

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 192

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 169
LIDS: система обнаружения Рё защиты РѕС‚ вторжения - Сайт Дениса Колисниченко
 

Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

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


Денис Колисниченко

В этой статье мы поговорим о довольно популярной системе - LIDS (Linux Intrusion Detection System). Первоначально LIDS была простой системой обнаружения вторжения, но с годами процесс развивался и превратился в комплексную систему обеспечения безопасности Linux-машины. Сейчас LIDS "доросла" до уровня Grsecurity и в кое в чем даже превосходит ее. Преимуществом второй версии LIDS является поддержка LSM (загружаемых модулей безопасности), в предыдущих версиях такой поддержки не было, что усложняло установку систему и работу с ней.

Примечание. Модули защиты (LSM) - это сравнительно молодое средство управления доступом. Все началось с разработки различных систем управления доступом. Все они реализовывались в виде патчей ядра Linux. Но из-за отсутствия централизованной координации в результате получилось, что у каждого проекта защиты был свой патч для ядра, часто несовместимый с другими патчами. В прошлом Линус Торвальдс категорически отвергал все эти патчи, но в 2001 году в ответ на технологию SELinux, представленную NSA (агентство национальной безопасности) на Саммите Ядра Линукс (Linux Kernel Summit), он отметил, что для включения в ядро он будет рассматривать более обширную систему безопасности. Так появился проект LSM (Linux Security Modules). Цель LSM - предоставить разработчикам систем защиты общий (единый) интерфейс для реализации проектов, основанных на ядре. Реализация такой системы позволит меньше зависеть от ядра, и не будет требовать его перекомпиляции, как в случае с патчами. Все LSM-модули используют стандартный интерфейс для взаимодействия с ядром, который не будет изменять с выходом следующего релиза (не версии) ядра.

Установка

LIDS реализован как патч ядра и набор пользовательских утилит, загрузить все это можео с сайта http://www.lids.org/download.html. В отличие от других проектов, патчи которых подходят только к определенной версии ядра, патчи LIDS подходят для всех версий ядра 2.4.x и 2.6.x, поэтому LIDS будет работать с любым ядром.

Конфигурирование ядра

Распакуйте архив с LIDS, перейдите в каталог ядра и примените патч:

# cd /usr/src
# wget http://www.lids.org/download/v2.6/2.6.7/lids-2.2.0rc3-2.6.7.tar.gz
# tar -zxvf lids-2.2.0rc3-2.6.7.tar.gz
# cd linux-2.6.7
# patch -p1 < /usr/src/lids-2.2.0rc3-2.6.7/lids-2.2.0rc3-2.6.7.patch

После этого можно приступить к конфигурированию ядра. LIDS требует включить поддержку алгоритма SHA256, опцию для включения этого алгоритма можно найти в меню Cryptography Options/Cryptography API. Опции конфигурации LIDS вы найдете в меню Security Options. Желательно выключить SELinux и Capabilities.

Рассмотрим опции LIDS:

Attempt Not to Flood Logs (CONFIG_LIDS_NO_LOOD_LOG): ограничивает частоту протоколирования идентичных сообщений

Allow Switching the LFS and States (CONFIG_LIDS_ALLOW_SWITCH): LFS (LIDS-free session, о ней мы поговорим чуть позже) позволяет администратору выполнять команды без всяких ограничений со стороны LIDS. Это довольно полезно, но может быть источником для атаки вашей системы. Я рекомендую включить эту опцию на первые несколько дней - пока вы экспериментируете с LIDS, а потом, когда все будет настроено - выключить ее.

Allow Switch Off the Linux Free Session (CONFIG_LIDS_ALLOW_LFS): позволяет выключить LIDS во время выполнения системы. Безопаснее, когда эта опция выключена.

Restrict Mode Switching to Special Terminals (CONFIG_ LIDS_RESTRICT_MODE_SWITCH): позволяет задать терминалы, с которых разрешается LFS. Можно выбрать три класса терминалов: консоль (console), последовательная консоль (serial console) и PTY. Третий наиболее опасный, поскольку он позволяет злоумышленнику удаленно запустить LFS. Выберите только первый класс, позволяющий запускать LFS только пользователям, физически работающим с машиной.

Lidstools

После компиляции ядра можно установить пакет lidstools. Сценарию ./configure нужно явно передать каталог ядра:

$ tar -zvxf lidstools-2.2.5
$ cd lidstools-2.2.5rc1.tar.gz
$ ./configure KERNEL_DIR=/usr/src/linux-2.6.7
$ make
$ su
# make install

При установке программы (make install) вас попросят ввести пароль для администрирования LIDS: он не должен совпадать с паролем root!

Чтобы использовать новое ядро, вам нужно перезагрузить систему. Если вам нужно отключить LIDS, перед загрузкой системы передайте ядру параметры security=0.

Администрирование LIDS

Поскольку мы уже рассмотрели конфигурирование ядра, теперь займемся конфигурирование пользовательского уровня. Как и Grsecurity, LIDS позволяет управлять, как файлы и процессы будут взаимодействовать в системе. Кроме этого LIDS предоставляет две очень полезные функции: LFS и "опечатывание" ядра

"Опечатывание" ядра (sealing the kernel)

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

LIDS предлагает концепцию "опечатывания" ядра. Когда ядро "опечатано" никто не может загрузить или выгрузить модуль. Опечатать ядро можно с помощью команды lidsadm -I. Данную команду нужно поместить в сценарии загрузки системы, только при этом убедитесь, что ДО команды lidsadm -I все необходимые модули загружены. "Опечатывание" ядра также предусматривает ограничения набора возможностей, но об этом мы поговорим чуть позже.

LFS (LIDS-free Sessions) - сессии без LIDS

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

Главное назначения LFS - это разрешение администратору редактировать файлы в каталоге /etc/lids, который недоступен во время работы LIDS даже пользователю root. В этом каталоге находятся следующие файлы:

  • lids.cap: ограниченный набор возможностей
  • lids.conf: ACL (будет рассмотрен РїРѕР·Р¶Рµ)
  • lids.pw: пароль администратора LIDS
  • lids.ini: начальные конфигурационные значения

Lidsadm

Администрирование LIDS выполняется программой lidsadm. Рассмотрим опции программы:

  • -P: зашифровывает пароль LIDS, например, lidsadm -P mypassword
  • -S: изменить аспект защиты LIDS
  • -I: "опечатать" СЏРґСЂРѕ. Для этой опции РЅРµ нужен пароль
  • -V: просмотр состояния системы
  • -h: вывести краткую справку
  • -v: вывести версию lidsadm

Опция -S используется вместе с одним из следующих флагов, предваренным знаком + (включить) или знаком (-) выключить:

LIDS_GLOBAL: включить/выключить LIDS глобально

RELOAD_CONF: перезагрузить файл lids.conf и обновить список защищенных инодов (об этом мы поговорим чуть позже)

LIDS: включить/выключить LIDS локально, то есть создать LFS. LFS будет применена только к текущей оболочке

ACL_DISCOVERY: используется для отладки; когда включена, нарушения правил не запрещаются SHUTDOWN: переключается в состояние shutwodn

Например, чтобы войти в LFS, выполните команду:

# lidsadm -S - -LIDS

Чтобы выключить защиту LIDS:

# lidsadm -S - -LIDS_GLOBAL

ACL файлов и возможностей

ACL используется для управления доступом к различным объектам, например, к файлам или ресурсам (но в отличие от Grsecurity, в LIDS нет ролей). В LIDS есть два типа ACL: ACL файлов (контролирует доступ к файлам и каталогам) и ACL возможностей (регулирует возможности исполнимых файлов).

ACL файлов

LIDS определяет четыре режима для объектов:

DENY: доступ к файлу запрещен. При обращении приложения (например, ls или cat) к этому файлу, оно получит сообщение об ошибке No such file or directory (ENOET) - нет такого файла или каталога. Внешне будет выглядеть так, как будто файл не существует.

READ: объект может быть открыт только в режиме "только чтение", запись запрещена

APPEND: объект может быть открыт для чтения или для добавления информации. Данный режим удобно использовать для файлов журналов.

WRITE: чтение и запись не ограничивается. LIDS не защищает этот файл.

Данные режимы могут быть заданы для файла и для каталога. Если режим применяется для каталога, то он будет примерен ко всем файлам этого каталога.

В LIDS ACL описывается так:

<Тип ACL> <субъект> <объект> <доступ> <наследование>

Тип ACL определяет, на какой стадии работы системы будет контролироваться доступ к системе. Доступно четыре типа:

  • BOOT - доступ будет контролироваться РЅР° стадии загрузки системы
  • POSTBOOT - после загрузки
  • SHUTDOWN - РїСЂРё разгрузке системы
  • null - контроль доступа РІРЅРµ зависимости РѕС‚ стадии работы системы

Обычно тип ACL просто не указывается (null) - для постоянного контроля, а первые три типа используются для ослабления определенных ограничений.

Субъект - это приложение, которому предоставляется доступ (режимы доступа описаны выше) к объекту - файлу или каталогу. Последнее поле, наследование, определяет, будет ли ACL наследоваться дочерними процессами или нет, и может принимать значения 0, 1 и -1.

Объект и субъект тесно связаны друг с другом. Например, субъекту /usr/bin/sshd (демону SSH) нужен доступ к объекту /var/run/sshd.pid. Вы определяет доступ, например, WRITE. Но вы должны понимать, что данное правило определяет доступ только данного субъекта к данному объекту, оно не относится к другим субъектам. Если же поле Субъект пусто (то есть субъект не указан), то данный режим доступа применяется к объекту для любого субъекта (для любого процесса).

Многие приложения (особенно shell-сценарии) вызывает другие программы во время своего выполнения, что нужно учитывать при разработке ACL. По умолчанию наследование выключено, и дочерние процессы не наследуют режимы доступа, определенные для родительского процесса. Такой режим работы может стать настоящей головной болью для администратора - ведь вам придется установить режим доступа для каждого процесса, вызываемого сценарием. Наследование можно включить, установив значение 1 поля наследования - это так называемый не рекурсивный режим наследования, то есть режим доступа будет унаследован только дочерним процессом. Если же вы хотите, чтобы режим доступа был унаследован не только дочерним процессом, но и всеми его потомками (его дочерними процессами), установите рекурсивный режим - значение -1 для поля Наследование.

Lids.conf

ACL хранятся в файле /etc/lids/lisd.conf. Открыв этот файл, вы увидите, что правила записаны в не совсем понятном для человека виде. Но вам не нужно редактировать этот файл вручную - для этого вам нужна утилита lidsconf. Но прежде, чем мы перейдем к рассмотрению lidsconf, вам нужно все-таки знать, что означают все эти числа:

0:0::1:0:1114128:834:/sbin:0-0
0:0::1:0:1933326:834:/bin:0-0
...

ACL системы LIDS содержит номера РёРЅРѕРґРѕРІ вместо имен файлов, например, если РјС‹ установим режим APPEND для /var/log/messages, LIDS сохранить РІ ACL номер РёРЅРѕРґР° этого файла. Это позволяет более жестко контролировать доступ Рє файлу - ведь РёРјСЏ ничего РЅРµ означает, главное - РёРЅРѕРґ: РјРѕР¶РЅРѕ удалить файл СЃ именем /var/log/messages Рё заново создать файл СЃ таким Р¶Рµ именем. Р