Хостовая система обнаружения вторжений (англ. 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 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
Если сервер использует выход в интернет через прокси, необходимо добавить запись.
[root@pdc-tst-sec-1 ~]# nano /etc/yum.repos.d/atomic.repo
Вставляем запись:
proxy=http://ip-proxy:port-proxy
Для выхода из редактора нажимаем «Ctrl+x» затем «Y» и после «Enter»
Серверная часть:
Устанавливаем пакеты и зависимости в автоматическом режиме.
[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>
После конфигурирования клиентской части, необходимо создать запись на сервере и сгенерировать ключи, которые в последствии импортируем клиенту.
- Создаем запись на сервере 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.**.**
- Генерируем на сервере 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.
- Импортируем сгенерированный ключ клиенту;
[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 секунд. В самом конце идут собственно лог-файлы, которые необходимо анализировать и сопоставлять с правилами.
Специфические настройки
Теперь поговорим немного о специфических настройках, которые применялись мной для организации полного цикличного процесса по обеспечению безопасности серверов.
- Отправка событий по 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…
- Создание глобальных исключения для собственного 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
- Real-time мониторинг
- Находим секцию <syscheck>, где указаны директории, которые мониторятся:
- Добавляем параметр 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>
- Сохраняем изменения, выходим и перезагружаем демон OSSEC:
service ossec-hids restart
Real-time мониторинг начнет работу после того, как просканирует файлы в указанных директориях и добавит их поддиректории. О начале работы данного режима будет свидетельствовать запись в логе в “ossec-syscheckd: INFO: Starting real time file monitoring”. Учтите, что данный режим не работает с отдельными файлами, а только с директориями.
TROUBLESHOOT
- Обнаружено, что может забиваться место в разделе.
В логах можно видеть следующие сообщения
Даже если служба стартовала ОК, то работать корректно она не будет.
Может быть две причины:
- забито место базой /var/lib/mlocate/mlocate.db, которая содержит имена файлов.
- забито место базой syscheck
В первом случае, необходимо подправить конфиг /etc/updatedb.conf, который обновляет базу mlocate.db
Добавим в строке PRUNEFS параметр fuse.sshfs
Таким образом, мы исключаем из индексации файловую систему fuse.sshfs. Сохранить конфиг и рестарт сервера.
После перезагрузки база оптимизируется.
Во втором случае, необходимо очистить базу syscheck и оптимизировать правила для мониторинга меньшего количества файлов (или расширить дисковое пространство).
Очистка базы данных о файлах определенного агента производится командой, где 001 – номер агента.
Для очистки всей базы syscheck используем команды:
/var/ossec/bin/ossec-control stop
/var/ossec/bin/syscheck_update -a
/var/ossec/bin/ossec-control start
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