Инструментарий и ловушки
Компоненты сигнатуры
Ниже приводится пример сигнатур, описанных на языке описания сигнатур, который используется системой обнаружения вторжения Snort:
alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:“SCAN Proxy
attempt”;flags:S; classtype:attempted-recon; sid:620;
rev:1;)
alert ip $EXTERNAL_NET any -> $HOME_NET :1023 (msg:“SHELLCODE
linux shellcode”; content:“|90 90 90 e8 c0 ff ff ff|/bin
/sh”; classtype:attempted-admin; sid:652; rev:2;)
alert tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg:“FTP CWD ...”;
flags:A+; content:“CWD ...”; classtype:bad-unknown; sid:1229
; rev:1;)
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:“ICMP
traceroute ipopts”; ipopts: rr; itype: 0; classtype:
attempted-recon; sid:475; rev:1;)
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:“WEBATTACKS
chgrp command attempt”; flags:A+; content:“/usr/bin/
chgrp”;nocase; sid:1337; rev:1; classtype:web-application
–attack;)Язык описания сигнатур системы Snort является описательным языком, используемым для создания любых правил. Чтобы не запутаться в сложных деталях написания собственных сигнатур, давайте пробежимся по примеру слева направо и попытаемся его понять. Можно увидеть, что в примере определяются различные виды предупреждений об опасности. Предупреждения группируются по протоколам с указанием особенностей производимых действий. Например, для ограничения возможных действий в правилах указывается IP-адрес и номера портов. IP-адрес задается переменными $EXTERNAL_NET и $HOME_NET, обычно определяемыми с использованием стиля бесклассовой междоменной маршрутизации CIDR как 10.10.10.0/24. Стиль CIDR является описанием надсети единственной строкой в таблице маршрутизации с использованием укороченной маски подсети. Надсеть включает в себя несколько сетей одного класса. Ключевое слово msg определяет сообщение, которое будет отправлено при активизации правила после нахождения заданной сигнатуры. Параметр flags определяет, какие из установленных флажков режимов работы протокола TCP используются для анализа потока данных. Ключевое слово Ipopts задает анализируемые параметры пакетов протокола IP. А слово content используется для определения уникальной последовательности данных, содержащейся в пакете. Значение ключевого слова content задается в шестнадцатеричном формате между двумя вертикальными полосами, в то время как значения остальных слов – в формате ASCII. Первое правило отслеживает любую попытку подключения к внутреннему хосту извне по номеру порта 8080 протокола TCP. Этот порт часто используется проксимодулями доступа к сети Интернет. Второе правило ищет в каждом IP-пакете часто используемую последовательность команд командного процессора shell, передаваемую по номеру порта, который меньше, чем 1024. (Запись :1023 является сокращенной формой записи номеров портов между 0 и 1023 включительно.) Третье правило задает проверку наличия команды «CWD…», которая передается через порт 21 протокола TCP. Порт 21 по умолчанию используется протоколом передачи файлов FTP. Четвертое правило контролирует пакеты IP с установленной опцией маршрутизации записи rr (Record Route). Последнее правило контролирует прохождение строки /usr/bln/chgrp через порт 80 протокола передачи гипертекстовых файлов HTTP.
В самом общем смысле вычислительные системы можно определить как машину с конечным числом состояний. Буквально это означает, что существует предопределенное число специфических состояний машины, в которые она может перейти. Препятствующее работе систем обнаружения вторжений ограничение состоит в том, что они встретят во всеоружии известную им атаку, и только один раз (другими словами, эффективность их применения зависит от размера базы данных сигнатур, с которой работает система). Объясняется это следующим. Во-первых, как можно предвидеть внутренние характеристики вторжения, если оно еще не произошло? Нельзя предупредить о нападениях, которые еще никто никогда прежде не видел. Во-вторых, можно только оттачивать механизмы обнаружения вторжений на уже свершившихся атаках, поскольку в будущем детали этих нападений могут проясниться. Можно создать сигнатуру прошлого нападения после его свершения, но нет никакой гарантии, что атака, проведенная в прошлом, когда-либо встретится еще раз. В-третьих, системы обнаружения вторжения могут оказаться неспособными распознать новое нападение, не отличив его от присутствующего в любой сети фонового белого шума. Слишком интенсивное использование сети или большое количество ошибочных результатов ее контроля может привести к блокировке правил оповещения об атаке. И наконец, системы обнаружения вторжений могут быть обмануты даже небольшой модификацией известной атаки. Это является следствием или ограниченности принципа поиска соответствий сигнатуре характерных признаков атаки, или, что более существенно, недостатками в работе средств анализа пакета. И то, и другое может исключить всякую возможность обнаружения атаки.
Пытаясь избежать обнаружения, злоумышленник преследует двойную цель: полностью уклониться от обнаружения или, используя специальные методы и способы, существенно увеличить нагрузку на систему обнаружения вторжений. В целом чем больше методов широкомасштабно использует злоумышленник, тем больше производителей вынуждены оснащать свои системы обнаружения вторжений все более сложными средствами анализа пакетов и поиска соответствия характерных признаков атак с сигнатурами из базы данных. Несомненно, что сложные системы обладают меньшей производительностью и предоставляют злоумышленнику больше возможностей для уклонения от обнаружения. Парадокс состоит в том, что чем сложнее система, тем она уязвимее! Некоторые специалисты считают, что отношение числа ошибок к числу машинных команд может достигать соотношения 1: 1000. Даже консерваторы говорят, что это отношение может принимать значение 1: 10000. Принимая это во внимание, можно полагать, что рост сложности систем ведет к повышению уровня ее ненадежности.
Ложные срабатывания и упущения
Для того чтобы стать эффективной, система обнаружения вторжения должна своевременно усваивать доступную ей информацию и сообщать о ней. Ложные срабатывания (false positive) – это реакция на событие, которое на самом деле не произошло и которое может быть столь же безопасным, как и загрузка базы данных сигнатур по каналу связи или своеобразный сетевой трафик при запуске сетевой игры. Загрузка базы данных сигнатур системы обнаружения вторжения может стать источником любого из описанных сигналов тревоги. Это хотя и раздражает, но обычно не имеет больших последствий. Подобное легко может произойти и обычно является результатом неверной настройки конфигурации сетевой системы обнаружения вторжений (NIDS) в начале ее эксплуатации или при ее обкатке. Большую опасность представляют так называемые упущения (false negatives). Упущения – это отказ в работе системы обнаружения вторжения, заключающийся в пропуске атаки. Упущение может произойти в результате отказа отдельных функциональных модулей системы. Упущение как ошибочный пропуск атаки является результатом модификации злоумышленником ее кода, для того чтобы перехитрить средства обнаружения атаки системой обнаружения вторжения. Упущение существенно влияет на эффективность работы системы обнаружения вторжения. Если читатель постоянно контролирует работу системы обнаружения вторжения, то вскоре он привыкнет к ее типичному поведению. В случае недопустимого большого числа случаев ложного срабатывания системы можно уменьшить число анализируемых признаков, совокупность которых приводит к ложному срабатыванию и охоте за диким гусем, и признать факт существования многочисленных повседневных событий. В конечном итоге управлять всеми возможностями системы обнаружения вторжения можно, приняв единственное основополагающее решение: принимать или не принимать меры по выявленной ситуации.