IDS Snort. Часть 1-я. Установка + Настройка + PolledPork









Первую свою статью я хочу посветить системе обнаружения атак Snort как неотъемлемой части знаний специалиста по безопасности АС. В данной статья я расскажу вам как развернуть данную систему.










Установка
Итак приступим к делу:
У нас есть сервер с ОС Debian на котором мы хотим разместить нашу СОА (IDS).
Итак, установим SSH на нашем сервере чтобы управлять им с нашего тёплого рабочего места:
apt-get install openssh-server

Запустим демон:
service ssh start

Итак идем в наш уютный кабинет с кожаным креслом и будем рулить прямиком оттуда.
Прописываем дополнительные источники пакетов
Открываем файл /etc/apt/sources.list и дописываем источники:
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all




И добавляем ключ доступа к этим источникам:
cd /tmp && wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -
Устанавливаем библиотеки из источников:
apt-get install build-essential libpcre3-dev bison flex zlib1g-dev openssl libssl-dev autoconf libtool pkg-config automake

Создадим каталог для исходников:
mkdir ~/snort

cd ~/snort

Дальше нам понадобится libpcap для захвата пакетов в режиме promisc:
wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz
tar xzf libpcap-1.8.1.tar.gz
cd libpcap-1.8.1
./configure --prefix=/usr && make && make install

Cкачаем и поставим libdnet для низкоуровневой работы с пакетами:
cd ~/snort
wget https://github.com/dugsong/libdnet/archive/libdnet-1.12.tar.gz
tar xzf libdnet-1.12.tar.gz
cd libdnet-libdnet-1.12
./configure --prefix=/usr --enable-shared && make && make install

А так же daq (последнюю версию можно посмотреть на https://www.snort.org/downloads в разделе Sources):
cd ~/snort
wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure && make && make install

Скачаем библиотеки nghttp которые реализуют HPAC алгоритм для сжатия заголовка:
cd ~/snort
wget https://github.com/nghttp2/nghttp2/releases/download/v1.22.0/nghttp2-1.22.0.tar.gz
tar -xzvf nghttp2-1.22.0.tar.gz
cd nghttp2-1.22.0
autoreconf -i --force
automake
autoconf
./configure --enable-lib-only && make && make install

И наконец установка самого Snort:
cd ~/snort
wget https://snort.org/downloads/snort/snort-2.9.9.0.tar.gz
tar -xvzf snort-2.9.9.0.tar.gz
cd snort-2.9.9.0
./configure --enable-sourcefire && make && make install

Обновим кэш библиотек:
ldconfig
Поместим ссылку в бинарный файл /usr/sbin:
ln -s /usr/local/bin/snort /usr/sbin/snort

Проверим всё ли у нас получилось:
snort -V
Если видим то что показано ниже то всё удачно:

 Настройка
 
Создаем пользователя и группу:
groupadd snort

useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
Создаем каталоги:
mkdir /etc/snort

mkdir /etc/snort/rules

mkdir /etc/snort/rules/iplists

mkdir /etc/snort/preproc_rules

mkdir /usr/local/lib/snort_dynamicrules

mkdir /etc/snort/so_rules
Создаем несколько файлов, в которых хранятся правила и списки ip-адресов:
touch /etc/snort/rules/iplists/black_list.rules

touch /etc/snort/rules/iplists/white_list.rules

touch /etc/snort/rules/local.rules

touch /etc/snort/sid-msg.map
Создаем каталоги лог-файлов:
mkdir /var/log/snort
mkdir /var/log/snort/archived_logs
Настроим разрешения
chmod -R 5775 /etc/snort

chmod -R 5775 /var/log/snort

chmod -R 5775 /var/log/snort/archived_logs

chmod -R 5775 /etc/snort/so_rules

chmod -R 5775 /usr/local/lib/snort_dynamicrules
Изменим права на каталоги:

chown -R snort:snort /etc/snort

chown -R snort:snort /var/log/snort

chown -R snort:snort /usr/local/lib/snort_dynamicrules
Копируем конфигурационные файлы и динамические препроцессоры:

cd ~/snort/snort-2.9.9.0/etc/

cp *.conf* /etc/snort

cp *.map /etc/snort

cp *.dtd /etc/snort

cd ~/snort/snort-2.9.9.0/src/dynamic_preprocessors/build/usr/local/lib/snort_dynamicpreproccesor/

cp * /usr/local/lib/snort_dynamicpreprocessor/
Закоменнтируем набор правил (PolledPork работает с помощью одного файла правил):

sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf
Откроем главный конфигурационный файл:

nano /etc/snort/snort.conf
Заменяем ipvar HOME_NET any на ipvar HOME_NET [ВАША СЕТЬ (например: 192.168.1.0/24]

Заменяем ipvar EXTERNAL_NET any на ipvar EXTERNAL_NET !$HOME_NET
То есть внешняя сеть – любая, не равная домашней. Если хотите чтобы трафик шел и внутри домашней сети то ничего не меняем.

Прописываем пути:


var RULE_PATH /etc/snort/rules

var SO_RULE_PATH /etc/snort/so_rules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

var WHITE_LIST_PATH /etc/snort/rules/iplists

var BLACK_LIST_PATH /etc/snort/rules/iplists
Раскоменнтируем файл правил для проверки работы Snort:

include $RULE_PATH/local.rules
После правки конфигурационного файла теперь проверим всё ли у нас работает.

snort -T -i eth0 -c /etc/snort/snort.conf
-T          Для проверки конфигурационного файла
-i           Интерфейс для прослушивания (начиная с версии 2.9.8.х)
-с           Какой конфигурационный файл использовать
Если всё успешно мы в терминале видим:



Напишем простое правило для проверки обнаружения Snort
Вставьте следующую строку в пустой файл локальных правил /etc/snort/rules/local.rules:


alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)
И добавь строку в файл /etc/snort/sid-msg.map:

#v2

1 || 10000001 || 001 || icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc792
После изменений мы снова должны проверить файл конфигурации:
snort -T -c /etc/snort/snort.conf -i eth0

Если прокрутить терминал вверх мы увидим что наше правило успешно загрузилось:

Теперь мы можем начать тестирование в режиме NIDS чтобы выводить любые предупреждения в консоль.
Итак мы будем запускать снорт используя следующие флаги:
-A console                             Параметр «Консоль» выводит предупреждения в 
                                               режиме быстрого доступа на терминале
-q                                           Тихий режим. Не показывать баннер и отчет о состоянии.
-u snort                                  Запуск Snort в качестве следующего пользователя
-g snort                                  Запуск Snort в качестве следующей группы
-c /etc/snort/snort.conf          Путь к нашему Snort.conf файлу
-i eth0                                    Интерфейс для прослушивания


/usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
Когда вы выполните эту команду, вы изначально не увидите никакого вывода. Snort запущен и обрабатывает все пакеты, которые поступают на eth0 (или какой-либо интерфейс, указанный вами). Snort сравнивает каждый пакет в соответствии с правилами, которые он загрузил (в данном случае нашим единственным правилом Ping ICMP), и затем выведет предупреждение в терминале, когда пакет соответствует нашему правилу.
С другого компьютера выполните команду ping IP-адрес, и вы увидите в консоли вывод который аналогичен тому, что показан ниже.


Используйте Ctrl-c для остановки работы Snort. Обратите внимание, что Snort сохранил копию этой информации в /var/log/snort,с именем Snort.log.nnnnnnnnn (Цифры могут быть разными).

 PulledPork


PulledPork - это скрипт на Perl, которой загружет, обьединяет и устанавливает набор правил для Snort. Итак давайте начнем его установку и настройку.

Докачаем нужные библиотеки:
apt-get install libcrypt-ssleay-perl liblwp-useragent-determined-perl

Скачаем и установим PulledPork и конфигурационные файлы:
cd ~/snort
wget https://github.com/shirkdog/pulledpork/archive/master.tar.gz -O pulledpork-master.tar.gz
tar xzvf pulledpork-master.tar.gz
cd pulledpork-master/
cp pulledpork.pl /usr/local/bin
chmod +x /usr/local/bin/pulledpork.pl
cp etc/*.conf /etc/snort

Проверим правильность установки:
/usr/local/bin/pulledpork.pl -V

Должны получить:

Регистрируемся на официальном сайте http://snort.org/

Переходим в личный кабинет и видим Oinkcode, запомним его т.к. будем его записать в конфигурационный файл

Откроем наш файл для конфигурации /etc/snort/pulledpork.conf:
nano /etc/snort/pulledpork.conf

И редактируем его:

Строка 19: Введите свой oinkcode или закомментируте если его нету
Строка 29: Раскомментируйте набор правил для возникающих угроз.
Строка 74: Изменить на: rule_path=/etc/snort/rules/snort.rules
Строка 89: Изменить на: local_rules=/etc/snort/rules/local.rules
Строка 92: Изменить на: sid_msg=/etc/snort/sid-msg.map
Строка 96: Изменить на: sid_msg_version=2
Строка 119: Изменить на: config_path=/etc/snort/snort.conf
Строка 133: Изменить на: distro=Debian-8-7
Строка 141: Изменить на: black_list=/etc/snort/rules/iplists/black_list.rules
Строка 150: Изменить на: IPRVersion=/etc/snort/rules/iplists
Запустим PulledPork вручную один раз, чтобы убедиться что он работает:
/usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l

PulledPork должен завершиться с выходом как приведено ниже

Когда PulledPork завершился успешно как показано выше, у нас появиться набор правил snort.rules в директории /etc/snort/rules/. PulledPork объединяет все правила в один файл.
Теперь мы должны праписать это правило в snort.conf.
Откройте файл /etc/snort/snort.conf и пропишите слудющее правило:
include $RULE_PATH/snort.rules

Поскольку мы снова модифицировали файл конфигурации snort.conf мы заного должны протестировать:
snort -T -c /etc/snort/snort.conf -i eth0

Теперь запланируем проверку обновлений:
crontab -e

Выбираем редактор и добавляем строку, указывая запускать PulledPork по расписанию, например, каждый день в 12:00:
00 12 * * * /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l


Итак теперь у нас есть СОА с автообновлением правил, на этой ноте я закончу статью. В следующей части я расскажу вам как прикрутить к Snort БД mySQL и даже как автоматически запускать всю нашу IDS!

Комментариев нет:

Отправить комментарий