Skip to main content

Зудящий ДДоС

Обнаружил вчера, что мои серваки кто-то старательно DDoSит. Слабенько так. но неприятно.
В этой статейке расскажу, что можно делать.

Цель 1: Первичный DNS

Скорей всего мой сервер пытались использовать для DNS Amplification Attack. В чем суть? Суть в том, что приходит запрос с поддельным исходным адресом. Исходный адрес заменяется на адрес жертвы. В запросе содержится какой-нибудь домен, обычно специально созданный, у которого ооочень много A записей (да и не только A, т.к. запрос посылают обычно на Any). Сервер обрабатывает этот запрос и выдает весь этот огромный список жертве. Т.о. при небольшом входном потоке транзитный сервер генерирует очень много выходных данных (то самое усиление — Amplification) и заваливает жертву.

Но, возможно, т.к. запрашивающих машин было порядка 20, то это была и обычная атака на мой сервер (либо 20 одновременных жертв, что странно)

Что делать?

Первое, что можно сделать — отключить рекурсию. Если ваш сервер не является сервером, обслуживающим внутреннюю частную подсеть, то рекурсия не особо нужна.

В Bind рекурсия отключается опцией recursion no, в MS DNS  — соответствующей опцией в настройках DNS сервера. DNS сервис нужно перезапустить после этого.

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

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

Там у меня стоит iptables, который форвардит запросы в виртуальную сеть:

-A FORWARD -d 10.0.0.2/32 -p udp --dport 53 -m recent --set --name DNSDDOSCHECKF --rsource
-A FORWARD -d 10.0.0.2/32 -p udp --dport 53 -m recent --update --seconds 60 --hitcount 5 --name DNSDDOSCHECKF --rsource -j DROP
-A FORWARD -d 10.0.0.2/32 -p tcp --dport 53 -m recent --set --name DNSDDOSCHECKF --rsource
-A FORWARD -d 10.0.0.2/32 -p tcp --dport 53 -m recent --update --seconds 60 --hitcount 5 --name DNSDDOSCHECKF --rsource -j DROP

Где 10.0.0.2 — внутренний адрес DNS сервера, 53 — порт DNS, 60 — время сброса таймера, 5 — число подключений, после которого срабатывает блокировка до сброса таймера. DNSDOSCHECKF — имя счетчика (можно задать свое любое)

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

Цель 2: SSHd

Тут все было довольно классически — брут пользователей и паролей. Решается тем же способом, что и выше, только надо ограничить число подключений к 22/tcp. Также могу порекоммендовать сменить порт демона и использовать авторизацию по ключам. То, что перебор осуществлялся по стандартным словарям опять таки подтвеждало мою догадку, что это либо кто-то развлекается либо просто мой сервак попал под массовый обстрел.

Цель 3: SMB

Увидел запросы к самбе своего DC. Т.к. она мне по сути не нужна — отключил, тут придумывать что-то было не нужно. Как вариант можно заблокировать порты через iptables, если нужно использование внутри виртуальной сети.