Устойчивая случайная ранняя фильтрация

Устойчивая случайная ранняя фильтрация (англ. Robust Random Early Detection, RRED) — дисциплина управления очередью для сетевого планировщика. Существующий алгоритм случайной ранней фильтрации (RED) и его модификации уязвимы для новых видов атак, особенно атак типа отказ в обслуживании с низкой скоростью (LDoS). Эксперименты показали, что алгоритмы, основанные на RED, заметно уязвимы перед LDoS-атаками из-за колебаний размера очереди TCP, вызываемых такими атаками[1].

Алгоритм устойчивой случайной ранней фильтрации (RRED) был предложен для повышения пропускной способности TCP при LDoS-атаках. Основная идея RRED заключается в обнаружении и фильтрации вредоносных пакетов до применения стандартного алгоритма RED к входящим потокам. Алгоритм RRED позволяет значительно повысить производительность TCP-соединений при атаках типа отказ в обслуживании с низкой скоростью[1].

Устройство устойчивой случайной ранней фильтрации (RRED)

Перед стандартным блоком RED на маршрутизаторе добавляется блок обнаружения и фильтрации. Суть метода — обнаруживать и фильтровать вредоносные пакеты LDoS в потоке данных до передачи их алгоритму RED. Ключевым моментом в проектировании RRED является различение атакующих пакетов и обычных TCP-пакетов.

В рамках нормального TCP-потока отправитель задерживает передачу новых пакетов при обнаружении потери. Следовательно, если пакет отправлен в короткий промежуток после сброшенного пакета, он подозревается как атакующий. Это является базовой идеей алгоритма обнаружения в системе устойчивой случайной ранней фильтрации (RRED)[1].

Алгоритм устойчивой случайной ранней фильтрации (RRED)

алгоритм RRED-ENQUE(pkt)
01     f ← RRED-FLOWHASH(pkt) 
02     Tmax ← MAX(Flow[f].T1, T2)
03     если pkt.arrivaltime находится в [Tmax, Tmax+T*] то
04         уменьшить локальный индикатор на 1 для каждой ячейки биннинга, соответствующей f
05     иначе
06         увеличить локальный индикатор на 1 для каждой ячейки биннинга f
07     Flow[f].I ← максимум среди локальных индикаторов внутри ячеек биннинга f 
08     если Flow[f].I ≥ 0 то
09         RED-ENQUE(pkt)  // передать пакет в блок RED
10         если RED сбрасывает пакет то
11             T2 ← pkt.arrivaltime
12     иначе
13         Flow[f].T1 ← pkt.arrivaltime
14         сбросить пакет
15     выход
  • f.T1 — время поступления последнего пакета из потока f, сброшенного блоком обнаружения и фильтрации.
  • T2 — время поступления последнего пакета любого потока, сброшенного блоком случайной ранней фильтрации (RED).
  • Tmax = max(f.T1, T2).
  • T* — короткий интервал времени, который для RRED по умолчанию составляет 10 мс[1].

Программный код симуляции устойчивой случайной ранней фильтрации (RRED)

Программный код для симуляции алгоритма RRED опубликован как часть платформы моделирования активного управления очередями и атак типа DoS (AQM&DoS Simulation Platform). Платформа AQM&DoS Simulation Platform позволяет моделировать широкий спектр DoS-атак (распределённые DoS, DoS с подменой, DoS с низкой скоростью и др.) и алгоритмов активного управления очередями (RED, RRED, SFB и др.). Она также автоматически вычисляет и записывает среднюю пропускную способность обычных TCP-потоков до и после DoS-атак, что облегчает анализ влияния DoS-атак на TCP-потоки и AQM-алгоритмы.

Примечания