OSSEC: Большой Брат наблюдает за тобой

от автора

image

Пожалуй, не ошибусь, если скажу, что любому профессиональному системному администратору важно знать что и когда происходит с его серверами. Ососбенно остро этот вопрос встает в такой области, как информационная безопасность.
В этом посте я хочу познакомить вас, коллеги, с развертыванием host-based IDS под названием OSSEC. Прошу под кат…

Теория

Система обнаружения вторжений (СОВ) (англ. Intrusion Detection System (IDS)) — программное (как в нашем случае) или аппаратное средство, предназначенное для выявления фактов неавторизованного доступа (вторжения или сетевой атаки) в компьютерную систему или сеть.

Цели, достигаемые при помощи IDS:

  • Самая главная — обнаружить вторжение или сетевую атаку
  • Прогнозирование возможного вторжения — злоумышленник обычно выполняет ряд действий при прощупывании вашей безопасности, это оставит след
  • Обеспечить централизованный контроль над безопасностью сети (особенно, большой и распределенной)
  • Многие другие цели, которые вы можете придумать сами 🙂

Системы IDS делятся на network-based и host-based.

Network-based IDS определяют атаки, захватывая и анализируя сетевые пакеты. Слушая сетевой сегмент, NIDS может просматривать сетевой трафик от нескольких хостов, которые присоединены к сетевому сегменту, и таким образом защищать эти хосты.

Host-based IDS имеют дело с информацией, собранной внутри единственного компьютера. Такое выгодное расположение позволяет HIDS анализировать деятельность с большой достоверностью и точностью, определяя только те процессы и пользователей, которые имеют отношение к конкретной атаке в ОС. НIDS обычно используют информационные источники двух типов: результаты аудита ОС и системные логи.

OSSEC является HIDS, но имеет возможность работать по архитектуре сервер<—>агенты. В нашем случае мы будем рассматривать именно такую схему.

Исходные данные

Предположим, что у нас имется некая корпоративная сеть, в которой имеется зона DMZ с серверами, за которой мы хотим пристально наблюдать.
Пусть все сервера будут работать под CentOS 6.x (на самом деле, установка возможна под любой дистрибутив, в том числе и на другие OS — например Windows)
Есть сервер не в DMZ, на который мы будем собирать всю информацию от агентов OSSEC.

Установка

Прежде всего, давайте установим сам сервер OSSEC.

wget -q -O - https://www.atomicorp.com/installers/atomic |sh && yum install ossec-hids ossec-hids-server 

Отвечаем на все вопросы утвердительно, после завершения работы yum мы получим рабочую установку OSSSEC.
Все файлы OSSEC хранит в /var/ossec. Откроем файл /var/ossec/ossec.conf и приведем его к следующему виду:

<ossec_config>   <global>     <email_notification>yes</email_notification>     <email_to><b>root@domain.local</b></email_to>     <smtp_server><b>smtp.domain.local</b></smtp_server>     <email_from>osssec@forumspb.com</email_from>     <email_maxperhour>200</email_maxperhour>   </global>    <rules>     <include>rules_config.xml</include>     <include>pam_rules.xml</include>     <include>sshd_rules.xml</include>     <include>telnetd_rules.xml</include>     <include>syslog_rules.xml</include>     <include>arpwatch_rules.xml</include>     <include>symantec-av_rules.xml</include>     <include>symantec-ws_rules.xml</include>     <include>pix_rules.xml</include>     <include>named_rules.xml</include>     <include>smbd_rules.xml</include>     <include>vsftpd_rules.xml</include>     <include>pure-ftpd_rules.xml</include>     <include>proftpd_rules.xml</include>     <include>ms_ftpd_rules.xml</include>     <include>ftpd_rules.xml</include>     <include>hordeimp_rules.xml</include>     <include>roundcube_rules.xml</include>     <include>wordpress_rules.xml</include>     <include>cimserver_rules.xml</include>     <include>vpopmail_rules.xml</include>     <include>vmpop3d_rules.xml</include>     <include>courier_rules.xml</include>     <include>web_rules.xml</include>     <include>web_appsec_rules.xml</include>     <include>apache_rules.xml</include>     <include>nginx_rules.xml</include>     <include>php_rules.xml</include>     <include>mysql_rules.xml</include>     <include>postgresql_rules.xml</include>     <include>ids_rules.xml</include>     <include>squid_rules.xml</include>     <include>firewall_rules.xml</include>     <include>cisco-ios_rules.xml</include>     <include>netscreenfw_rules.xml</include>     <include>sonicwall_rules.xml</include>     <include>postfix_rules.xml</include>     <include>sendmail_rules.xml</include>     <include>imapd_rules.xml</include>     <include>mailscanner_rules.xml</include>     <include>dovecot_rules.xml</include>     <include>ms-exchange_rules.xml</include>     <include>racoon_rules.xml</include>     <include>vpn_concentrator_rules.xml</include>     <include>spamd_rules.xml</include>     <include>msauth_rules.xml</include>     <include>mcafee_av_rules.xml</include>     <include>trend-osce_rules.xml</include>     <include>ms-se_rules.xml</include>     <!-- <include>policy_rules.xml</include> -->     <include>zeus_rules.xml</include>     <include>solaris_bsm_rules.xml</include>     <include>vmware_rules.xml</include>     <include>ms_dhcp_rules.xml</include>     <include>asterisk_rules.xml</include>     <include>ossec_rules.xml</include>     <include>attack_rules.xml</include>     <include>openbsd_rules.xml</include>     <include>clam_av_rules.xml</include>     <include>bro-ids_rules.xml</include>     <include>dropbear_rules.xml</include>     <include>local_rules.xml</include>   </rules>     <syscheck>     <!-- Frequency that syscheck is executed - default to every 22 hours -->     <frequency>79200</frequency>      <!-- Directories to check  (perform all possible verifications) -->     <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>     <directories check_all="yes">/bin,/sbin</directories>      <!-- Files/directories to ignore -->     <ignore>/etc/mtab</ignore>     <ignore>/etc/mnttab</ignore>     <ignore>/etc/hosts.deny</ignore>     <ignore>/etc/mail/statistics</ignore>     <ignore>/etc/random-seed</ignore>     <ignore>/etc/adjtime</ignore>     <ignore>/etc/httpd/logs</ignore>     <ignore>/etc/utmpx</ignore>     <ignore>/etc/wtmpx</ignore>     <ignore>/etc/cups/certs</ignore>     <ignore>/etc/dumpdates</ignore>     <ignore>/etc/svc/volatile</ignore>   </syscheck>     <rootcheck>     <rootkit_files>/var/ossec//etc/shared/rootkit_files.txt</rootkit_files>     <rootkit_trojans>/var/ossec//etc/shared/rootkit_trojans.txt</rootkit_trojans>     <system_audit>/var/ossec//etc/shared/system_audit_rcl.txt</system_audit>     <system_audit>/var/ossec//etc/shared/cis_rhel_linux_rcl.txt</system_audit>     <system_audit>/var/ossec//etc/shared/cis_rhel5_linux_rcl.txt</system_audit>   </rootcheck>    <global>     <white_list>127.0.0.1</white_list>     <white_list>^localhost.localdomain$</white_list>   </global>   <remote>     <connection>syslog</connection>   </remote>   <remote>     <connection>secure</connection>   </remote>   <alerts>     <log_alert_level>1</log_alert_level>     <email_alert_level>7</email_alert_level>   </alerts>    <command>     <name>host-deny</name>     <executable>host-deny.sh</executable>     <expect>srcip</expect>     <timeout_allowed>yes</timeout_allowed>   </command>    <command>     <name>firewall-drop</name>     <executable>firewall-drop.sh</executable>     <expect>srcip</expect>     <timeout_allowed>yes</timeout_allowed>   </command>    <command>     <name>disable-account</name>     <executable>disable-account.sh</executable>     <expect>user</expect>     <timeout_allowed>yes</timeout_allowed>   </command>    <command>     <name>restart-ossec</name>     <executable>restart-ossec.sh</executable>     <expect></expect>   </command>     <command>     <name>route-null</name>     <executable>route-null.sh</executable>     <expect>srcip</expect>     <timeout_allowed>yes</timeout_allowed>   </command>    <!-- Active Response Config -->   <active-response>     <!-- This response is going to execute the host-deny        - command for every event that fires a rule with        - level (severity) >= 6.        - The IP is going to be blocked for  600 seconds.       -->     <command>host-deny</command>     <location>local</location>     <level>6</level>     <timeout>600</timeout>   </active-response>     <active-response>     <!-- Firewall Drop response. Block the IP for        - 600 seconds on the firewall (iptables,        - ipfilter, etc).       -->     <command>firewall-drop</command>     <location>local</location>     <level>6</level>     <timeout>600</timeout>   </active-response>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/messages</location>   </localfile>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/secure</location>   </localfile>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/xferlog</location>   </localfile>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/maillog</location>   </localfile>    <localfile>     <log_format>apache</log_format>     <location>/var/log/httpd/error_log</location>   </localfile>    <localfile>     <log_format>apache</log_format>     <location>/var/log/httpd/access_log</location>   </localfile> </ossec_config> 

Давайте разберемся, что тут есть. В самом начале мы включаем отсылку алертов на почту, указывая адрес сервера, почтовый адрес и максимально возможное количество писем в час. По умолчанию, OSSEС группирует события, чтобы не заваливать вас потоком писем.
Дальше идет блок rules, в котором описывается, на что и как OSSEC будет реагировать — можно оставить все, на скорость работы, по моим наблюдениям, не влияет. Секция syscheck — это настройки так называемого integrity check. Смысл ее заключается в том, что IDS подсчитывает хэш каждого файла в указанных директориях и переодически их сверяет. Тут мы задаем, какие директории мы будем контролировать и через сколько времени будет проводиться проверка. В секции command описываются скрипты, которые может применять IDS при наступлении определенных условий. Секция active-response как раз и использует эти комманды. Например, при срабатывании опреденного правила firewall-block занесет src ip в iptables на 600 секунд. Удобно использовать от брутфорса. В самом конце у нас идут собственно лог-файлы, которые необходимо анализировать и сопоставлять с правилами.
На этом грубая настройка серверной части OSSEC закончена и мы можем запустить ее:

service ossec-hids start 

В случае успеха, на указанный вами почтовый адрес придет письмо с сообщением о старте:

OSSEC HIDS Notification. 2013 Sep 06 13:10:35  Received From: server.domain.local->ossec-monitord Rule: 502 fired (level 3) -> "Ossec server started." Portion of the log(s):  ossec: Ossec started.     --END OF NOTIFICATION 

Если запуск не удался, проверьте еще раз конфигурацию на предмет ошибок. Помощью в этом будет -файл /var/ossec/logs/ossec.log.

Установка web-интерфейса

Веб-интрефейс достаточно примитивен, но ради удобства можно и устновить

wget –c http://www.ossec.net/files/ossec-wui-0.3.tar.gz tar xzvf ossec-wui-0.3.tar.gz mv ossec-wui-0.3 /var/www/html/ossec cd /var/www/html/ossec/ ./setup.sh 

Тут нужно будет ввести логин и пароль, будет создан соответственно файл .htaccess. Теперь добавим пользователя ossec в группу apache

nano /etc/group ossec:x:494:ossec,ossecr,ossecm,ossece,apache service httpd restart 

Зайдем браузером на нашу страницу, затем дадим папке tmp права:

chmod 770 /var/www/html/ossec/tmp chgrp apache /var/www/html/ossec/tmp 

Теперь мы можем видеть события, регистрируемые в OSSEC и пользоваться нехитрым интерфейсом.

Установка агентов

Установим агенты на сервера в DMZ

wget -q -O - https://www.atomicorp.com/installers/atomic |sh && yum install ossec-hids ossec-hids-client 

Отредактируем файл /var/ossec/ossec.conf и приведем его к следующему виду:

<ossec_config>   <client>     <server-ip><b>server.domain.local</b></server-ip>   </client>    <syscheck>     <!-- Frequency that syscheck is executed -- default every 2 hours -->     <frequency>7200</frequency>      <!-- Directories to check  (perform all possible verifications) -->     <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>     <directories check_all="yes">/bin,/sbin</directories>      <!-- Files/directories to ignore -->     <ignore>/etc/mtab</ignore>     <ignore>/etc/mnttab</ignore>     <ignore>/etc/hosts.deny</ignore>     <ignore>/etc/mail/statistics</ignore>     <ignore>/etc/random-seed</ignore>     <ignore>/etc/adjtime</ignore>     <ignore>/etc/httpd/logs</ignore>     <ignore>/etc/utmpx</ignore>     <ignore>/etc/wtmpx</ignore>     <ignore>/etc/cups/certs</ignore>   </syscheck>    <rootcheck>     <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>     <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>   </rootcheck>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/messages</location>   </localfile>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/secure</location>   </localfile>    <localfile>     <log_format>syslog</log_format>     <location>/var/log/maillog</location>   </localfile>    <localfile>     <log_format>apache</log_format>     <location>/var/log/httpd/error_log</location>   </localfile>    <localfile>     <log_format>apache</log_format>     <location>/var/log/httpd/access_log</location>   </localfile>  <b><localfile>     <log_format>syslog</log_format>     <location>/var/log/proftpd/error.log</location>   </localfile></b>   </ossec_config> 

Как видно, этот конфиг весьма похож на обрезанный серверный. Основное, что требуется тут указать — это собственно сам адрес OSSEC сервера и лог-файлы. Я добавил в конец лог-файл proftpd для примера.
Общение между клиентом и сервером происходит по порту UDP/1514, незабудьте его открыть!

С установкой и настройком мы закончили, теперь нужно связать сервер с агентом. Для этого на сервер запустим специальную утилиту /var/ossec/bin/manage_agents

**************************************** * OSSEC HIDS v2.7 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: <b>A</b>  - Adding a new agent (use '\q' to return to the main menu).   Please provide the following:    * A name for the new agent: <b>ftp-server</b>    * The IP Address of the new agent: <b>192.168.0.2</b>    * An ID for the new agent[001]: Agent information:    ID:001    Name:ftp-server    IP Address:192.168.0.2  Confirm adding it?(y/n): <b>y</b> Agent added.   **************************************** * OSSEC HIDS v2.7 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: <b>e</b>  Available agents:    ID: 001, Name: ftp-server, IP: 192.168.0.2 Provide the ID of the agent to extract the key (or '\q' to quit): <b>001</b>  Agent key information for '001' is: <b>MDA3IGZ0cC1zZXJ1ZXIgMTkyLjE2OC4wLjIgOTQyODg5ODg2NDI5MGNiYTkzYTU1N2I5Yzg5OWTwNTJhNzQ2ZDdlYmNkNzM3NGYyZWQyZGQyZmFlNjdjMjZmOA==</b>  ** Press ENTER to return to the main menu.  **************************************** * OSSEC HIDS v2.7 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: <b>q</b>  ** You must restart OSSEC for your changes to take effect.  manage_agents: Exiting .. 

Как видите — все просто. Результатом работы будет BASE64-строка, которую нужно скопировать и вставить агенту. Не забываем перезапустить сервер:

service ossec-hid restart 

Теперь запустим команду /var/ossec/bin/manage_client на агенте:

 **************************************** * OSSEC HIDS v2.7 Agent manager.     * * The following options are available: * ****************************************    (I)mport key from the server (I).    (Q)uit. Choose your action: I or Q: <b>i</b>  * 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): <b>MDA3IGZ0cC1zZXJ1ZXIgMTkyLjE2OC4wLjIgOTQyODg5ODg2NDI5MGNiYTkzYTU1N2I5Yzg5OWTwNTJhNzQ2ZDdlYmNkNzM3NGYyZWQyZGQyZmFlNjdjMjZmOA==</b  ** Press ENTER to return to the main menu.    **************************************** * OSSEC HIDS v2.7 Agent manager.     * * The following options are available: * ****************************************    (I)mport key from the server (I).    (Q)uit. Choose your action: I or Q: <b>q</b>  manage_agents: Exiting .. 

Перезапускаем агента:

service ossec-hid restart 

Идем в консоль сервера и проверям, что агент подключен:

/var/ossec/bin/list_agents -a ftp-server-192.168.0.2 is available. 

На этом настройку можно считать оконченной. Что делать дальше? OSSEC очень гибкая и мощная IDS. Вы можете писать свои правила — их формат очень прост. Вы можете управлять агентами с сервера, назначать им конфигурацию от туда же, связать IDS с другой IDS (например, с NIDS Snort) и многое-многое другое.
Если вы все сделали правильно, то теперь можете контролировать все происходящие изменения на файловом уровне и возможные атаки.

Ссылки

ссылка на оригинал статьи http://habrahabr.ru/post/192800/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *