Skip to content

Теоретические сведения о ПО Suricata

messerdos edited this page Jun 10, 2018 · 2 revisions

ПО Suricata

ПО Suricata - это система обнаружения и предотвращения вторжений с открытым исходным кодом. ПО Suricata изначально спроектировано для работы в многопоточном режиме, эффективно работает в многопроцессорных системах. Кроме того, так же поддерживает вычисления на GPU (СUDA или OpenCL). ПО Suricata имеет модульное строение и состоит из следующих модулей: захвата, сбора, декодирования, обнаружения и вывода. Есть возможность детектирования протоколов и анализа его составляющих. Например, HTTP протокол может быть удобно анализировать по его различным заголовкам с помощью регулярных выражений, а бинарные файлы, например, по контрольной сумме.

В ПО Suricata есть возможность анализа IPv6 трафика, включая все популярные виды туннелей. Несколько интерфейсов используется для захвата сетевого трафика - IPFRing, LibPcap, NFQueue, IPFW, AF_PACKET, PF_RING. Также есть возможность анализировать уже перехваченный трафик в pcap-файлах.

Режим IPS (режим блокировки) появился изначально и может быть сконфигурирован добавлением одной строки в очень простой конфигурационный файл, который, кстати, надо заметить реализован в формате yaml-файла и чрезвычайно прост для понимания. Отличительной же чертой ПО Suricata является то, что разработчики при ее написании учли возможность повторного использования уже написанных для Snort правил, будь то Sourcefire VRT, OpenSource Emerging Threats (ETOpen) и коммерческие Emerging Threats Pro. Необходимо также заметить, что и другие возможности Snort были перенесены на платформу Suricata, как например: Unified2 логирование, вывод в лог-файлы формата pcap или syslog. Также реализован вывод событий в json-формате для более простого взаимодействия с другими программными средствами посредством API. Наличие последней упомянутой возможности существенно упрощает интеграцию ПО Suricata в крупные системы мониторинга.

Еще одной отличительной особенностью системы ПО Suricata является возможность работы на седьмом уровне модели OSI (уровень приложений). Это возможность существенно повышает вероятность обнаружения вредоносной активности посредством анализа таких популярных протоколов, как: HTTP, TLS, FTP, SMB, SMTP, POP3, IRC и другие.

Если говорить о том, как же происходит обработки самого трафика и осуществляется выявление угроз и атак, то необходимо привести следующие аргументы. ПО Suricata состоит из 4 модулей: модуль захвата трафика, модуль сбора информации, модуль декодирования и модуль обнаружения и вывода. Захваченный трафик один за один проходит по модулям, претерпевая те или иные изменения. Попадая в модуль обнаружения и вывода весь трафик пакет за пакетом анализируется на предмет совпадений по заранее написанным правилам. Так называемые Rule-set’ы состоят из большого числа правил, каждое из которых призвано выявить угрозы и определенным образом на нее отреагировать. Обычно правила содержат следующие поля: поле действия (pass, drop, reject, alert), заголовок, в котором указывается направление трафика (исходящий IP-адрес и IP-адрес назначения, а также порты), и описание (как необходимо детектировать угрозы). Когда между узлами открывается не одно соединение, а сразу несколько, то ПО Suricata имеет возможность детектировать и такую активность. Это легко реализуется на основе так называемых FlowBits и IP Reputation. Первые создают счетчики и флаги для соединений, вторые – анализируют трафик, учитывая списки репутации IP-адресов.

Правила обработки трафика ПО Suricata

Правила обработки трафика в ПО Suricata являются довольно простыми. Как уже упоминалось, можно использовать распространённые правила, которые находятся в свободном доступе. Такие, как Emerging Threats, Emerging Threats Pro and Sourcefire’s VRT [14]. Их установку и обновление обычно рекомендовано производить с помощью Менеджера Правил Oinkmaster [9]. Но чаще всего администраторами систем безопасности принято дописывать нужные им правила для условий и требований свои сетей.

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

Все правила состоят из трех частей: действие, заголовок, описание. Как пример на Рисунке 1.1 представлено одно из правил, для лучшего понимания разными цветами на нем обозначены разные его части.

Рисунок 1.1 – Пример правила для ПО Suricata

Под действием правила понимается то, что произойдет с тем или иным сетевым соединением после того, как данное правило сработает. Наиболее часто встречающиеся: drop и alert. Первое после того, как произошла срабатывание правила, сбросит это соединение, второе же – просто выдаст событие безопасности и запишет его в журнал и проинформирует администратора системы. Также применяются другие типы действий: pass, reject. Reject, помимо простого сброса соединения, отправит и отправителю и получателю reject-пакет, содержащий, например, код ошибки, по причине которой соединение было сброшено.

Заголовок правила содержит информацию о том, к какому соединению будет данное правило применяться. А именно: протокол соединения, исходящий адрес и адрес назначения, исходящий порт и порт назначения. В качестве протокола может быть указано, например, просто TCP (Рисунок 1.2) или UDP, или же выбран, например, один из протоколов уровня приложений (FTP, http, etc.)

Рисунок 1.2 – TCP протокол в правиле ПО Suricata

Указание адресации возможно путем ввода IPv4- или IPv6-адресов или целых диапазонов. При этом обычно в конфигурационном файле изначально присваивают глобальным переменным соответствующие подсети (Рисунок 1.3) и используют в дальнейшем их во всех правилах (Рисунок 1.4, 1.5).

Рисунок 1.3 – Пример с переменными в config-файле ПО Suricata

Рисунок 1.4 – Исходящий адрес указан через переменную

Рисунок 1.5 – Адрес назначения в правиле указан через переменную

При указании портов в правилах обычно указывают их цифровыми значениями (Рисунок 1.6) или ставят ключевое слово any, которое означает что для данного правила номер порта не важен (Рисунок 1.7, 1.8).

Рисунок 1.6 – Пример указания портов

Рисунок 1.7 – Указание порта отправителя через ключевое слово any

Рисунок 1.8 – Указание порта назначение через ключевое слово any

В приведенных примерах между указанием source и destination в правиле стоят символы, обозначающие направление соединения. Это сделано для того, чтобы уменьшить количество правил для одних и тех же соединений. Пример приведен на Рисунках 1.9 и 1.10.

Рисунок 1.9 – Пример указания направления действия

Рисунок 1.10 – Типичное обозначение направления в правилах

Описательная часть правил содержит такую информацию, как: текст события безопасности, которые выдаст система в журнальные файлы, информацию об уязвимости, в отношении которой произошло событие безопасности (meta-данные). И что более важно, в ней также указывается, где в пакетах сетевых соединений искать нужные поля и как их обрабатывать (payload, flow, IP reputation). Отделение ключевых слов друг от друга осуществляется с помощью «;».

В meta-данных правила указывается сообщение системы безопасности при срабатывании данного правила, уникальный номер сигнатуры, номер ревизии правила, ее класс и приоритет, а также описание уязвимости с приведением ссылок на ресурсы, посвященные информационной безопасности (Рисунок 1.11, 1.12, 1.13).

Рисунок 1.11 – Пример сообщения системы безопасности

Рисунок 1.12 – Пример номера сигнатуры правила

Рисунок 1.13 – Пример описания уязвимости с ссылками на ресурсы ИБ

В payload-секции описательной части правила происходит самая большая работа по анализу уязвимости. На рисунке 1.14 приведен пример для обработки http-пакета, на нем цветом отмечено ключевое слово, по которому будет происходит основной анализ пакета сетевого соединения. Основные ключевые слова являются модификаторами.

Рисунок 1.14 – Пример правила ПО Suricata

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

Рисунок 1.15 – Flow-биты и флаги соединения в правилах ПО Suricata

Тем же самым целям служит и модификаторы, называемые IP Reputation. На основе данных по активности тех или иных подсетей составляются списки репутации отдельных IP-адресов или целых подсетей. Компьютеры из этих подсетей уже могут обладать низкой репутацией, и простая попытка подключения к ресурсам компании с их стороны уже должна вызывать ту или иную реакцию. На рисунке 1.16 можно видеть одно из таких правил.

Рисунок 1.16 – IP Reputation