Mikrotik. Защищаем RDP от брутфорса

Задача: защитить RDP-сервера от подбора пароля.

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

Способ номер 1: использовать нестандартный порт.

Заключение: не работает.

Точнее, работает, но за пару-тройку дней злоумышленники снифером находят нестандартный порт и продолжают атаку по подбору пароля.

Способ номер 2: использовать возможности МикроТика.

Заключение: работает.

Идея способа.

Мысль 1.

В начале установлении RDP-подключения на порт МикроТика  «прилетают» пакеты со статусом NEW. Все остальные пакеты для установленной сессии будут иметь статус ESTABLISHED или RELATED. Windows XP при установлении подключения присылает 1 пакет со статусом NEW, Windows 10 до 3-х пакетов со статусом NEW.

Мысль 2.

Современные брутфорсеры не «ломятся» подбирать пароли, они спокойно их перебирают, посылая 1 запрос в течение 5-10 минут. Соответственно, нужно отслеживать такой «ленивый» подбор паролей. Нормальный пользователь RDP не будет каждые 10 минут переподключаться, поэтому если  с какого-то IP-адреса в течение часа поступает 5-6 запросов на установление RDP-сессии, — это будет признаком брутфорсера. Допустим, что используется Windows 10… 3 пакета со статусом NEW умножить на 5 попыток в час  = 15 пакетов со статусом NEW, т.е. если с какого-то адреса за час прилетает больше 15 новых пакетов, блокируем этот адрес на сутки. 🙂

Идея реализации.

  • Если прилетает любой пакет с адреса, который находится в списке Bruteforcers, игнорируем его.
  • «Прилетает» новый пакет с нового адреса, который не находится ни в каком списке, мы его отправляем в список BruteForcers_Step1.
  • Прилетает опять новый пакет, если он находится в списке BruteForcers_Step1, добавляем его в список BruteForcers_Step2
  • Прилетает опять новый пакет, если он находится в списке BruteForcers_Step2, добавляем его в список BruteForcers_Step3
  • Прилетает опять новый пакет, если он находится в списке BruteForcers_Step14, добавляем его в список BruteForcers_Step15
  • Прилетает опять новый пакет, если он находится в списке BruteForcers_Step15, добавляем его в список Bruteforcers

Код идеи.

  • /ip firewall filter

# В цепоче forward

  • add action=drop chain=forward comment=»Block BruteForcers» in-interface-list=ISP src-address-list=BruteForcers
  • add action=jump chain=forward comment=»RDP. Go into the chain for detecting Bruteforcers» connection-state=new dst-port=3389 in-interface-list=ISP jump-target=BruteForcersDetect protocol=tcp

# Цепочка BruteForcersDetect

  • add action=add-src-to-address-list address-list=BruteForcers address-list-timeout=1d chain=BruteForcersDetect comment=»Adding an address to the list of Bruteforcers» log=yes src-address-list=BruteForcers_Step15
  • add action=add-src-to-address-list address-list=BruteForcers_Step15 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step15 src-address-list=BruteForcers_Step14
  • add action=add-src-to-address-list address-list=BruteForcers_Step14 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step14 src-address-list=BruteForcers_Step13
  • add action=add-src-to-address-list address-list=BruteForcers_Step13 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step13 src-address-list=BruteForcers_Step12
  • add action=add-src-to-address-list address-list=BruteForcers_Step12 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step12 src-address-list=BruteForcers_Step11
  • add action=add-src-to-address-list address-list=BruteForcers_Step11 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step11 src-address-list=BruteForcers_Step10
  • add action=add-src-to-address-list address-list=BruteForcers_Step10 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step10 src-address-list=BruteForcers_Step9
  • add action=add-src-to-address-list address-list=BruteForcers_Step9 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step9 src-address-list=BruteForcers_Step8
  • add action=add-src-to-address-list address-list=BruteForcers_Step8 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step8 src-address-list=BruteForcers_Step7
  • add action=add-src-to-address-list address-list=BruteForcers_Step7 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step7 src-address-list=BruteForcers_Step6
  • add action=add-src-to-address-list address-list=BruteForcers_Step6 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step6 src-address-list=BruteForcers_Step5
  • add action=add-src-to-address-list address-list=BruteForcers_Step5 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step5 src-address-list=BruteForcers_Step4
  • add action=add-src-to-address-list address-list=BruteForcers_Step4 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step4 src-address-list=BruteForcers_Step3
  • add action=add-src-to-address-list address-list=BruteForcers_Step3 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step3 src-address-list=BruteForcers_Step2
  • add action=add-src-to-address-list address-list=BruteForcers_Step2 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step2 src-address-list=BruteForcers_Step1
  • add action=add-src-to-address-list address-list=BruteForcers_Step1 address-list-timeout=30m chain=BruteForcersDetect comment=BruteForcers_Step1
  • add action=return chain=BruteForcersDetect comment=»End of chain and return.»

 

Идея уже работает на «боевых» МикроТиках… Нареканий пока нет. 🙂

PS.

Ссылка на текстовый файл с кодом: ./wp-content/uploads/2019/05/bruteforcersdetect.txt

PPS.

Таким способом можно защищать не только RDP, но и SSH, и другие ресурсы… 🙂