Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Цепные псы

В.Лопатин

Писано для журнала "Хакер-Спец". Лексика оригинала сохранена.


Скажи мне по секрету, ты когда-нибудь яблоки воровал? Ну в детстве. А ещё какую-нибудь мелось с чухого огорода? А случалось тебе нарываться на то, что за забором вдруг оказывалась милая такая собачка, ну доберманчик или не менее милый ротвейлер. Мда... приятного мало.

Ну так вот. Вот возжелал ты чужую ситему хакнуть удалённо. Ну там разведочку провел более-менее грамотно. Выяснил какие сервисы работают. Потом начал всяческие активные действия. И... Бамц. Нифига не получается. Или того хуже -- твой провайдер тебе звонит и сообщает, что ты типа козёл и нехорошестями всякими занимаешься.

Спрашивается: откуда информация? Отвечаю: админ узла, который ты вздрючить пытался, не совсем чайник и у него в огороде сидит собачка. Называется её порода Network Intrusion Detection System -- Система обнаружения вторжений из сети (NIDS или просто IDS).

В природе существует несколько видов IDS. Системы обнаружения атак на сетевом уровне контролирует пакеты в сетевом окружении и обнаруживают попытки хакера-какера проникнуть внутрь защищаемой системы (или реализовать атаку типа "отказ в обслуживании"). Типичный пример -- система, которая контролирует большое число TCP-запросов на соединение (так называемый SYN-пакет) со многими портам на выбранном компьютере. Таким макаром, программа обнаруживает, что кто-то пытается осуществить сканирование TCP-портов. Система обнаружения атак на сетевом уровне (NIDS) может запускаться либо на отдельном компьютере, который контролирует свой собственный трафик, или на выделенном компьютере, прозрачно просматривающем весь трафик во сети (концентратор, маршрутизатор). Отмечу, что "сетевые" IDS контролируют много компьютеров, тогда как другие системы обнаружения атак контролируют только один (тот, на котором они установлены).

Системы контроля целостности (System integrity verifiers, SIV) проверяют системные файлы для того, чтобы определить, когда хакер внес в них изменения. В принципе, это мало интересно, если систему вскрыли. Но, тем не менее, позволяет довольно быстро определить, что подверглось изменению и, соответственно, быстро восстановить систему.

Мониторы системных журналов (Log-file monitors, LFM) контролируют регистрационные файлы, создаваемые сетевыми сервисами. Аналогично NIDS, эти системы ищут известные признаки атаки, только в файлах регистрации, а не в сетевом трафике, которые указывают на то, что злоумышленник осуществил атаку. Типичным примером является синтаксический анализатор для log-файлов HTTP-сервера, который ищет хакеров, пытающихся использовать хорошо известные уязвимости, например, используя атаку типа "phf".

Для операционной системы Linux есть несколько программ, реализующих IDS. Есть коммерчески и очень дорогие супер-пупер-профессиональные системы (например, RealSecure компании Internet Security Systems (http://www.iss.net) стоимостью в пару тысяч баксов), а есть и свободные или бесплатные программы начального уровня.

Среди свободных программ популярность пользуются системы LIDS (Linux Intrusion Detection System, http://www.lids.org) и Snort (http://www.short.org). Среди бесплатных популярна связка программ Portsentry, Hostsentry и Logsentry компании Psionic.

Обзор начну с LIDS. По своему существу LIDS относится к системам контроля целостности. Во время своей работы LIDS следит за состоянием файловой системы, справляется со списками доступа и в случае противоправных действий сообщает администратору о наружении целостности. Данная система отличается тем, что на самом деле является патчем к ядру Linux. Поэтому для каждой версии ядра требуется своя реализация LIDS, что не совсем удобно. Плюс к ней поставляется утилита lidsadm для управления. Несмотря на это, LIDS считается довольно мощным средством противостояния атакам именно благодаря тому, что жестко контролирует все происходящие в системе действия.

В настройке LIDS очень не прост. Для установки сначала нужно на твоё ядро наложить патч (именно на твою версию ядра, иначе нифига не заработает), сконфигурить его и пересобрать. На рисунке показан кусок файла /usr/src/linux/.config после установки LIDS. Самое главное не перегружаться, пока ты до конца не настроишь LIDS, иначе тебе конец. Если ты решишься заюзать LIDS, то будь готов к тому, что тебе придётся очень много читать документации. Хорошо что в Сети её море, в том числе и на русском языке.

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

Snort гораздо проще, да и занимается он совсем другим. Snort - практический пример системы обнаружения вторжений из сети. Демон сидит в памяти и просматривает весь сетевой трафик. Перехваченные пакеты поступают в анализатор, который на основе набора правил, определяемых админом, принимает решение происходит атака или обычная работа. К анализатору могут быть подключены сторонние модули, чтобы увеличить его функциональность. Информация, собранная анализатором поступает в систему предупреждения и регистрирования. Таким образом распознаются разнообразные нападения типа переполнения буфера, скрытых просмотров порта, CGI нападения, попыток определения OS и т.п. Пример журнала, который получается в ходе работы snort показан на этом рисунке .

Для успешной сборки и установки необходимо наличие библиотеки libpcap и утилиты tcpdump. На сайте доступны исходные тексты snort версии 2.0. Компиляция и инсталляция проблем не вызывают. Волшебная сила команд configure; make; make install просто чудеса творит. Затем нужно создать каталог (какой-нить /var/log/snort) для хранения журналов.

Запуск short -? выведет тебе список команд. Ты его внимательно изучишь и начнешь настраивать. Snort выполняется в трех различных режимах:

  1. Режим пакетного сниффера : Когда Snort работает в этом режиме, он читает и дешифрует все сетевые пакеты и формирует дамп к stdout (ваш экран). Для перевода Snort в режим сниффера используйте ключ -v: snort -v
  2. Режим регистрации пакетов : Этот режим записывает пакеты на диск и декодирует их в ASCII формат. snort -l < directory to log packets to >
  3. Режим обнаружения вторжений: Этот режим является основным. snort -dev -l <log directory> -h <host|net> -c <config>

Snort очень выгодно отличается тем, что у администратора есть возможность составления своих собственных правил обнаружения. Это означает очень быструю реакцию на новые типы атак и появление защитных механизмов. В Сети есть много источников с которых можно скачать наборы правил для snort.

Самая простая, но не менее надежная система обнаружения вторжений состоит аж из трёх программ. Всё вместо это называется Trysentry, а компоненты по отдельности - Postsentry, Hostsentry и Logsentry. Все три программы самостоятельны и распространяются независимо. Разрабатывала их компания Psionic. Нынче же, эту фирму на корню скупила компания Cisco Systems и ссылка www.psionic.com ведет на сайт Cisco. Тем не менее в Сети есть архивы на которых что-то еще осталось. Поиск по слову portsentry.tar.gz (например, на сайте http://www.filesearch.ru) может дать тебе некий список.

Logsentry является утилитой контроля целостности системных журналов. Ничего сложного, следит за тем. чтобы в них без разрешения никто не лез.

Назначение программы hostsentry для меня осталось загадкой, в практике я её так и не применил. Гораздо интереснее возиться с portsentry. Основная задача этой проги отследить соединение к охраняемому порту, выявить тип соединения и принять меры по блокировке атакующего.

Программа в двух версиях: 1.1 и 2.0beta. После распаковки и сборки пакета (инструкция есть в файлах INSTALL и README) следует настроить сторожа. В файле portsentry.conf указываются номера портов, которые необходимо охранять по типам пакета (tcp, udp), способы реагирования на атаку (можно прибить маршрут командой route или применить пакетный фильтр ipchains/iptables). Практический пример есть на сайте http://ruwa.te.ru. В файле portsentry.ingore указываются сети и узлы, которые не являются атакующими. История атак хранится в файлах portsentry.history и portsentry.blocked. Журнал регистрации атак выглядит так

Версия 1.1 (1.0) и 2.0 отличаются немного. Версию 1.0(1) нужно запускать два раза: отдельно для tcp и отдельно для udp. Во второй версии в конфиг добавлена возможность указать адрес контролируемого интерфейса, а также совмещен просмотр tcp и udp. В Сети полно статей по работе с portsentry. Поисковик тебе в зубы.

У данной IDS есть теоретический недостаток. Возможность использовать нестандартные параметры соединения с разрешенным портом. Так возникает возможность, к примеру, использовать http-туннелирования для передачи нелегального трафика. Snort в этом отношении гибче за счет настраиваемых правил отлова пакетов.

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