← К материалу

Динамика ботнета / Теория

Zombie DDoS: динамика ботнета

От заражённого устройства к недоступному сервису

Как распространение заражения превращается в DDoS-нагрузку и что меняют патчинг, очистка ботов и блокировка атаки.

Предположим, в сети организации появились заражённые устройства. Построим модель, которая связывает их распространение с атакующим трафиком и доступностью API: запишем переходы и уравнения, вычислим R₀ и найдём стационарные состояния. По ходу разберём, почему заражённое устройство и бот, который прямо сейчас атакует сервис, учитываются отдельно.

Зададим состояния и исходные условия

Рассмотрим замкнутый парк из устройств. В каждый момент устройство находится ровно в одном из пяти состояний. Переменные обозначают доли парка, поэтому число устройств получаем умножением на .

СостояниеСмысл
Уязвимые устройства, которые могут быть заражены.
Заражённые боты, способные вовлекать в ботнет новые устройства.
Активированные боты, создающие атакующий трафик.
Устройства, выведенные из уязвимой или атакующей фазы защитной мерой: например, патчингом или блокировкой активности.
Восстановленные устройства, которые пока не участвуют в распространении и атаке.

Например, при означает сто заражённых устройств. Время измеряем в сутках, а начальное состояние задаём явно:

На этом шаге ограничимся агрегированным описанием: будем следить за долями устройств, не воспроизводя отдельные соединения и сетевые пакеты. Такое приближение подходит для исследования общих зависимостей, если выбранные состояния и усреднённые скорости переходов достаточно хорошо описывают ситуацию.

Построим граф переходов

Уязвимые устройства заражаются при взаимодействии с ботами из . Затем бот либо активируется для атаки, либо обнаруживается и очищается. Отдельно работают профилактическая защита уязвимых устройств и блокировка уже активных атакующих.

Рисунок 1. Направления переходов и потоки модели Zombie DDoS
Рисунок 1. Направления переходов и потоки модели Zombie DDoS

Над стрелкой указан поток, а не вероятность перехода. Например, — доля парка, переходящая из в за единицу времени. Параметры — непрерывные скорости; значение сут⁻¹ не означает, что через сутки активируется ровно 15 % исходного набора ботов: одновременно действуют остальные переходы и меняется сама величина .

Новые заражения создаёт только состояние . После активации бот из создаёт нагрузку, но уже не участвует в вербовке. Это допущение конкретной модели, а не универсальное свойство реальных ботнетов.

Состояние объединяет профилактически защищённые устройства и устройства с заблокированной активностью. Поэтому его нельзя автоматически считать числом очищенных компьютеров. Переход описывает завершение защитной/восстановительной стадии, а — последующий возврат уязвимости.

Перейдём от графа к уравнениям

Для каждого состояния запишем входящие потоки со знаком «плюс», исходящие — со знаком «минус»:

Проверим, как читать одну строку системы. В уравнении для активных атакующих есть приток после активации ботов и отток после блокировки. Если первый поток больше второго, активных атакующих становится больше. Остальные строки читаются по тому же правилу.

ПараметрЗа какой механизм отвечает
Заражение уязвимых устройств ботами из .
Активация заражённого бота для атаки.
Обнаружение и очистка бота из .
Блокировка активности устройства из .
Профилактическая защита устройства из .
Переход из защитной стадии в восстановленное состояние .
Возврат восстановленного устройства в уязвимое состояние.

При переменных-долях все семь параметров имеют размерность сут⁻¹. Член отражает взаимодействие двух групп: чем больше и уязвимых устройств, и распространяющих заражение ботов, тем выше поток новых заражений.

Если использовать абсолютные числа , тот же механизм записывается как . Подставлять числа устройств в исходный член без нормировки нельзя: это будет другая система.

Сложим правые части пяти уравнений. Каждый исходящий поток одного состояния входит в другое, поэтому все слагаемые сокращаются:

Получили простую проверку модели: при нормированных начальных условиях сумма долей остаётся равной единице. При неотрицательных параметрах потоки также не выводят доли за границу неотрицательной области: из пустого состояния нечему уходить, а входящие потоки неотрицательны.

Вычислим R₀ и условие роста заражения

Обозначим суммарную скорость ухода из распространяющего состояния через

Если на коротком начальном участке доля уязвимых почти не меняется и равна , то

Поясним полученное отношение. Один бот остаётся в состоянии в среднем в течение суток: он может либо активироваться, либо быть очищен. Пока он находится в , средняя скорость появления новых заражений в приближённо неизменной среде равна . Произведение скорости на время даёт число новых заражений на одного распространяющего бота:

Чтобы не смешивать полностью уязвимый парк и уже защищённую среду, договоримся об обозначениях:

эфф

относится к гипотетически полностью уязвимому парку. эфф учитывает фактическую долю уязвимых. Непосредственно из второго уравнения получаем

эфф

При заражение растёт, когда эфф, и убывает, когда эфф. Равенство единице означает только нулевую мгновенную производную: другие состояния продолжают меняться, поэтому это ещё не стационарное состояние всей системы.

Для учебных параметров , , имеем

При начальный показатель равен эфф. Это говорит о начальном росте , но не определяет высоту пика, длительность атаки или её конечный исход.

Найдём стационарные состояния

Стационарное состояние — набор постоянных долей , при котором все пять производных равны нулю. Оно описывает баланс потоков на длительном горизонте, а не обязательно результат к концу выбранного опыта.

Рассмотрим постоянные параметры при , . Для нулевых скоростей, например или , делить на них нельзя: такие предельные случаи требуют отдельного разбора.

Сначала исключим заражение

Положим . Из третьего уравнения при получим . Оставшиеся ненулевые потоки образуют цикл :

Выразим через долю уязвимых два остальных состояния:

Подставим эти выражения в условие суммы долей. Для краткости введём

Теперь запишем все пять долей безинфекционного равновесия:

При оно не совпадает с состоянием «все устройства уязвимы»: даже без инфекции профилактика и возврат уязвимости продолжаются, а доли состояний постоянны благодаря балансу потоков.

Чтобы понять, растёт ли малое заражение около этого равновесия, подставим в уравнение для значение . Получим показатель вторжения

При малое заражение в окрестности этого состояния убывает, при — растёт. Граничный случай требует отдельного анализа; из одного лишь равенства единице нельзя заключить, что заражение будет постоянно.

Теперь сохраним ненулевое заражение

Теперь предположим . Из второго уравнения следует

Далее выразим остальные состояния через заражённую долю. Для этого последовательно обнулим правые части уравнений для атакующих, защищённых и восстановленных устройств:

Получили зависимость каждой стационарной доли от заражённой. В частности, число активных атакующих определяется балансом активации и блокировки: при неизменной заражённой доле более быстрая блокировка уменьшает долю атакующих.

Осталось найти из нормировки. Обозначим

После подстановки получаем , поэтому

Проверим, имеет ли найденное решение смысл. Все величины в знаменателе положительны. Значит, равновесие с существует в допустимой области только при

тоесть

При равенстве числитель обращается в нуль и положительное заражённое равновесие сливается с безинфекционным. При отрицательном числителе формальная формула даёт отрицательную долю: такое решение физически недопустимо. Само существование равновесия не доказывает, что произвольная траектория к нему сойдётся; устойчивость положительного равновесия — отдельный вопрос.

Сопоставим начальный рост и равновесие

Продолжим предыдущий учебный набор параметрами , , . Тогда

Для этого равновесия

Сравним этот результат с началом опыта. При исходном заражение начинает расти. Около безинфекционного стационарного распределения доля уязвимых значительно меньше, и малое заражение уже не поддерживает рост. Эти условия не противоречат друг другу: профилактическая защита меняет среду, в которой распространяются боты.

Что ещё полезно заметить

Разделим пик заражения и пик атаки

При условие даёт критическую долю уязвимых

кр

Если пересекает эту границу сверху вниз, проходит через локальный максимум. В модели с возвратом уязвимости не обязана всё время убывать, поэтому единственную волну заранее не предполагаем.

Для активных атакующих условие пика другое:

Даже после начала снижения активация может некоторое время превышать блокировку. Поэтому наблюдать только график заражённых недостаточно.

Переведём долю атакующих в нагрузку на сервис

Пусть — средний поток одного активного бота в Мбит/с, — пропускная способность сервиса, а доля его ёмкости занята легитимным трафиком. Поскольку — доля парка, атакующих ботов , а их поток

атаки

Приближённое условие исчерпания свободной ёмкости:

кр

Если считать абсолютное число атакующих, порог равен кр. Это разные единицы одной оценки. Такая связь нужна для перехода от графиков устройств к доступности API; сами пять уравнений состояние сервиса не вычисляют.

Меры действуют на разные стадии

Увеличение быстрее выводит ботов из распространяющего состояния. Увеличение уменьшает доступный для заражения пул . Увеличение сокращает время пребывания в активной атаке. Параметр не входит в формулу напрямую, но через возврат способен влиять на последующую динамику уязвимых устройств.

Особенно осторожно интерпретируем . Уменьшение активации задерживает поступление ботов в , но одновременно дольше сохраняет их в распространяющем состоянии . Поэтому формальный возрастает. Это иллюстрирует, как улучшение одного показателя может сопровождаться ухудшением другого, и напоминает о принятом допущении: в этой модели активные атакующие не вербуют новые устройства.

Продолжим исследование

Эксперимент: проверим действие отдельных мер

Цель — понять, что меняет каждая мера защиты.

Выберем три параметра: скорость очистки, профилактической защиты и блокировки атакующих. Будем изменять их по одному и перед каждым опытом предполагать, какой поток на графе изменится первым. Затем сопоставим ожидание с графиками устройств и нагрузки.

Игра: выберем сочетание мер

Цель — принять решение в условиях ограничений сценария и объяснить его последствия.

Сочетание мер оценим по тому же маршруту: какой поток изменился, какое состояние накопилось или уменьшилось и как это повлияло на атакующий трафик. Так результаты игры свяжем с механизмом модели.