Пожалуй, не ошибусь, если скажу, что любому профессиональному системному администратору важно знать что и когда происходит с его серверами. Ососбенно остро этот вопрос встает в такой области, как информационная безопасность.
В этом посте я хочу познакомить вас, коллеги, с развертыванием 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/
Добавить комментарий