Пожалуй, не ошибусь, если скажу, что любому профессиональному системному администратору важно знать что и когда происходит с его серверами. Особенно остро этот вопрос встает в такой области, как информационная безопасность.
В этом посте я хочу познакомить вас, коллеги, с развертыванием 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@domain.local</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>
<localfile>
<log_format>syslog</log_format>
<location>/var/log/proftpd/error.log</location>
</localfile>
</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: a
- Adding a new agent (use 'q' to return to the main menu).
Please provide the following:
* A name for the new agent: ftp-server
* The IP Address of the new agent: 192.168.0.2
* 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): y
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: e
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): 001
Agent key information for '001' is:
MDA3IGZ0cC1zZXJ1ZXIgMTkyLjE2OC4wLjIgOTQyODg5ODg2NDI5MGNiYTkzYTU1N2I5Yzg5OWTwNTJhNzQ2ZDdlYmNkNzM3NGYyZWQyZGQyZmFlNjdjMjZmOA==
** 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: q
** 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: 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): MDA3IGZ0cC1zZXJ1ZXIgMTkyLjE2OC4wLjIgOTQyODg5ODg2NDI5MGNiYTkzYTU1N2I5Yzg5OWTwNTJhNzQ2ZDdlYmNkNzM3NGYyZWQyZGQyZmFlNjdjMjZmOA==
** 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: q
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) и многое-многое другое.
Если вы все сделали правильно, то теперь можете контролировать все происходящие изменения на файловом уровне и возможные атаки.
Ссылки
- www.ossec.net/
- ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BE%D0%B1%D0%BD%D0%B0%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D1%82%D0%BE%D1%80%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9
Автор: Neuronix