🏆 Рейтинг ІТ-работодателей 2019: уже собрано более 5000 анкет. Оцените свою компанию!
×Закрыть

DDoS-атака на RDP-службы: распознать и побороть. Успешный опыт от Tucha

Расскажем вам прохладную историю о том, как «третьи лица» пытались помешать работе наших клиентов, и как эта проблема была решена.

Как всё началось

А началось всё с утра 31 октября, в последний день месяца, когда многим позарез необходимо успеть закрыть срочные и важные вопросы.
Один из партнёров, который держит в нашем облаке несколько виртуальных машин клиентов, которых он обслуживает, сообщил о том, что с 9:10 до 9:20 сразу несколько Windows-серверов, работающих на нашей украинской площадке, не принимали соединения со службой удалённого доступа, пользователи не могли зайти на свои рабочие столы, но через несколько минут проблема как будто бы устранилась сама собой.

Мы подняли статистику работы каналов связи, но не обнаружили ни всплесков трафика, ни провалов. Заглянули в статистику нагрузки на вычислительные ресурсы — никаких аномалий. Что это было?

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

Пакет с запросом на установление соединения приходит на сервер
xx:xx:xx.xxxxxx IP xxx.xxx.xxx.xxx.58355 > 192.168.xxx.xxx.3389: Flags [S], seq 467744439, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

Сервер получает этот пакет, но соединение отклоняет:
xx:xx:xx.xxxxxx IP 192.168.xxx.xxx.3389 > xxx.xxx.xxx.xxx.58355: Flags [R.], seq 0, ack 467744440, win 0, length 0

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

Пока разбирались, получили аналогичные обращения от ещё нескольких клиентов и партнёров.
А что вообще происходит на этих машинах?

В журналах регистрации событий полно сообщений о попытке подобрать пароль:

Обычно такие попытки регистрируются на всех серверах, где для службы удалённого доступа используется стандартный порт (3389) и при этом разрешён доступ отовсюду. В сети Интернет полным-полно ботов, которые постоянно сканируют все доступные точки подключения и пытаются подобрать пароль (именно по этой причине мы настоятельно рекомендуем использовать сложные пароли вместо «123»). Тем не менее, интенсивность этих попыток в тот день была уж слишком высока.

Как поступить?

Рекомендовать клиентам посвятить кучу времени на то, чтобы изменить настройки у огромного количества конечных пользователей, чтобы переключиться на другой порт? Не очень хорошая идея, клиенты не будут рады. Рекомендовать разрешить доступ только через VPN? В спешке и панике поднимать IPSec-соединения, у кого они не подняты, — пожалуй, клиентам такое счастье тоже не улыбается. Хотя, надо сказать, это в любом случае дело богоугодное, мы всегда рекомендуем прятать сервер в частную сеть и готовы помогать с настройками, а для любителей разбираться самостоятельно делимся инструкциями для настройки IPSec/L2TP в нашем облаке в режиме site-to-site или road-warrior, а если кто желает поднять VPN-службу на своём собственном Windows-сервере — всегда готовы поделиться подсказками касательно того, как поднять стандартный RAS или OpenVPN. Но, какие бы клёвенькие мы ни были, это было не лучшее время для ведения просветительской работы среди клиентов, так как нужно было как можно быстрее устранить проблему с минимальным напрягом для пользователей.

Решение, которое мы внедрили, заключалось в следующем. Мы наладили анализ проходящего трафика таким образом, чтобы отслеживать все попытки установить TCP-подключение к порту 3389 и выбирать из него адреса, которые в течение 150 секунд пытаются установить соединения с более чем 16 разными серверами в нашей сети, — это и есть источники атаки (разумеется, если у кого-то из клиентов или партнёров есть реальная потребность устанавливать соединения с таким количеством серверов из одного и того же источника, всегда можно добавить такие источники в «белый список». При этом, если в одной сети класса C за эти 150 секунд выявлено более 32 адресов, есть смысл блокировать всю сеть. Блокировка устанавливается на 3 суток, а если за это время атаки из данного источника не производились, этот источник удаляется из «чёрного списка» автоматически. Список заблокированных источников обновляется раз в 300 секунд.

Список этот доступен здесь, можете строить на базе него свои ACL.

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

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

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

Один в поле не воин

В понедельник, 4 ноября, мы узнали, что с аналогичной проблемой столкнулись и другие операторы. Кто-то всё ещё считает, что это Microsoft внесла какие-то изменения в код службы удалённого доступа (если помните, мы в первый день заподозрили то же самое, но эту версию мы очень скоро отвергли) и обещает сделать всё возможное, чтобы как можно скорее найти решение. Кто-то просто игнорирует проблему и советует клиентам защищаться своими силами (менять порт подключения, прятать сервер в частную сеть и так далее). А мы в первый же день не только решили эту проблему, но и создали некоторый задел для более глобальной системы обнаружения угроз, которую планируем развивать.

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

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Як ви збирали статистику запитів по всій мережі? Щось типу DPI на роутері? Чи агенти на серверах з RDP, що зливають логи підключеннь?

Оскільки в мережі декілька майданчиків, а маршрутизуюче обладнання не все однакове, було вирішено збирати PCAP безпосередньо з хостов віртуалізації (от тут майже всі однакові — Linux з KVM в якості гіпервізора).

надо бы все-таки сделать либо приватный vpn либо вайтлист с которых подключение может быть в админке клиента, как это в digital ocean делается

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

Мушу зазначити, що fail2ban тут не дуже підходить. Нам було потрібно моніторити транзитний трафік для великої кількості клієнтських серверів та знаходити адреси, з яких впродовж короткого проміжку часу були звернення до N різних серверів. Я розумію, що fail2ban сюди можна було б причепити, але навколо нього довелось би робити все те ж саме, що зроблено в нас без fail2ban. Тобто fail2ban став би ще одним компонентом, у якому, чесно кажучи, великої потреби нема. :-)

Отличная статья! Всё кратко, по делу и интересно. Спасибо!

Дякуємо за зворотній зв’язок, завжди раді поділитись чимось корисним.

побольше бы технических статей на dou. Спасибо.

Спасибо, тогда будем иногда постить ещё какие-то полезные заметки.

Техническая статья доступным языком!
Спасибо!

Спасибо, Денис! Стараемся быть полезными и понятными :)

Подписаться на комментарии