Обнаружение вторжений HIDS OSSEC

Хостовая система обнаружения вторжений (англ. Host-based intrusion detection system, HIDS) — это система обнаружения вторжений, которая ведет наблюдение и анализ событий, происходящих внутри системы, а также отслеживает целостность файлов.

За все время работы в сфере информационной безопасности неоднократно возникали задачи по:

— проверке контроля целостности файлов,

— получению и анализу событий безопасности,

— централизованному оповещению об этих событиях,

— генерации отчетов.

Для реализации этих задач было изучено большое количество open source решений и результатом этого анализа стал HIDS OSSEC.

Устанавливая подобные системы, администратору по безопасности следует всегда придерживаться нескольких принципов:

— система всегда должна получать на регулярной основе обновления,

— система всегда должна передавать свои события в SIEM (Security Information and Event Management),

— решение должно быть кроссплатформенное.

— по всем событиям безопасности от системы необходимо проводить исследования (расследования).

Перейдём к практике по установке и настройке клиент серверной архитектуры HIDS OSSEC.

 

Подготовительный этап:

Скачиваем реполист с официального сайта

[root@pdc-tst-sec-1 ~]# wget -q -O – http://www.atomicorp.com/installers/atomic | sh

При возникновении проблем с закачкой, предлагаю быструю установку в ручном режиме.

[root@pdc-tst-sec-1 yum.repos.d]# cd /etc/yum.repos.d/

[root@pdc-tst-sec-1 ~]# yum —nogpgcheck localinstall atomic-release-1.0-19.el6.art.noarch.rpm

С обязательной проверкой импорта открытых ключей.

[root@pdc-tst-sec-1 yum.repos.d]# rpm -q gpg-pubkey —qf ‘%{name}-%{version}-%{release} —> %{summary}n’ | grep Atomicorp

check_pub_key

А также с проверкой состояния подключения к репозиторию (Check connect to atomic.repo)

[root@pdc-tst-sec-1 yum.repos.d]# yum clean all

[root@pdc-tst-sec-1 yum.repos.d]# yum repolist all

check_repo

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

[root@pdc-tst-sec-1 ~]# nano /etc/yum.repos.d/atomic.repo

Вставляем запись:

proxy=http://ip-proxy:port-proxy

Для выхода из редактора нажимаем «Ctrl+x» затем «Y» и после «Enter»

edit_repo

Серверная часть:

Устанавливаем пакеты и зависимости в автоматическом режиме.

[root@pdc-tst-sec-1 ~]# yum install ossec-hids-server

Соглашаемся с установкой.

……Is this ok [y/N]: y

Установка завершена.

……Complete!

Приступаем к настройке OSSEC – server.

(configuration OSSEC – server)

[root@pdc-tst-sec-1 ~]# /var/ossec/bin/ossec-configure

OSSEC Configuration utility v0.1

1- What kind of installation do you want? (server, agent, local) [Default: server]: server

2- Setting up the configuration environment.

3- Configuring the OSSEC HIDS.

3.1- Do you want e-mail notification? (y/n) [Default: y]: n ## отказ от получения уведомлений на почтовый ящик, ввиду дальнейшей интеграции с SIEM

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

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

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]: Press Enter

— Active response enabled.

— By default, we can enable the host-deny and the firewall-drop responses. The first one will add a host to the /etc/hosts.deny and the second one will block the host on iptables (if linux) or on ipfilter (if Solaris, FreeBSD or NetBSD).

— They can be used to stop SSHD brute force scans, portscans and some other forms of attacks. You can also add them to block on snort events, for example.

— Do you want to enable the firewall-drop response? (y/n) [y]: Press Enter

— Do you want to add more IPs to the white list? (y/n)? [n]: y

— IPs (space separated): 10.33.**.** ## добавляем ip адреса в «белый лист»

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

— /var/log/messages (syslog)

— /var/log/secure (syslog)

— /var/log/maillog (syslog)

Configuration complete.

Клиентская часть:

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

Устанавливаем и настраиваем необходимые пакеты.

[root@ pdc-vmw-hdpl-1 ~]#  yum install ossec-hids ossec-hids-client

[root@pdc-vmw-hdpl-1 ~]# /var/ossec/bin/ossec-configure

OSSEC Configuration utility v0.1

1- What kind of installation do you want? (server, agent, local) [Default: server]: agent

2- Setting up the configuration environment.

3- Configuring the OSSEC HIDS.

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

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

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

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]: Press Enter

— Active response enabled.

— By default, we can enable the host-deny and the firewall-drop responses. The first one will add a host to the /etc/hosts.deny and the second one will block the host on iptables (if linux) or on ipfilter (if Solaris, FreeBSD or NetBSD).

— They can be used to stop SSHD brute force scans, portscans and some other forms of attacks. You can also add them to block on snort events, for example.

— Do you want to enable the firewall-drop response? (y/n) [y]: Press Enter

— Do you want to add more IPs to the white list? (y/n)? [n]: Press Enter

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

— /var/log/messages (syslog)

— /var/log/secure (syslog)

— /var/log/maillog (syslog)

Configuration complete.

[root@pdc-vmw-hdpl-1 ~]# nano /var/ossec/etc/ossec-agent.conf

<client>

<server-ip>10.33.**.**</server-ip>

</client>

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

  1. Создаем запись на сервере OSSEC;

[root@pdc-sec-1 ~]# /var/ossec/bin/manage_agents

****************************************

* OSSEC HIDS v2.8 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

— Adding a new agent (use ‘q’ to return to the main menu).

Please provide the following:

* A name for the new agent: pdc-vmw-hdpl-1

* The IP Address of the new agent: 10.33.**.**

* An ID for the new agent[028]: Press Enter

Agent information:

ID:028

Name:pdc-vmw-hdpl-1

IP Address:10.33.**.**

  1. Генерируем на сервере OSSEC ключ;

****************************************

* OSSEC HIDS v2.8 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: e

Available agents:

ID: 028, Name: hostname, IP: 10.33.**.**

Provide the ID of the agent to extract the key (or ‘q’ to quit): 028

Agent key information for ‘028’ is:(ЭТО КЛЮЧ)

MDI4IHBkYy12bXctaGRwbC0xIDEwLjMzLjEwLjMxIGJiZjZhOWJlOTM1M2Y4NWViNjliMDdkZGM0OGVhNmNkOWM1MWNmMjBmZjRkYjU4ZTIxMzBlMTYyYzc5ODU2Njc=

Обязательно скопируйте его и сохраните!

** Press ENTER to return to the main menu.

Confirm adding it?(y/n): y

Agent added.

  1. Импортируем сгенерированный ключ клиенту;

[root@pdc-vmw-hdpl-1 ~]# cd /var/ossec/bin/

[root@pdc-vmw-hdpl-1 bin]# ./manage_client

****************************************

* OSSEC HIDS v2.8 Agent manager.     *

* The following options are available: *

****************************************

(I)mport key from the server (I).

(Q)uit.

Choose your action: I or Q: i

* Provide the Key generated by the server.

* The best approach is to cut and paste it.

*** OBS: Do not include spaces or new lines.

*********Вставьте см. ниже

Paste it here (or ‘q’ to quit): MDI4IHBkYy12bXctaGRwbC0xIDEwLjMzLjEwLjMxIGJiZjZhOWJlOTM1M2Y4NWViNjliMDdkZGM0OGVhNmNkOWM1MWNmMjBmZjRkYjU4ZTIxMzBlMTYyYzc5ODU2Njc=

Agent information:

ID:028

Name:pdc-vmw-hdpl-1

IP Address:10.33.**.**

Confirm adding it?(y/n): y

Added.

** Press ENTER to return to the main menu.

****************************************

* OSSEC HIDS v2.8 Agent manager.     *

* The following options are available: *

****************************************

(I)mport key from the server (I).

(Q)uit.

Choose your action: I or Q: q

** You must restart OSSEC for your changes to take effect.

manage_agents: Exiting ..

Теперь рестарт сервиса

[root@pdc-vmw-hdpl-1 etc]# /var/ossec/bin/ossec-control restart

Немного о конфигурационном файле

/var/ossec/etc/ossec.conf

В самом начале включить отсылку алертов на почту [email protected] , указывая адрес сервера, почтовый адрес и максимально возможное количество писем в час. По умолчанию, OSSEС группирует события, чтобы не заваливать потоком писем.

<global>

<email_notification>yes</email_notification>

<email_to>[email protected]</email_to>

<smtp_server>10.33.**.**</smtp_server>

<email_from>[email protected]</email_from>

</global>

Дальше идет блок rules, в котором описывается, на что и как OSSEC будет реагировать. Секция syscheck — это настройки так называемого integrity check. Смысл ее заключается в том, что IDS подсчитывает хэш каждого файла в указанных директориях и периодически их сверяет. Тут необходимо задать, какие директории нужно контролировать и через какое время будет проводиться проверка.

<!— Directories to check  (perform all possible verifications) —>

<directories check_all=»yes»>/etc,/usr/bin,/usr/sbin</directories>

<directories check_all=»yes»>/bin,/sbin</directories>

В секции command описываются скрипты, которые может применять IDS при наступлении определенных условий. Секция active-response как раз и использует эти команды. Например, при срабатывании определенного правила firewall-block занесет src ip в iptables на 600 секунд. В самом конце идут собственно лог-файлы, которые необходимо анализировать и сопоставлять с правилами.

Специфические настройки

Теперь поговорим немного о специфических настройках, которые применялись мной для организации полного цикличного процесса по обеспечению безопасности серверов.

  1. Отправка событий по rsyslog на SEIM.
  • Находим или создаем секцию <syslog_output> в конфигурационный файле (/var/ossec/etc/ossec.conf), где указываем следующие параметры:

<syslog_output>

<server>10.33.**.**</server>

<port>514</port>

<format>default</format>

</syslog_output>

  • Затем включить клиент rsyslog

/var/ossec/bin/ossec-control enable client-syslog

  • И затем перезапустить ossec

/var/ossec/bin/ossec-control restart

  • При успешном старте клиент rsyslog должен отобразиться в запущенных модулях

Starting OSSEC HIDS v2.7.1 (by Trend Micro Inc.)

Started ossec-csyslogd…

  1. Создание глобальных исключения для собственного IP, IP reverse proxy, а также IP сканеров уязвимостей и сервера мониторинга PTRG.
  • Находим секцию <global>, где указаны IP адреса, которым разрешён доступ.

<global>

<white_list>127.0.0.1</white_list>

<white_list>10.33.**.**</white_list>

<white_list>10.33.**.**</white_list>

<white_list>64.39.**.**/20</white_list>

<white_list>62.210.**.**/25</white_list>

<white_list>167.216.**.**/26</white_list>

<white_list>10.33.**.**</white_list>

</global>

  • Сохраняем изменения, выходим и перезагружаем демон OSSEC:

service ossec-hids restart

  1. Real-time мониторинг
  • Находим секцию <syscheck>, где указаны директории, которые мониторятся:

syscheck_ossec

  • Добавляем параметр realtime=»yes», для тех, которые нужно мониторить в режиме real-time, если необходимо, добавляем новые директории с данным параметром:

<syscheck>

<directories realtime=»yes» check_all=»yes»>/etc,/usr/bin,/usr/sbin</directories>

<directories check_all=»yes»>/bin,/sbin</directories>

<directories report_changes=»yes» check_all=»yes»>/etc</directories>

</syscheck>

syscheck_ossec_real

  • Сохраняем изменения, выходим и перезагружаем демон OSSEC:

service ossec-hids restart

Real-time мониторинг начнет работу после того, как просканирует файлы в указанных директориях и добавит их поддиректории. О начале работы данного режима будет свидетельствовать запись в логе в “ossec-syscheckd: INFO: Starting real time file monitoring”. Учтите, что данный режим не работает с отдельными файлами, а только с директориями.

TROUBLESHOOT

  1. Обнаружено, что может забиваться место в разделе.

error_space_ossec

В логах можно видеть следующие сообщения

error_ossec_log

Даже если служба стартовала ОК, то работать корректно она не будет.

Может быть две причины:

  • забито место базой /var/lib/mlocate/mlocate.db, которая содержит имена файлов.
  • забито место базой syscheck

В первом случае, необходимо подправить конфиг /etc/updatedb.conf, который обновляет базу mlocate.db

Добавим в строке PRUNEFS параметр fuse.sshfs

error_ossec_fuse

Таким образом, мы исключаем из индексации файловую систему fuse.sshfs. Сохранить конфиг и рестарт сервера.

После перезагрузки база оптимизируется.

Во втором случае, необходимо очистить базу syscheck и оптимизировать правила для мониторинга меньшего количества файлов (или расширить дисковое пространство).

Очистка базы данных о файлах определенного агента производится командой, где 001 – номер агента.

error_syscheck_ossec

Для очистки всей базы syscheck используем команды:

/var/ossec/bin/ossec-control stop
/var/ossec/bin/syscheck_update -a
/var/ossec/bin/ossec-control start

error_ossec_control

2. Проблема взаимодействия с SElinux

Парсим лог на предмет ошибок с OSSEC

[root@pdc-tst-sec-1 ~]# grep –i setroubleshoot /var/log/messages

setroubleshoot: SELinux is preventing /usr/sbin/logrotate from read access on the directory /var/ossec/logs. For complete SELinux messages. run sealert -l a9f06615-4b82-4247-b690-866ec8e6f45e

setroubleshoot: SELinux is preventing /usr/sbin/logrotate from ‘read, write’ accesses on the file /var/ossec/logs/ossec.log. For complete SELinux messages. run sealert -l 610bb8b3-820d-4656-bb33-7f277042c906

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

[root@pdc-tst-sec-1 ~]#sealert -l 610bb8b3-820d-4656-bb33-7f277042c906

SELinux is preventing /usr/sbin/logrotate from ‘read, write’ accesses on the file /var/ossec/logs/ossec.log.

 

Первый вариант – изменение контекста для файлов и директорий

*****  Plugin catchall_labels (83.8 confidence) suggests  ********************

If you want to allow logrotate to have read write access on the ossec.log file

Then you need to change the label on /var/ossec/logs/ossec.log

Do

semanage fcontext -a -t FILE_TYPE ‘/var/ossec/logs/ossec.log’

where FILE_TYPE is one of the following: varnishlog_log_t, openshift_var_lib_t, wtmp_t, logrotate_var_lib_t, afs_cache_t, logrotate_tmp_t, logfile, named_cache_t, acct_data_t, virt_cache_t, logrotate_lock_t, var_spool_t, abrt_var_cache_t, logrotate_t, mailman_log_t.

Then execute:

restorecon -v ‘/var/ossec/logs/ossec.log’

Второй вариант – создание политики исключений для SElinux

*****  Plugin catchall (17.1 confidence) suggests  ***************************

If you believe that logrotate should be allowed read write access on the ossec.log file by default.

Then you should report this as a bug.

You can generate a local policy module to allow this access.

Do

allow this access for now by executing:

# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol

# semodule -i mypol.pp

Применяю первый вариант

[root@pdc-tst-sec-1 ~]# semanage fcontext -a -t var_log_t /var/ossec/logs/ossec.log

[root@pdc-tst-sec-1 ~]# restorecon -v -F /var/ossec/logs/ossec.log

restorecon reset /var/ossec/logs/ossec.log context unconfined_u:object_r:var_t:s0->system_u:object_r:var_log_t:s0