Задача: защитить 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, и другие ресурсы… 🙂