14.03.2016

DDoS Mitigation Arbor Peakflow SP and Juniper MX [ flowspec / blackhole ]

Добрый день !

Защита од DDoS атак, методом FlowSpec. Настройка связки Arbor Peakflow SP CP (Collector Platform) и маршрутизатора Juniper MX 480, без использования TMS.
Хотел бы немного поделится информацией по поводу тестов и проведенных исследований и общения с крутыми спецами из Arbor Networks, в рамках данной связки.

Немного олдовой картинки :)


Немного подумав, можно преподнести эту связку следующим образом:

Если заглянуть последний WISR (Worldwide Infrastructure Security Report), то можно обнаружить интересную статистику.

А именно:
  • 65% всех атак - атаки на переполнение емкости каналов связи. Это различные Amplification - DNS, NTP, SNMP, и т.п.
  • остальные 35% приблизительно поровну State-exhaustion (TCP Flood_ы) и Application-layer (HTTP flood_ы, LOIC, HOIC, Slowloris, и т.п.) атаки
  • при этом 56% опрошенных нами клиентов видят многовекторные атаки, т.е. практически одномоментный в профиле трафика могут присутствовать все три или любые из двух типов атак. Эта статистика из года в год приблизительно одинакова.
Дело в том, что:

  • с атаками типа Amplification бесполезно бороться блокировкой IP-адресов источников, впрочем, как и с большой частью State-exhaustion. Причина - SRC адреса, как правило, поддельные (spoofed). Т.е. блокирую по src адресам, мы будем блокировать “не тех, кого надо”
  • с Amplification можно эффективно бороться как раз с помощью связки Peakflow + MX. В этом случае CP детектирует атаки, а MX их блокирует. Другими словами такая связка позволяет блокировать до 65% DDoS атак.
  • со State-Exhaustion в случае поддельных адресов Flow Spec в большинстве случаев не поможет, впрочем как и блокировка по SRC адресам. Для того, чтобы подавить такую атаку нам и нужен TMS, который выступает в роли устройства, проверяющего факт того, что конкретный TCP SYN (например) действительно был отправлен хостом с SRC адресом в заголовке пакета.
  • Блокировка по SRC-адресам в случае State-Exhaustion будет происходить только тогда, когда IP-адреса реальные, но объем определенного трафика от них превышает допустимые значения.
  • Для детектирования атак L7 нам нужен либо TMS, либо клиентский APS. CP обнаружить такие атаки не может. Адреса-источники будут блокироваться в большинстве случаев.
Если подытожить вышесказанное то:
  • 65% атак - многовекторные. Весь трафик раскладывается на компоненты вплоть до ранжирования источников трафика, распределения по размерам пакетов, наиболее загруженных маршрутизаторов и интерфейсов, и т.п. Т.е. вся атака - как на ладони.
  • CP реализует простую идею - невозможно бороться с тем, чего не видишь и не понимаешь. Поняв атаку, мы можем понять как с ней эффективнее всего бороться.
В случае связки с FlowSpec мы будем, в первую очередь, оперировать другими 
характеристиками атаки нежели SRC адреса.

К примеру:
- размер пакета;
- dst ip + port
- fragmentation


Это делается руками. Flow Spec преобразуется в ACL на граничных маршрутизаторах и может быть опасен для маршрутизирующего оборудования, если он неправильно применен.  Вот наиболее яркий пример:https://blog.cloudflare.com/todays-outage-post-mortem-82515/.

В случае с автоматическим подавлением атаки с помощью TMS в худшем случае пострадает трафик перенаправленный на TMS, но никак не вся сеть.

из практики:
"Кстати очень мало кто из операторов реализует на своих сетях auto mitigation."

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


Архитектура RFC5575




Перейдем к настройке Arbor Peakflow SP (CP) Collector Platform.


Первоначальная настройка простая:
Коннектимся по консоли:
• Baud rate: 9600
• Data bits: 8
• Stop bits: 1
• Parity: None
• Flow control: None


admin:arbor
меняем дефолтный пасс
#/ services aaa local password admin interactive
#/ system name set hostname
#/ clock set date_and_time
#/ ip interfaces ifconfig interface_name IP_address netmask up

Проверка ифейса:
#/ ip interfaces show
#/ ip route add default IP_address
#/ services ntp server add primary IP_address local
#/ services dns server add IP_address local

Обязательно пишем access листы на коробку:
#/ ip access add service {name | all} CIDR
#/ ip access show
#/ ip access commit

#/ services ssh key generate
#/ services ssh key host set default
#/ services ssh start

Последнее, обязательное, секрет-зона:
/ services sp bootstrap {leader | nonleader} leader_IP zone_secret

Стартуем сервис SP

#/ services sp start

Записываем конфиг в память:
config write

И теперь мы можем попасть на коробку, по web, для дальнейшей настройки связки.

Проверяем лицухи, и сразу ставим ползунки, для принятия флоу на соответствующих интерфейсах:



Далее в настройках Configure Network прописываем ASку(по которой связь) и название :
Далее добавляем роутер, к которым будет строится BGP сессия, где 10.66.6.2 - адрес ифейса на сторороне роутера, 10.66.6.1 - Peakflow CP соответственно :


Далее как добавляется роутер (заполение нужных полей):


Тут обязательно ставим галочку !




Далее создаем "защищаемую группу хостов или хоста"

Название и описание:

Адрес или сетка:




Я для теста, установил маленькие пороги, для того что бы проверить срабатывание алерта на возможную атаку (которую генерировать буду сам) :


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

Авто-митигация в нашем случае не сработает, так как у нас нет TMS, поэтому ставим none. А в полях что ниже указывам варианты с default.

Тут только пропишем для блекхола:

И еще раз проверим галочку, так как без нее не будет работать связка:


Далее, нужно настроить вторую сторону, а именно Juniper MX.
Настройка взята с блога моего соседа по блогу, который делал эту связку со мной (со стороны MX)  там много интересных штук, рекомендую :)




После данных настроек, на стороне Arbor SP мы должны увидеть что флоу льется, и сессия BGP между ними поднята, а так же работает SNMP! :



А так же, замеры, сколько флоу летит на коллектор(семплинг что на Arbor что на Juniper MX 1/1000):


Вроде с основным разобрались, далее тест связки на определение атаки, а так же подавление ее с помощью FlowSpec или BGP blackhole.

Запустим тест:
как видно, появился алерт. Далее можно перейти в более детализированный режим, нажав на его id. (57098).

Смотрим богатейшую статистку и анализ атаки:



Далее о подавлении атаки, есть 2 варианта, 1й - блекхол, 2й - более интеллектуальный Flowspec.



По поводу Blackhole, ничего сложного, просто пишем ip клиента, выбераем роутер для анонса, и отключаем клиента:

 Втотой метод интересней, так как позволяет оставить клиента в сети, а атаку срезать по определенным ip, или определенном "шаблоне" трафика, что дает возможность заблокировать атакующих по их поведению, а не тупо по ip.
Для этого, нужно в меню, выбрать Flow Specification, и далее опираясь на данные о атаке (это все можно посмотреть в детализированном режиме по алерту) заполняем необходимые поля:

Выбор роутера для анонса:

Далее указываем параметры для блокировки(для теста я сделал просто src и dst), но опираясь на информацию из алерта, можно заполнить "характер атаки" :

 Ну и конечно, действие над трафиком, которое попадает под шаблон, составленный выше:


После чего, мы можем активировать наше правило, в соответствующем меню, или деактивировать, когда атака ушла:


После включение правила, мы отсекли 98% трафика от всей атаки.

Далее хотел бы протестировать блокировку по "характеру атаки", что скорее будет в следующей части. Все что было рассмотрено выше, это все поверхностные настройки, так сказать, что бы все завелось, и увидеть что из этого можно получить. У Arbor Peakflow колоссальное количество настроек, всех их охватить не возможно :) для этого есть очень хороший ман, в самой системе, а так же куча pdfок. Это все обзорный материал, написанный с целью понимания системы, и просто что бы не забыть :)