Snort
Содержание:
Первоначальная настройка Snort
Ищем строку ipvar HOME_NET any и меняем её на ipvar HOME_NET 192.168.1.0/24
Здесь указываем домашнюю сеть. У меня это 192.168.1.0/24, у вас может быть другая, указываете соответственно её.
Ищем строку ipvar EXTERNAL_NET any и меняем её на 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
Ну и теперь откроем на редактирование этот файл локальных правил:
Сохраним файл и запустим Snort для теста с выводом предупреждений в консоль:
Теперь пинганём наш хост с любого другого узла:
Вот в консоль и посыпались сообщения
Готово! Наш сенсор атак уже обнаруживает попытки пропинговать кого-то в нашей сети. Ну пока ещё это не очень удобная конфигурация. Мы можем установить классификатор для перегона логов в mysql базу.
Создание службы
Вишенкой на нашем торте будет создание служб из Snort и Barnyard2 с добавлением их в автозапуск. Для Snort необходимо создать файл с содержимым:
|
1 |
Unit Description=Snort NIDS Daemon After=syslog.target network.target Service Type=simple ExecStart=/usr/local/bin/snort-q-usnort-gsnort-c/etc/snort/snort.conf-ienp0s3 Install WantedBy=multi-user.target |
Скажем системе, что службу надо запускать при загрузке:
| 1 | sudo systemctl enable snort |
И запустим службу:
| 1 | sudo systemctl start snort |
Введем команду для проверки статуса службы:
| 1 | systemctl status snort |
Для второй будущей службы необходимо создать файл и прописать в нем следующие строки:
|
1 |
Unit Description=Barnyard2 Daemon After=syslog.target network.target Service Type=simple ExecStart=/usr/local/bin/barnyard2-c/etc/snort/barnyard2.conf-d/var/log/snort-fsnort.u2-q-w/var/log/snort/barnyard2.waldo-gsnort-usnort-D-a/var/log/snort/archived_logs Install WantedBy=multi-user.target |
Затем повторим команды:
|
1 |
sudo systemctl enable barnyard2 sudo systemctl start barnyard2 systemctl status barnyard2 |
Перезагружаем нашу систему и убеждаемся, что все запущено.
Installation of Snorby
At this stage, all dependencies should be satisfied and we should be able to install Snorby. We will be installing Snorby in /var/www/ but you can also choose a different location, including the use of virtual hosts.
Go to /var/www/ and download Snorby:
# cd /var/www/ # git clone http://github.com/Snorby/snorby.git
Then edit database information:
# vim snorby/config/database.yml
And change the password to access your mysql server:
snorby: &snorby adapter: mysql username: root password: host: localhost
Also edit the snorby configuration file:
# vim /var/www/snorby/config/snorby_config.yml
And paste these lines:
development: domain: localhost:3000 test: domain: localhost:3000 production: domain: localhost:3000
Install all required dependencies as specified in Gemfile:
# cd /var/www/snorby/ # bundle install
Then install Snorby by issuing:
# rake snorby:setup
Опции запуска
После завершения конфигурации рассмотрим опции для запуска.
(Примечание: опции в командной строке имеют более высокий приоритет, чем snort.conf)
-A Может принимать значения: fast, full, console или none. Fast
предназна для быстрого генерирования алертов. Этот параметр
рекомендуют использовать не только разработчики, но и
специалисты в информационной безопасности. Full - самый
медленный способ, используется при необходимости.
-b Журналировать пакеты в формате tcpdump. (Это наиболее быстрый и
производительный вариант)
-c После этого параметра указывается имя с конфигурационным файлом.
-C Убирать из дампа пакета HEX значения.
-d Журналировать дамп (содержимое) пакетов.
-D Запуск Snort в режиме демона.
-e Журналировать информацию о заголовке пакета.
-f Отключает вызовы fflush() после записи бинарных логов.
-F Читать bpf фильтры из файла .
-g Запустить IPS с правами группы .
-G <0xid> Идентификатор логов. Используется, если на машине работают
несколько программ Snort.
-h Домашняя сеть = .
-i Прослушивать интерфейс с именем .
-I Добавить имя интерфейса в созданный алерт.
-k Режим контрольной суммы. Может принимать значения:
(all,noip,notcp,noudp,noicmp,none).
-K Режим логирования. Значения: pcap, ascii, none. По умолчанию
устанавливается значение pcap.
-l Писать логи в каталог .
-L Писать логи в tcpdump файл с именем .
-m Устанавливает маску .
-n Выход после получения пакета.
-N Отключает логирование (но алерты работают).
-o Выбрать правило для тестирования в Log|Alert|Pass
-O Скрывать IP адреса.
-p Отключение promisc режима.
-q Не показывать баннер Snort.
-r Записывать журнал в декодированной форме, то есть в более
читабильном виде в отличие от бинарных логов tcpdump.
-R Вставить 'id' в имя файла snort_intf.pid
-s Журналировать в syslogd. Для работы данного ключа необходимо
записать в файл syslog.conf:
"auth.alert@managmentserverIP"
-S Устанавливает значение файла с правилами n равному v.
-T Протестировать и сообщить о текущей конфигурации Snort.
-u Запустить IPS с правами пользователя .
-U Использовать UTC.
-v Подробный режим.
-V Показать версию Snort.
-w Делать дамп 802.11 контрольных фреймов.
-X Делать дамп содержимого пакета.
-y Помещать год в дату логов и алертов.
-Z Использовать путь к файлу и имя из препроцессора
performonitor (статистика).
-z Использовать гарантийный режим, используется для установленных
(established) соединений. С помощью этой опции можно распознать
генераторы шумов и успешно их блокировать, используя
препроцессор stream4.
-h Экран с помощью.
Регистрируемся на сайте
signin
Процедура регистрации весьма тривиальна. Переходим в личный кабинет и видим Oinkcode
Код
Пропишем наш oinkcode в конфигурационный файл
В строки 19, и 26 (я завуалировал фрагмент)
Меняем значение distro= в соответствии с нашей системой (строка 131), в данном случае Debian-6-0.
В 139 строке закомментируем использование Blacklist, а так же раскомментируем строки с 194 по 197.
oinkcode
Далее, открываем файл /usr/local/etc/snort/disablesid.conf и дописываем в конец
Делаем скрипт pulledpork.pl исполняемым
И запускаем его на выполнение:
Содержимое каталога правил
… после обновления
После обновления
Появился файл snort.rules!
Ну вот и всё. Теперь остаётся только убрать наше тестовое правило, почистить логи, создать скрипты запуска сервисов snort и barnyard2 в автозапуске и перезапустить сервисы.
Кстати, удалить символ комментария в редакторе vi достаточно просто.
:547,650s/#/
Строки с 547 по 650 символ # удаляется. Одной командой.
Скрипт запуска snort и barnyard2 в автозапуск:
Скрипт я позаимствовал с официального руководства:
Создаем файл
следующего содержания:
Всё просто, скрипт зависит от mysql службы, перед запуском проверяет, запущен ли сервис баз данных, если да, то поднимает интерфейс и запускает наши службы аналогично, как мы их проверяли до этого из командной строки.
Сохраняем, делаем его исполняемым:
и устанавливаем как сервис:
Готово!
Update. А оказывается, базовые правила в комплекте отсутствуют! Их нужно скачать с офсайта и распаковать в соответствующие каталоги.
Качаем базовые правила
Структура каталогов проста (rules, so_rules .. и т.д. Это мы уже видели в конфиг-файле и в каталоге /usr/local/etc/snort/ )
Скрин
Проведём атаку как мы уже рассматривали в этой статье: https://litl-admin.ru/xaking/zachem-lomat-svoyu-sistemu-armitagemetasploit.html
А затем глянем логи. Кстати, текстовые логи сейчас в файле:
/var/log/barnyard2/alert
Скрин лога
А в веб-интерфейсе:
Логи
Установка и первичная настройка Snort для ОС Debian
Установка необходимых пререквизитов для Snort
В данной статье разберём подробно установку из исходных кодов и первичную настройку Snort в ОС Debian.
Для начала устанавливаем обновления для ОС:
- apt-get update — обновление индекса пакетов
- apt-get upgrade — обновление пакетов
Устанавливаем обязательные пререквизиты для Snort:
- build-essential — предоставляет инструменты, необходимых для сборки пакетов Debian;
- libpcap-dev — библиотека для захвата сетевого трафика, необходима для Snort;
- libpcre3-dev — библиотека функций для поддержки регулярных выражений, необходима для Snort;
- libdumbnet-dev — библиотека, ещё известная как libdnet-dev, предоставляющая упрощённый, портативный интерфейс для различных низкоуровневых (interface to several low-level networking routines);
- zlib1g-dev — библиотека, реализующая метод сжатия deflate, необходима для Snort.
Устанавливаем необходимые для DAQ парсеры:
- bison — генератор анализаторов синтаксиса (parser) выражений;
- flex — инструмент для генерации программ, распознающих заданные образцы в тексте.
Устанавливаем дополнительные (рекомендуемые) программы:
Для сборки документации (не является обязательным) понадобиться установить следующие пакеты:
Для поддержки HTTP/2 траффика необходимо установить библиотеку Nghttp2: HTTP/2 C библиотека, которая реализует алгоритм сжатия заголовков HPAC.
Устанавливаем её из исходного кода:
Сборка DAQ и Snort из исходного кода
Создадим каталог snort_src, куда сохраним загружаемые архивы с программами: Snort использует библиотеку Data Acquisition library (DAQ), которую можно скачать с официального сайта Snort. Скачиваем архив с исходным кодом, создаём бинарный пакет с помощью checkinstall и устанавливаем его:
Обновляем пути для разделяемых библиотек:
Далее устанавливаем Snort из исходного кода:
В случае каких-либо ошибок во время сборки необходимо их устранить прежде чем двигаться дальше.
И создаём символьную ссылку
Следует проверить, правильно ли установился Snort. Для этого достаточно запустить команду . Если вывод команды будет примерно следующий (номер версии может отличаться), то это будет означать, что Snort успешно установлен:
Также с помощью команды можно посмотреть список доступным DAQ-модулей.
Устранение возможных ошибок
Во время выполнения команды checkinstall могут возникнуть ошибки вида:
, которые можно исправить, одним из следующих способов:
-
Установкой и удалением программы при помощи make:
-
Добавлением вручную каталогов, необходимых для сборки и установки пакета, которые не может создать checkinstall самостоятельно:
После чего вновь собираем и устанавливаем Snort:
Конфигурация сетевого интерфейса, рекомендуемая для Snort
Согласно рекомендациям из руководства Snort следует убедиться, что сетевая карта не обрезает слишком большие пакеты (в сетях Ethernet длина которых превышает 1518 байт). Для этого произведём оптимизацию сетевых интерфейсов с помощью утилиты ethtool. Если нужно, устанавливаем ethtool () и для настройки параметров выполняет в терминале следующие команды:
- — освобождение ОС от расчёт контрольных суммы TCP/IP (rx-checksumming) для входящих пакетов;
- — освобождение ОС от расчёт контрольных суммы TCP/IP (tx-checksumming) для исходящих пакетов;
- — отключение функции (generic-segmentation-offload) фрагментации пакетов без участия CPU;
- — отключение функции (generic-receive-offload) сборки пакетов сетевым интерфейсом без участия CPU;
- — отключение функции (large-receive-offload) сборки пакетов сетевым интерфейсом без участия CPU.
Но в данном случае настройки будут оставаться в силе только до перезагрузки ОС, поэтому лучшим вариантом будет добавить команды настройки сетевого интерфейса одним из следующих способов:
-
Открываем файл /etc/network/interfaces () с настройками конфигурации сети Ethernet и добавляем в конец файла следующие команды для сетевого интерфейса eth0, который Snort будет слушать:
-
Либо открываем файл /etc/rc.local () с автозагрузками и добавляем следующие строчки до “exit 0”:
Текущие значения параметров можно посмотреть с помощью команды . Если параметр обозначен как , то это означает, что значение параметра нельзя изменить с помощью ethtool. Часто многие параметры обозначены , когда ОС запушена в виртуальной машине (например, VMWare или VirtualBox) и гостевая ОС не в состоянии изменить параметры хостовой ОС.
Конфигурация ниже не рабочая:




