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

в 11:57, , рубрики: IDS, ips, linux, 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@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) и многое-многое другое.
Если вы все сделали правильно, то теперь можете контролировать все происходящие изменения на файловом уровне и возможные атаки.

Ссылки

Автор: Neuronix

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js