Краткое руководство пользователя snort
Snort – относится к свободному программному обеспечению и является мощным инструментом предотвращения вторжений (IPS) с открытым исходным кодом. На данный момент последней версией утилиты является – 2.8.6.1 от 22.07.2010.
Режимы работы snort
Разработчики выделяют три режима работы snort:
- режим снифера;
- режим регистратора пакетов;
- режим сетевой системы выявления атак.
В режиме снифера snort просто выводит в стандартный поток вывода результатов содержание (частично или полностью) пакетов, которые перехватывает в сети. В режиме регистратора пакетов – сохраняяет перехваченные пакеты в указанном каталоге файловой системы. В режиме сетевой системы выявления атак – анализирует трафик сети на соответствие предварительно сформулированным пользователем правилам и выполняет определенные пользователем действия в случае такого соответствия.
Во всех режимах пользователь может задать правила фильтрации сетевого трафика. Синтаксис этих правил такой же, как и в программе tcpdump (windump) (только немного в укороченном виде). Источником данных может быть не конкретно сеть, а предварительно сформированный регистрационный файл. Snort может одновременно находиться в любых двух из этих режимов или во всех трех одновременно.
Режим снифера
Указателем режима снифера является наличие в командной строке snort опций -v, -d или -e. Опция -v разрешает вывести IP-, TCP-, UDP- и ICMP-заголовки пакетов. Опция -d – данные пакетов. Опция -e – Ethernet-заголовки.
Выводит заголовки и данные TCP-пакетов.
То же самое, но для ICMP-пакетов.
Режим регистратора пакетов
Указателем режима регистратора пакетов является наличие в командной строке опции -l.
Регистрирует IP-, TCP-, UDP- и ICMP-заголовки всех пакетов в каталоге log (причем для каждого пакета создается отдельный текстовый файл).
Заметим, что каталог регистрации (в данном случае – log) должен существовать.
Регистрирует ICMP-пакеты в каталоге log в двоичном (binary) формате, совместимым с форматом регистрации tcpdump.
Двоичный файл регистрации позднее может быть прочитан с помощью snort (или любого другого средства, которое поддерживает формат регистрации tcpdump, например, windump или Analyzer).
Выводит на дисплей заголовки и данные UDP-пакетов, которые были предварительно зарегистрированы в файле log\packet.log.
Режим сетевой системы выявления атак
Указателем режима сетевой системы выявления атак является наличие в командной строке опции -c.
Запускает snort в режиме сетевой системы выявления атак в соответствии с правилами, определенными в файле snort.conf.
Заметим, что работа snort в режиме сетевой системы выявления атак нуждается в, как правило, регистрации пакетов. Поэтому командная строка рядом с опцией -c часто также включает опцию -l (при отсутствии этой опции пакеты регистрируются в каталоге /var/log/snort). Запретить регистрацию пакетов в режиме сетевой системы выявления атак можно с помощью опции -N.
Конфигурация режима (способа) вывода сигналов тревоги
Режим по умолчанию: вывод в текстовый файл alerts.ids в каталоге регистрации. Формат вывода включает пометку времени, объясняющее сообщение и содержание (частично) заголовков пакета, который послужил причиной сигнала тревоги.
Получение справки о синтаксисе командной строки snort
Краткую справку о синтаксисе командной строки snort можно получить, запустив snort с опцией -?:
Исчерпывающая справка содержится в man-странице snort.
Написание правил выявления атак
Snort использует два вида правил: бесконтекстные (обычные) и контекстные (правила препроцессоров). Бесконтекстные правила применяются для каждого пакета отдельно, без связи с другими пакетами. Контекстные могут применяться к той или иной совокупности (последовательности) пакетов. Большинство правил пишутся в единой строке, хотя могут занимать и несколько строк (в этом случае каждая строка, кроме последней, должна заканчиваться символом \).
Написание бесконтекстных правил
Каждое правило делится на две логических секции: заголовок и опции. Заголовок включает:
- обозначение действия, которое должно выполняться в случае выполнения правила;
- обозначение протокола;
- IP-адрес источника и назначения;
- порты источника и назначения.
Опции включают определение дополнительных критериев выполнения правила и определение дополнительных реагирующих действий. Общий синтаксис правил snort:
Опции являются необязательной частью правил. В более конкретном плане:
keyword2: value2; …;)
Пример правила:
msg: «mountd access»;)
Здесь заголовком является: alert tcp any any -> 192.168.1.0/24 111.
Опциями: content:»|00 01 86 a5|»; msg: «mountd access»;.
Это правило можно растолковать таким образом:
- выдавать сигнал тревоги, если из любого места на 111 порт любого узла сети 192.168.1.0/24 поступит TCP-пакет, который содержит в своих данных последовательность 00 01 86 a5 (в шестнадцатиричном представлении);
- сигнал тревоги сопровождать сообщением «mountd access».
Заголовки правил
Обозначение действий, которые должны выполняться в случае выполнения правил
Предусмотрено 5 стандартных вариантов действий snort в случае, если пакет отвечает одному из правил (соответственно, 5 возможных значений action):
- alert: выдать сигнал тревоги и зарегистрировать пакет;
- log: зарегистрировать пакет;
- pass: проигнорировать пакет (т.е. не выполнять никаких действий);
- activate: выдать сигнал тревоги и активизировать соответствующее динамическое (dynamic) правило;
- dynamic: не выполнять никаких действий, пока правило не будет активизировано некоторым activate-правилом; после активизации правила действовать так, как и в случае log-правила.
Конструкция с activate и dynamic применяется для того, чтобы в случае выявления начала атаки получить более подробный протокол дальнейших действий атакующего.
Обозначение протоколов
На данный момент поддерживаются 4 протокола (соответственно, 4 значения proto): ip, tcp, udp и icmp.
Обозначение IP-адреса
Ключевое слово “any” применяется в значении “любой адрес”. Конкретные адреса задаются в формате: IP/mask, где IP – IP-адрес сети или узла, mask – маска сети. Маска сети задается как десятичное число, которое равняется числу единиц в двоичной маске. Например, обозначение 192.168.1.0/24 означает IP-сеть класса C с адресом 192.168.1.0 (число 24 эквивалентное шестнадцатиричной маске FF.FF.FF.0); обозначение 192.168.5.151/32 означает отдельный узел с IP-адресом 192.168.5.151. К IP-адресу может быть применен оператор возражения «!». Например, если приведенный выше пример правила модифицировать таким образом:
(content: «|00 01 86 a5|»; msg: «external mountd access»;)
сигнал тревоги будет выдаваться только в том случае, если TCP-пакеты будут поступать на 111 порт узлов сети 192.168.1.0/24 извне.
Можно указать также список IP-адресов. Такой список оформляется следующим образом:
[192.168.1.0/24,10.1.1.0/24] 111 (content: «|00 01 86 a5|»; \
msg: «external mountd access»;)
Обозначение портов
Ключевое слово “any” применяется в значении “любой порт”. Конкретные порты задаются десятичными числами. С помощью оператора «:» можно задавать диапазоны портов:
означает, что будут регистрироваться UDP-пакеты любого происхождения, направленные на порты от 1 до 1024 сети 192.168.1.0/24.
означает, что будут регистрироваться TCP-пакеты любого происхождения, направленные на порты с номерами, которые меньше или равняют 6000, узлов сети 192.168.1.0/24.
означает, что будут регистрироваться TCP-пакеты, которые поступают из портов с номерами, которые меньше или равняют 1024, любых узлов на порты с номерами, которые больше или равняют 500, узлов сети 192.168.1.0/24.
К номерам или диапазонам портов может быть применен оператор возражения «!».
Опции правил
Опции отделяются одна от одной с помощью символа «;» (последняя опция в списке тоже должна заканчиваться этим символом). Ключевые слова (keywords) опций отделяются от их аргументов (values) символом «:».
Стандартные ключевые слова
Ниже приведено краткое описание некоторых стандартных ключевых слов.
msg — выводить сообщение вместе с сигналом тревоги или протоколом пакета. Формат:
ttl — проверять значение поля TTL IP-заголовка. Формат:
content — проверять, не содержит ли пакет определенных данных. Формат:
Здесь “!” – оператор возражения. Примеры:
Данные пакета должны содержать фрагмент, который состоит из байтов 90 C8 C0 FF FF FF (в шестнадцатиричном формате) и текста /bin/sh.
Данные пакета не должны содержать текст GET.
session — регистрировать данные прикладного уровня. Формат:
Аргумент printable означает, что регистрировать нужно только те данные, которые отображаются на дисплее или для устройства печати. Аргумент all дает возможность зарегистрировать данные полностью. Например, правило
разрешает зарегистрировать все telnet-сессии пользователей сети 192.168.1.0/24.
resp — применить определенные активные реагирующие действия, которые разрешают прервать нежелательное соединение. Формат:
где resp_modifier может принимать такие значения:
- rst_snd – прислать на сокет источника пакета пакет TCP RST;
- rst_rcv – прислать на сокет назначения пакета пакет TCP RST;
- rst_all – прислать пакеты TCP RST в обоих направлениях;
- icmp_net – прислать источнику пакета сообщение ICMP «Network Unreachable»;
- icmp_host – прислать источнику пакета сообщение ICMP «Host Unreachable»;
- icmp_port — прислать источнику пакета сообщение ICMP «Port Unreachable»;
- icmp_all – прислать источнику пакета все указанные ICMP-сообщения.
Написание контекстных правил (подключение препроцессоров)
Контекстная обработка пакетов осуществляется специальными модулями snort, которые имеют название препроцессоры (preprocessors). Специфика функционирования препроцессоров заключается, прежде всего, в том, что они имеют возможность запоминать предыдущий трафик (в определенном аспекте и объеме). Другой важной особенностью препроцессоров является возможность модифицировать данные, которые поступают на модуль бесконтекстного анализа пакетов (например, выполнять дефрагментацию пакетов). Каждое контекстное правило, в сущности, является директивой подключения того или иного препроцессора. Общий формат этих директив:
где name — имя препроцессора.
Формат options для каждого препроцессора определяется отдельно
Подключение препроцессора Portscan
Препроцессор Portscan обнаруживает и регистрирует сеансы сканирования портов. TCP-сканирование с полным или неполным установлениям соединений и UDP-сканирования определяются по критерию, который можно сформулировать как “поступление с одного узла попыток подключения к n или более портов объекта защиты за T секунд”. Параметры n и T задаются в секции options директивы препроцессора Portscan. TCP stealth-сканирования определяется по поступлению хотя бы одного TCP-пакета соответствующего формата. Формат директивы:
Где monitor network – это IP-адрес сети, которая рассматривается как возможный объект сканирования, number of ports – указанный выше параметр n, detection period – указанный выше параметр T, file path – имя файла для регистрации. Пример:
Статья действительно очень обширная и интересная, аж зажотелось сказать спасибо, обязательно использую на практике.
Чего только не напридумывают, но закрепить безопасность системы точно уж не помешает.
Да нужно будет воспользоваться этой программой и еще сделать безопасность самому что бы не было вдруг проблем
Статья супер спасибо!
руководство вовсе не краткое
все напианно четко и ясно
по пунктам
Никогда не уделял вопросам безопасности, как оказывается зря. Спасибо за развернутую статью!
Как пишет Sonata, руководство не такое уж и краткое, а действительно очень обзорное и грамотное. Бери, настраивай и пользуйся. Спасибо за полезную информацию.