Приоткрывая завесу
Интерпретация спецификаций протоколов TCP/IP
Определенные трудности, свойственные интерпретации спецификаций протоколов TCP/IP, предоставляют разнообразные возможности идентификации. Для идентификации удаленной операционной системы может быть использовано все, что угодно, начиная от начального порядкового номера пакета TCP и заканчивая опциями обработки символов. Подобная уникальность реализации операционных систем (в базе данных утилиты nmap содержится описание более 300 характерных признаков операционных систем) является источником некоторых из наиболее критичных и сложных проблем разработки систем обнаружения вторжения. Попытка декодирования потока данных, направляемого в адрес какого-либо хоста, без глубокого знания особенностей внутренней работы его стека протокола является чрезвычайно сложным занятием.
Несколько лет назад была написана статья, посвященная обсуждению многих проблем развития сетевых систем обнаружения вторжения. Важно, что рассмотренные в 1998 году Томасом Птасеком (Thomas Ptacek) и Тимоти Невшамом (Timothy Newsham) в статье «Вставка, уклонение и отказ в обслуживании: ускользание от обнаружения вторжения в сеть» (Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection), http://secinf.net/info/ids/idspaper/idspaper.html, атаки принадлежат широкому диапазону: от вставки нужных злоумышленнику данных в передаваемый поток данных до уклонения от обнаружения. Вставка и уклонение составляют основу противодействия проверке на соответствие сигнатур.
Вставка – это способ, который создает ситуацию, когда система обнаружения вторжения примет некоторую информацию, предполагая, что точно такие же данные получит и атакуемый хост. Но если система обнаружения вторжения не интерпретирует сетевой поток точно таким же образом, как это делает атакуемый хост, то у нее сложится неверное представление о передаваемых данных и она не сможет предупредить об атаке. Просто сигнатура из базы данных сигнатур системы обнаружения вторжения будет не соответствовать получаемым из сетевого потока данным. Рассматривая пример со строкой символов «CODE-RED» в HTTP-запросе, возможен следующий случай. К системе обнаружения вторжения будут поступать данные со строкой «CODE-NOT-RED», что не является достаточным, чтобы чувствовать себя и защищаемую сеть в безопасности. А атакуемый хост-адресат на самом деле получит данные со строкой символов «CODE-RED» из-за того, что пакет со строкой символов «NOT» был забракован хостом из-за его несоответствия, по мнению хоста, стандартам.
Уклонение – это способ, в некотором смысле обратный способу вставки. Ему соответствует ситуация, когда атакуемый хост принимает данные, проигнорированные системой обнаружения вторжения. Так, например, в результате атаки система обнаружения вторжения может получить строку символов «CODE», в то время как атакованный хост получит строку «CODE-RED». Подобные атаки могут осуществляться различными способами. В любое время TCP/IP-связь может быть завершена любой из участвующих в ней сторон. Если система обнаружения вторжением неправильно проинтерпретировала посланные злоумышленником пакеты RST или FIN, которые не были восприняты атакованным хостом (например, если система обнаружения вторжением неправильно контролировала порядковые номера), то злоумышленник сможет безнаказанно продолжить сеанс связи.
Типичным случаем является отказ в обслуживании системы обнаружения вторжения. Возможности нарушения работы датчика вполне очевидны. Системные ресурсы конечны. Системе доступно столько страниц памяти, сколько всего может быть выделено, возможности центрального процессора ограничены, и даже сетевые платы не способны поддерживать необходимую производительность, если она превышает их технические возможности. Поскольку компьютер является системой очередей, то неизбежно наступит момент, когда некоторые из них переполнятся и данные будут удалены из очереди быстрее, чем их проанализируют. Присущие этому проблемы разнообразны. Они могут изменяться от микропроблем, когда приходится сталкиваться с истощением относительно немногих сетевых буферов ввода-вывода, до глобальных проблем, подобно низкой производительности работы дисковых ресурсов. Управление системными ресурсами является сложной задачей, которая еще больше усложняется в результате необходимости контролировать неизвестное количество потоков передачи сетевых данных и ограниченного представления о фактическом состоянии внутреннего стека TCP/IP каждого хоста.
Опции протокола IP
Результаты исследования заголовка протокола IP говорят о том, что в нем есть множество полей, которые явно указывают на их уязвимость при использовании, с некоторыми методическими изменениями, способов вставки или уклонения. К изменению значений полей заголовка пакета IP следует подходить с большой осторожностью. После произведенных изменений трафик должен остаться корректным, поскольку он может быть маршрутизирован через Интернет. Модификация размера пакета может привести к тому, что для системы обнаружения вторжения станет трудно понять, где на самом деле заканчиваются его данные (в этом состоит способ уклонения). Точно так же можно заняться экспериментами с контрольной суммой. Если есть возможность вставлять в поток передаваемых данных неверные пакеты, то система обнаружения вторжения может воспринять их как правильные (если только она не будет вручную вычислять контрольную сумму для каждого пакета), в то время как атакованная система – нет (в этом состоит способ вставки).
Атаки на время существования пересылаемого пакета
В типичной сетевой конфигурации систему обнаружения вторжения наиболее часто можно внести в периметр сети. В этом случае она хорошо вписывается в систему обеспечения безопасности сети. Это позволяет ей контролировать всю связь через Интернет. К сожалению, если у злоумышленника есть возможность выполнить трассировку маршрута (выполнить утилиту traceroute) или систематически уменьшать счетчик времени существования пересылаемого пакета и определить точное число необходимых для достижения адресуемого хоста «прыжков», то он сможет послать несколько пакетов с заведомо недостаточным значением счетчика TTL. В результате в сети появятся пакеты с небольшим значением счетчика TTL, которые никогда не смогут достигнуть атакуемой системы. Но при этом система обнаружения вторжения воспримет их как часть передающего в сети потока данных. Схематично эта ситуация представлена на рис. 16.1. К счастью, администраторы могут противодействовать этому нападению, размещая и настраивая системы обнаружения вторжения в том же самом сетевом сегменте, что и хосты, которые они желают контролировать.
Рис. 16.1. Атака на время существования пересылаемого пакета
Фрагментация IP
Повторная сборка фрагментированных пакетов IP (IP fragmentation reassembly) составляет основу ряда атак. Сетевая система обнаружения вторжения не сможет проверить проходящие через нее пакеты на соответствие их содержимого сигнатурам из базы данных сигнатур, если она повторно не собирает фрагментированные IP-пакеты тем же способом, что и целевой хост. При обычных сетевых операциях фрагментированные IP-пакеты будут, как правило, приниматься адресатом в том же порядке, в котором они и были посланы. Однако так бывает не всегда. В протоколе IP предусмотрена трудно анализируемая передача пакетов в нестандартном порядке и возможность повторной сборки перекрывающихся фрагментов. Процесс сборки фрагментов IP-пакетов может также оказаться сложным из-за необходимости сохранять фрагменты в памяти до тех пор, пока не будет получен последний фрагмент передаваемых данных. Так делается для того, чтобы завершить сборку пакета. При этом возможен отказ в обслуживании: передача большого количества фрагментов может потребовать выделения внутренних буферов или структур. В результате это может привести к пропуску системой обнаружения вторжения пакетов или даже ее аварийному завершению.
Можно и дальше углубляться в рассматриваемую проблему, реализуя в системе обнаружения вторжения сложный алгоритм «сборки мусора» (процесс утилизации памяти, освобождаемой в процессе работы программы или системы). Контролируя передаваемые по линии связи данные, системе обнаружения вторжения, вероятно, придется учитывать сеансы нескольких тысяч хостов, тогда как каждый хост обеспокоен только своим собственным трафиком. Установленная на хосте система может лояльно относиться к временным задержкам при получении фрагментов данных, в то время как система обнаружения вторжения должна гораздо строже относиться к истечению времени ожидания, для того чтобы обеспечить управление экспоненциально большими системами. Если злоумышленник атакует, посылая три фрагмента данных без задержки и последний фрагмент с задержкой, и если в используемой сетевой системе обнаружения не реализованы аналогичные процессы управления фрагментированными порциями данных (что-то подсказывает автору, что это сделать почти невозможно), то в результате нельзя будет восстановить последовательное представление данных, передаваемых по протоколу IP. А значит, нельзя будет получить правильный результат проверки характерных признаков атаки сигнатуре из базы данных сигнатур системы обнаружения вторжения.
Выполненный Птасеком (Ptacek) и Невшамом (Newsham) тест на фрагментацию TestsTests показал, что во время тестирования ни одна из проверяемых систем обнаружения вторжения не смогла должным образом разрешить проблемы фрагментации IP-пакетов. Первые два теста испытания были посвящены тестированию обработки внутреннего порядка фрагментированных данных, содержащихся в пересылаемых пакетах по 8 и 24 байта. В последующих тестах участвовали восьмибайтовые фрагменты, которые пересылались в различном порядке. В серии фрагментов один из них пересылался или вне очереди (уклонение), или дважды (вставка), или все фрагменты пересылались в произвольном порядке с посылкой одного из них дважды (комбинация), или в последовательности фрагментов последний из них пересылался как первый (уклонение), или предыдущие фрагменты перекрывались с последующими (уклонение). Потрясающе, но ни одна из четырех программ (RealSecure, NetRanger, SessionWall и NFR) не смогла распознать какую-либо из атак фрагментации.
В настоящее время большинство сетевых систем обнаружения вторжения обновили свои модули сборки фрагментированных частей пакета. Теперь системы обнаружения вторжения с некоторой вероятностью успеха способны восстановить поток данных.
Заголовок TCP
В заголовке TCP содержится ряд полей, которые могут быть использованы для организации атак. Поэтому если система обнаружения вторжения проверяет не все, а только часть полей из заголовка TCP, то у злоумышленника появляются дополнительные возможности организации атак вставки и уклонения. Рассмотрим некоторые из полей заголовка TCP-пакета. Поле CODE определяет тип сообщения, посылаемого для подключения. Если кто-либо в этом поле пошлет недопустимую последовательность символов или пакет с пропущенным флагом ACK, то вполне возможно, что адресат отклонит такой пакет, а система обнаружения вторжения – нет (возможна вставка). Сегменты, отмеченные флажком SYN (запрос начала сеанса), также могут содержать данные. Из-за относительно нечастого использования этого флажка для пересылки данных система обнаружения вторжения может проигнорировать его содержимое (уклонение). Можно исследовать многие из полей заголовка TCP и найти какую-нибудь возможность, когда передаваемые данные будут приняты адресатом, но будут пропущены системой обнаружения вторжения и наоборот. Другим показательным примером является поле контрольной суммы «Checksum». Если система обнаружения не может самостоятельно вычислять контрольную сумму для каждого сегмента TCP, то в сеансе можно смешивать правильные сегменты с сегментами с неверной контрольной суммой в надежде, что система обнаружения вторжения не будет проверять все сегменты (производитель может предполагать, что в этом случае накладные издержки слишком велики).
Недавно в протокол TCP было добавлено несколько новых опций. Эти опции описаны в документе RFC 1323 «Добавление новых возможностей в протокол TCP для улучшения его производительности (TCP Extensions for High Performance)», который был подготовлен В. Джекобсоном (V. Jacobson), Р. Браденом (R. Braden) и Д. Борманом (D. Borman). Помимо прочего, в документе описан предназначенный для защиты от быстрого исчерпания порядковых номеров механизм PAWS (Protection Against Wrapped Sequence) и опции для пакетов с отсутствующим флажком SYN, которые содержат новые флажки опций. Это означает, что если система обнаружения вторжения не знает, каким образом система-адресат обрабатывает пакеты с пропущенным флажком SYN, содержащие дополнительные опции, то существуют многочисленные дополнительные возможности для вставки и уклонения. Адресуемая система может отклонять эту более новую форму протокола TCP, в то время как система обнаружения вторжения – нет. Возможна также и обратная ситуация. PAWS является механизмом, при помощи которого система связывает временной штамп с каждым TCP-сегментом. Если хост-адресат получит сегмент с временным штампом, значение которого меньше внутренней пороговой величины, то он будет пропущен. Снова и снова можно увидеть сложности, присущие поступающим по линии связи данным по протоколу TCP. Это объясняется простой недостаточностью передаваемой по линии связи информации состояния для получения точного представления о возможном поведении хоста-адресата.
Синхронизация TCP
Известен ряд атак на чисто IP-соединения. Когда начинают анализировать уровни, расположенные над IP-протоколом, то присущая им дополнительная сложность и предъявляемые к ним требования способствуют возникновению новых проблем синхронизации. В настоящее время в большинстве систем обнаружения вторжения реализовано исследование «всех состояний» TCP.
Для исследования «всех состояний» необходим ряд конструкторских решений идентификации потока соединений во время исследования передаваемых по протоколу TCP данных. Система обнаружения вторжения должна обладать всеми возможностями для реконструирования потока данных точно таким же способом, как и хост-адресат. Если системе обнаружения вторжения не предоставить подобной возможности, то злоумышленник сможет избежать обнаружения. Информация о состоянии TCP-сессии хранится в структуре, которая известна под названием блок управления TCP (TCB – TCP Control Block). Для каждой сессии, контролируемой сетевой системой обнаружения вторжения, нужен свой блок TCB. В нем хранится разнообразная информация, например сведения об отправителе и получателе данных, порядковые номера и текущее состояние. Птасек (Ptacek) и Невшам (Newsham) указали на три возможных направления атаки на систему обнаружения вторжения:
• создание блока TCB;
• повторная сборка потока;
• искажение блока TCB.
Для идентификации новых сессий, контроля открытых соединений и определения соответствующих моментов прекращения контроля системе обнаружения вторжения следовало бы принять участие в каждом из этих трех процессов.
Создание блока TCB
Осознание того, каким образом можно начать контролировать соединение, приводит к пониманию некоторых интересных проблем. Следует ли сетевой системе обнаружения вторжения в момент построения блока TCB контролировать установку соединения по протоколу TCP? Может ли сетевая система обнаружения вторжения эффективно создать блок TCB для соединения, на которое она не получила пакет с флажком SYN (это касается соединений, которые были активны еще до начала контроля)?
Любому способу создания блока TCB сопутствуют свои уникальные проблемы. Желательно, чтобы у системы обнаружения вторжения была возможность контролировать соединения, для которых трехэтапное установление связи (3WH – Three-Way Handshake) было выполнено еще до начала контроля. Если не предоставить такой возможности системе обнаружения вторжения, то злоумышленник сможет установить соединение и сколь угодно долго выжидать благоприятного для него момента, например когда система обнаружения вторжения будет перезагружена и не сможет проследить за уже установленным соединением.
Для создания блока TCB можно использовать только пакеты с установленным флажком ACK. Этот способ известен как синхронизация на данных (synching on data). Он характеризуется дополнительными преимуществами идентификации сессий, для которых не был проанализирован трехэтапный процесс установления связи. Реализация рассматриваемого случая неминуемо столкнется с рядом препятствий. Одно из них состоит в том, что система обнаружения вторжения, даже проанализировав большой объем данных, не сможет различить пакеты, которые передаются вне рамок установленных соединений. Другой проблемой является то, что синхронизация на данных диктует необходимость проверки порядковых номеров. У злоумышленника может появиться возможность десинхронизации системы обнаружения вторжения путем фальсификации ошибочных данных перед попыткой атаки.
Альтернативный способ создания блока TCB основан на необходимости нахождения в потоке данных пакетов c комбинацией флажков SYN + ACK. Из-за того что у злоумышленника практически нет возможности заставить адресуемую сеть выслать ему пакет с установленным флажком ACK, система обнаружения вторжения может определить, какой хост является клиентом, а какой – сервером. Но система обнаружения вторжения может быть обманута при отслеживании многих соединений несуществующих хостов (атаки типа отказа в обслуживании DoS). Кроме того, пакеты с установленными флажками SYN + ACK могут быть легко фальсифицированы. Для этого совсем не обязательно наличие заключительного пакета с установленным флажком ACK от хоста-отправителя. Перед тем как положиться на этот способ создания блока TCB, следует предпринять дополнительные меры предосторожности.
Обычно лучшей линией поведения является комбинация названных способов. При этом должны быть учтены сильные стороны каждого из описанных способов и одновременно предпринята попытка устранить их слабые места.
Повторная сборка потока
Ряд проблем повторной сборки потока данных, передаваемого по протоколу TCP, сильно напоминает проблемы сборки фрагментированных данных протокола IP. К получателю сегменты TCP могут поступать в произвольном порядке, который может не совпадать с последовательностью передачи сегментов. Сегменты могут перекрываться друг с другом, в потоке возможно появление избыточных сегментов. Для гарантии отсутствия десинхронизации в передаваемых данных система обнаружения вторжения при контроле порядковых номеров каждого соединения должна предпринять специальные меры предосторожности (при перегрузке сетевого оборудования это трудно гарантировать).
Если не знать особенностей реализации стека протоколов TCP/IP в операционной системе хоста-адресата, то серьезную сложность представляет интерпретация его возможного поведения. В случае поступления избыточных TCP-сегментов некоторые хосты могут сохранять первый поступивший сегмент, в то время как другие могут отказаться от него, предпочитая иметь дело с сегментом, поступившим последним.
Если система обнаружения вторжения надеется поддерживать последовательное представление оцениваемого трафика, то она должна постоянно отслеживать для каждого соединения сообщаемые размеры окон. Для обеспечения максимальной производительности часто это значение подстраивается во время сессии. Если система обнаружения вторжения не сможет отслеживать размер TCP-окна, то это может привести к возникновению уязвимости и легко реализуемой злоумышленником атаки вставки. Злоумышленник просто посылает адресату данные с избыточным размером окна, а хост-получатель игнорирует получаемые пакеты, если размер окна не соответствует его ожиданиям.
Искажение блока TCB
Для исключения успешной атаки типа отказа в обслуживании (атаки типа DoS) в системе обнаружения вторжения должна быть реализована правильная «сборка мусора». При этом возможны некоторые проблемы. Соединение может быть завершено в любое время, как с уведомлением, так и без него. Некоторые системы могут не требовать присылки им сегментов RST в правильной последовательности. Протокол управляющих сообщений в сети Интернет (ICMP) может даже завершить соединение. Большинство хостов может считать сообщение протокола ICMP о недостижимости адресата сигналом для завершения сессии. Если система обнаружения вторжения не знает эту особенность, то она может десинхронизироваться и не сможет отслеживать новое соединение с подобными параметрами.
Почти не подвергается сомнению необходимость некоторого тайм-аута для любого установленного соединения. Он позволяет предотвратить некоторые логические ошибки, в конечном счете вызванные расходом памяти. Кроме того, отсутствие тайм-аута может привести к успешной реализации уже рассмотренных атак. Большинство хостов не используют для всех соединений сообщений, подтверждающих их активность. Это ставит систему обнаружения вторжения в невыгодное положение, когда злоумышленник может позволить себе выжидать столько, сколько ему потребуется, возможно, провоцируя при этом систему обнаружения вторжения на более активную «сборку мусора» (путем установления большого числа новых соединений). В случае успеха у злоумышленника появится возможность скрытно осуществить любую атаку, никак себя не обнаруживая.