...
...
...

низкоскоростные TCP- ориентированные DoS-атаки: землеройка против мышей и слонов

Некоторые читатели сетуют, что в «Сетевых Решениях» стало много бизнеса и железа, и мало «высокой науки» и «высоколобого хакерства». Вот вам, пожалуйста — и то, и другое в одном флаконе :)

вступление

В этой статье рассматриваются низкоскоростные DoS-атаки, которые в отличие от высокоскоростных (т.е. обычного заваливания сервисов непомерным количеством запросов) хуже обнаруживаются роутерами и IDS. Путем моделирования и экспериментов авторами статьи были подобраны шаблоны трафика пригодного для низкоскоростных DoS-атак, которые, используя уязвимость в механизме таймаутов ретрансмиссии TCP-стека, могут привести к существенному снижению эффективности работы стека. Так как такие атаки нарушают однородность протокола, то придется рассмотреть ограничения, накладываемые механизмом случайности таймаутов, которые могут расстроить DoS-атаку.

немного о DoS-атаках

DoS-атаки нацелены как на сети в целом, серверные кластеры, так и на конечные хосты, их задачей является максимальное потребление предоставляемых ресурсов с целью значительного ухудшения или прекращения предоставления сервиса нормальным пользователям. Обычно атакуемыми ресурсами являются: ширина канала, процессорное время серверов и роутеров и конкретные реализации протоколов. В качестве примеров можно привести SYN-атаку, нацеленную на переполнение стека TCP операционной системы; направленные ICMP-бродкасты (короткого русского слова не нашлось) — атакуемому отправляются подобные пакеты, ответы от него снижают пропускную способность сети; DNS флуд атаки, использующие определенную слабость протокола DNS и направленные на существенное увеличение трафика к атакуемому.
Общим фактором, необходимым для осуществления вышеописанных атак, является наличие большого количества компрометированных или добровольно участвующих хостов и грубое "заваливание" пакетами атакуемый узел. Именно "грубость" в реализации данных атак может свести на нет весь эффект в случае обнаружения больших объемов аномального трафика сетевыми мониторами.
В статье обсуждаются низкоскоростные DoS-атаки, которые автор называет "атаки землеройки", направленные на поглощение полосы пропускания канала, в то же время атакующий отправляют пакеты на атакуемый хост с небольшими интервалами, что затрудняет их обнаружение средствами IDS.

теория

Управление полосы пропускания в TCP осуществляется на 2-х временных шкалах. На малой временной шкале отметки времени прохождения пакетов по каналу связи до адресата и обратно (RTT), обычно от 10 до 100 миллисекунд, TCP-стек использует аддитивно-увеличительное мультипликативно-уменьшительное (в оригинале additive-increase multiplicative-decrease) управление (AIMD), передача каждого потока трафика на одинаковых скоростях через самое узкое место, т.н. бутылочное горлышко. Когда канал связи начинает "забиваться", возникает большое количество потерь, TCP-стек начинает работать по 2-й, большей временной шкале с отметками таймаутов повторной передачи пакетов (RTO, рекомендованное минимальное значение 1 секунда). Что бы избежать "забития" канала, поток трафика уменьшается до одного пакета и по прошествию времени RTO пакет пересылается заново. При последующих потерях, время RTO удваивается с каждым следующим таймаутом. В случае удачного получения пакета, TCP-стек начинает использовать AIMD-управление.
Для проведения низкоскоростной DoS-атаки мы возьмем потоки трафика в виде импульсов и рассмотрим периодические импульсные "землеройные" атаки, состоящие из коротких со специально подобранной длительностью пиков, повторяющихся с определенной, специально выбранной, частотой по медленной временной шкале. Рассмотрим первый поток TCP-трафика. Если общий трафик (DoS-атаки и обычный) в течение пика достаточен, чтобы произошли потери пакетов, то этот поток "отвалится" по тайм-ауту и будет произведена попытка отправить новый пакет по прошествии времени RTO. В случае если периодичность посылки DoS-трафика совпадает (даже примерно) с RTO нормального трафика, обычный трафик будет постоянно получать таймаут, как следствие, потери будут приближаться к 100% и пропускная способность приблизится к нулю. Кроме того, если период DoS-посылок примерно равен, но лежит вне диапазона RTO, то будет наблюдаться существенное (но не полное) снижение полосы пропускания. Как следствие, в основе "землеройных" атак лежат посылки пакетов с нулевой частотой (относительно шкалы RTO), что делает их труднообнаружимыми.
В упрощенной модели с разнотипными RTT и объединенными потоками, разделяющими "бутылочное горлышко" мы получим выражение для полосы пропускания, остающейся "атакованному" трафику, как функцию от временной шкалы трафика DoS и среднюю скорость трафика DoS-атаки. Кроме того, получим "оптимальные" образцы трафика DoS-атак (двухуровневая периодичная квадратная волна или, проще, двухуровневые импульсные пики), минимизирующие полосу пропускания, для указанного уровня TCP, атакуемого, включая сведение полосы пропускания к нулю.
Далее, мы будем использовать ns-2 моделирование для исследования эффективности проведенной атаки. На примерах будет показано, что даже для различных потоков трафика с различными RTT, различными размерами файлов, различными реализациями TCP (New Reno, SACK и т.д.), с различными схемами управления буфера (drop tail, RED и т.д.), уменьшение полосы пропускания происходит, но с разным ущербом для разных потоков трафика и разных сценариев. Причиной тому является тот факт, что после прихода первого пика DoS-трафика таймаут "дается" всем потокам трафика. Если RTO различных потоков трафика примерно одинаковы, то они синхронизируются с периодом DoS-трафика и входят в цикл аналогично одиночному потоку трафика, даже если их RTT различен. Однако, если RTT сильно отличается у потоков, эффект от атаки будет разным: трафик с малым RTT будет нести меньшие потери, чем с большим RTT, т.е. атака будет действовать как фильтр большого RTT трафика (режется большой RTT). Также мы покажем, что во всех случаях механизмы управлением канала (типа RED-PD) не смогут уменьшить полосу пропускания трафика атаки.
Мы провели ряд опытов — в сети Интернет и локальном окружении. Учитывая, что результатом должно быть уменьшение полосы пропускания почти до нуля, эксперименты подтвердили, что даже удаленный атакующий (через Интернет) смог существенно снизить пропускную способность. К примеру, в эксперименте с Интернетом со скоростью атаки 909 Кб/с и пиками через 100 мс, полоса пропускания атакующего снизилась с 9.8 Мб/с до 1.2 Мб/с.
И, наконец, мы исследовали возможность защиты от данного типа атак. Казалось бы, очевидным решением не использовать вообще механизм RTO или выбирать очень маленькие значения RTO, но мы пойдем другим путем :), т.к. механизм таймаутов требуется для нормальной работы канала связи под большой нагрузкой. Так вот, вместо этого мы рассмотрим некоторые технологии случайности выбора минимального RTO. Используя комбинации аналитического моделирования и опытов, мы покажем, как стратегии случайности могут разрушить и смягчить результаты атак. Кроме того, мы покажем примеры оптимальных DoS-атак, при которых случайность выбора RTO не играет никакой роли.
Итого: уязвимость TCP-стека к низкоскоростным атакам — не результат плохой разработки, т.к. TCP обязательно нужен механизм контроля потоков трафика как RTT, так и RTO для достижения максимальной производительности и гибкости в различных условиях. Следовательно, подобные атаки не могут быть предотвращены как класс, можно только смягчить ущерб от их действия, используя технику случайности выбора RTO. Задача разработки механизма обнаружения трафика DoS-атак — архинужная и архиважная :).

механизм таймаута TCP-стека

Здесь мы расскажем, как работает механизм таймаутов повторных передач (RTO). TCP Reno считает, что пакет потерян при следующих условиях: неполучении ACK или при получении 3-х дубликатов ACK. Если потеря пакета произошла и получено меньше 3-х дубликатов ACK, стек ждет окончания срока RTO, уменьшает количество пакетов в потоке до одного и отправляет его повторно.
Выбор значений таймаута лежит между 2-я пределами: если установлено слишком малое значение, тогда будут иметь место ложные повторные передачи из-за того, что пакеты будут считаться потерянными вследствие позднего принятия ACK. Аналогично, при установке большого времени, поток трафика будет ждать необоснованно долго разрешения прохода или повторной передачи в канале.
Allman и Paxson показали, что стек TCP приближается к максимальной пропускной способности при существовании нижней границы RTO в 1 секунду. Эксперимент показал, что все потоки трафика должны иметь минимальное значение RTT равное 1 секунде, только при таких условиях достигается максимальная производительность передачи.
Для выбора значения RTT отправитель TCP-пакета должен оперировать двумя переменными: SRTT (усредненное время прохождения пакетов по каналу связи до адресата и обратно, smoothed round-trip time) и RTTVAR (колебание времени прохождения пакетов по каналу связи до адресата и обратно, roundtrip time variation). Правила вычисления SRTT, RTTVAR и RTO следующие: пока измерение RTT не было сделано (т.е. не был отправлен ни один пакет), отправитель устанавливает RTO равным 3 секундам. Далее, когда сделано первое измерение (назовем его R) RTT, хост устанавливает SRTT = R1, RTTVAR = (R1)/2 и RTO = SRTT+max(G,4RTTVAR), где G — степень дискретности (системных) часов (обычно меньше 100 мсек). При вычислении последующего RTT (R) хост устанавливает

и

Где альфа равняется 1/8, бета 1/4.
Комбинируя эти два выражения, хост-отправитель устанавливает значение RTO, исходя из следующей формулы:


Рис. 1. Поведение таймера повторной передачи пакетов.

Объясним управление переменной RTO на графике таймера повторной передачи пакетов (рис. 1). Предположим, что пакет с последовательностью n отправлен в начале отсчета времени t=0 и таймер повторной передачи пакетов установлен в 1 сек в начале передачи. В случае потери пакета n и если адресатом принято менее 3-х одинаковых ACK, поток трафика "получает таймаут" по прошествию времени t=1 секунде. В этот момент отправитель входит в стадию экспоненциальной задержки: уменьшает поток трафика до одного пакета, удваивает значение RTO до 2-х секунд, передает пакет, на который не был получен ACK с последовательностью n и устанавливает новое значение для RTO (2 сек.).
В случае повторной потери пакета (не отображено на рис. 1), экспоненциальная задержка продолжается — отправитель ждет 2 секунды (пока истечет таймер). В момент времени t=3 секунды отправитель снова удваивает значение RTO до 4-х секунд и повторяет процесс.
Вариация, если пакет n удачно передан во второй раз: в момент времени t=1 секунде, как и показано на рис. 1, ACK пакета n прибывает к отправителю в момент времени t=1+RTT. Отправитель выходит из экспоненциальной задержки и начинает "медленный старт", удваивая количество отправляемых пакетов, т.е. отправляет пакеты n+1 и n+2 и устанавливает значение таймера повторной передачи в текущее значение RTO (2 сек). Если эти два пакета не потеряны, подтверждение их принятия пришло в момент времени t=1+2*RTT, рассчитываются переменные SRTT, RTTVAR и RTO по формулам, указанным выше. При условии, что minRTO > SRTT+max(G,4RTTVAR) значение RTO снова устанавливается в 1 сек. В приведенном сценарии поток отваливается по таймауту, но отклонения значений RTO происходит в пределах от minRTO до RTT для времени t>minRTO+2RTT.

начало и моделирование атаки


В этом разделе мы опишем, как атакующий может использовать уязвимость в механизме таймаута TCP-стека для проведения DoS-атаки. Далее приведем сценарий и смоделируем атаку. И, наконец, выведем функцию пропускной способности канала от параметров трафика DoS-атаки.

начало атаки

Показанный в предыдущем разделе механизм таймаутов, с одной стороны, обеспечивает устойчивый алгоритм управления "забития" канала, с другой стороны, предоставляет возможность проведения низкоскоростной атаки, который использует уязвимость динамики изменения таймеров повторной передачи (по малой временной шкале). В частности, атакующий может вызвать циклическое "отваливание" по таймауту потока трафика путем отправки мощных коротких импульсов трафика, имеющих длительность, сопоставимую с RTT шкалой и периодичностью более медленной шкалы RTO. Пропускная способность атакуемого снижается до нуля, в то же самое время средняя скорость атаки будет довольно низкой, что делает проблемным обнаружение подобной атаки.
Представим вашему вниманию простую модель зависимости времени вывода из строя атакованной системы (это и будет периодом атаки) от ее полосы пропускания.
Для начала смоделируем на одиночном потоке трафика и одиночном потоке DoS-трафика. Допустим, атакующий отправил первый пик в момент времени t=0, тем самым выведя из строя удаленную систему. Как показано на рис. 1, обычный отправитель в это время получил таймаут и вынужден ждать окончания таймера повторной передачи пакета 1 сек и удваивать RTO. Если атакующий повторил атаку (снова вывел из строя систему) в промежуток времени от 1 до 1+2RTT, то он вынудит ждать стек TCP еще 2 секунды. Создавая подобные выводы из строя в моменты времени 3, 5, 17, ..., атакующий тем самым фактически вынудит прекратить предоставление TCP-сервиса, в то же самое время атакующий будет отправлять пики DoS-трафика с довольно низкой средней скоростью.
Приведенная ситуация эффективна для одиночного потока трафика, для нескольких входящих и выходящих потоков требуется периодичное (вместо экспоненциального, как указано для одиночного) создание ситуаций вывода из строя канала передачи по шкале RTO. Более того, в случае одинакового параметра minRTO (как рекомендует RFC 2988) у всех потоков, все потоки будут простаивать в таймауте более длительное время (в случае создания периодичных сбоев в канале).
Так вот, для атаки будем использовать импульсы (как показано на рис.3) длительностью l и скоростью R с определенным периодом T. Как показано ниже, атака будет удачной при следующих условиях: скорость передачи R достаточна для получения таймаута в канале (т.е. сумма скоростей обычного и DoS-трафика должна превышать суммарную пропускную способность канала), длительность l по шкале RTT достаточна для получения таймаута на канале (и довольно мала, чтобы избежать обнаружения) и период T по шкале RTO выбран таким образом, что поток трафика, пытающегося после таймаута пройти в канал, получил очередной таймаут.


рис.3 Импульсный трафик атаки

моделирование

Рассмотрим сценарий атаки: "бутылочное горлышко" канала, очередь из n потоков TCP-трафика с разными RTT и одиночный поток DoS-трафика. Обозначим RTTi время RTT потока i, i=1,2,...n. Поток DoS-трафика показан на рис. 3. Следующие формулы связывают пропускную способность канала и период атаки.
Допустим, что период атаки T. Если период вывода из строя канала удовлетворяет выражению

(С1)   

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

(С2)

Для всех i=1,..., n, то формула для нормализованной пропускной способности канала с множеством потоков трафика будет выглядеть следующим образом:

(2)

Объясним полученный результат: периодические пики длиной l создают короткие перебои длиной l` , которые сопровождаются большими потерями пакетов. Если значения l` достигают значений RTT потоков трафика, т.е. l`>=RTTi для всех i=1,...,n, то задержка, вызванная атакой вполне достаточна, чтобы все потоки трафика получили таймаут. Более того, при выполнении условия (С2) для всех i=1,...,n, все TCP-потоки будут иметь идентичные значения RTO и именно поэтому таймаут после minRTO секунд — идеальный момент проведения повторного выведения из строя канала. В этом случае, несмотря на разные RTT, все TCP-потоки будут вынуждены "синхронизироваться" под атакующего и получат таймаут примерно в одно время. Обратим внимание, что при выборе периода T по формуле T>=1+2RTTi , все TCP потоки будут получать таймаут в 1 секунду. Формула (2) допускает, что RTO=minRTO для T > minRTO, в тоже время если T лежит в диапазонах (minRTO; minRTO+2RTT), то (2) определяет границу верхнего диапазона для T. Иными словами, импульсный DoS-трафик не использует уязвимость в механизме экспоненциального обратного хода, а использует факт повторения таймаутов.
Далее мы рассмотрим потоки, трафика, не удовлетворяющие условиям (С1) и (С2).
Допустим период DoS-атаки T. В случае если период вывода из строя канала l`> RTTi и minRTO>STRRi+4*RTTVARi для i=1,...,k, и выполнено одно из условий l`<RTTj или minRTO<=STRRj+4*RTTVARj для j=k+1,...,n то формула (2) будет действовать для потоков 1,...,k.
На указанном выше примере можно утверждать, что DoS-атака, удовлетворяющая выражению (2), эффективна для выборки потоков, иными словами, атака, запущенная против группы потоков будет воздействовать только на удовлетворяющие заданным условиям. Далее мы будем называть подобное явление "фильтр потоков" в результате которого фильтруются определенные подсети.

пример

Покажем, как атака влияет на "частотную характеристику". Сначала рассмотрим аналитическую модель сценария, отображенного на рис. 2, в которой выполняются условия (С1) и (С2) и minRTO=1 сек. Кривая, обозначенная на рис. 4 является зависимостью ρ от T, вычисленная по формуле (2). Полоса пропускания нормализована по отношению к состоянию без атаки.


Рис. 4 Пропускная способность при атаке — моделирование и эксперимент.

Следует учесть, что средняя скорость атаки уменьшается с увеличением T, т.к. вычисляется по формуле Rl/T.
Однако исходя из формулы (2) и рис. 4, эффективность атаки абсолютно не возрастает с увеличением средней скорости. Для нас наиболее актуальны два участка на рис. 4 - где пропускная способность становится равной нулю. В частности функция ρ принимает значения ноль при двух параметрах T=minRTO и T=minRTO/2 . Физический смысл этих минимумов таков: если атакующий создает сбои в канале с периодичностью minRTO, то он полностью блокирует трафик TCP. Как только случается кратковременная блокировка канала, все потоки трафика, идущие через него, останавливаются. По прошествии времени minRTO, происходит попытка повторной передачи пакетов, но в это время атакующий создает очередную блокировку канала. Разумеется, что наиболее предпочтительный момент для следующей посылки атакующего — T=minRTO, а не minRTO/2, т.к. в таком случае уменьшается общая скорость атаки. В случае если T>minRTO, период атаки увеличивается, что влечет за собой увеличение общей пропускной способности канала в перерывах между посылками атакующего.
Далее мы проведем серию тестов ns-2 для сравнения с экспериментальными данными. В этом моделировании мы будем исследовать одиночный поток трафика (следует помнить, что выражение (2) используется для многочисленных потоков. Поток TCP Reno имеет minRTO=1 и удовлетворяет условиям (С1) и (С2). Конкретно, задержка распространения составляет 6 мс и RTT в диапазоне от 12 до 132 мс, при заданном буфере. Полоса пропускания канала — 1,5 Мб/с, скорость DoS-трафика 1,5 Мб/с и длительность пика 150 мс.
Проведенный эксперимент показан на рис. 4 кривой simulation. Из рис. 4 видно, что выражение (2) охватывает основную часть графика и точки минимума практически совпадают. Следует отметить факт, что в промежутке между двумя минимумами моделирование не совсем правильно, т.к. моделирование предполагает, что TCP-стек может использовать полную емкость канала между окончанием времени RTO и приходом нового DoS-пика, этого не случается по причине "медленного старта".

поведение очередей

Рассмотрим ситуацию, когда в "бутылочном горлышке" находятся TCP-поток и DoS-трафик, который каждые T секунд "вспыхивает" импульсом с постоянной скоростью Rdos и длительностью l. Остальные значения: Rtcp — мгновенная скорость TCP потока, B — размер очереди, В0 — размер очереди в начале атаки к моменту времени t=0. l1 — время за которое наполнится очередь вычисляется по формуле:

(3)

(С - ширина канала). После l1 секунд очередь остается заполненной на время l2=l-l1 секунд при условии выполнения выражения Rdos + Rtcp >=C. Более того, при выполнении Rdos>=C в течение того же периода, канал будет выведен из строя и вероятность того, что повторная передача снова "уйдет" в таймаут, будет очень велика.

минимальная скорость DoS-атак

Допустим, что атакующий ограничен максимальной скоростью Rmax, существованием второго "бутылочного горлышка" или пропускной способностью своего канала. В интересах атакующего, разумеется, скрыть факт атаки от механизмов IDS и роутеров. Для минимизации объема трафика в моменты создания перебоев в канале атакующий может использовать двухступенчатые импульсы, как показано на рис. 5. Для заполнения буфера без участия нормального трафика атакующему нужно l1=B/( Rmax -C) секунд. Заметим, что максимальная скорость Rmax минимизирует время l1 и, как следствие, количество отправляемых байт. После заполнения буфера, атакующий снижает скорость до емкости "бутылочного горлышка" С для гарантированной потери пакетов, но при этом используется существенно меньшая скорость.


Рис. 5. Двухуровневый импульс атаки.

Поэтому двухуровневый (или двухскоростной) импульс уменьшает объем трафика, который необходимо передать для гарантированного вывода из строя канала на период T (для заданных B — размер очереди в "бутылочном горлышке", С — емкость "бутылочного горлышка" и диапазона возможных скоростей от 0 до Rmax).
Для воспроизведения двухскоростной атаки в реальных сетях, атакующий может воспользоваться следующими инструментами для обнаружения емкости "бутылочного горлышка", для измерения размера очереди "бутылочного горлышка" и для вычисления второй скорости "бутылочного горлышка".
Несмотря на оптимальность двухуровневых импульсов для проведения атаки, в дальнейшем мы будем использовать простые одиночные импульсы (см. рис. 3). Причин тому несколько: во-первых, нам необязательно (и даже не нужно) знать о других параметрах удаленной сети, кроме как емкости "бутылочного горлышка"; во-вторых, одиночные импульсы выделяют эффект от периодической атаки на отдельной временной шкале.Сравним эффекты от атаки одиночными импульсами и двойными, проведя соответствующее моделирование. В качестве примера возьмем следующие исходные данные: одиночный импульс со скоростью 3.75 Мб/с и длительностью l=50 мс и двухуровневый импульс с Rmax =10 Мб/с. Для двухскоростного потока l1=B/(Rmax -C) вычисляется, а l2 определено таким образом, что количество пакетов отправленных атакованному одинаково. Остальные параметры взяты из примеров выше.
Результаты моделирования в виде графиков примерно идентичны (не показаны) (:D), следовательно, одиночные импульсы DoS-атаки в приближении можно считать идентичными двухуровневым, и они не требуют знания параметров удаленной сети. В дальнейших экспериментах и моделированиях мы будем использовать именно их.

многопоточность и разнородность параметров

Здесь мы опишем, как изменяется эффективность DoS-атаки на большое количество потоков и на потоки с разными параметрами.
Сначала проведем эксперимент со стабильным потоком трафика (с одинаковыми RTT) и покажем, что DoS-трафик сможет синхронизировать остальные потоки. Далее будет эксперимент на потоках с разными RTT, который покажет, что представляет собой RTT-фильтрация. Следующим экспериментом будет влияние DoS-атак на т.н. "связанный между собой" трафик, преобладающий в Интернете. И, наконец, будет произведена оценка уязвимостей различных вариантов реализаций TCP к подобного рода атакам.
В качестве основной топологии атакуемой сети (если не будут указаны четко другие условия) мы примем следующие параметры: несколько потоков трафика идут через узкий перегруженный канал емкостью 1.5 Мб/с как показано на рис. 2. Задержка прохождения (в одну сторону) через канал — 6 мс; размер буфера очереди выбран таким образом, что RTT лежит в пределах от 12 до 132 мс. Одиночные импульсы DoS-трафика со скоростью 1.5 Мб/с, длительностью импульса 100 мс и размер пакета 50 байт. Во всех экспериментах мы использовали FTP/HTTP-трафик идущий в обратном направлении с дополнением ACK-пакетов и DoS-трафика в прямом направлении. Для каждой точки графика были произведены 5 измерений и отображен средний результат. Длительность каждого измерения минимум 1000 мс.

многопоточность и синхронизация потоков

Эксперименты показали, что DoS-атака сильно снижает полосу пропускания канала с одним потоком, здесь мы покажем, что для сильнонагруженного канала с постоянным потоком однородного TCP-трафика такая DoS-атака тоже эффективна.


Рис. 6. DoS-атака и множество потоков.

На рис. 6 показана нормализованная пропускная способность множества потоков трафика от периода атаки T. Ситуация наблюдается аналогичная, как и при одиночном потоке, следовательно формула (2) также может использоваться для моделирования многопоточных каналов. Однако следует обратить внимание, что при T=1/minRTO, пропускная способность не равна нулю (как было в случае с одним потоком), т.к. максимальное RTT составляет 132 мс, что больше периода атаки 100 мс, и некоторые потоки все же смогли "прорваться" в канале. Так же, стоит отметить, что при частоте 2/minRTO пропускная способность практически сводится к нулю.
Причиной этого могут быть две вещи: одинаковость RTO (по причине существования minRTO) предоставляет единственную временную шкалу для уязвимости; вынужденная синхронизация DoS-потоком случается при получении таймаута всеми потоками сразу. Из-за одинаковости RTO потоки пытаются "выйти" из таймаута одновременно.
Синхронизация TCP-потоков служит причиной использования алгоритма RED, в задачи которого входит избежание синхронизации множества потоков. Но совершенно различен подход к проблеме, т.е. избежать синхронизации при обычном трафике, а не при атаках. Как следствие механизм RED абсолютно не приспособлен к отражению таких атак.

RTT-фильтрация

Проведенный выше эксперимент показал, что атака способна существенно снизить пропускную способность канала с множеством потоков трафика, путем введения в цикл таймаутов всех потоков одновременно. Сейчас мы покажем, что уязвимость потоков сильно отличается при разных RTT, т.е. чем меньше RTT у потока, тем более он уязвим к низкоскоростным атакам.
Проведем эксперимент над 20 стабильными потоками на 10 Мб/с канале, диапазон RTT которых от 20 до 460 мс, интервал взят на основе измерений в Интернете. Измерения были использованы для установления зависимостей задержек потоков от RTT (были взяты точки, равномерно распределенные по всему диапазону).


Рис. 7. RTT-фильтрация.

На рис. 7 показана нормализованная пропускная способность для каждого из 20 потоков. Кривая, отмеченная "no DoS" (нет атаки), показывает пропускную способность каждого потока без атаки. Следует заметить, что через каждый 1/RTT интервал, пропускная способность перераспределяется, т.к. потоки с малым RTT занимают большую полосу пропускания. Кривая, обозначенная "DoS" (с атакой), показывает пропускную способность каждого потока в сумме с атакующим импульсом скоростью 10 Мб/с, длительностью 100 мс и периодом 1.1 сек. Отметим, что DoS-поток фильтрует потоки с коротким RTT вплоть до 180 мс, в то время как потоки с большим RTT практически не подвержены атаке. Еще одна вещь, стоящая внимания: потоки с большим RTT не могут полностью утилизировать канал даже в отсутствие атаки.
Однако в варианте с большим количеством TCP-потоков с разными RTT количество нефильтрованных с большим RTT увеличится, что неизбежно приведет к занятию полосы пропускания, которая раньше была занята потоками с малым RTT. В конечном результате пропускная способность увеличится (как это ни парадоксально) за счет потоков с сильно различающимися RTT, как показано на рис. 8. К сожалению, большая эффективность занятости канала большим количеством потоков (больше 90% в случае 80 потоков) довольно спорный аргумент, т.к. потоки с малым RTT будут "придушены" атакой (рис. 7).


Рис. 8. Большое количество потоков с разными RTT.

Так, с одной стороны, получается более полное использование канала, а с другой — DoS-атака для потоков с малым и средним RTT.

эксперименты в Интернет

Сейчас мы опишем несколько проведенных в Интернет экспериментов. Сценарий отображен на рис. 13 и представляет собой скачивание большого файла с сервера TCP SACK (TCP-S) клиентом (TCP-R). Настройки TCP-S хоста: minRTO=1 в соответствии с , измерения полосы пропускания с помощью iperf (/usr/ports/net/iperf). Атаки были запущены с 3-х хостов, используя программы активного зондирования, работающие по UDP-протоколу. Все эксперименты проводились три раза и как результаты брались усреднения.


Рис. 13. Сценарии DoS-атак.

Внутрисетевой сценарий. В этом варианте оба — и отправитель TCP-S и хост DoS-A — находятся на одном сегменте 10-мегабитной сети университета Rice, в то время как атакующий — в другой сети 10 Мбит/с в двух хопах от TCP-S и DoS-A. Пиковая скорость импульса — 10 Мбит/с, длительность — 200 мс. Кривая, отмеченная DoS-A (внутрисетевая атака) на рис. 14 показывает результаты этого эксперимента. Нулевая пропускная способность приходится на время ~1,2 сек. Скорость передачи атакующего в этот момент 1.67 Мбит/с, в то время как без атаки пропускная способность 6.6 Мбит/с. При атаке она снижается до 780 Кбит/с.


Рис. 14. Эксперимент в Интернет.

Межсетевой сценарий.В этом случае отправитель TCP-S, источник атаки DoS-B и атакуемый хост TCP-R располагаются в 3-х разных сетях кампусной сети ETH (Цюрих, Швейцария). Маршрут проходит через два роутера и два Ethernet-свитча. Сети TCP и DoS 100 Мбит/с, а у атакующего — 10 Мбит/с. Скорость импульса атакующего такая же — 10 Мб/с, но длительность уменьшена (по сравнению с предыдущим сценарием) до 100 мс. Кривая, обозначенная DoS-B (Межсетевая атака) на рис. 14 показывает результат атаки. В этом сценарии минимальная пропускная способность наблюдается в момент времени 1.1 сек при пропускной способность 800 Кбит/с, что составляет всего 8,1% от нормальной пропускной способности (без атаки — 9.8 Мбит/с). В то время, как скорость атакующего в этот момент 909 Кб/с.
Сценарий с глобальной сетью (WAN).И в последнем эксперименте возьмем те же пары приемник/передатчик, что и в межсетевом сценарии, источник DoS-C начинает атаку из сети EPFL (Лозанна, Швейцария), что расположена в восьми хопах. Скорость импульса 10 Мбит/с, длительность — 100 мс. Кривая DoS-C (WAN) рис. 14 показывает, что практически нулевая пропускная способность приходится к моменту времени 1.1 сек. В этом сценарии пропускная способность снизилась с 9.8 Мб/с до 1.2 Мб/с при скорости атакующего 909 Кб/с. На основании этого эксперимента можно сделать вывод о возможности удаленной атаки, т.к. трафик атакующего прошел локальную сеть, роутеры и свитчи. Даже при возможном искажении импульса трафика DoS-атака по прежнему эффективна.
Для чего, собственно, нужны были все вышеописанные выкладки и эксперименты? Мы доказали, что источник атаки может быть и рядом, и довольно далеко.

методы борьбы

Сейчас мы опишем два метода борьбы с данными атаками: обнаружение атак с помощью роутеров и ограничение трафика, и случайность выбора RTO.

обнаружение роутерами

Как уже было сказано выше, атаки имеют довольно низкую общую скорость, отправляя импульсы чрезвычайно короткие промежутки времени. Здесь мы рассмотрим, как шаблоны такого трафика могут быть обнаружены роутерами.
Механизмы обработки потоков трафика на роутере можно охарактеризовать как распределение или отбрасывание части пакетов (в оригинале scheduling or preferential dropping). Из-за простоты реализации и других преимуществ отбрасывания пакетов над распределением трафика, мы будем использовать именно этот метод для обнаружения атак. Вот некоторые из этих алгоритмов: Flow Random Early Detection (FRED), CHOKe, Stochastic Fair Blue (SFB), the scheme of reference, ERUF, Stabilized RED (SRED), динамическая схема ограничения буфера with Preferential Dropping (RED-PD) (почему без перевода, думаю, объяснять не надо). Из вышеперечисленных алгоритмов мы возьмем RED-PD и покажем, как, используя лог из отброшенных пакетов на роутере, можно обнаружить атаку. Все потоки трафика, проходящие через роутер, "наблюдаются" алгоритмом RED-DP. Пакеты отбрасываются с вероятностью, зависящей от скорости потока. RED-PD производит отбрасывание пакетов определенного типа трафика в случае, если существует "требование" освободить полосу пропускания от основного трафика.
Мы провели эксперимент с одним и девятью потоками TCP SACK, роутером RED-PD и топологией рис. 2. Было определено, что механизм RED-PD не смог ни обнаружить, ни уменьшить скорость атаки.
Для нескольких же потоков, атака будет эффективна с периодом повторения 0.5 секунды, т.е. выродится в обычную DoS-атаку.
Наиболее критичный момент — отметка 1.2 сек на временной шкале, в это время алгоритм RED-PD не имеет никакого выигрыша перед простым RED.
Таким образом, получается, что алгоритмы RED и RED-PD уменьшают последствия атаки, но в целом атака остается эффективна.
Далее мы будем проводить изменения скорости и длительности DoS-импульса, чтобы определить условия обнаружения атаки механизмом RED-DP. Для начала установим длительность импульса 200 мс, и будем менять скорость от 0.5 Мбит/с до 5 Мбит/с. При этом алгоритм RED-PD начинает обнаруживать и ограничивать атаки при скорости 4 Мбит/с, что более чем в 2 раза больше, чем емкость "бутылочного горлышка”.
Далее, установим скорость атаки 2 Мбит/с и меняем длительность импульса от 50 мс до 450 мс. В этом сценарии RED-PD обнаруживает атаку при длительности 300 мс
Вспомним, еще раз, что при меньшей длительности импульсов пропускная способность снижалась не только для малых RTT, но и для набора потоков с различными RTT.
Эксперимент выявляет основную проблему: RED-PD обнаруживает большие потоки трафика на длительных промежутках времени, в то время для атаки требуются существенно меньшие интервалы. Если же использовать меньшие интервалы для обнаружения, будет очень много ложных срабатываний на обыкновенный трафик. В итоге, для обнаружения высокоскоростных потоков, которые должны отбрасываться роутером, требуются довольно длительные наблюдения.

случайность выбора minRTO

Так как такие атаки используют уязвимость одинаковости minRTO, то можно разработать механизм противодействия атакам, изменяя случайным образом значения minRTO. Разработаем стратегию, соответствуя которой отправитель TCP-пакетов будет менять minRTO случайным образом так, что значения будет равномерно распределены на интервале [a, b]. Необходимо вычислить "частотную характеристику" одиночного потока трафика с случайными minRTO. Некоторые операционные системы имеют простой таймер прерываний на 500 мс для проверки соединений, "отвалившихся" по таймауту. Значит, если потоки трафика одновременно "входят" в таймаут, то "восстановление" их планируется на отрезке времени [1, 1.5] сек равномерно распределенно. Поэтому будем использовать следующие вычисления для данного сценария.
Возможно три варианта значений T. Первый: если , то следуя формуле

где E(RTO)=(a+b)/2 (среднее),

(4)для T>=b

Второй:
обозначим k=b/T, тогда(5)

Покажем, как выведена формула (5). Т.к. достаточно единственного импульса для выведения из строя канала и введения в таймаут потоков, то подсчитаем вероятность сбоя в канале и умножим ее соответствующее матожидание полосы пропускания. В формуле (5) первый одночлен обозначает полосу пропускания когда таймаут вызван созданием следующего сбоя в канале. Слагаемое (T-a)/(b-a) обозначает вероятность что период первого RTO окончен, что означает по прошествию времени а первый импульс вызовет второе RTO. Условное матожидание для полосы пропускания

где выражение (T+a)/2 обозначает искомый момент времени окончания первого RTO на интервале от a до T. Второй многочлен (5) описывает полосу пропускания для сбоев i=2,...,k-1. Вероятность этого события T/(b-a) и условное матожидание

И, наконец третий многочлен (5) описывает полосу пропускания для (к+1) перебоя в канале.
Для значений T<a аналогично выведем формулу

(6)

для к=1 и (7) для k>=2.

Рис. 15 показывает, что приведенные выше модели совпадают с экспериментом. Отметим, что в случае случайных значений minRTO, оба значения минимума оказываются сдвинутыми и амплитуда полосы пропускания является функцией от a и b. В данном эксперименте наибольшая уязвимость наблюдается при T=b, поэтому атакующий должен выждать окончания таймера ретрансмиссии и только потом создать следующий сбой в канале. Если сбой создан в момент времени, предшествующий b, то существует вероятность, что не для всех потоков трафика таймер ретрансмиссии окончился. В таком случае некоторые потоки "переживут" сбой и будут передавать данные на максимальной скорости до следующего перебоя в канале.


Рисунок. 15. Потоки с случайными minRTO.

Составим формулу зависимости полосы пропускания множества потоков с случайными minRTO от времени атаки, с учетом оптимального интервала атаки T=b.

результат противодействия атаке

Предположим, у нас есть n стабильных потоков трафика под воздействием DoS-атаки с периодом b. Нормализованная пропускная способность одного из n потоков приближенно вычисляется по формуле

(8)

Выражение (8) показывает, что при увеличении числа потоков n, суммарная нормализованная пропускная способность (при T=b) стремится к выражению (b-a)/b. Рассмотрим случай, когда все потоки "отваливаются" по таймауту в один и тот же момент времени. При большом количестве потоков, таймеры "частей потоков" истекут достаточно близко к a, следовательно эти потоки смогут частично продолжить передачу трафика на интервале от a до b (в момент времени b будет следующий перебой, вызванный атакующим). Для ОС, использующих 500 мс прерывания таймера таймаута (т.е. таймаут равнораспределен на интервале [1, 1.5]), выражение (8) показывает изменение полосы пропускания с 0.17 (для одного потока) до 0.34 (несколько потоков) под атакой с периодичностью 1.5 с.
Существуют два варианта увеличения полосы пропускания при атаках T=b. Первый вариант состоит в довольно заманчивом предложении уменьшения значения а, но вспомним, что предохраняющие механизмы таймаута требуются для достижения максимальной производительности. Второй вариант — увеличение значения b, повлечет увеличение полосы пропускания, но только для большого количества потоков. Для малого n полоса пропускания, наоборот снизится:

Более того, слишком большие значения b существенно уменьшат полосу пропускания для "маложивущих" потоков, которые преобладают в Internet. В итоге: случайность выбора minRTO действительно сдвигает и сглаживает минимумы пропускной способности. Но из-за различности RTT остается выбор между уязвимости атакам и производительностью TCP стека.

выводы

В этой статье обсуждаются DoS-атаки, направленные на снижение полосы пропускания TCP потоков трафика, осуществляемые с низкой скоростью во избежание обнаружения. Мы показали, что используя уязвимость в механизме таймаута повторной передачи TCP-стека, можно добиться нулевой пропускной способности, путем смешивания с основным трафиком специально подобранных шаблонов DoS-трафика. Разработали несколько шаблонов DoS-трафика (включая минимально-скоростные) и комбинируя моделирование и эксперименты (в т.ч. проведенные в Internet) показали, что такие атаки действуют на коротко- и долгоживущие потоки, представляя угрозу Internet в таком виде, каком он есть на сегодняшний день; в разнородных RTT атаки действуют преимущественно на потоки с малым RTT; низкоскоростные петленезамкнутые потоки (даже не являясь атаками), могут сильно повредить трафику с малым RTT, если их период совпадает с периодом низкоскоростных атак; и наконец, алгоритм RED-PD и другие методы (см. главу 7) только смягчают последствия атак, но не предотвращают их совсем.
В основе уязвимости лежит отнюдь не плохая разработка механизма обнаружения атак или механизмов таймаута TCP стека, а различие временных шкал атаки и защиты. Для полной защиты от подобного рода атак необходимо существенно уменьшить производительность системы.

Aleksandr Kuzmanovic,
Eduard W.Knightly

обсуждение статьи

© Сетевые решения