Настройка Suricata в качестве системы предотвращения вторжений (IPS)

С ростом популярности киберпреступности срочно требуется, чтобы у предприятий была более надежная защита от хакеров. Система предотвращения вторжений (IPS) – один из лучших способов защиты от компьютерных атак. Но прежде чем искать IPS в Интернете, попробуйте Suricata.

В этом руководстве вы узнаете, как настроить полностью функциональную систему IPS Suricata на сервере Linux для защиты вашей сети от онлайн-угроз.

Готовы? Читайте и начинайте защищать свою сеть!

Предварительные требования

В этом руководстве будет проведена практическая демонстрация. Если вы хотите следовать за мной, убедитесь, что у вас есть следующее:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • В зависимости от конфигурации вашей сети и того, как вы собираетесь использовать Suricata, вам может потребоваться больше или меньше процессора и оперативной памяти для вашего сервера. Как правило, чем больше трафика вы собираетесь проверять, тем больше ресурсов вы выделите для Suricata. В среде разработчика планируйте использовать как минимум 2 процессора и 8 ГБ оперативной памяти, чтобы Suricata могла выполнять свои задачи, не нарушая качество обслуживания для всех пользователей.

Установка Suricata и добавление репозитория PPA

Suricata не устанавливается по умолчанию в Ubuntu, но установка Suricata аналогична установке других пакетов в вашей системе.

1. Выполните команду apt update, чтобы обновить доступные пакеты в вашей системе.

sudo apt update -y
Updating the list of available packages

2. Затем выполните команду add-apt-repository, чтобы добавить репозиторий PPA, поддерживаемый Open Information Security Foundation (OISF). Добавляя репозиторий PPA, вы получите последнюю стабильную версию Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Повторно выполните команду sudo apt update, чтобы загрузить только что добавленный репозиторий Suricata в индекс пакетов вашей системы.

sudo apt update -y

4. Теперь выполните команду sudo apt policy, чтобы убедиться, что вы правильно добавили репозиторий Suricata PPA. Убедитесь, что вы видите Suricata PPA в списке, как показано ниже, перед установкой Suricata

sudo apt policy
Running the sudo apt policy

5. Выполните следующую команду, чтобы установить suricata в вашей системе.

sudo apt install suricata -y
Installing Suricata on your system

6. После завершения установки выполните команду systemctl status ниже, чтобы проверить статус службы suricata.

sudo systemctl status suricata

Ниже вы можете видеть, что служба Suricata активна (работает).

Checking the Suricata service status

Настройка Suricata

Пакет Suricata поставляется с файлом конфигурации под названием suricata.yaml, расположенным в каталоге /etc/suricata. Этот файл конфигурации имеет множество различных параметров для множества других случаев использования. Но имейте в виду, что есть несколько настроек в файле конфигурации по умолчанию, которые вам нужно настроить перед использованием Suricata.

Режим по умолчанию для Suricata – это режим обнаружения вторжений (IDS), который регистрирует, но не отбрасывает трафик. Этот режим используется при настройке и знакомстве с Suricata. Как только вы будете более комфортно использовать Suricata и лучше понимать типы трафика, по которым Suricata будет предупреждать вас, вы сможете включить режим IPS.

Suricata добавляет поле в своем формате JSON (идентификатор потока сообщества). Идентификатор потока сообщества – это поле из 8 байт, которое позволяет вам коррелировать записи, созданные другими инструментами. Эта функция полезна при использовании Suricata совместно с другими инструментами, такими как Bro или Elasticsearch.

1. Откройте файл /etc/suricata/suricata.yaml в вашем любимом текстовом редакторе.

Найдите строку, содержащую community-id: false и измените ее на community-id: true. Сохраните изменения и выйдите из текстового редактора.

Каждый раз, когда вы проверяете события, вы увидите идентификатор потока сообщества в их JSON-выводе.

Enabling Community ID

Затем выполните следующую команду, чтобы найти устройство с маршрутом по умолчанию на вашей системе (route show default). Флаг -p указывает команде ip выводить устройство в удобочитаемом формате, а флаг -j выводит JSON.

По умолчанию Suricata настроен на перехват пакетов с любого доступного сетевого интерфейса. Однако вы можете изменить это поведение и указать интерфейс, который Suricata будет прослушивать при запуске.

 ip -p -j route show default

Как видите ниже, параметр dev указывает интерфейс, который Suricata будет использовать для перехвата пакетов. В этом демо-режиме интерфейсом является eth0, но ваш интерфейс может отличаться, например, tun0, wlan0 и так далее.

Previewing the Network Interface

4. Наконец, откройте файл конфигурации /etc/suricata/suricata.yaml, найдите параметр interface в разделе af-packet и измените его соответственно. В этом демо-режиме eth0 используется в качестве интерфейса для перехвата пакетов.

Сохраните изменения, но оставьте открытым ваш текстовый редактор на данный момент.

Editing the /etc/suricata/suricata.yaml configuration file

Настройка функции перезагрузки активных правил.

Вы теперь настроили Suricata, но это только начало защиты вашей сети. Обычно вы хотели бы добавлять правила на лету и автоматически перезагружать их. Как это сделать? Функция живой перезагрузки правил Suricata позволяет вам обновлять правила на лету. В результате вам не нужно вручную перезапускать Suricata, чтобы новые правила вступили в силу.

Откройте файл /etc/suricata/suricata.yaml, скопируйте/вставьте следующие директивы в конец содержимого файла и сохраните изменения. Эти директивы позволяют вам включить функцию живой перезагрузки правил.

С этой настройкой, при редактировании/обновлении правил изменения вступят в силу без перезапуска службы Suricata.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Теперь выполните команду kill ниже, чтобы уведомить ваш процесс Suricata ($(pidof suricata)) об обновлении правил без перезапуска.

Команда отправляет пользовательский сигнал (-usr2) указанному идентификатору процесса, после чего Suricata автоматически выполняет следующее:

  • Загружает новую конфигурацию для обновления переменных и значений правил.
  • Загружает новые правила
  • Создает новый движок обнаружения
  • Переключает старый и новый движки обнаружения
  • Убеждается, что все потоки обновлены
  • Освобождает старый движок обнаружения
sudo kill -usr2 $(pidof suricata)

Обновление наборов правил Suricata

Функция живой перезагрузки правил готова, но она не будет служить цели, пока вы не обновите ваши наборы правил. По умолчанию пакет Suricata имеет ограниченный набор правил, который обнаруживает только самые распространенные интернет-протоколы, расположенные в каталоге /etc/suricata/rules.

На этом этапе вы получите сообщение об ошибке Нет файлов правил, соответствующих шаблону , подобное приведенному ниже, каждый раз, когда попытаетесь запустить и использовать свой сервис Suricata. Это сообщение об ошибке указывает на то, что нет наборов правил для использования Suricata.

Previewing Error Message when No Rulesets Exist

Чтобы исправить эту ошибку, предоставьте файлы набора правил для вашего экземпляра Suricata. К счастью, у Suricata есть инструмент под названием suricata-update, который поможет вам получить больше наборов правил от сторонних поставщиков.

1. Выполните команду ниже, чтобы получить обновление для вашего экземпляра Suricata.

sudo suricata-update

Как вы можете видеть ниже, вывод указывает, что команда suricata-update получила правила, подключившись к https://rules.emergingthreats.net/open/. Затем команда сохраняет новые правила в каталог /var/lib/suricata/rules/ .

Вывод также печатает следующее:

  • Общее количество ( 31737 ) наборов правил
  • Количество правил, которые включены ( 24355 )
  • Количество добавленных ( 31737 ) / удаленных ( 0 ).
Updating Your Suricata Rulesets

Затем выполните команду ниже, чтобы перечислить всех поставщиков наборов правил ( list-sources ).

Команда suricata-update загружает наборы правил от многих поставщиков, включая бесплатных и коммерческих поставщиков.

sudo suricata-update list-sources

Ниже вы можете увидеть небольшую часть списка. Обратите внимание на имя набора правил, из которого вы хотите, чтобы Suricata извлекала наборы правил. В этом руководстве извлекаются наборы правил et/open для демонстрации (шаг третий).

Listing all ruleset providers

3. Запустите следующую команду, чтобы получить и включить правила et/open в ваши правила Suricata.

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Наконец, повторно выполните команду suricata-update, чтобы загрузить новый набор правил.

sudo suricata-update

Проверка конфигурации Suricata

Вы настроили Suricata и даже добавили правила, поэтому пришло время проверить ваши изменения и удостовериться, что все работает как ожидается. В пакете Suricata есть встроенная служба проверки, которая позволяет вам увидеть любые отклонения от текущей конфигурации.

Запустите команду suricata ниже, чтобы проверить изменения в файле конфигурации Suricata (-c /etc/suricata/suricata.yaml). Команда также отображает все сообщения проверки (-v).

Флаг -T указывает Suricata запускаться в режиме “тестирования” и режиме “сверху вниз”. Оба режима имеют более строгие правила для сопоставления пакетов и менее вероятны для ложных срабатываний.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Поскольку Suricata – это высококонфигурируемый брандмауэр, тест может занять несколько минут. Если ошибок нет, вы увидите вывод, подобный показанному ниже, который показывает полное сообщение.

Validating Your Suricata Configuration: complete

Если в вашем файле конфигурации есть ошибки, подобные показанным ниже, Suricata напечатает каждую ошибку, указывая конкретные строки, вызывающие проблемы. Если у вас есть такие ошибки, исправьте каждую проблему конфигурации поочередно до успешной проверки.

Validating Your Suricata Configuration: errors

Проверка правил Suricata

Теперь, когда ваши файлы конфигурации Suricata проверены, вы можете запустить Suricata, чтобы увидеть, работают ли они корректно. Вы будете использовать Suricata для тестирования ET Open (2100498) с помощью команды curl для обнаружения подозрительной активности/трафика.

В настоящее время ваш экземпляр Suricata содержит более 30,000 правил, которые Suricata получила из различных наборов правил. Поэтому полное тестирование всех правил с их объяснением не уместится в этом руководстве.

1. Запустите команду curl ниже, чтобы генерировать некоторый трафик/HTTP-запросы/активности с веб-сайта TestMyNIDS. TestMyNIDS – это учебный проект, посвященный поддержке тестов NIDS, их проверке и сравнению. Веб-сайт предоставляет уникальную платформу для сравнительного анализа NIDS и связанных с ними инструментов.

Вы можете использовать этот сайт для тестирования любой подозрительной активности/трафика, чтобы увидеть, работает ли ваш настроенный набор правил, как ожидалось.

curl http://testmynids.org/uid/index.html

Данные ответа разработаны так, чтобы вызвать ложное предупреждение, притворяясь пользователем Linux/Unix root. И этот пользователь root находится на системе, которая может быть скомпрометирована.

Testing Your Suricata Rules

Далее, запустите команду grep ниже, чтобы изучить файл fast.log в директории /var/log/suricata/ на наличие соответствующего сообщения о предупреждении 2100498. Эта команда проверяет файл журнала на наличие предупреждения пользователя.

Помимо файла fast.log, еще один файл журнала, на который следует обратить внимание, это eve.log в том же каталоге.

grep 2100498 /var/log/suricata/fast.log

Вы увидите выход, аналогичный приведенному ниже, который показывает публичный IPv4-адрес вашей системы.

Examining the fast.log file

3. Теперь выполните команду jq ниже, чтобы изучить файл eve.log. Файл eve.log также используется для регистрации событий, но в формате JSON (/var/log/suricata/eve.json). Именно на файлы eve.json и fast.log вы будете ссылаться при подозрительном трафике и блокированных попытках. После обнаружения проблем принимайте необходимые меры.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Ниже вы можете увидеть “signature_id”: 2100498 в выводе, который является идентификатором сигнатуры оповещения, указанным в команде.

Вы также видите “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” в выводе, который является идентификатором потока сообщества, установленным в файле /etc/suricata/suricata.yaml.

Этот community_id полезен, когда вы используете Suricata в сочетании с другими инструментами, такими как Elasticsearch, чтобы получить полный «стек мониторинга безопасности» по разумной цене.

Examining the eve.log file

Заключение

На протяжении этого учебного пособия вы узнали, как установить и настроить Suricata с наборами правил для защиты вашей сети. Вы также протестировали работу правил, генерируя трафик в вашей сети.

На данный момент Suricata работает отлично с вашим настраиваемым набором правил для обнаружения подозрительной активности/трафика в вашей сети.

Теперь, почему бы не воспользоваться этим новым знанием? Возможно, начните с установки и настройки Suricata, Zeek, стека Elasticsearch, чтобы настроить полный “стек мониторинга безопасности”?

Source:
https://adamtheautomator.com/suricata/