Welcome to Энциклопедия сетевых протоколов
Поиск

Модули
· Титульная страница
· Мир протоколов
· Основные темы
· Архив публикаций
· Поиск
· Каталог ссылок
· Участники
· Документы и программы

Выбор языка
Язык интерфейса:


Статистика
20490630
запросов с 22 сентября 2005

Внешняя статистика
Rambler's Top100

  
Правила Snort (часть 3)
Опубликовано 19 окт. 2005 (Ср.) в 14:08:22
Тема: Детектирование попыток вторжения в сеть


Опции проверки содержимого пакетов (payload)

content

Ключевое слово content обеспечивает поддержку одной из важнейших функций Snort – проверку содержимого пакетов. Эта опция позволяет пользователю создавать правила для поиска в пакетах определенной информации и выполнения тех или иных действий при ее обнаружении. Для проверки содержимого пакетов используется функция поиска по шаблону Boyer-Moore. Если заданная последовательность данных обнаружена в поле содержимого пакета, проверка считается успешной и выполняется остальная часть правила. Следует помнить, что при поиске учитывается регистр символов.

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

alert tcp any any -> any 139 (content:”|5c00|P00|I|00|E|00 5c|”;)

Отметим, что в одном правиле может присутствовать более одной опции content, что позволяет снижать уровень ложных срабатываний за счет более точного задания искомых последовательностей.

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

Формат

content: [!] "<строка поиска>";

Пример задания смешанной (текст и бинарные данные) был приведен выше, а здесь дается пример поиска текстовой строки.

alert tcp any any -> any 80 (content:!”GET”:)

Изменение параметров поиска

Ключевое слово content поддерживает множество опций-модификаторов, которые изменяют поведение системы поиска. Список модификаторов приведен ниже:

68. depth (размер области поиска) 69. offset (смещение начало поиска от начала поля данных) 70. distance (количество пропускаемых байтов после первого найденного соответствия) 71. within (размер области поиска после первого найденного соответствия) 72. nocase (без учета регистра символов) 73. rawbytes (поиск в необработанных данных)
nocase

Ключевое слово nocase позволяет задать программе Snort, что следует осуществлять поиск, заданный предыдущей опцией content без учета регистра символов.

Формат

nocase;

Пример поиска без учета регистра символов показан ниже.

alert tcp any any _ any 21 (msg:”FTP ROOT”; content:”USER root”; nocase;)

rawbytes

Ключевое слово rawbytes позволяет искать в пакете необработанные (raw) данные, игнорирую декодирование, выполняемое препроцессорами. Ключевое слово изменяет поиск данных, указанных предыдущей опцией content.

Формат

rawbytes;

Приведенный пример показывает правило поиска необработанных данных вместо результатов декодирования препроцессором telnet.

alert tcp any any -> any 21 (msg: "Telnet NOP"; content: "|FF F1|"; rawbytes;)

depth

Ключевое слово depth показывает размер блока данных из пакета, в котором осуществляется поиск, заданных предыдущей опцией content. Например, при задании глубины 5 программ Snort будет просматривать в поисках заданной последовательности только первые 5 байтов поля данных в пакете.

Ключевое слово depth меняет режим поиска для опции keyword, указанной перед depth.

Формат

depth: <целое число>;

Пример использования опции depth показан ниже.

alert tcp any any -> any 80 (content: “/cgi-bin/phf”; offset: 4; depth:20;)

offset

Ключевое слово offset позволяет задать смещение в поле данных пакет, с которого начинается поиск последовательности, заданной предыдущей опцией content. Например, offset 5 будет говорить программе Snort о необходимости начинать поиск, пропустив первые 5 байтов поля данных.

Ключевое слово offset меняет режим поиска для опции keyword, указанной перед offset.

Пример использования опций content, offset и depth был показан выше. В этом примере программа будет искать текст /cgi-bin/phf в 20 байтах пакета HTTP после пропуска первых 5 байтов поля данных.

Формат

offset: <целое число>;

distance

Ключевое слово distance показывает программе Snort сколько байтов нужно пропустить после найденной предыдущей опцией content строки поиска для начало поиска последовательности, заданной другой опцией content. Например, правило

alert tcp any any -> any any (contenet: ”ABC”; content: “DEF”; distance: 1;)

позволяет находить в поле данных пакета строки вида ABC?DEF (знак вопроса означает любой символ)

Формат

distance: <число байтов>;

within

Ключевое слово within размер области поиска для опции content от конца подстроки, найденной предыдущей опцией content. Например, правило

alert tcp any any -> any any (contenet: ”ABC”; content: “DEF”; distance: 1;)

ограничивает поиск подстроки DEF 10 байтами после найденной в поле данных подстроки ABC.

Формат

within: <число байтов>;

uricontent

Опция uricontent служит для поиска в нормализованных полях запросов URI. Это означает, что при создании правил, включающих нормализуемые данные (например, %2f или обход каталогов - directory traversal), эти правила не следует использовать.

Например, URI

/scripts/..%c0%af/winnt/system32/cmd.exe?/c+verend{verbatim}

будет нормализоваться в

begin{verbatim}/winnt/system32/cmd.exe?/c+ver

Нормализованная форма URI

begin{verbatim} /cgi-bin/aaaaaaaaaaaaaaaaaaaaaaaaaa/..%252fp%68f? end{verbatim}

будет иметь вид

begin{verbatim}/cgi-bin/phf?

При создании правил uricontent укажите содержимое, которое вы хотите найти в контексте нормализованного URI. Например, если Snort нормализует обход каталогов (directory traversal), не включайте directory traversal.

Вы можете создавать правила поиска в ненормализованном содержимом пакетов с помощью опции content (см. выше).

Эта опция использует тот же набор модификаторов, который применяется для описанной выше опции content.

Эта опция работает совместно с препроцессором HTTP Inspect.

Формат

uricontent:[!];

isdataat

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

Формат

isdataat:[,relative];

Например, правило

alert tcp any any -> any 111 (content:"PASS"; isdataat:50,relative;

content:!"|0a|"; distance:0;)

будет обеспечивать поиск в поле данных пакета подстроки PASS и после ее обнаружения будет проверять наличие в пакете по крайней мере еще 50 байтов, после чего проверит отсутствие символа новой строки в 50 байтах после PASS.

pcre

Ключевое слово pcre позволяет создавать правила, содержащие регулярные выражения, совместимые с языком perl. Более детальную информацию об использовании таких регулярных выражений вы найдете на сайте http://www.pcre.org.

Формат

pcre:[!]"(//|m)[ismxAEGRUB]";

Модификаторы в конце правила устанавливают флаги для регулярного выражения.

Таблица 3: Модификаторы, совместимые с Perl

i

Регистр символов не принимается во внимание

s

Включать символы новой строки в dot metacharacter

m

По умолчанию строка трактуется как одна большая последовательность символов. С помощью специальных символов ^ и $ можно задать проверку соответствия для начала или конца строки. При наличии модификатора m символы ^ и $ задают поиск соответствия в начале или в конце каждой новой строки (относительно символа перевода строки в буфере), а также в начале и в конце буфера.

x

Символы пробелов в шаблоне поиска игнорируются за исключением случаев использования перед таким символом escape-символа или включения пробела в символьный класс (character class)

Таблица 4: Модификаторы, совместимые с PCRE

A

Наличие заданной подстроки проверяется только в начале буфера (аналогично ^ )

E

Задает для $ поиск соответствия только в самом конце строки. Без модификатора E символ $ будет задавать также поиск перед символом новой строки (если таковой имеется) в конце буфера.

G

Инвертирует трактовку параметров количества повторов (quantifier) так, что если по умолчанию они не являются “жадными” (greedy - число повторов может быть любым, вплоть до максимального) установка знака вопроса (?) вслед за параметром, меняет “состояние жадности”.


Таблица 5: Модификаторы Snort

R

Задает поиск соответствия относительно конца предыдущего найденного соответствия (аналогично опции distance:0;)

U

Задает поиск в декодированном буфере URI (аналогично uricontent)

B

Отключает использование декодированного буфера (аналогично rawbytes)

Модификаторы R и B не следует использовать совместно.

Приведенный ниже пример задает нечувствительный к регистру символов поиск в поле данных подстроки BLAH.

alert ip any any -> any any (pcre:"/BLAH/i";)

byte_test

Эта опция позволяет сравнить байт с заданным значением. Опция может использоваться применительно к двоичным значениям или их символьному представлению.

Формат

byte_test: , [!], ,

[,relative] [,] [,, string];

Таблица 6: Параметры опции byte_test

Параметр

Описание

bytes_to_convert

Число байтов, которые могут извлекаться из пакета

operator

Операция, выполняемая для сравнения байта с заданным значением:

  • < - меньше

  • > - больше

  • = - равно

  • ! - не совпадает

  • & - побитовая операция И (AND)

  • - побитовая операция ИЛИ (OR)

value

Значение, с которым выполняется сравнение

offset

Смещение в поле данных пакета, с которого начинается операция сравнения

relative

Задает отсчет смещения от конца предыдущего найденного соответствия

endian

Задает порядок следования:

  • big - big endian (старший разряд слева, используется по умолчанию)

  • little - little endian (старший разряд справа)

string

Указывает, что данные в пакете представлены в символьном формате

number type

Задает тип считываемых значений:

  • hex – шестнадцатеричное число

  • dec - десятичное число

  • oct - восьмеричное число

Любой из операторов можно использовать со знаком инверсии (!). При использовании знака ! без оператора в качестве последнего принимается оператор равенства (=).

Ниже показано несколько примеров использования опции byte_test.

alter udp $EXTERNAL_NET any -> $HOME_NET any

(msg:”AMD procedure 7 plog overflow “;

content:”|00 04 93 F3|”;

content:”|00 00 00 07|”; distance 4; within 4;

byte_test: 4, >, 1000, 20, relative;)


alter tcp $EXTERNAL_NET any -> $HOME_NET any

(msg:”AMD procedure 7 plog overflow “;

content:”|00 04 93 F3|”;

content:”|00 00 00 07|”; distance 4; within 4;

byte_test: 4, >, 1000, 20, relative;)


alert udp any any -> any 1234

byte_test: 4, =, 1234, 0, string, dec;

msg: “got 1234!”;)


alert udp any any -> any 1235

byte_test: 3, =, 123, 0, string, dec;

msg: “got 123!”;)


alert udp any any -> any 1236

byte_test: 2, =, 12, 0, string, dec;

msg: “got 12!”;)


alert udp any any -> any 1237

byte_test: 10, =, 1234567890, 0, string, dec;

msg: “got 1234567890!”;)


alert udp any any -> any 1238

byte_test: 8, =, 0xdeadbeef, 0, string, hex;

msg: “got DEADBEEF!”;)





byte_jump

Опция byte_jump позволяет создавать простые правила считывания данных из пакетов с пропускам некоторого количества байтов, задаваемого значением поля в пакете. С помощью этой опции считывается размер части пакета, которую следует пропустить и считываются данные, расположенные после этой части.

Опция byte_jump сначала определяет размер пропускаемой области данных, преобразуя считанную из пакета информацию в целое число и потом пропускает соответствующее число байтов, устанавливая указатель, который будет использоваться для следующего считывания информации из пакета. Этот указатель называют detect offset end pointer или doe_ptr.

Формат

byte_jump: ,

[,relative] [,multiplier ] [,big] [,little][,string]

[,hex] [,dec] [,oct] [,align] [,from_beginning];

Таблица 7: Параметры опции byte_jump

Параметр

Описание

bytes_to_convert

Число байтов, считываемых из пакета.

offset

Смещение в поле данных пакета, с которого начинается обработка.

relative

Задает использование смещения относительно конца предыдущего найденного соответствия.

multiplier

Умножает количество вычисленных байтов на значение параметра <value> и пропускает полученное количество байтов.

big

Обрабатывает данные как big endian (старший разряд сначала – используется по умолчанию).

little

Обрабатывает данные как little endian (сначала младший разряд).

string

Данные в пакете представлены в виде текстовой строки.

hex

Преобразовать строку данных в шестнадцатеричное значение.

dec

Преобразовать строку данных в десятичное значение.

oct

Преобразовать строку данных в восьмеричное значение.

align

Округляет число конвертируемых байтов по следующей 32-битовой границе.

from_beginning

Задает отсчет пропускаемых байтов от начала поля данных пакета, а не от текущей позиции в пакете.

Ниже приведен пример использования опции byte_jump.

alert udp any any -> any 32770:34000 (content: “|00 01 86 B8|”;

content: “|00 00 00 01|”; distance: 4; within: 4;

byte_jump: 4, 12, relative, align;

byte_test: 4, >, 900, 20, relative;

msg: “statd format string buffer overflow”;)

regex

Взамен regex следует использовать опцию pcre.

content-list

Опция content-list устарела и ее не следует использовать.




Примечание:

 
Вход
Регистрационное имя

Пароль

[Восстановить пароль]

Если у Вас еще нет учетной записи, Вы можете зарегистрироваться.


Связанные ссылки
· Поиск в разделе Детектирование попыток вторжения в сеть
· Статьи пользователя Николай Малых


Самая популярная статья раздела Детектирование попыток вторжения в сеть:
Правила Snort


Оценка статьи
Средняя оценка: 1
голос.: 1


Оцените эту публикацию:

Отлично
Очень хорошо
Хорошо
Приемлемо
Плохо


Параметры

 Вариант для печати Вариант для печати


Связанные темы

Средства сбора и анализа пакетовВопросы безопасности

"Вход" | Вход/регистрация | 0 коммент.
Комментарии выражают мнение их авторов. Администрация сайта не несет никакой ответственности за достоверность представленных в комментариях посетителей сведений, а также за содержание таких комментариев.

Для публикации своих комментариев Вам нужно зарегистрироваться..
Copyright © Nikolai Malykh
Все права на опубликованные на сайте материалы принадлежат Nikolai Malykh, если в опубликованном на сайте документе явно не указано иное.
Не разрешается воспроизведение опубликованных на сайте документов без согласия правообладателя.

Hosted By Web Hosting by iPage

Copyright © 2005 by Nikolai Malykh
Based on PHP-Nuke by Francisco Burzi. This is free software, and you may redistribute it under the GPL. Author comes with absolutely no warranty.
Время генерации страницы: 0.32 сек.