Введение
В этом практическом занятии (лабораторной работе) вы научитесь обнаруживать аномалии в сети с использованием Suricata, мощного открытого программного обеспечения (open-source) для обнаружения угроз. Вы изучите ключевые функции, такие как настройка правил, мониторинг трафика и анализ оповещений, чтобы выявить потенциальные угрозы безопасности.
Практические упражнения помогут вам настроить Suricata, создать базовые правила и проверить трафик в режиме реального времени. Вы получите практический опыт в обнаружении подозрительных активностей, таких как ICMP-запросы ping, и настройке правил для конкретных сценариев угроз.
Установка Suricata
На этом этапе вы установите Suricata, открытый программный инструмент (open-source) для обнаружения сетевых угроз. Suricata можно сравнить с видеонаблюдением для вашей сети, которое постоянно анализирует трафик, чтобы выявить потенциальные угрозы. Он может выполнять три ключевые функции: обнаружение вторжений в режиме реального времени (Intrusion Detection System, IDS) для мониторинга атак, предотвращение вторжений встроенным способом (Inline Intrusion Prevention System, IPS) для блокировки вредоносного трафика и мониторинг сетевой безопасности для записи всей активности.
Начнем процесс установки пошагово:
Сначала нам нужно обновить список пакетов. Это гарантирует, что ваша система знает о последних доступных версиях программного обеспечения перед установкой любого ПО:
sudo apt updateКоманда
sudoпредоставляет вам права администратора, аapt updateобновляет список доступных пакетов на вашей системе.Теперь установим Suricata вместе со всеми необходимыми компонентами (зависимостями). Флаг
-yавтоматически подтверждает установку:sudo apt install -y suricataЭта команда загружает и устанавливает пакет программного обеспечения Suricata из официальных репозиториев Ubuntu.
После установки убедимся, что все прошло правильно, проверив установленную версию:
suricata -VВы должны увидеть вывод, похожий на следующий:
This is Suricata version 6.0.3 RELEASEФлаг
-Vсообщает Suricata отобразить информацию о версии. Если вы видите такой вывод, это подтверждает, что установка прошла успешно.Поведение Suricata контролируется конфигурационным файлом. Проверим, существует ли этот важный файл в его стандартном расположении:
ls /etc/suricata/suricata.yamlКаталог
/etc/suricata/- это место, где Linux обычно хранит конфигурационные файлы для системных приложений.Наконец, Suricata нуждается в правилах, чтобы знать, что искать в сетевом трафике. Эти правила похожи на набор инструкций, которые сообщают Suricata, что считается подозрительной активностью. Стандартные правила хранятся в:
ls /var/lib/suricata/rulesКаталог
/var/lib/suricata/rulesсодержит файлы правил, которые поставляются с установкой Suricata. Мы будем работать с этими правилами позже в рамках практического занятия.
Настройка базовых правил
На этом этапе вы настроите базовые правила обнаружения для Suricata. Правила являются основным компонентом, который сообщает Suricata, что искать в сетевом трафике. Представьте их как набор инструкций, которые определяют подозрительные шаблоны или известные угрозы.
Сначала перейдите в каталог с правилами Suricata, где хранятся все файлы правил:
cd /var/lib/suricata/rulesИменно здесь Suricata хранит свои стандартные и пользовательские файлы правил. Расположение каталога указано в конфигурации Suricata.
Выведите список существующих файлов правил, чтобы увидеть, что уже доступно:
lsВы должны увидеть несколько файлов с расширением
.rules, напримерsuricata.rules. Эти файлы содержат различные категории правил, которые Suricata использует для обнаружения.Рассмотрим структуру базового правила. Откройте основной файл правил с помощью редактора nano:
sudo nano suricata.rulesРедактор nano - это простой текстовый редактор, который мы будем использовать для изменения правил. Вы увидите много существующих правил с похожей структурой.
Добавьте простое правило для обнаружения ICMP-запросов ping (добавьте это в конец файла):
alert icmp any any -> any any (msg:"ICMP Ping Detected"; itype:8; sid:1000001; rev:1;)Разберем, что делает это правило:
alert: Сообщает Suricata сгенерировать оповещение при совпаденииicmp: Применяется к трафику протокола ICMPany any -> any any: Совпадает с любым исходным IP/портом и любым целевым IP/портомmsg: Сообщение оповещения, которое появится в журналахitype:8: Специально совпадает с типом ICMP 8 (запросы ping)sid: Уникальный идентификатор правила (1000001+ для пользовательских правил)rev: Номер ревизии правила
Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano). Таким образом, ваше новое правило будет сохранено постоянно.
Проверьте правильность синтаксиса правила перед его применением:
sudo suricata -T -c /etc/suricata/suricata.yaml -vФлаг
-Tпроверяет конфигурацию. Вы должны увидеть вывод, заканчивающийся следующим образом:Configuration provided was successfully loaded. Exiting.Это подтверждает, что ваше правило имеет правильный формат.
Перезапустите Suricata, чтобы загрузить новые правила и начать мониторинг:
sudo pkill suricata sudo suricata -c /etc/suricata/suricata.yaml -i eth0Первая команда останавливает любую запущенную инстанцию Suricata, а вторая запускает его заново с новыми правилами, мониторируя интерфейс eth0.
Мониторинг активного трафика
На этом этапе мы рассмотрим, как Suricata мониторит сетевой трафик в режиме реального времени и генерирует оповещения на основе правил, которые мы настроили ранее. Это основная функциональность любой системы обнаружения вторжений (Intrusion Detection System, IDS) - наблюдение за сетевыми пакетами и пометка подозрительной активности.
Сначала нам нужно запустить Suricata в режиме захвата активного трафика. Следующие команды сначала остановят любую запущенную инстанцию Suricata (если она существует), а затем запустят новую, которая будет мониторить интерфейс eth0:
sudo pkill suricata sudo suricata -c /etc/suricata/suricata.yaml -i eth0Флаг
-cуказывает на наш конфигурационный файл, а-iсообщает Suricata, какой сетевой интерфейс нужно мониторить.Теперь сгенерируем некоторый тестовый трафик, который должен активировать наше правило для ICMP из предыдущего шага. Откройте новый терминал и запустите:
ping -c 3 8.8.8.8Эта команда отправляет 3 ICMP-пакета ping на DNS - сервер Google (8.8.8.8). Поскольку мы создали правило для обнаружения ICMP - трафика, Suricata должен записать эту активность.
Suricata записывает оповещения в файл
/var/log/suricata/fast.log. Чтобы наблюдать эти оповещения в режиме реального времени, используйте:sudo tail -f /var/log/suricata/fast.logКоманда
tail -fнепрерывно отображает новые строки, добавленные в файл. Вы должны увидеть вывод, похожий на следующий:01/01/2023-12:34:56.123456 [**] [1:1000001:1] ICMP Ping Detected [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.1.1 -> 8.8.8.8Здесь показаны временная метка, идентификатор правила (1:1000001:1), сообщение оповещения и IP - адреса источника и назначения.
Для более подробной записи в формате JSON мы можем рассмотреть файл eve.json. Следующая команда фильтрует и красиво форматирует только события оповещения:
sudo tail -f /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'Инструмент
jqпомогает разобрать и отформатировать выходные данные в формате JSON, делая их более удобными для чтения.Чтобы просмотреть статистику о трафике, который обрабатывает Suricata, включая количество сгенерированных оповещений:
sudo suricatasc -c statsНайдите в выводе счетчики, такие как
detect.alert- это показывает, сколько раз наши правила активировали оповещения.Когда вы закончите наблюдать за трафиком, нажмите Ctrl + C в любых окнах терминала, где вы мониторите журналы, чтобы остановить непрерывный вывод.
Просмотр сгенерированных оповещений
На этом этапе вы проанализируете оповещения, сгенерированные Suricata во время предыдущего сеанса мониторинга. Это поможет понять, какие паттерны трафика активировали ваши правила. При работе с системами обнаружения вторжений проверка оповещений является важной частью для выявления потенциальных угроз безопасности и настройки правил обнаружения.
Сначала проверьте базовый журнал оповещений:
sudo cat /var/log/suricata/fast.logЭта команда отображает оповещения с временными метками в простом, удобочитаемом формате. Файл
fast.logявляется стандартным файлом вывода оповещений Suricata. Ищите записи, содержащие "ICMP Ping Detected" - они указывают на запросы ping, которые совпали с вашим правилом обнаружения.Для более детального анализа изучите структурированный журнал в формате JSON:
sudo cat /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'Файл
eve.jsonсодержит полные журналы, удобные для обработки машинами, в формате JSON. Мы используемjqдля фильтрации только событий оповещения. Это предоставляет подробную информацию, включая:- IP - адреса источника и назначения
- Точные временные метки
- Полные детали правила
- Информацию о полезной нагрузке пакета (при соответствующей настройке)
Чтобы подсчитать, сколько раз каждое оповещение было активировано:
sudo grep -o "ICMP Ping Detected" /var/log/suricata/fast.log | wc -lЭта цепочка команд сначала извлекает все вхождения "ICMP Ping Detected" с помощью
grep -o, а затем подсчитывает их с помощьюwc -l. Это помогает определить, насколько часто это событие происходит.Для получения сводки по типам оповещений:
sudo jq -r '.alert.signature' /var/log/suricata/eve.json | sort | uniq -cЭта команда извлекает все сигнатуры оповещений (названия правил), сортирует их по алфавиту, а затем подсчитывает уникальные вхождения. Это дает вам обзор, какие правила активируются чаще всего.
Чтобы просмотреть оповещения с информацией об IP - адресе источника:
sudo jq -r 'select(.event_type == "alert") | [.timestamp, .src_ip, .alert.signature] | @tsv' /var/log/suricata/eve.jsonЭтот продвинутый запрос
jqсоздает вывод, разделенный табуляцией, показывающий временную метку, IP - адрес источника и сигнатуру оповещения для каждого события. Формат@tsvпозволяет легко импортировать данные в электронные таблицы.Чтобы проверить последние 5 оповещений:
sudo tail -n 5 /var/log/suricata/fast.logКоманда
tailпоказывает последние строки файла. Это полезно для быстрой проверки недавней активности без прокрутки всего журнала.
Добавление пользовательского правила
На этом этапе вы узнаете, как создать и протестировать собственное правило Suricata для обнаружения конкретных паттернов в сетевом трафике. В качестве практического примера мы сосредоточимся на обнаружении HTTP - запросов к тестовому домену (example.com). Пользовательские правила позволяют расширять возможности обнаружения Suricata за пределы его стандартного набора правил.
Сначала перейдите в каталог с правилами, где Suricata хранит свои правила обнаружения:
cd /var/lib/suricata/rulesОбычно все файлы правил Suricata хранятся здесь. Мы добавим наши пользовательские правила в этот каталог, чтобы они были организованы вместе с существующими правилами.
Создайте новый файл правил специально для ваших пользовательских правил:
sudo nano custom.rulesИспользование
sudoобязательно, так как для изменения каталога с правилами требуются административные привилегии. Мы называем файлcustom.rules, чтобы четко отличить его от стандартных файлов правил Suricata.Добавьте следующее правило для обнаружения HTTP - запросов к example.com:
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)Разберем, что делает это правило:
alert http: Активирует оповещение для HTTP - трафикаany any -> any any: Применяется к трафику с любого исходного порта на любой целевой портmsg: Предоставляет удобочитаемое сообщение оповещенияflow:to_server: Совпадает только с трафиком, направленным на серверыhttp.host: Проверяет HTTP - заголовок Hostcontent:"example.com": Ищет этот конкретный доменnocase: Делает поиск регистронезависимымsid:1000002: Дает правилу уникальный идентификатор (выше 1 000 000 для пользовательских правил)rev:1: Указывает, что это первая версия правила
Сохраните файл в редакторе nano, нажав Ctrl + O (записать), затем Enter для подтверждения и Ctrl + X для выхода.
Теперь нам нужно сообщить Suricata о загрузке нашего нового файла правил. Отредактируйте основную конфигурацию:
sudo nano /etc/suricata/suricata.yamlНайдите раздел
rule-files:(обычно около строки 50 - 60) и добавьте:- custom.rulesЭто добавление гарантирует, что Suricata загрузит наши пользовательские правила при запуске.
Перед применением изменений проверьте правильность синтаксиса правила:
sudo suricata -T -c /etc/suricata/suricata.yaml -vФлаг
-Tсообщает Suricata проверить конфигурацию без фактического запуска. Это помогает обнаружить любые синтаксические ошибки в ваших правилах до их использования.Перезапустите Suricata, чтобы загрузить новое правило:
sudo pkill suricata sudo suricata -c /etc/suricata/suricata.yaml -i eth0Первая команда останавливает любую запущенную инстанцию Suricata, а вторая запускает ее заново с обновленной конфигурацией.
Чтобы проверить, работает ли наше правило, сгенерируйте некоторый HTTP - трафик к example.com:
curl http://example.comЭта команда делает простой HTTP - запрос, который должен активировать наше новое правило.
Наконец, проверьте, обнаружил ли Suricata трафик, просмотрев последние оповещения:
sudo tail -n 5 /var/log/suricata/fast.logВы должны увидеть оповещение, соответствующее сообщению нашего пользовательского правила о HTTP - запросах к example.com. Если этого не произошло, проверьте каждый шаг и убедитесь в правильности синтаксиса правила.
Резюме
В этом лабораторном занятии вы узнали, как установить и настроить Suricata, открытый сетевой движок обнаружения угроз. Процесс включал обновление пакетов, установку зависимостей и проверку установки путем проверки файла конфигурации и каталога с правилами.
Вы также изучили создание пользовательских правил обнаружения, добавив правило для запросов ICMP ping и поняв его структуру и компоненты. Наконец, вы проверили синтаксис правила, чтобы убедиться, что Suricata может эффективно отслеживать сетевой трафик и генерировать оповещения об аномалиях.


