Устанавливаем OSSEC (HIDS) и Prewikka (WebUI)

Эта статья расскажет, как установить систему обнаружения вторжений OSSEC и вывести алерты OSSEC в относительно удобный и информативный Web-интерфейс. OSSEС может выводить алерты в syslog, СУБД или посылать их другую IDS — Prelude. Эта IDS в последние годы практически не развивается, но имеет в своем составе неплохой Web-интерфейс — Prewikka. Так же эта система позволяет подключать к себе другие IDS помимо OSSEC — Snort, например. Сначала мы установим Prelude IDS, затем Prewikk'у. Потом подключим OSSEC к Prelude. В процессе нужно будет создать две базы. Одну будет использовать Prewikka для хранения настроек пользователей и пр. Во вторую prelude-manager будет сохранять информацию по событиям, а Prewikka будет оттуда ее читать.

Для установки я буду использовать виртуальную машину с установленной CentOS 6.4. Сначала необходимо установить Prelude-IDS. Разработчики предоставили инструкции по установке из пакетов и исходников практически для всех популярных платформ. Здесь можно скачать исходники, RPM и SRPM.

Установка Prelude Manager


Подключаем репозиторий для CentOS/RHEL:
[root@ossec ~]# yum install https://www.prelude-ids.org/attachments/download/297/prelude-ids-rhel-2-1.noarch.rpm

Далее устанавливаем Prelude Manager и пакеты необходимые для работы с общей базой данных:
[root@ossec ~]# yum install prelude-manager prelude-manager-db-plugin libpreludedb-mysql

Запускаем MySQL:
[root@ossec ~]# /etc/init.d/mysqld start
[root@ossec ~]# chkconfig mysqld on

Теперь создаем БД и пользователя:
[root@ossec ~]# mysql -u root -p
mysql> CREATE database prelude;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON prelude.* TO prelude@'localhost' IDENTIFIED BY 'preludepasswd';
Query OK, 0 rows affected (0.00 sec)
[root@ossec ~]# mysql -u root prelude -p < /usr/share/libpreludedb/classic/mysql.sql

Редактируем конфиг Prelude Manager:
[root@ossec ~]# vim /etc/prelude-manager/prelude-manager.conf

Добавляем туда следующие строки (или же убираем комментарии):
[db]
type = mysql
host = localhost
port = 3306
name = prelude
user = prelude
pass = preludepasswd


Теперь необходимо создать профиль для Prelude Manager:
[root@ossec ~]# prelude-admin add "prelude-manager" --uid 0 --gid 0
Generating 2048 bits RSA private key... This might take a very long time.
[Increasing system activity will speed-up the process].
Generation in progress...

Здесь есть один момент. Как и предупреждает программа, генерация ключа может занять очень много времени.
Есть возможность ускорить этот процесс:
[root@ossec ~]# yum install rng-tools
[root@ossec ~]# rngd -r /dev/urandom


После завершения генерации ключа можно запускать Prelude Manager:
[root@ossec ~]# /etc/init.d/prelude-manager restart

Убедимся, что сервер стартовал нормально:
Aug 19 05:36:33 ossec prelude-manager: INFO: server started (listening on 127.0.0.1 port 4690).
Aug 19 05:36:33 ossec prelude-manager: INFO: Subscribing db[default] to active reporting plugins.
Aug 19 05:36:33 ossec prelude-manager: INFO: Generating 1024 bits Diffie-Hellman key for TLS...


Установка Prewikka


Установим необходимые пакеты:
[root@ossec ~]# yum install prewikka libpreludedb-python

Создаем еще одну базу для Prewikka:
[root@ossec ~]# mysql -u root -p
Enter password: 
mysql> CREATE database prewikka;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON prewikka.* TO prewikka@'localhost' IDENTIFIED BY 'prewikkapasswd';
Query OK, 0 rows affected (0.01 sec)
[root@ossec ~]# mysql -u root prewikka -p < /usr/share/prewikka/database/mysql.sql

Теперь отредактируем файл конфигурации Prewikka и укажем правильные базы данных:
[root@ossec ~]# vim /etc/prewikka/prewikka.conf

В нашем случае необходимо добавить (или отредактировать) следующие строки:
[idmef_database]
type: mysql
host: localhost
user: prelude
pass: preludepasswd
name: prelude

[database]
type: mysql
host: localhost
user: prewikka
pass: prewikkapasswd
name: prewikka

Теперь поставим Apache:
[root@ossec ~]# yum install httpd

Создаем виртуальный хост:
[root@ossec ~]# vim /etc/httpd/conf.d/prewikka.conf

<VirtualHost *:80>
 ServerName my.server.org
 Setenv PREWIKKA_CONFIG "/etc/prewikka/prewikka.conf" 

<Location "/">
        AllowOverride None
        Options ExecCGI

        <IfModule mod_mime.c>
                AddHandler cgi-script .cgi
        </IfModule>

        Order allow,deny
        Allow from all
</Location>

Alias /prewikka/ /usr/share/prewikka/htdocs/
ScriptAlias / /usr/share/prewikka/cgi-bin/prewikka.cgi

</VirtualHost>

Казалось бы, что все готово, но тут нас поджидает несколько подводных камней. Во-первых, необходимо отключить или настроить SELinux, во-вторых, открыть 80 порт на локальном файерволе, в-третьих, установить права доступа к папке с файлом конфигурации:
[root@ossec ~]# chmod o+x /etc/prewikka/

Тем не менее, если сейчас попробовать зайти в Prewikk'у, произойдет ошибка.
Проверим логи:
[root@ossec ~]# tail  -f  /var/log/httpd/error_log 
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1] from prewikka import utils, siteconfig, cairoplot
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1]   File "/usr/lib/python2.6/site-packages/prewikka/cairoplot.py", line 34, in <module>
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1]     
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1] import cairo
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1] ImportError
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1] : 
[Mon Aug 19 06:26:53 2013] [error] [client 172.16.86.1] No module named cairo

Устанавливаем недостающий модуль:
[root@ossec ~]# yum install cairo

Теперь можно зайти на сервер и залогиниться с парой логин/пароль admin/admin.
prewikka

Установка OSSEC


Скачать архивы с последней версией OSSEC можно здесь. На той же странице написано о том, что RPM для RHEL/CentOS можно взять из репозитория AtomiCorp. Нам такой вариант не подойдет, так как OSSEC в том репозитории собран без поддержки libprelud, тем не менее, при установке агентов на конечные сервера, его вполне можно использовать.

Итак, скачиваем и распаковываем последнюю версию OSSEC.
[root@ossec ~]# wget http://www.ossec.net/files/ossec-hids-2.7.tar.gz
[root@ossec ~]# tar xvzf ossec-hids-2.7.tar.gz

Теперь для того, чтобы скомпилировать OSSEC ставим libprelude-devel, компилятор и make
[root@ossec ~]# yum install libprelude-devel gcc make

Устанавливаем параметры компиляции:
[root@ossec ~]# cd ossec-hids-2.7/src/
[root@ossec src]# make setprelude

Запускаем установку
[root@ossec src]# ../install.sh

Скрипт установки задаст несколько вопросов — какой использовать язык, тип установки и пр. Самое главное — указать верный тип установки. В нашем случае — server. Так же я не рекомендую включать функцию active response без предварительного чтения мануала по ней и настройки под себя.
OSSEC HIDS v2.7 Installation Script - http://www.ossec.net
 
 You are about to start the installation process of the OSSEC HIDS.
 You must have a C compiler pre-installed in your system.
 If you have any questions or comments, please send an e-mail
 to dcid@ossec.net (or daniel.cid@gmail.com).
 
  - System: Linux ossec 2.6.32-358.el6.x86_64
  - User: root
  - Host: ossec


  -- Press ENTER to continue or Ctrl-C to abort. --


1- What kind of installation do you want (server, agent, local, hybrid or help)? server

  - Server installation chosen.

2- Setting up the installation environment.

 - Choose where to install the OSSEC HIDS [/var/ossec]: 

    - Installation will be made at  /var/ossec .

3- Configuring the OSSEC HIDS.

  3.1- Do you want e-mail notification? (y/n) [y]: n

   --- Email notification disabled.

  3.2- Do you want to run the integrity check daemon? (y/n) [y]: 

   - Running syscheck (integrity check daemon).

  3.3- Do you want to run the rootkit detection engine? (y/n) [y]: 

   - Running rootcheck (rootkit detection).

  3.4- Active response allows you to execute a specific 
       command based on the events received. For example,
       you can block an IP address or disable access for
       a specific user.  
       More information at:
       http://www.ossec.net/en/manual.html#active-response
       
   - Do you want to enable active response? (y/n) [y]: n

     - Active response disabled.

  3.5- Do you want to enable remote syslog (port 514 udp)? (y/n) [y]: 

   - Remote syslog enabled.

  3.6- Setting the configuration to analyze the following logs:
    -- /var/log/messages
    -- /var/log/secure
    -- /var/log/maillog
    -- /var/log/httpd/error_log (apache log)
    -- /var/log/httpd/access_log (apache log)

 - If you want to monitor any other file, just change 
   the ossec.conf and add a new localfile entry.
   Any questions about the configuration can be answered
   by visiting us online at http://www.ossec.net .
   
   
   --- Press ENTER to continue ---

После финального нажатия клавиши «ввод», начнется компиляция OSSEC и его копирование в директорию установки (по умолчанию это /var/ossec/).

Укажем в файле конфигурации то, что события необходимо отправлять в prelude-manager.
[root@ossec src]# vim /var/ossec/etc/ossec.conf

В секцию добавляем строку <prelude_output>yes</prelude_output>.
Должно получиться примерно так:
<ossec_config>
  <global>
    <email_notification>no</email_notification>
    <prelude_output>yes</prelude_output>
  </global>

  <rules>
    <include>rules_config.xml</include>
    <include>pam_rules.xml</include>
    <include>sshd_rules.xml</include>
...


Теперь подключим OSSEC к prelude. Запускаем в одной консоли сервер регистрации:
[root@ossec ~]# prelude-admin registration-server prelude-manager
The "p9gnqy98" password will be requested by "prelude-admin register"
in order to connect. Please remove the quotes before using it.

Generating 1024 bits Diffie-Hellman key for anonymous authentication...
Waiting for peers install request on 0.0.0.0:5553...
Waiting for peers install request on :::5553...

В другой — регистрируем OSSEC командой:
[root@ossec ~]# prelude-admin register OSSEC "idmef:w" 127.0.0.1 --uid ossec --gid ossec
Generating 2048 bits RSA private key... This might take a very long time.
[Increasing system activity will speed-up the process].
Generation in progress... X

Как и в прошлый раз, мы можем ускорить генерацию ключей командой:
[root@ossec ~]# rngd -r /dev/urandom 

Как только генерация ключей завершится, во второй консоли будет предложено ввести одноразовый пароль. В данном случае — это «p9gnqy98».
Теперь перезапускаем оба демона.
[root@ossec ~]# /etc/init.d/prelude-manager start
[root@ossec ~]# /etc/init.d/ossec start


Если теперь зайти в Prewikk'у, то можно видеть приходящие из OSSEC уведомления и сигналы тревоги.
Если зайти во вкладку Agents, в списке агентов должны значится prelude-manager и OSSEC.

Итоги


Итак, мы установили на наш сервер Prelude IDS. Настроили вывод его оповещений в СУБД MySQL, установленную на этом же сервере. Так же мы создали еще одну БД для Web-интерфейса Prewikka, который входит в состав Prelude IDS. После всего этого мы скомпилировали OSSEC HIDS со специальными опциями, которые позволяют отправлять события OSSEC не только в syslog или СУБД, но и прямо в Prelude.
Теперь при появлении подозрительных событий в логах, OSSEC сгенерирует алерт, запишет его в файл /var/ossec/logs/ossec.log, отправит в Prelude IDS. Prelude в свою очередь запишет его в базу данных, а Prewiika при заходе на нее обеспечит отображение всех этих событий в удобочитаемом виде.

В этой статье я не описал довольно много вещей, которым, если будут заинтересованные читатели, можно посвятить еще не одну статью.
Например, как установить OSSEC на сервер без компилятора, как настроить и обслуживать БД для Prelude, как устанавливать и настраивать агентов OSSEC на другие сервера, как настраивать свои собственные правила генерации событий для OSSEC.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 3

    0
    msmirnov:
    спасибо, очень интересно! интерес к продолжению есть, скоро предстоит писать свой декодер для MS SQL и NOD32
      0
      Спасибо вам за отзыв!
      Скоро будет отдельная статья посвященная написанию, декодеров и правил для обработки логов.
      0
      Добрый день.
      Хотел бы сделать несколько замечаний:

      1) Prelude — это не IDS (хотя в дни своего зарождения она позиционировалась именно так). Prelude — это SIEM. Т.е. система, которая может разбирать события от различных источников. И кстати говоря она развивается :)

      2) Передача данных из OSSEC в Prelude через IDMEF хоть и кажется логичной — однако это далеко не лучший вариант.
      При экспорте данных Windows EventLog-а из OSSEC-а через IDMEF, вы ограничиваете себя в возможности забирать различные поля из лога.
      Т.е. попасть в Prelude может только то, что явно определено в OSSEC-е. Плюс также возможны проблемы с кодировкой.

      Намного более гибким подходом будет связка WindowsEventLog -> OSSEC -> Syslog -> Prelude-LML.
      С помощью такой конструкции можно получать например вот такие штуки:

      image

      Это разобранное событие добавление в группу «test_group» пользователя «Тестовый пользователь», которую произвёл товарищ Pupkin_Vasya.

      Only users with full accounts can post comments. Log in, please.