Использование Snort

Базовая настройка Snort

Snort ‒ это система обнаружения вторжения, которая способна в реальном времени осуществлять анализ трафика.

Для использования Snort необходимо установить пакеты snort и snort-extra. Пакет snort-extra содержит модуль для настройки SELinux, базовый набор правил для анализа трафика и скрипт, упрощающий первоначальную настройку snort.

В качестве примера настройки будет использован один из хостов, входящий в состав среды виртуализации РОСА Виртуализация. В первую очередь для установки необходимых пакетов требуется включить репозиторий DVD и примонтировать диск в директорию /mnt:

dnf config-manager --set-enabled DVD
mount -t iso9660 -o ro /dev/sr0 /mnt

Далее нужно установить пакеты snort и snort-extra:

dnf install snort snort-extra

Файл /etc/sysconfig/snort содержит параметры запуска snort, а /etc/snort/snort.conf является основным конфигурационным файлом. Перед запуском snort требуется самостоятельно выполнить необходимые настройки либо воспользоваться утилитой install-snort-extra, которая запускается без каких-либо параметров и настраивает SELinux, копирует в директорию /etc/snort базовые правила для анализа трафика и устанавливает основной конфигурационный файл /etc/snort/snort.conf:

install-snort-extra
Installing SELinux policy module: snort-extra
Installing snort rules and change /etc/snort/snort.conf

Далее в файле /etc/snort/snort.conf потребуется указать адрес сетевого интерфейса или же адрес внутренней сети и все остальные адреса, которые будут считаться внешними (рисунок 17):

ipvar HOME_NET 192.168.210.162/32
ipvar EXTERNAL_NET !$HOME_NET

Рисунок 17 ‒ Редактирование файла /etc/snort/snort.conf

В файле /etc/sysconfig/snort в качестве сетевого интерфейса следует прописать ovirtmgmt (рисунок 18):

INTERFACE=ovirtmgmt

Рисунок 18 ‒ Редактирование файла /etc/sysconfig/snort

После всех предварительных настроек необходимо выполнить проверку корректности конфигурации snort, и в случае успеха вывод команды будет заканчиваться сообщением "Snort successfully validated the configuration!":

snort -T -c /etc/snort/snort.conf
.
.
.
--== Initialization Complete ==--
,,_     -*> Snort! <*-
o"  )~   Version 2.9.20 GRE (Build 82)
''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.10.0 (with TPACKET_V3)
Using PCRE version: 8.44 2020-02-12
Using ZLIB version: 1.2.11
Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 3.2  <Build 1>
Preprocessor Object: SF_GTP  Version 1.1  <Build 1>
Preprocessor Object: SF_FTPTELNET  Version 1.2  <Build 13>
Preprocessor Object: SF_DNS  Version 1.1  <Build 4>
Preprocessor Object: SF_DNP3  Version 1.1  <Build 1>
Preprocessor Object: SF_DCERPC2  Version 1.0  <Build 3>
Preprocessor Object: SF_SSLPP  Version 1.1  <Build 4>
Preprocessor Object: SF_SSH  Version 1.1  <Build 3>
Preprocessor Object: SF_SMTP  Version 1.1  <Build 9>
Preprocessor Object: SF_SIP  Version 1.1  <Build 1>
Preprocessor Object: SF_SDF  Version 1.1  <Build 1>
Preprocessor Object: SF_S7COMMPLUS  Version 1.0  <Build 1>
Preprocessor Object: SF_REPUTATION  Version 1.1  <Build 1>
Preprocessor Object: SF_POP  Version 1.0  <Build 1>
Preprocessor Object: SF_MODBUS  Version 1.1  <Build 1>
Preprocessor Object: SF_IMAP  Version 1.0  <Build 1>
Total snort Fixed Memory Cost - MaxRss:802792
Snort successfully validated the configuration!
Snort exiting

Затем необходимо запустить snortd и проверить его статус:

systemctl restart snortd.service
systemctl status snortd.service

На рисунке 19 показан результат успешного запуска системы snort.

Рисунок 19 ‒ Успешный запуск системы snort

Пример применения Snort для анализа трафика SSH

Для тестового примера обнаружения вторжения можно воспользоваться правилом анализа SSH-трафика, отслеживающего попытки подбора пароля:

alert tcp any any -> $HOME_NET 22 (msg:"SSH brute force login attempt"; flow: to_server, established; content:"SSH"; nocase; offset: 0; depth: 4; detection_filter: track by_src, count 5, seconds 60; classtype: misc-attack; sid:10000001; rev: 1;)

Эту строку необходимо добавить в файл /etc/snort/rules/local.rules и перезапустить snortd:

systemctl restart snortd.service

При обнаружении попытки подбора пароля к SSH-серверу в файле /var/log/snort/alert будут регистрироваться соответствующие предупреждения:

11/06-12:07:35.588265  [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44816 -> 192.168.210.162:22
11/06-12:07:35.653354  [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44824 -> 192.168.210.162:22
11/06-12:07:35.652514  [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44822 -> 192.168.210.162:22
11/06-12:07:35.664541  [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44834 -> 192.168.210.162:22
11/06-12:07:35.691606  [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44840 -> 192.168.210.162:22

Количество полностью идентичных событий, регистрируемых в единицу времени, настраивается в файле /etc/snort/threshold.conf. В качестве примера разрешена регистрация только одного уникального события в течении 60 секунд. Все остальные идентичные события, произошедшие в установленный период времени, не будут регистрироваться (рисунок 20).

Рисунок 20 ‒ Настройка регистрируемых событий

Уведомления Snort

Для рассылки уведомлений по электронной почте требуется установить пакеты swatch и swatch-systemd. Пакет swatch-systemd позволяет запускать swatch в качестве сервиса.

Для настройки сервиса уведомлений Snort нужно выполнить следующие действия:

  1. для установки соответствующих пакетов выполнить команду:
dnf install swatch swatch-systemd
  1. в файле /etc/snort/snort.conf заменить строку:
output alert_syslog: LOG_AUTH LOG_ALERT

на строку (рисунок 21):

output alert_syslog: LOG_LOCAL2 LOG_ALERT

Рисунок 21 ‒ Редактирование файла /etc/snort/snort.conf

  1. в файле файле /etc/sysconfig/snort следует закомментировать строку "ALERTMODE=fast" (рисунок 22);

Рисунок 22 ‒ Редактирование файла /etc/sysconfig/snort

  1. в файл /etc/rsyslog.conf добавить строки (рисунок 23):
Save snort alert also to /var/log/snort/alert.log
local2.alert               /var/log/snort/alert.log

Рисунок 23 ‒ Редактирование файла /etc/rsyslog.conf

  1. перезапустить сервисы rsyslog и snortd:
systemctl restart rsyslog.service snortd.service

После проделанных изменений регистрация событий snort будет регистрироваться в файл /var/log/messages и дублироваться в файл /var/log/snort/alert.log. Количество однотипных событий, регистрируемых в единицу времени, настраивается в файле /etc/snort/threshold.conf.

Важно ‒ Настоятельно рекомендуется установить лимит на количество идентичный событий, регистрируемых в единицу времени, чтобы избежать избыточной нагрузки на почтовую систему. Конфигурационный файл /etc/sysconfig/swatch содержит параметры запуска для сервиса swatch, в том числе log-файл, за которым ведётся мониторинг:

SWATCH_ARGS="--tail-file=/var/log/snort/alert.log"

Файл /etc/swatch.conf содержит правила для рассылки уведомлений по электронной почте:

watchfor /Priority\: (1|2)/
mail root@localhost,subject="[SNORT] Priority $1 Alert!"
  1. включить и запустить сервис swatch:
systemctl enable --now swatch.service

С вышеописанной конфигурацией все события, попавшие в файл /var/log/snort/alert.log и имеющие приоритет 1 или 2, будут отправлены по адресу root@localhost. Для проверки работоспособности данного примера требуется запустить сервис postfix на настраиваемом хосте:

systemctl start postfix.service