Статья написана для журнала
Хостовая система обнаружения атак OSSEC-HIDS, позволяет защитить компьютеры работающие под управлением разных ОС.
Сегодня в Unix используется большое количество систем защиты (logcheck, tripware, tiger, chkrootkit, rkhunter) использующих разные принципы – контроль целостности файлов, анализ журналов, поиск сигнатур и так далее. В отдельности каждый из этих продуктов имеет вполне достаточные возможности позволяющие защитить доверенную систему, которые после настройки могут работать автономно, лишь оповещая администратора о появившихся проблемах. Но при развертывании их на большом количестве систем в сети, администратору приходится искать оптимальный метод развертывания и главное получения и анализа отчетов.
OSSEC-HIDS ( ) (Open Source Host-based Intrusion Detection System) –хостовая система обнаружения атак в которой для определения атак используется несколько методов – анализ журналов систем и сервисов, проверка целостности файлов и реестра Windows, обнаружение rootkit, имеющая функциональность SIM (Security Information Management, Управление информацией безопасности). Собственно OSSEC и появился как решение адаптированное на проверку большого количества систем. Первая версия называвшаяся Syscheck была написана Даниелем Сидом (Daniel B.Cid) и обнародована в 2004 году. Через некоторое время к Syscheck добавился Rootcheck, который позволял управлять обнаружением руткит с централизованной консоли. И, наконец, в 2005 году вышел OSSEC в объединивший функции Syscheck и Rootcheck. Сегодня проект поддерживают большое количество сторонних разработчиков, которые вносят изменения в код, создают правила, участвуют в переводе интерфейса. Но основная работа выполняется Даниелем. В июне 2008 года права были переданы корпорации Third Brigade, Inc., которая обязалась продолжить разработку и коммерческую поддержку. В мае 2009 права перешли к Trend Micro, которая также обязалась сохранить его бесплатным и продолжать разработку по OpenSource лицензии. В настоящее время OSSEC-HIDS распространяется по лицензии GNU GPL v3.
OSSEC состоит из трех компонентов:
Для сбора информации на удаленных системах используются агенты, хотя возможна работа и без агента (например на некоторых маршрутизаторах). В настоящее время агенты реализованы для Linux, Solaris, *BSD, Mac и Windows 2000/XP/2003/Vista/2008. Для связи агентов с сервером используется 1514 UDP порт, подключение производится по зашифрованному SSH каналу. Веб-интерфейс устанавливается на Linux, Solaris, *BSD и Mac. Количество поддерживаемых OSSEC форматов журналов достаточно велик – Asterisk, Apache, IIS, Postfix, Courier, ProFTPd, Pure-FTPd, PostgreSQL, MySQL Checkpoint, Sonicwall, VMware ESX и многие другие. Полученные данные обрабатываются на сервере на основании правил в формате XML, и в случае обнаружение попыток модификации важных файлов (анализируются MD5 и SHA1, права доступа) и реестра, и прочих потенциально опасных действий выдает оповещение, а при высоком уровне реагирует на попытку взлома.
Типичное правило (в текущей версии их 896) заключено в теги rule и состоит из описания (description), контролируемого параметра и его значения (url, same_source_ip, regex, match), группу (group), действие (action), уровень серьезности (level) и имеет свой уникальный номер (id). Например, описание одного из правил из файла web_rules.xml.
<rule id="31105" level="6"> <if_sid>31100</if_sid> <url>%3Cscript|%2Fscript|script>|script%3E|SRC=javascript|IMG%20|</url> <url>%20ONLOAD=|INPUT%20|iframe%20</url> <description>XSS (Cross Site Scripting) attempt.</description> <group>attack,</group> </rule>
При помощи
Чтобы уменьшить вероятность случайной блокировки своих ресурсов в случае ошибки OSSEC, разработчики предлагают готовые сценарии, используются белые списки и тайм-аут, после которого ресурс будет разблокирован. Вывод может быть направлен в Prelude IDS () (сейчас она позиционируется тоже как SIM), оповещения по умолчанию сохраняются в текстовых файлах, но для этой цели можно подключить базу данных MySQL.
Одной из приоритетных задач при разработке OSSEC являлась и является простота в установке. Действительно многие отзывы сводятся к одному – OSSEC очень прост не только в инсталляции, но и в работе. В настоящее время ведутся работы над универсальном скриптом, который позволит еще более облегчить задачу развертывания системы контроля на компьютерах работающих под управлением разных версий ОС.
Актуальной на момент написания статьи была версия 2.1.1, о которой мы и будем в дальнейшем говорить. Выход следующей версии OSSEC 2.2 ожидается в ближайшее время, правда точной даты пока неизвестно. В статье будет описана установка основного приложения и веб-интерфейса на Ubuntu Server 8.04.1 LTS, а также агента работающего в Windows XP. В других системах процесс практически аналогичен.
На странице закачки доступно три вида пакетов, которые реализуют компоненты описанные выше. Учитывая, что OSSEC является узловой системой, агент должен быть установлен в идеальном случае на каждом компьютере в сети. Основной пакет (ossec-hids) реализует как серверную часть (server), так и клиентскую часть (agent) для Unix, нужный тип установки необходимо будет выбрать уже процессе. Если OSSEC будет использоваться на единственной Unix системе в сети, можно использовать локальную (local) установку.
Для установки OSSIM понадобится компилятор.
$ sudo apt-get install build-essentials
Среди файлов на странице закачки имеется ossec-hids-latest.tar.gz, но он указывал на версию 2.1, хотя уже доступна 2.1.1. Скачиваем файл, проверяем контрольную сумму, распаковываем.
$ wget –c http://www.ossec.net/files/ossec-hids-2.1.1.tar.gz $ wget –c http://www.ossec.net/files/ossec-hids-2.1.1_checksum.txt $ cat ossec-hids-2.1.1_checksum.txt $ md5sum ossec-hids-2.1.1.tar.gz $ sha1sum ossec-hids-2.1.1.tar.gz $ tar xzvf ossec-hids-2.1.1.tar.gz
Запускаем установочный скрипт находящийся внутри архива.
$ cd ossec-hids-2.1.1/ $ sudo ./install.sh
Скрипт предлагает выбрать язык установки, в списке есть и русский. Вводим “ru”. Далее выводятся данные по системе, проверяем и нажимаем Enter. Выбираем тип установки, введя по подсказке – сервер, агент или локальный (на русском), указываем куда установить OSSEC (по умолчаниию /var/ossec). Третьим пунктом идут настройки OSSEC, в которых подтверждается:
$ sudo cat /var/ossec/logs/active-responses.log … Птн Авг 28 04:24:00 MSD 2009 /var/ossec/active-response/bin/host-deny.sh add - 192.168.1.58 1251419040.1029 40101 Птн Авг 28 04:24:00 MSD 2009 /var/ossec/active-response/bin/firewall-drop.sh add - 192.168.1.58 1251419040.1029 40101
Далее скрипт автоматически заносит в список контролируемых, журналы установленных сервисов. В дальнейшем файл журнала можно легко добавить, отредактировав параметр localfile в конфигурационном файле /var/ossec/etc/ossec.conf, который и создается впоследствии установочным скриптом на основе полученных ответов. Далее происходит компиляция компонентов OSSEC.
В процессе будет создан init скрипт /etc/init.d/ossec, который можно использовать для запуска сервиса. Как вариант указать скрипт напрямую:
/var/ossec/bin/ossec-control start|stop
О смене владельца говорит и соответствующая надпись при загрузке.
Starting OSSEC HIDS v2.1 (by Trend Micro Inc.)...
Обновление происходит аналогичным образом, скрипт обнаруживает установленный OSSEC и предлагает обновить установку.
Файл ossec.conf представляет обычный XML файл, разобраться в его структуре довольно просто. Например, каталоги в которых проверяется целостность файлов описываются следующим образом:
<syscheck> <!-- проверка каждые 22 часа --> <frequency>79200</frequency> <!-- каталог для проверки --> <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <!-- игнорируемые файлы --> <ignore>/etc/hosts.deny</ignore> </syscheck>
Уровни оповещения
<alerts> <log_alert_level>1</log_alert_level> // запись в журнал <email_alert_level>7</email_alert_level> // отправка почтового сообщения </alerts>
Настройка ответа
<active -response> <!--использование host.deny для блокировки IP на 60 секунд при level >= 6 --> <command>host-deny</command> <location>local</location> <level>6</level> <timeout>600</timeout> </active>
Сервер уже контролируется, просмотреть оповещения можно в журнале:
$ sudo tail -f /var/ossec/logs/ossec.log
Каждый агент для получения доступа к серверу должен указать свой уникальный ключ. Для создания такого ключа или удаления агента, на сервере используется менеджер агентов.
$ sudo /var/ossec/bin/manage_agents **************************************** * OSSEC HIDS v2.1 Agent manager. * * The following options are available: * **************************************** (A)dd an agent (A). (E)xtract key for an agent (E). (L)ist already added agents (L). (R)emove an agent (R). (Q)uit. Choose your action: A,E,L,R or Q:
Далее нажимаем клавишу соответствующую нашей задаче:
A – добавить агента; E – получить ключ для агента; L – просмотреть список известных агентов; R – удалить агента.
Нажимаем “A”, вводим по запросу имя агента (от 2 до 32 знаков), IP-адрес системы на которой будет установлен агент, затем ID агента (скрипт предложит автоматически следующий номер, по порядку начиная от 001). Подтверждаем установки. Теперь выбираем “E”, менеджер выведет список агентов, указываем ID агента, ключ которого необходимо получить.
Choose your action: A,E,L,R or Q: E Available agents: ID: 001, Name: agent1, IP: 192.168.1.58 Provide the ID of the agent to extract the key (or '\q' to quit): 001 Agent key information for '001' is: MDAxIG5vb………..2I4ZjNiMWJh
Запускаем установку ossec-hids-2.1.1, как показано выше (для Unix систем) выбрав вариант “агент”, по окончанию установки также запускаем manage_agents, в котором выбирается импорт ключа сервера – “I”.
При установке агента для Windows, дополнительно можно активировать сканирование журналов IIS и проверку целостности. На последнем этапе, в окне “OSSEC Agent Manager” вводим IP-адрес сервера и ключ доступа.
2009/08/29 09:13:59 ossec-agent: INFO: Trying to connect to server (192.168.1.203:1514). 2009/08/29 09:14:09 ossec-agent(4102): INFO: Connected to the server (192.168.1.203:1514).
В дальнейшем управление работы агентов производится для Unix систем стандартным способом, через init скрипт, в Windows при помощи графического “OSSEC Agent Manager”. Конфигурационный файл агента также называется ossec.conf и по своей структуре практически полностью аналогичен ossec.conf сервера, о котором говорилось выше.
В версии 2.1 появилась возможность удаленного управления агентами. Для этого, после подключения агента, на сервера создается единый конфигурационный файл /var/ossec/etc/shared/agent.conf в котором описываются настройки для конкретного агента
<agent_config name=? agent1|agent2?> </agent_config>
Или в зависимости от ОС.
<agent_config os=?Linux?> </agent_config>
Затем при помощи команды agent_control с указанием ID агента, файл отправляется на удаленную систему.
$ sudo /var/ossec/bin/agent_control -i 001
В подкаталоге contrib архива с исходными текстами находится ряд скриптов, позволяющих упростить работу с OSSIM или расширить его возможности. Например “ossec-batch-manager.pl” предназначен для упрощенного подключения агентов. В строке запуска можно указать сразу несколько систем:
$ sudo ./ossec-batch-manager.pl -a --ip 192.168.1.1 -n agent_1 -a --ip 192.168.1.2 -n agent_1
Затем получаем ключ и подключаем агентов.
Все сообщения о тревогах будут собранны в подкаталоге /var/ossec/logs/alerts в отдельном файле. Например, для 28 августа 2009 года это будет /var/ossec/logs/alerts/2009/Aug/ossec-alerts-28.log.
$ cat /var/ossec/logs/alerts/2009/Aug/ossec-alerts-28.log ** Alert 1251464430.42143: - syslog,sudo 2009 Aug 28 17:00:30 ubuntu->/var/log/auth.log Rule: 5402 (level 3) -> 'Successful sudo to ROOT executed' Src IP: (none) User: user Aug 28 17:00:28 ubuntu sudo: user : TTY=pts/1 ; PWD=/home/user/; USER=root ; COMMAND=/bin/ls /var/ossec/logs/alerts/2009/Aug/ossec-alerts-28.log
Скрипт “ossectop.pl” позволяет увидеть список самых активных тревог за текущий день. Единственный минус – для определения текущей даты используется код:
my $datepath=`date "+%Y/%b/ossec-alerts-%d.log"`; my $LOG='/var/ossec/logs/alerts/'. $datepath;
При включенной русской локали скрипт будет искать файл совсем в другом месте:
/var/ossec/logs/alerts/2009/Авг/ossec-alerts-28.log
Исправить можно разными способами. Например, так:
$ sudo env LC_ALL=POSIX ./ossectop.pl
Скрипт “ossec_report_contrib.pl” позволяет получать форматированные отчеты.
$ sudo cat ossec-alerts-28.log | ./ossec_report_contrib.pl -s | mail root -s 'OSSEC summary report'
Или через cron:
00 01 * * * (cat ossec-alerts-28.log | ./ossec_report_contrib.pl -s)
И, наконец, используя набор файлов ossec2mysql.* позволяет подключить вывод OSSEC в MySQL. Процесс достаточно прост. Создаем новую базу данных, и затем таблицы при помощи шаблона ossec2mysql.sql, копируем contrib/ossec2mysql.conf в /etc/ossec2mysql.conf с 0600 правами. Редактируем файл, указав параметры доступа к базе данных.
Веб-интерфейс написан на PHP. Для его работы разработчики рекомендуют Apache с поддержкой PHP (>= 4.1 или >= 5.0) или Lighttpd с FastCGI (php4-cgi, php5-cgi). При их наличии процесс установки достаточно прост.
$ wget –c http://www.ossec.net/files/ui/ossec-wui-0.3.tar.gz $ tar xzvf ossec-wui-0.3.tar.gz $ sudo mv ossec-wui-0.3 /var/www/ossec-wui
Далее можно создать нужные настройки вручную воспользовавшись инструкциями на сайте, но проще запустить установочный скрипт.
$ /var/www/ossec-wui $ sudo chmod 770 /var/www/ossec-wui/tmp $ sudo chgrp www-data /var/www/ossec-wui/tmp $ sudo ./setup.sh
Скрипт запросит имя пользователя и пароль для доступа к веб-интерфейсу (создается при помощи htdigest), в результате его работы получим файл .htaccess. Делаем учетную запись, от имени которой работает веб-сервер, членом группы ossim.
$ sudo vi /etc/group ossec:x:1001:www-data
Если используется Apache, это все. Для Lighttpd настроек чуть больше, все они расписаны на Wiki проекта. Теперь можно заходить по адресу http://server/ossec-wui, где будут доступны последние события, список измененных файлов, данные об агентах.