Опции детектирования для заголовков пакетов
fragoffset
Опция fragoffset позволяет сравнивать смещение фрагмента дейтаграммы IP с заданным десятичным значением. Для отсечения всех первых фрагментов можно использовать ключевое слово fragbits и просмотр опции More fragments при установке fragoffset: 0 (см. пример ниже).
Формат
fragoffset:[<|>]<целое число>
Ниже приведен пример правила с использованием опции fragoffset
alert ip any any -> any any
(msg: “First Fragment”; fragbits: M; fragoffset: 0;)
ttl
Ключевое слово ttl используется для проверки времени жизни дейтаграмм IP. Эта опция может быть полезна при детектировании попыток трассировки с помощью traceroute.
Формат
ttl:[[<целое число>-]><=]<целое число>;
Приведенный ниже пример проверяет, что значение поля TTL в заголовках пакетов меньше 3.
ttl:<3;
Второй пример позволяет детектировать пакеты со значением TTL от 3 до 5.
ttl:3-5;
tos
Эта опция позволяет проверять в пакетах поле IP TOS (тип обслуживания).
Формат
tos:[!]<целое число>;
В приведенном ниже примере проверяется отличие значения поля TOS от 4
tos:!4;
id
Ключевое слово id используется для проверки наличия в поле IP ID заданного значения. Некоторые программы (эксплойты, сканеры, старые программы) устанавливают в этом поле определенное значение (например, число 31337 весьма популярно среди хакеров).
Формат
id:<целое число>;
В приведенном примере проверяется наличие в поле IP ID значения 31337.
id:31337;
ipopts
Ключевое слово ipopts позволяет проверять наличие в заголовке IP указанных опций. Поддерживается проверка следующих опций IP: rr - Record route (запись маршрута) eol - End of list (завершение списка опций) nop - No op (нет опции) ts - Time Stamp (временная метка) sec - IP security option (опция безопасности) lsrr - Loose source routing (нежестко заданный отправителем маршрут) ssrr - Strict source routing (жестко заданный отправителем маршрут) satid - Stream identifier (идентификатор потока)2 any - any IP options are set (любые опции)
Чаще всего проверяются опции ssrr и lsrr, которые не используются в распространенных приложениях Internet.
Формат
ipopts:;
В приведенном примере проверяется наличие в заголовке IP опции Loose Source Routing.
ipopts:lsrr;
Отметим, что в правиле недопустимо наличие нескольких ключевых слов ipopts.
fragbits
Ключевое слово fragbits используется для проверки наличия в заголовке IP битов фрагментации и резервного бита. Опция поддерживает следующие параметры: M - More Fragments (проверять бит MF) D - Don't Fragment (проверять бит запрета фрагментации) R - Reserved Bit (проверять резервный бит)
Для изменения характера проверки могут использоваться перечисленные ниже модификаторы: + - соответствует, если установлены указанные биты - - соответствует, если установлен любой из указанных битов ! - обращение (соответствует, если не установлен ни один из указанных битов)
Формат
fragbits:[+-*]<[MDR]>
В приведенном ниже примере проверяется установка флагов More Fragments и Do not Fragment.
fragbits:MD+;
dsize
Ключевое слово dsize используется для проверки размера поля данных пакета. Данная опция позволяет детектировать пакеты аномальных размеров, которые достаточно часто применяются для переполнения буферов.
Формат
dsize: [<>]<целое число>[<><целое число>];
Приведенный ниже фрагмент правила позволяет детектировать пакеты размером от 300 до 400 байтов.
dsize:300<>400;
Отметим, что условие dsize не будет выполняться для пакетов перестроения потока (stream rebuilt packet), независимо от их размера.
flags
Ключевое слово flags используется для проверки наличия заданных флагов TCP. Список проверяемых флагов приведен ниже: F - FIN (младший бит поля флагов TCP) S - SYN R - RST P - PSH A - ACK U - URG 1 - резервный бит 1 (старший бит байта TCP Flags) 2 - резервный бит 2 0 - отсутствие флагов TCP
Перечисленные ниже модификаторы позволяют менять поведение опции: + - соответствует, если установлены указанные биты * - соответствует, если установлен любой из указанных битов ! - обращение (соответствует, если не установлен ни один из указанных битов)
Для создания правил обработки пакетов инициирования сессий (например, пакеты ECN, где установлен флаг SYN и резервные биты 1 и 2), можно задавать маски опций. Маска отделяется от проверяемых флагов запятой. Например, для детектирования SYN-пакетов независимо от значений резервных битов можно задать маску S,12.
Формат
flags:[!|*|+][,];
Для детектирования пакетов с флагами SYN и FIN независимо от значений резервных битов 1 и 2 может использоваться правило
alert tcp any any -> any any (flags:SF,12;)
flow
Опция flow используется вместе со сборкой потоков TCP и позволяет применять правило лишь к некоторым направлениям потока трафика. Вы можете в результате создавать правила, которые будут относиться только к клиентам или только к серверам, что дает возможность легко дифференцировать пакеты, относящиеся к клиентам из $HOME_NET, просматривающим web-страницы, от пакетов, относящихся к серверам, расположенным в $HOME_NET.
Ключевое слово established будет заменять опцию flags: A+, часто используемую применительно к уже организованным соединениям TCP.
Формат
flow: [(established|stateless)]
[,(to_client|to_server|from_client|from_server)]
[,(no_stream|only_stream)]
Таблица 8: Параметры опции flow
Параметр
|
Описание
|
to_client
|
Переключается на серверные отклики от A к B
|
to_server
|
Переключается на клиентские запросы от A к B
|
from_client
|
Переключается на клиентские запросы от A к B
|
from_server
|
Переключается на серверные отклики от A к B
|
established
|
Переключается только на организованные соединения TCP
|
stateless
|
Переключается независимо от состояния обработчика потока (stream processor) и может быть полезно для детектирования пакетов, направленных на аварийное завершение работы системы
|
no_stream
|
Не переключается пакетами перестроения потока (полезно для опций dsize и stream4)
|
only_stream
|
Переключается только пакетами перестроения потока
|
Ниже приведен пример использования опции flow для обнаружения потенциально опасного трафика.
alert tcp !$HOME_NET any -> $HOME_NET 21 (msg: “cd incoming detected”;
flow: from_client; content: ”CWD incoming”; nocase;)
alert tcp !$HOME_NET 0 -> $HOME_NET 0 (msg: “Port 0 TCP traffic”;
flow: stateless;)
flowbits
Опция flowbits используется совместно со средствами отслеживания соединений препроцессора Flow. Это позволяет создавать правила для сеансов транспортного уровня. Опция flowbits наиболее полезна для сеансов TCP.
Для опции flowbits поддерживается 7 ключевых слов. Большинство параметров требует указания определенного пользователем имени специфического состояния, которое будет проверяться. При создании таких имен следует ограничиваться буквами латиницы, цифрами, а также символами точки, дефиса и подчеркивания.
Формат
flowbits: [set|unset|toggle|isset,reset,noalert][,];
Таблица 9: Параметры опции flowbits
Параметр
|
Описание
|
set
|
Устанавливает (определяет) указанное состояние для текущего потока данных.
|
unset
|
Отменяет указанное состояние для текущего потока данных.
|
toggle
|
Устанавливает указанное состояние, если оно еще не установлено, и отменяет установленное ранее.
|
isset
|
Проверяет, установлено ли указанное состояние.
|
isnotset
|
Проверяет, что указанное состояние не установлено.
|
noalert
|
Отключает для правила генерацию сигнала независимо от остальных опций детектирования.
|
alert tcp any 143 -> any any (msg: “IMAP login”; content: “OK LOGIN”;
flowbits: set, logged_in; flowbits: noalert;)
alert tcp any any -> any 143 (msg: “IMAP LIST”; content: “LIST”;
flowbits: isset,logged_in;)
seq
Опция seq служит для проверки значения порядковых номеров TCP.
Формат
seq:<целое число>;
Приведенный ниже пример проверяет равенство порядкового номера TCP нулю.
seq:0;
ack
Ключевое слово ack используется для проверки номеров подтверждений TCP.
Формат
ack: <целое число>;
Приведенный пример проверяет равенство нулю порядкового номера подтверждения TCP.
ack:0;
3.6.13 window
Ключевое слово window используется для проверки размера окна TCP.
Формат
window:[!]<целое число>;
В приведенном примере проверяется совпадение размера окна TCP со значением 55808.
window:55808;
itype
Ключевое слово itype используется для проверки типа сообщения ICMP.
Формат
itype:[<|>]<целое число>[<><целое число>];
Приведенный пример позволяет детектировать сообщения ICMP с идентификатором типа, превышающим 30.
itype:>30;
icode
Ключевое слово itype используется для проверки значения кода ICMP.
Формат
icode: [<|>]<целое число>[<><целое число>];
В приведенном примере детектируются сообщения ICMP с кодом более 30.
code:>30;
icmp_id
Ключевое слово icmp_id служит для проверки значений идентификаторов ICMP. Такая проверка может оказаться полезной для обнаружения некоторых программ организации скрытых каналов, которые используют для передачи информации статические поля ICMP. Подключаемый модуль был создан, в частности, для детектирования DdoS-агентов stacheldraht.
Формат
icmp_id:<целое число>;
В приведенном примере проверяется наличие нулевого значения в поле ICMP ID.
icmp_id:0;
icmp_seq
Ключевое слово icmp_seq используется для проверки порядковых номеров ICMP. Такая проверка может оказаться полезной для обнаружения некоторых программ организации скрытых каналов, которые используют для передачи информации статические поля ICMP. Подключаемый модуль был создан, в частности, для детектирования DdoS-агентов stacheldraht.
Формат
icmp_seq: <целое число>;
В приведенном примере детектируются сообщения ICMP с порядковым номером 0.
icmp_seq:0;
rpc
Ключевое слово rpc используется для проверки приложений RPC, номеров версий и процедур в запросах SUNRPC CALL.
Для номера версии и процедуры допускается использование шаблона 0, которому соответствуют любые значения номеров.
Формат
rpc: <номер приложения>, [<номер версии>|*], [<номер процедуры>|*]>;
Ниже показан пример детектирования запросов an RPC portmap GETPORT.
alert tcp any any -> any 111 (rpc: 100000,*,3;);
В силу особенностей машины поиска соответствий детектирование по ключевому слову rpc работает несколько медленней, чем поиск значений RPC с использованием ключевого слова content.
ip_proto
Ключевое слово ip_proto позволяет проверять идентификатор протокола в заголовке IP. Список протоколов вы можете найти в файле /etc/protocols.
Формат
ip_proto:[!><] <имя или номер протокола>;
Приведенный пример позволяет детектировать трафик IGMP.
alert ip any any -> any any (ip_proto:igmp;)
sameip
Ключевое слово sameip позволяет детектировать пакеты с совпадающими адресами IP для получателя и отправителя.
Формат
sameip;
Приведенный пример обеспечивает генерацию сигнала при совпадении IP-адресов получателя и отправителя.
alert ip any any -> any any (sampeip;)
Примечание:
|