Защита от хакеров корпоративных сетей
Шрифт:
Сигнатура атаки содержит несколько компонентов, которые однозначно ее идентифицируют. Идеальная сигнатура – это такая сигнатура, которая, с одной стороны, полностью определяет атаку, а с другой – настолько проста, насколько это возможно (большие сложные сигнатуры могут стать причиной серьезных накладных расходов на их обработку). Поскольку существуют различные типы атак, то должны быть различные типы сигнатур. Некоторые сигнатуры можно получить, изучая уникальные характеристики отдельных режимов работы протокола IP. Возможно, что таким образом можно будет идентифицировать сканирование порта утилитой nmap. Другие сигнатуры получают в результате анализа программного кода атаки.
Большинство сигнатур было создано путем многократного выполнения известного программного кода атаки с контролем сопутствующих ему данных в сети и поиском в них уникальной последовательности двоичных кодов, повторяющихся при каждом выполнении. Этот способ создания сигнатур хорошо зарекомендовал себя в случае последовательных попыток известных типов атак на сеть. Автору приходилось иметь дело с некачественными сигнатурами. Некоторые из них были настолько примитивны, что оказались бесполезными против агрессивного злоумышленника, быстро просматривающего несколько Web-сайтов. Тем не менее помните, что идея заключается в уникальной идентификации
Инструментарий и ловушки
Компоненты сигнатуры
Ниже приводится пример сигнатур, описанных на языке описания сигнатур, который используется системой обнаружения вторжения 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). Упущения – это отказ в работе системы обнаружения вторжения, заключающийся в пропуске атаки. Упущение может произойти в результате отказа отдельных функциональных модулей системы. Упущение как ошибочный пропуск атаки является результатом модификации злоумышленником ее кода, для того чтобы перехитрить средства обнаружения атаки системой обнаружения вторжения. Упущение существенно влияет на эффективность работы системы обнаружения вторжения. Если читатель постоянно контролирует работу системы обнаружения вторжения, то вскоре он привыкнет к ее типичному поведению. В случае недопустимого большого числа случаев ложного срабатывания системы можно уменьшить число анализируемых признаков, совокупность которых приводит к ложному срабатыванию и охоте за диким гусем, и признать факт существования многочисленных повседневных событий. В конечном итоге управлять всеми возможностями системы обнаружения вторжения можно, приняв единственное основополагающее решение: принимать или не принимать меры по выявленной ситуации.
Оповещение о лавинообразном процессе
Эта проблема имеет смысл из-за выдачи системами обнаружения вторжения настолько частых повторных отчетов, что это напоминает сценарий лавинообразного процесса. Шквал отчетов является процессом придания системе обнаружения вторжения новых свойств, вызванных ее перегрузкой и потопом предупреждений. Для злоумышленника подобная атака сулит ряд преимуществ. Если огневая мощь злоумышленника достаточна для превышения пропускной способности сети, то вполне возможна атака типа «отказ в обслуживании» (DoS).
Для большинства датчиков систем обнаружения вторжения критичным является условие, получившее название парадокса первого (или многократного) соответствия. Согласно ему датчик должен принять важное решение: подавать сигнал тревоги при первом же найденном соответствии характерных признаков атаки сигнатуре из базы данных сигнатур или предпринять попытку поиска дальнейших соответствий. Проблема заключается в том, что сначала злоумышленник может определить низкоприоритетную или благоприятную для него сигнатуру, записанную во многие базы данных сигнатур системы обнаружения вторжения, а затем попытаться воспроизвести ее в ходе более разрушительной атаки. В результате при настройке датчика на выдачу сигнала тревоги при первом же найденном соответствии характерных признаков атаки сигнатуре из базы данных может получиться так, что будет обнаружена менее опасная атака и пропущено действительно опасное вторжение. С другой стороны, система обнаружения вторжения при поиске многократных соответствий становится уязвимой к выдаче шкалы предупреждений об атаках. Кроме того, атакующий может сформировать такой трафик в сети, который будет содержать весь спектр сигнатур, содержащихся в базе данных сигнатур системы обнаружения вторжения, который приведет к разрушению ее датчика.
Кроме желательного для злоумышленника отказа датчика системы обнаружения вторжения, он может получить дополнительную выгоду в результате генерации чрезмерного количества предупреждений (сгенерировать более 10 000 предупреждений для него особого труда не составит), которые администратор должен будет как-то осмыслить. Выбранный для атаки компьютер может полностью потеряться среди выводимых на монитор сообщений, гудков и красных флажков, которые могут поставить в тупик кого угодно. Администратор может просто запутаться, воспринимая огромное количество различных звуковых и графических сообщений об атаках. В лучшем случае попытка идентификации реального вторжения в таких условиях будет сильно затруднена. Также не стоит забывать о психологическом воздействии на оператора, которое часто воспринимается им как тотальная атака всего Интернета на оборудование защищаемой сети. Насколько эффективной окажется система обнаружения вторжением, если подобные атаки станут обычным делом?
Уклонение на уровне пакетов
На сетевые системы обнаружения вторжения возложена малопонятная задача выявления смысла из буквально миллионов ежесекундно поступающих кусочков информации при обеспечении приемлемого времени реакции (обычно желательно обеспечить время реакции настолько близко к реальному масштабу времени, насколько это возможно). Для устранения возможных ошибок анализа данных сетевая система обнаружения вторжения работает на различных уровнях стека сетевых протоколов. При его исследовании в первую очередь следует обратить внимание на сетевой и транспортный уровни, где у злоумышленника большие возможности запутать, уклониться или вывести из строя датчик системы обнаружения вторжения. Если перед злоумышленником стоит задача найти способ уклонения от обнаружения, то идеальной точкой начала исследования являются именно эти два уровня, поскольку все прочие возможности идентификации атаки системой обнаружения вторжения, впрочем, как и атакуемого хоста, зависят от возможности правильной интерпретации сетевого трафика на этих двух уровнях.
К сожалению, в силу технических особенностей протоколов IP и TCP, у лиц, ответственных за защиту данных, нет возможности четко контролировать их работу. Работу этих протоколов в динамической среде описывают стандарты, в которых оговорены два утверждения: «НЕ ПЛОХО БЫ» и «МОЖНО». Утверждение «ДОЛЖЕН» зарезервировано только для наиболее важных запросов. Подобное определение стандарта протоколов ведет ко многим осложнениям при попытке интерпретировать сетевые средства связи. Таким образом, у злоумышленника сохраняется возможность десинхронизации состояний системы обнаружения вторжения. Из-за этого она не сможет правильно скомпоновать сетевой трафик в единое целое тем же способом, что и атакуемый хост. Например, если сигнатура системы обнаружения вторжения задает поиск строки символов «CODE-RED» в любом HTTP-запросе, то атакующий может фрагментировать трафик таким образом, чтобы пакеты приходили к системе обнаружения вторжения в ином, чем для хоста получателя пакетов, порядке. Таким образом, злоумышленник может добраться до интересующего его хоста, в то время как система обнаружения вторжения не сможет правильно проинтерпретировать происходящие события.