Инструменты безопасности с открытым исходным кодом

Настройка Snort для Windows


Процесс настройки версии Snort для Windows весьма схож с настройкой для UNIX. Все файлы конфигурации и правил находятся в тех же относительных подкаталогах. Войдите в файл snort.conf в подкаталоге etc установки Snort. Измените и отредактируйте его, как предложено в разделе о UNIX-версии. Затем перейдите в файлы правил и произведите изменения там. После этого все будет готово к запуску Snort. Обратитесь к разделу "Запуск Snort" для UNIX, чтобы получить дополнительную информацию о применении Snort для Windows, так как все команды такие же. Дополнительные настройки и рекомендации по размещению - те же, что и для исходной UNIX-версии.

Уголок кодировщиков Флэми Теха

Написание индивидуальных правил Snort

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

  • отслеживания входящего и исходящего доступа для определенных серверов;
  • поиска определенных типов или имен файлов, специфичных для вашей организации;
  • наблюдения за определенными типами трафика, чужеродными для вашей сети;

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

Если нужно, чтобы Snort обнаруживал некое особое поведение, которое в вашей сети будет считаться подозрительным, можно быстро закодировать правило и тут же протестировать это поведение. Правила Snort по сути представляют собой одиночные текстовые строки, начинающиеся с действия (как правило, alert), за которым следует несколько аргументов. В новейшей версии (2.0 и выше) можно добавить несколько строк, просто помещая \ (обратную косую черту) в конце каждой строки, кроме последней. В более сложных случаях можно также вызывать другие программы, используя инструкцию включения.
Но в своей базовой форме правило Snort имеет две части: заголовок и параметры. Ниже представлен пример правила.

alert tcp any any 192.168.0.0/24 \ (content:"|00 05 A4 6F 2E|";msg: "Test Alert")

Заголовок является частью перед первой скобкой. Данная инструкция содержит действие (в нашем случае - alert), протокол, а также адреса и порты отправителя и получателя. Действие будет выполняться, если заданное правилом условие истинно. В данном случае будет порождаться сигнал тревоги (alert). Другими вариантами действий служат Log, Pass, Activate и Dynamic.

LogПросто протоколирует пакеты
PassИгнорирует пакет. Это подразумеваемое действие для пакетов, не соответствующих правилу.
ActivateСигнал тревоги, затем активация динамического правила.
DynamicОстается пассивным, пока не активируется динамическим правилом, затем действует как log.
Протоколами могут быть tcp, udp, icmp или ip, что означает любой IP-протокол. (В будущем могут поддерживаться протоколы не на основе IP, такие как IPX). Исходный и целевой порты самоочевидны. Исходный адрес идет первым и задается в стандартной нотации с косой чертой для IP-диапазона. Можно также перечислить несколько индивидуальных адресов и сетей, разделяя их запятой без пробелов и заключая в квадратные скобки, например: alert tcp any < [192.168.1.1,192.168.1.5,192.168.1.10] 80 \ (content: "|00 05 A4 6F 2E|";msg: "Test Alert";)

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

Второй частью правила Snort служат опции, задающие дополнительные детали выявляемого трафика. Можно искать по набору полей в заголовке TCP/IP (см. описания в лекции 6) или по полезной нагрузке пакета. За каждой опцией должны следовать кавычки и разыскиваемое значение.




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

msgПредоставляет текстовое описание сигнала тревоги
logtoЗаписывает пакет в заданный пользователем файл вместо стандартного выходного файла
ttlПроверяет значение поля TTL в заголовке IP
tosПроверяет значение поля TOS в заголовке IP
idСравнивает значение поля идентификатора фрагмента в заголовке IP с указанной величиной
ipoptionИщет поля опций IP с определенными кодами
fragbitsПроверяет биты фрагментации в заголовке IP
dsizeСравнивает размер полезной нагрузки пакета с указанным значением
flagsПроверяет флаги TCP на соответствие определенным значениям
seqСравнивает поле порядкового номера TCP с определенным значением
ackПроверяет поле подтверждения TCP на соответствие определенному значению
itypeПроверяет поле типа ICMP на соответствие определенному значению
icodeПроверяет поле кода ICMP на соответствие определенному значению
icmp_idПроверяет поле ECHO ID ICMP на соответствие определенному значению.
icmp_seqПроверяет порядковый номер ECHO ICMP на соответствие определенному значению
contentИщет определенный шаблон в полезной нагрузке пакета
content-listИщет определенный набор шаблонов в полезной нагрузке пакета
offsetМодификатор для опции содержимого. Задает смещение для начала сопоставления с образцом
depthМодификатор для опции содержимого. Устанавливает максимальную глубину поиска при сопоставлении с образцом
nocaseСравнивает предыдущую цепочку содержимого без учета регистра символов
sessionВывод информации прикладного уровня для данного сеанса
rpcСледит за сервисами RPC для выявления определенных вызовов приложений/процедур
respАктивный ответ. Закрывает соединение (например, разрывая его)
reactАктивный ответ. Отвечает запрограммированным поведением (например, блокированием определенных Web-сайтов)
referenceИдентификаторы ссылок на внешние атаки
sidИдентификатор правила Snort
revНомер версии правила
classtypeКлассификационный идентификатор правила
priorityИдентификатор уровня серьезности правила
uricontentСопоставление с образцом в части URI пакета
tagДополнительные действия по протоколированию для правил
ip_protoЗначение протокола в заголовке IP
sameipОпределяет, не равны ли исходный и целевой IP-адреса
statelessПрименимо независимо от состояния потока
regexСопоставление с образцом с применением метасимволов
byte_testЧисловое сравнение
distanceЗаставляет при относительном сопоставлении с образцом пропустить в пакете определенное число байт
byte_testЧисловое сопоставление с образцом
byte_jumpЧисловое сопоставление с образцом и корректировка смещения
Более подробную информацию о каждой из опций правил можно получить в оперативной справке. Ниже представлены несколько примеров применения этих опций для создания индивидуальных правил Snort

Пример 1 индивидуального правила

Предположим, имеется набор бухгалтерских серверов, доступ к которым может осуществляться только из внутренней сети. Можно написать правило Snort, реагирующее на трафик, идущий с любого не принадлежащего вашей сети IP-адреса и направленный на эти серверы. Пусть бухгалтерские серверы имеют IP-адреса 192.168.1.10, 192.168.1.11 и 192.168.1.12, а ваша внутренняя сеть - адреса 192.168.2.0/24. Тогда правило будет выглядеть примерно так:

alert tcp !192.168.1.0/24 any \ < [192.168.1.10,192.168.1.11,192.168.1.12] any \ (msg: "Попытка внешнего доступа к бухгалтерскому серверу";)

Знак операции ! (восклицательный знак) обозначает логическое отрицание. Смысл правила в том, чтобы выдать сигнал тревоги при обнаружении TCP-трафика, идущего не из сети 192.168.1.0/24 и направленного на указанные серверы. Не задается никаких опций, кроме msg - метки, появляющейся в журналах сигналов. Дело в том, что нас интересует любой трафик на любой порт. Будет отмечено любое обращение к бухгалтерским серверам, исходящее из внешнего мира, так как предполагается, что любой внешний трафик к этим серверам должен считаться вредоносным.

Пример 2 индивидуального правила

Опираясь на сценарий из примера 1, предположим, что следует разрешить некоторый внешний доступ к бухгалтерским серверам, но, тем не менее, гарантировать, что никто не скопирует определенные файлы. Предположим, что имеется файл с именем payroll.xls, который содержит все данные о зарплате (совершенно секретный файл, как внутри, так и вне организации). Можно написать правило, которое проследит за любым трафиком, внутренним или внешним, направленным на эти серверы и содержащим имя секретного файла. Это можно сделать с помощью опции content, осуществляющей поиск в реальном содержимом пакетов. Правило будет выглядеть примерно так:

alert tcp ![192.168.1.10,192.168.1.11,192.168.1.12] any < [192.168.1.10,192.168.1.11,192.168.1.12] any (content: "payroll.xls";msg: "Попытка доступа к файлу зарплат")

Отметим, что знак операции ! снова означает, что нас интересует трафик, направленный на бухгалтерские серверы из любого места, кроме этих серверов. Тем самым устраняется сигнализация о межсерверном трафике. Отметим также, что символ \ позволяет писать многострочные правила, а опция content - осуществлять поиск текста payroll.xls в пакетах. В результате серверные машины могут иметь доступ в Интернет, но если этот конкретный файл будет когда-либо выгружаться с них, вы будете об этом оповещены.

С помощью других опций можно писать правила для выявления трафика практически любого вида. Если ваши правила могут представлять интерес для других организаций, стоит послать их разработчикам Snort для вставки в официальный набор распространяемых правил. Если вы решите это сделать, постарайтесь использовать все средства документирования, такие как msg, sid, rev, classtype и priority. Также тщательно протестируйте свои правила, чтобы гарантировать, что они действительно охватывают все виды активности, которую вы пытаетесь поймать, и не дают ложных срабатываний.

Содержание раздела