Программируемый фильтр в MITIGATOR v20.04

Dmitry Kozliuk
AntiDDoS Life
Published in
2 min readApr 8, 2020

Почти в каждой версии мы добавляем защиту для новых приложений и опции в существующих механизмах. Но атака — она здесь и сейчас, а версию ждать неделю, месяц. Иногда не хватает мелочи, но проверку надо добавлять в код. Даже когда хотфикс доступен, на него все равно надо обновляться с остановкой трафика. А бывает, что механизм защиты еще не придуман, есть только гипотезы, но чтобы их проверить, нужна эпопея со сбором дампов, созданием стендов, в терминальной стадии — с выделением тестовых серверов и доступом разработчиков на MITIGATOR.

В v20.04 мы представляем контрмеру BPF — пользовательские микропрограммы, которые загружаются в MITIGATOR и обрабатывают трафик наравне с «настоящими» контрмерами.

Больше не нужно ждать версии — можно самому написать программу (от десятка строк на языке C), загрузить её в MITIGATOR без остановки трафика и сразу получить результат. Для новой контрмеры сразу будут графики, работа с таблицей проверенных клиентов (если используется), интерфейс для настроек. Если механизм защиты только изобретается, можно менять программу на лету.

Программы не могут сломать MITIGATOR. Если в коде недостаточно проверок, и он способен повредить служебные данные или зависнуть, такая программа отвергается на этапе загрузки. Можно доверить программирование групповым пользователям (программа загружается для политики), они не повредят общей системе.

Не нужно быть экспертом, чтобы писать программы. Наше C API, которым можно пользоваться из кода, дает доступ к типовым операциям. Например, отправить обратный пакет с SYN cookie занимает пару строк — не надо вникать в устройство пакетов TCP/IP. Аналог контрмеры MCR с аутентификацией по UDP — всего 100 строк. При этом доступны быстрые и проверенные алгоритмы и таблицы.

Под капотом контрмеры — EBPF (Extended Berkeley Packet Filter). Это байт-код, удобный для валидации, который затем преобразуется в машинный код для быстрой работы. Технология EBPF активно применяется в ядре Linux, по ней легко найти статьи и инструменты. Валидация кода создает определенную специфику, которую мы стараемся минимизировать или описывать в документации.

--

--