Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Сообщество системных администраторов Litl-Admin.ru Система обнаружения вторжений Snort


Ссылка на материал

Здравствуйте друзья! Сегодня, наконец, дошли руки до написания статьи на тему защиты своей внутренней сети от вторжений извне. Точнее даже не самой защиты, а своевременной и наглядной идентификации.

Итак, перейду ближе к делу.

У нас имеется сервер с Debian 8 (скачал новую версию специально для этого дела), два сетевых интерфейса eth0 и eth1. Как водится, это граничный шлюз, будет раздавать инет, приходящий на внешний интерфейс eth0 во внутреннюю сеть eth1. Это мы уже делали, на этом зацикливаться не буду.

Первым делом нам потребуется ssh, чтобы “рулить” уже с рабочего места (не очень удобно торчать в морозной серверной с консолью, стоя и в неприятном шуме).

# apt-get -y install openssh-server

Далее открываем конфиг:

# vi /etc/ssh/sshd_config

И раскомментируем строчки:

Protocol 2
Port 22

Запустим сервис:

# /etc/init.d/ssh start

Всё, теперь можно коннектиться уже с рабочего места. Перехожу из серверной к себе в уютную коморку (фотки уже проскакивали ;).

….

Вот жеж! Балбес. Пришлось снова идти в серверную. На только что установленной системе не был прописан IP адрес интерфейса, не смог приконнектиться…. Исправлюсь

Открываем файл конфигурации интерфейсов и прописываем наши данные (DHCP у меня нет):

# vi /etc/network/interfaces

Статический адрес

Статический адрес

А теперь перезагружаем сеть

# /etc/init.d/networking restart

Всё, теперь все действия будем выполнять уже удалённо. Да, не забываем прописать валидный DNS в файл /etc/resolv.conf

nameserver 8.8.8.8

Один из вариантов, публичный гугловский.

Прописываем дополнительные источники пакетов

Для этого открываем файл /etc/apt/sources.list и дописываем следующие источники:

deb http://packages.dotdeb.org jessieall
deb-src http://packages.dotdeb.org jessieall

sources

sources

Соответственно, добавляем ключ для доступа к этим источникам:

# cd /tmp && wget http://www.dotdeb.org/dotdeb.gpg
# cat dotdeb.gpg | apt-key add -

Обновляемся и ставим сопутствующий софт

# apt-get update && apt-get -y install apache2 apache2-doc autoconf automake bison ca-certificates ethtool flex g++ gcc libapache2-mod-php5 libcrypt-ssleay-perl libmysqlclient-dev libnet1 libpcre3 libpcre3-dev libphp-adodb libssl-dev libtool libwww-perl make mysql-client mysql-common mysql-server ntp php5-cli php5-gd php5-mysql php-pear sysstat

Ставится куча компонентов и зависимостей, они нам понадобятся в будущем. Идём пить кофе, у меня процесс установки занялся минут на 5.

Придётся ввести пароль root для mysql-сервера. Попутно выдается предупреждение о том, что adodb установлен в/usr/share/php/adodb, запомним этот путь, он нам пригодится потом.

Разгружаем ядро (если планируется большой трафик)

# vi /etc/rc.local

offload

offload

Дописываем строки перед exit 0

ethtool --offload eth0 rx off tx off
ethtool -K eth0 gso off
ethtool -K eth0 gro off

Ставим библиотеки из исходников

Дальше нам понадобится libpcap для захвата пакетов в режиме promisc

# cd /usr/src
# wget http://www.tcpdump.org/release/libpcap-1.6.1.tar.gz
# tar xzflibpcap-1.6.1.tar.gz
# cdlibpcap-1.6.1
# ./configure --prefix=/usr && make && make install

Аналогично скачаем и поставим libdnet для низкоуровневой работы с пакетами

# cd /usr/src
# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
# tar xzf libdnet-1.12.tgz
# cd libdnet-1.12
# ./configure --prefix=/usr --enable-shared && make && make install

А так же daq (последнюю версию можно посмотреть наhttps://www.snort.org/downloads в разделе Sources)

# cd /usr/src
# wget https://www.snort.org/downloads/snort/daq-2.0.5.tar.gz
# tar xzf daq-2.0.5.tar.gz
# cd daq-2.0.5
# ./configure && make && make install

Обновляем кэш библиотек

После установки софта из исходников желательно бы обновить кэш подключенных библиотек:

# echo /usr/lib >> /etc/ld.so.conf
# echo/usr/local/lib >> /etc/ld.so.conf
# ldconfig

Качаем и ставим сам Snort

С офсайта выясняем, что последняя версия Снорта –snort-2.9.7.3.tar.gz (на момент 14.07.2015).

# cd /usr/src
# wgethttps://www.snort.org/downloads/snort/snort-2.9.7.3.tar.gz
#tar xzf snort-2.9.7.3.tar.gz
# cdsnort-2.9.7.3/
#./configure --enable-sourcefire && make && make install
# mkdir /usr/local/etc/snort
# mkdir /usr/local/etc/rules
# mkdir /usr/local/lib/snort_dynamicrules
# mkdir /var/log/snort
# touch /usr/local/etc/snort/rules/white_list.rules
# touch /usr/local/etc/snort/rules/black_list.rules
# touch/usr/local/etc/snort/sid-msg.map
# groupadd snort
# useradd -g snort snort
# chown snort:snort /var/log/snort
# cp etc/*.conf* /usr/local/etc/snort/
# cp etc/*.map/usr/local/etc/snort/

Первоначальная настройка Snort

# vi /usr/local/etc/snort/snort.conf

Ищем строкуipvar HOME_NET anyи меняем её наipvar HOME_NET 192.168.1.0/24
Здесь указываем домашнюю сеть. У меня это 192.168.1.0/24, у вас может быть другая, указываете соответственно её.

Ищем строкуipvar EXTERNAL_NETany и меняем её наipvar EXTERNAL_NET !$HOME_NET
То есть внешняя сеть – любая, не равная домашней.

Ищем строку var RULE_PATH ../rules и меняем параметр на var RULE_PATH ./rules (одна точка в пути, т.е. текущий директорий).

Аналогично и с var WHITE_LIST_PATH и с var BLACK_LIST_PATH.

Ищем строку “output unified2:” и меняем (укорачиваем) её до “output unified2: filename snort.log, limit 128

Далее, закомментируем все строки правил (include $RULE_PATH…), кроме первой (local.rules), это для теста. Мы создадим всего одно правило, которое проверим. А позднее будем добавлять только нужные нам, дабы не генерировать кучу не совсем нужных эвентов.

Snort работает как перехватчик пакетов, анализируя содержимое каждого на ряд критериев. Критериев этих великое множество (различные аномалии трафика), поэтому лог-файлы могут разрастаться очень быстро, если включена проверка по всем правилам.

rules

rules

Ну и теперь откроем на редактирование этот файл локальных правил:

# vi /usr/local/etc/snort/rules/local.rules

alert icmp any any-> $HOME_NET any (msg:"PINGUSHKI"; sid:10000001; rev:1;)

Сохраним файл и запустим Snort для теста с выводом предупреждений в консоль:

#/usr/local/bin/snort -A console -q -u snort -g snort -c /usr/local/etc/snort/snort.conf -i eth0

Теперь пинганём наш хост с любого другого узла:

Вот в консоль и посыпались сообщения

Вот в консоль и посыпались сообщения

Готово! Наш сенсор атак уже обнаруживает попытки пропинговать кого-то в нашей сети. Ну пока ещё это не очень удобная конфигурация. Мы можем установить классификатор для перегона логов в mysql базу.

Установка Barnyard2

# cd /usr/src
# wget https://github.com/firnsy/barnyard2/archive/master.tar.gz
# tar xzf master.tar.gz
# cd barnyard2-master
# autoreconf -fvi -I ./m4
# ./configure --with-mysql --with-mysql-libraries=/usr/lib/i386-linux-gnu && make && make install
# mv /usr/local/etc/barnyard2.conf /usr/local/etc/snort
# cp schemas/create_mysql /usr/src
# mkdir/var/log/barnyard2
# chown snort:snort /var/log/barnyard2

Дальше конфигурим

# vi /usr/local/etc/snort/barnyard2.conf

Меняем пути к конфигурационным файлам согласно тем, которые мы перенесли в каталог snort-а:

barnyard2

barnyard2

А так же ищем строкуoutput alert_fast: stdout меняем просто наoutput alert_fast.

В конце файла добавим строку:

output database: log, mysql, user=snort password=snortpassdbname=snort host=localhost

Разумеется, пароль вы можете указать произвольный. Дальше надо будет эту базу данных создать.

Создаем базу данных

# mysql -uroot -p<пароль>

mysql> create database snort;
Query OK, 1 row affected (0.00 sec)

mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to 'snort'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> SET PASSWORD FOR 'snort'@'localhost'=PASSWORD('snortpass');
Query OK, 0 rows affected (0.00 sec)

mysql> use snort;
Database changed

mysql> source /usr/src/create_mysql
Query OK, 0 rows affected (0.05 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.03 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.01 sec)

Готово!

mysql> quit;

Проверка связки Snort & Barnyard

# /usr/local/bin/snort -q -u snort -g snort -c /usr/local/etc/snort/snort.conf -i eth0 &
# /usr/local/bin/barnyard2 -c /usr/local/etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /usr/local/etc/snort/bylog.waldo -C /usr/local/etc/snort/classification.config &

связка

связка

Пинганём аналогично предыдущему тесту. А потом завершим бэкграундную задачу:

# fg
# <Ctrl+C>

статистика

статистика

Видим ненулевую статистику по ICMP. Значит связка работает. Осталось прикрутить веб-интерфейс.

Ставим WEB-интерфейс

# cd /usr/src
# wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz
# tar xzfbase-1.4.5.tar.gz
# cp -r base-1.4.5 /var/www/base
# chown -R www-data:www-data /var/www/base

Создаём конфиг:

# vi /etc/apache2/conf-enabled/base.conf

следующего содержания (временно)

Alias /base /var/www/base/
<Directory "/var/www/base/">
AllowOverride None
</Directory>

Настраиваем Apache2 на SSL

# a2enmod ssl
# cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled

Далее, надо бы отключить показ замечаний:

# vi /etc/php5/apache2/php.ini
ищем строкуerror_reporting и устанавливаем значение в E_ALL & ~E_NOTICE для удобства отладки и сокрытия лишних сообщений.

Добавляем расширения к PHP:

# pear config-set preferred_state alpha && pear channel-update pear.php.net
# pear install --alldeps Image_Color2 Image_Canvas Image_Graph
# /etc/init.d/apache2 restart

Открываем в браузере URL: https://<IP сервера>/base

Веб-морда

Веб-морда

Начинаем конфигурировать.

На шаге 1 нужно будет указать путь до adodb, мы его запоминали вначале.

На шаге 2 нужно указать параметры соединения с сервером баз данных.

mysql

mysql

Далее, закроем паролем доступ к статистике:

auth

auth

На предложение создать базу отвечаем утвердительно и переходим на окно авторизации. Вводим данные из 3-го шага и …

Перед нами вполне удобный веб-интерфейс.

Web-интерфейс

Web-интерфейс

В перспективе ещё наладить автоматическое получение базы с правилами для поддержания актуальности нашего сенсора атак. Ну а пока хватит!



В избранное