Snort: Часть 4. Установка Barnyard2
Установка Barnyard2
Barnyard2 является интерпретатором с открытым исходным кодом для двоичных файлов unified2, создаваемых Snort. Основная задача Barnyard2 - это позволить Snort писать выходные файлы на диск эффективным способом, оставляя задачу парсинга двоичных данных в различные форматы другому процессу, что с большей вероятностью не позволит Snort пропустить сетевой трафик.
Установка пререквизитов
Сперва установим необходимые пререквизиты для Barnyard2:
sudo apt-get install -y mysql-server libmysqlclient-dev mysql-client autoconf libtool
Во время установки MySQL будет предложено ввести пароль для root-пользователя. Для примера вводим MYSQLROOTPASSWORD.
Сборка и установка Barnyard2
Далее установим и сконфигурируем Barnyard2. Для этого скачаем исходный код Barnyard2 и сконфигурируем его:
cd ~/snort_src
git clone https://github.com/firnsy/barnyard2.git
cd barnyard2/
autoreconf -fvi -I ./m4
Для Barnyard2 необходима библиотека dnet.h
, которую мы установили ранее вместе с пакетом libdumbnet-dev
. Однако Barnyard2 ожидает другое имя для библиотеки, поэтому нам нужно создать символьную ссылку /usr/include/dnet.h
на библиотеку /usr/include/dumbnet.h
sudo ln -s /usr/include/dumbnet.h /usr/include/dnet.h
sudo ldconfig
В зависимости от архитектуры системы (32 или 64 разрядная) нужно выбрать одну из следующих команд для конфигурации Barnyard2, указав путь к библиотеке MySQL. Разрядность ОС можно узнать, например, с помощью команды uname -m
или arch
. Вывод x86_64
соответствует 64-разрядной система, а i686
или i386
- 32-х.
-
Для 64-разрядной:
./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
-
Для 32-разрядной:
./configure --with-mysql --with-mysql-libraries=/usr/lib/i386-linux-gnu
После чего продолжить установку:
make
sudo checkinstall # Во время установки будет предупреждение вида Warning: debian policy compliant one. Please specify an alternate one, тогда можно ввести данный номер версии: 2.1.14
sudo dpkg -i barnyard2_2.1.14-1_amd64.deb # Не нужно после checkinstall, так как пакет уже установлен
Barnyard2, по идее, установлен по следующему пути /usr/local/bin/barnyard2
. И теперь можно проверить, так ли это на самом деле с помощью команды:
/usr/local/bin/barnyard2 -V
Должен быть примерно следующий вывод на терминал:
______ -*> Barnyard2 <*-
/ ,,_ \ Version 2.1.14 (Build 337)
|o" )~| By Ian Firns (SecurixLive): http://www.securixlive.com/
+ '''' + (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com>
Конфигурирование Snort для работы с Barnyard2
Открываем конфигурационный файл snort.conf
(например, sudo gedit /etc/snort/snort.conf
) и добавляем строку с настройками, в которой указываем Snort писать выходные события в двоичный файл, так что Barnyard2 сможет читать их. Для этого вместо строки или сразу после неё:
# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
вставляем следующую строку:
output unified2: filename snort.u2, limit 128
Данная строка указывает Snort писать данные в двоичный формат unified2, что для Snort гораздо быстрее, чем писать в человекочитаемый формат.
Для того чтобы сконфигурировать Snort для использования Barnyard2 нам необходимо скопировать некоторые файлы из каталога с исходным кодом:
sudo cp ~/snort_src/barnyard2/etc/barnyard2.conf /etc/snort
sudo mkdir /var/log/barnyard2
sudo chown snort.snort /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo
sudo touch /etc/snort/sid-msg.map
Конфигурация БД MySQL
Так как Barnyard2 сохраняет предупреждения в БД MySQL, нам необходимо создать эту БД и пользователя snort для доступа к БД. Подключаемся к БД MySQL:
mysql -u root -p
Вводим пароль MYSQLROOTPASSWORD и выполняем на сервере MySQL следующие команды для создания БД и MySQL пользователя:
mysql> create database snort;
mysql> use snort;
mysql> source ~/snort_src/barnyard2/schemas/create_mysql
mysql> CREATE USER 'snort'@'localhost' IDENTIFIED BY 'MYSQLSNORTPASSWORD';
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to 'snort'@'localhost';
mysql> show tables;
mysql> exit
MYSQLSNORTPASSWORD - пароль для пользователя snort. После sql-команды show tables;
мы должны были получить следующий вывод:
mysql> show tables;
+------------------+
| Tables_in_snort |
+------------------+
| data |
| detail |
| encoding |
| event |
| icmphdr |
| iphdr |
| opt |
| reference |
| reference_system |
| schema |
| sensor |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+------------------+
16 rows in set (0.00 sec)
После того как БД Snort была создана необходимо сообщить Barnyard2 о её деталях, для этого открываем конфигурационный файл Barnyard2 /etc/snort/barnyard2.conf
(например, sudo gedit /etc/snort/barnyard2.conf
). И добавляем строку с настройками в конце файла в раздел # database: log to a variety of databases
:
output database: log, mysql, user=snort password=MYSQLSNORTPASSWORD dbname=snort host=localhost sensor name=sensor01
output database: log, mysql, user=snort password=MYSQLSNORTPASSWORD dbname=snort host=localhost
Так как пароль хранится в открытом виде в barnyard2.conf
, то следует запретить другим пользователям читать данный файл:
sudo chmod o-r /etc/snort/barnyard2.conf
Проверка работоспособности Barnyard2
Теперь Barnyard2 сконфигурирован для работы со Snort. Чтобы протестировать его работу нам нужно запустить Snort и Barnyard2 и сгенерировать какие-нибудь предупреждения. Запускаем Snort в фоновом режиме (как демон), используя те же параметры, что и раньше, только добавив флаг -D, который отвечает за запуск Snort в фоновом режиме, и удалив флаг -A Console, так как выводить предупреждения на экран терминала теперь не нужно:
sudo snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 -D
На экране должен быть примерно следующий вывод, за исключением идентификатора процесса (PID):
Spawning daemon child...
My daemon child 3160 lives...
Daemon parent exiting (0)
Запускаем Barnyard2 для отслеживания двоичных файлов Snort с предупреждениями и загрузки их в экземпляр БД Snort. Запускаем Barnyard2 со следующими ключами:
sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort
- -c /etc/snort/barnyard2.conf - the Barnyard2 configuration file
- -d /var/log/snort - the location to look for the snort binary output file
- -f snort.u2 - the name of the file to look for.
- -w /var/log/snort/barnyard2.waldo - the path to the waldo file (checkpoint file).
- -u snort - run Barnyard2 as the following user after startup
- -g snort - run Barnyard2 as the following group after startup
Теперь пропингуем IP-адрес интерфейса, указанного выше (eth0). Это можно сделать с помощью команды ping 192.168.0.104
. После чего в директории Snort для логов должен появиться файл с именем вида snort.u2.nnnnnnnnnn, где вместо nnnnnnnnnn будет номер. Это и будет двоичный файл с предупреждениями, который Snort записывает для обработки Barnyard2.
В случае, если пинговать из системы, где установлен Snort предупреждения не появляются (!?).
Должен получится примерно следующий вывод:
--== Initialization Complete ==--
______ -*> Barnyard2 <*-
/ ,,_ \ Version 2.1.14 (Build 337)
|o" )~| By Ian Firns (SecurixLive): http://www.securixlive.com/
+ '''' + (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com>
Using waldo file '/var/log/snort/barnyard2.waldo':
spool directory = /var/log/snort
spool filebase = snort.u2
time_stamp = 1486792881
record_idx = 26
Opened spool file '/var/log/snort/snort.u2.1486792881'
Waiting for new data
02/11-09:27:44.512510 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.100 -> 192.168.0.104
02/11-09:27:45.520568 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.100 -> 192.168.0.104
02/11-09:27:46.527972 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.100 -> 192.168.0.104
02/11-09:27:47.535450 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.100 -> 192.168.0.104
02/11-09:27:54.152268 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.103 -> 192.168.0.104
02/11-09:27:55.141316 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.103 -> 192.168.0.104
02/11-09:27:56.155647 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.103 -> 192.168.0.104
02/11-09:27:57.170367 [**] [1:10000001:1] Snort Alert [1:10000001:1] [**] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 192.168.0.103 -> 192.168.0.104
Отключить Barnyard2 в терминале можно с помощью комбинации клавиш Ctrl+C. А демона Snort можно закрыть с помощью команды kill
, указав PID процесса Snort. PID можно узнать с помощью команды ps aux
:
roman@snort-vm:~$ ps aux | grep snort
avahi 481 0.0 0.0 32228 2980 ? Ss 08:39 0:00 avahi-daemon: running [snort-vm.local]
snort 3160 0.0 2.0 457080 82192 ? Ssl 09:01 0:00 snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth1 -D
roman@snort-vm:~$ sudo kill 3160
Оставить комментарий