Обнаружение аномалий в Suricata

WiresharkWiresharkBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Практические упражнения помогут вам настроить Suricata, создать базовые правила и проверить трафик в режиме реального времени. Вы получите практический опыт в обнаружении подозрительных активностей, таких как ICMP-запросы ping, и настройке правил для конкретных сценариев угроз.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") subgraph Lab Skills wireshark/packet_capture -.-> lab-549934{{"Обнаружение аномалий в Suricata"}} wireshark/display_filters -.-> lab-549934{{"Обнаружение аномалий в Suricata"}} wireshark/export_packets -.-> lab-549934{{"Обнаружение аномалий в Suricata"}} wireshark/packet_analysis -.-> lab-549934{{"Обнаружение аномалий в Suricata"}} end

Установка Suricata

На этом этапе вы установите Suricata, открытый программный инструмент (open-source) для обнаружения сетевых угроз. Suricata можно сравнить с видеонаблюдением для вашей сети, которое постоянно анализирует трафик, чтобы выявить потенциальные угрозы. Он может выполнять три ключевые функции: обнаружение вторжений в режиме реального времени (Intrusion Detection System, IDS) для мониторинга атак, предотвращение вторжений встроенным способом (Inline Intrusion Prevention System, IPS) для блокировки вредоносного трафика и мониторинг сетевой безопасности для записи всей активности.

Начнем процесс установки пошагово:

  1. Сначала нам нужно обновить список пакетов. Это гарантирует, что ваша система знает о последних доступных версиях программного обеспечения перед установкой любого ПО:

    sudo apt update

    Команда sudo предоставляет вам права администратора, а apt update обновляет список доступных пакетов на вашей системе.

  2. Теперь установим Suricata вместе со всеми необходимыми компонентами (зависимостями). Флаг -y автоматически подтверждает установку:

    sudo apt install -y suricata

    Эта команда загружает и устанавливает пакет программного обеспечения Suricata из официальных репозиториев Ubuntu.

  3. После установки убедимся, что все прошло правильно, проверив установленную версию:

    suricata -V

    Вы должны увидеть вывод, похожий на следующий:

    This is Suricata version 6.0.3 RELEASE

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

  4. Поведение Suricata контролируется конфигурационным файлом. Проверим, существует ли этот важный файл в его стандартном расположении:

    ls /etc/suricata/suricata.yaml

    Каталог /etc/suricata/ - это место, где Linux обычно хранит конфигурационные файлы для системных приложений.

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

    ls /var/lib/suricata/rules

    Каталог /var/lib/suricata/rules содержит файлы правил, которые поставляются с установкой Suricata. Мы будем работать с этими правилами позже в рамках практического занятия.

Настройка базовых правил

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

  1. Сначала перейдите в каталог с правилами Suricata, где хранятся все файлы правил:

    cd /var/lib/suricata/rules

    Именно здесь Suricata хранит свои стандартные и пользовательские файлы правил. Расположение каталога указано в конфигурации Suricata.

  2. Выведите список существующих файлов правил, чтобы увидеть, что уже доступно:

    ls

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

  3. Рассмотрим структуру базового правила. Откройте основной файл правил с помощью редактора nano:

    sudo nano suricata.rules

    Редактор nano - это простой текстовый редактор, который мы будем использовать для изменения правил. Вы увидите много существующих правил с похожей структурой.

  4. Добавьте простое правило для обнаружения ICMP-запросов ping (добавьте это в конец файла):

    alert icmp any any -> any any (msg:"ICMP Ping Detected"; itype:8; sid:1000001; rev:1;)

    Разберем, что делает это правило:

    • alert: Сообщает Suricata сгенерировать оповещение при совпадении
    • icmp: Применяется к трафику протокола ICMP
    • any any -> any any: Совпадает с любым исходным IP/портом и любым целевым IP/портом
    • msg: Сообщение оповещения, которое появится в журналах
    • itype:8: Специально совпадает с типом ICMP 8 (запросы ping)
    • sid: Уникальный идентификатор правила (1000001+ для пользовательских правил)
    • rev: Номер ревизии правила
  5. Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano). Таким образом, ваше новое правило будет сохранено постоянно.

  6. Проверьте правильность синтаксиса правила перед его применением:

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

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

    Configuration provided was successfully loaded. Exiting.

    Это подтверждает, что ваше правило имеет правильный формат.

  7. Перезапустите Suricata, чтобы загрузить новые правила и начать мониторинг:

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0

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

Мониторинг активного трафика

На этом этапе мы рассмотрим, как Suricata мониторит сетевой трафик в режиме реального времени и генерирует оповещения на основе правил, которые мы настроили ранее. Это основная функциональность любой системы обнаружения вторжений (Intrusion Detection System, IDS) - наблюдение за сетевыми пакетами и пометка подозрительной активности.

  1. Сначала нам нужно запустить Suricata в режиме захвата активного трафика. Следующие команды сначала остановят любую запущенную инстанцию Suricata (если она существует), а затем запустят новую, которая будет мониторить интерфейс eth0:

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0

    Флаг -c указывает на наш конфигурационный файл, а -i сообщает Suricata, какой сетевой интерфейс нужно мониторить.

  2. Теперь сгенерируем некоторый тестовый трафик, который должен активировать наше правило для ICMP из предыдущего шага. Откройте новый терминал и запустите:

    ping -c 3 8.8.8.8

    Эта команда отправляет 3 ICMP-пакета ping на DNS - сервер Google (8.8.8.8). Поскольку мы создали правило для обнаружения ICMP - трафика, Suricata должен записать эту активность.

  3. 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 - адреса источника и назначения.

  4. Для более подробной записи в формате JSON мы можем рассмотреть файл eve.json. Следующая команда фильтрует и красиво форматирует только события оповещения:

    sudo tail -f /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'

    Инструмент jq помогает разобрать и отформатировать выходные данные в формате JSON, делая их более удобными для чтения.

  5. Чтобы просмотреть статистику о трафике, который обрабатывает Suricata, включая количество сгенерированных оповещений:

    sudo suricatasc -c stats

    Найдите в выводе счетчики, такие как detect.alert - это показывает, сколько раз наши правила активировали оповещения.

  6. Когда вы закончите наблюдать за трафиком, нажмите Ctrl + C в любых окнах терминала, где вы мониторите журналы, чтобы остановить непрерывный вывод.

Проверка сгенерированных оповещений

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

  1. Сначала проверьте базовый журнал оповещений:

    sudo cat /var/log/suricata/fast.log

    Эта команда отображает оповещения с временными метками в простом, удобочитаемом формате. Файл fast.log является стандартным файлом вывода оповещений Suricata. Ищите записи, содержащие "ICMP Ping Detected" - они указывают на запросы ping, которые совпали с вашим правилом обнаружения.

  2. Для более детального анализа изучите структурированный журнал в формате JSON:

    sudo cat /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'

    Файл eve.json содержит полные журналы, удобные для обработки машинами, в формате JSON. Мы используем jq для фильтрации только событий оповещения. Это предоставляет подробную информацию, включая:

    • IP - адреса источника и назначения
    • Точные временные метки
    • Полные детали правила
    • Информацию о полезной нагрузке пакета (при соответствующей настройке)
  3. Чтобы подсчитать, сколько раз каждое оповещение было активировано:

    sudo grep -o "ICMP Ping Detected" /var/log/suricata/fast.log | wc -l

    Эта цепочка команд сначала извлекает все вхождения "ICMP Ping Detected" с помощью grep -o, а затем подсчитывает их с помощью wc -l. Это помогает определить, насколько часто это событие происходит.

  4. Для получения сводки по типам оповещений:

    sudo jq -r '.alert.signature' /var/log/suricata/eve.json | sort | uniq -c

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

  5. Чтобы просмотреть оповещения с информацией об IP - адресе источника:

    sudo jq -r 'select(.event_type == "alert") | [.timestamp, .src_ip, .alert.signature] | @tsv' /var/log/suricata/eve.json

    Этот продвинутый запрос jq создает вывод, разделенный табуляцией, показывающий временную метку, IP - адрес источника и сигнатуру оповещения для каждого события. Формат @tsv позволяет легко импортировать данные в электронные таблицы.

  6. Чтобы проверить последние 5 оповещений:

    sudo tail -n 5 /var/log/suricata/fast.log

    Команда tail показывает последние строки файла. Это полезно для быстрой проверки недавней активности без прокрутки всего журнала.

Добавление пользовательского правила

На этом этапе вы узнаете, как создать и протестировать собственное правило Suricata для обнаружения конкретных паттернов в сетевом трафике. В качестве практического примера мы сосредоточимся на обнаружении HTTP - запросов к тестовому домену (example.com). Пользовательские правила позволяют расширять возможности обнаружения Suricata за пределы его стандартного набора правил.

  1. Сначала перейдите в каталог с правилами, где Suricata хранит свои правила обнаружения:

    cd /var/lib/suricata/rules

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

  2. Создайте новый файл правил специально для ваших пользовательских правил:

    sudo nano custom.rules

    Использование sudo обязательно, так как для изменения каталога с правилами требуются административные привилегии. Мы называем файл custom.rules, чтобы четко отличить его от стандартных файлов правил Suricata.

  3. Добавьте следующее правило для обнаружения 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 - заголовок Host
    • content:"example.com": Ищет этот конкретный домен
    • nocase: Делает поиск регистронезависимым
    • sid:1000002: Дает правилу уникальный идентификатор (выше 1 000 000 для пользовательских правил)
    • rev:1: Указывает, что это первая версия правила
  4. Сохраните файл в редакторе nano, нажав Ctrl + O (записать), затем Enter для подтверждения и Ctrl + X для выхода.

  5. Теперь нам нужно сообщить Suricata о загрузке нашего нового файла правил. Отредактируйте основную конфигурацию:

    sudo nano /etc/suricata/suricata.yaml

    Найдите раздел rule-files: (обычно около строки 50 - 60) и добавьте:

    - custom.rules

    Это добавление гарантирует, что Suricata загрузит наши пользовательские правила при запуске.

  6. Перед применением изменений проверьте правильность синтаксиса правила:

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

    Флаг -T сообщает Suricata проверить конфигурацию без фактического запуска. Это помогает обнаружить любые синтаксические ошибки в ваших правилах до их использования.

  7. Перезапустите Suricata, чтобы загрузить новое правило:

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0

    Первая команда останавливает любую запущенную инстанцию Suricata, а вторая запускает ее заново с обновленной конфигурацией.

  8. Чтобы проверить, работает ли наше правило, сгенерируйте некоторый HTTP - трафик к example.com:

    curl http://example.com

    Эта команда делает простой HTTP - запрос, который должен активировать наше новое правило.

  9. Наконец, проверьте, обнаружил ли Suricata трафик, просмотрев последние оповещения:

    sudo tail -n 5 /var/log/suricata/fast.log

    Вы должны увидеть оповещение, соответствующее сообщению нашего пользовательского правила о HTTP - запросах к example.com. Если этого не произошло, проверьте каждый шаг и убедитесь в правильности синтаксиса правила.

Резюме

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

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