Аудит безопасности RDP
Оглавление: Всё о RDP: от настройки до взлома
1. Удалённый рабочий стол RDP: как включить и как подключиться по RDP
2. RDP в Linux: запуск сервера и подключение к Windows
3.1 Как обнаружить компьютеры с Remote Desktop Protocol (RDP)
3.1.1 Поиск RDP по открытым портам
3.1.2 Подключение стандартными утилитами
3.3 Сбор информации об RDP и через RDP
3.3.1 rdp-sec-check для получения характеристик настроек безопасности RDP службы
3.3.2 Скрипты Nmap для сбора информации и аудита RDP
3.4 Атака человек-посередине на RDP
В этом разделе рассмотрены инструменты и методы, которые связаны с поиском и проверкой защищённости удалённых рабочих столов, работу которых обеспечивает служба RDP.
Как обнаружить компьютеры с Remote Desktop Protocol (RDP)
Поиск RDP по открытым портам
По умолчанию RDP сервер прослушивает TCP-порт 3389 и UDP-порт 3389, поэтому компьютеры с включённым удалённым рабочим столом можно искать с помощью Nmap командой вида:
sudo nmap -p 3389 -sU -sS СЕТЬ
Например:
sudo nmap -p 3389 -sU -sS --open 192.168.0.0/24
Для сбора баннеров можно добавьте опции -sV —script=banner (Рецепты Nmap):
sudo nmap -p 3389 -sU -sS -sV —script=banner 192.168.0.0/24
Подключение стандартными утилитами
Проверить наличие запущенной службы RDP можно и обычными утилитами.
В Windows:
В Linux:
xfreerdp /f /u:ИМЯ-ПОЛЬЗОВАТЕЛЯ /p:ПАРОЛЬ /v:ХОСТ[:ПОРТ]
rdesktop -u ПОЛЬЗОВАТЕЛЬ -p ПАРОЛЬ ХОСТ
Брут-форс RDP
crowbar (levye)
Программа crowbar, которая раньше называлась levye, это инструмент брут-форса, который поддерживает sshkey, vnckey, rdp, openvpn.
Особенность программы — это её простота и эффективность.
Установка crowbar в Kali Linux
sudo apt install crowbar freerdp2-x11 openvpn nmap
Установка crowbar в BlackArch
sudo pacman -S crowbar freerdp openvpn nmap
В качестве цели можно указать диапазон IP адресов в формате CIDR (опция -s), либо файл с такими диапазонами (опция -S). Если нужно указать только одну цель (один IP адрес), то просто используйте маску /32, например, 192.168.0.101/32.
Опцией -U указывает файл со списком имён пользователей, а опцией -u можно указать одного пользователя.
Опцией -C указывает файл со списком паролей, а опцией -c можно указать один пароль.
С опцией -b нужно указать протокол для атаки, в данном случае это -b rdp.
С опцией -p можно изменить стандартный порт протокола.
Опция -d делает так, что предварительно проверяется проверка, открыты ли порты на указанных целях (т. е. указанных с помощью опций -S и -s). Проверка делается программой nmap.
Все опции crowbar: https://kali.tools/?p=3636
Пример успешной атаки на RDP:
sudo crowbar -b rdp -U user.txt -C passwords.txt -s 192.168.0.101/32
Программа levye также работает, но в ней чуть другие опции, пример запуска:
levye -b rdp -u logins.txt -c passwords.txt -s 192.168.0.101/32
patator
patator это мощнейшая программа для брут-форса множества сетевых служб.
Пример запуска брут-форса RDP:
patator rdp_login host=192.168.0.101 user=FILE0 password=FILE1 0=user.txt 1=passwords.txt -x ignore:fgrep='ERRCONNECT_LOGON_FAILURE'
Более подробно об использовании patator смотрите в карточке программы https://kali.tools/?p=269, а также по ссылкам на инструкции внизу карточки программы.
rdesktop-brute
Это модифицированная версия уже рассмотренной программы rdesktop, которая является клиентом для подключения к Windows Remote Desktop. Эта версия отличается от оригинальной тем, что добавлен патч для брут-форса.
Напомню, что программа rdesktop требует дополнительной настройки в случае включённой проверки подлинности на уровне сети (NLA), поэтому пользоваться её не очень удобно.
Сбор информации об RDP и через RDP
rdp-sec-check для получения характеристик настроек безопасности RDP службы
Инструмент rdp-sec-check проверяет, какие используются алгоритмы шифрования и методы аутентификации, а также некоторые другие настройки безопасности. В конце проверки rdp-sec-check подводит краткий итог о возможных проблемах безопасности службы удалённого рабочего стола.
Установка rdp-sec-check в Kali Linux
sudo cpan install Encoding::BER Ctrl+d wget https://raw.githubusercontent.com/portcullislabs/rdp-sec-check/master/rdp-sec-check.pl chmod +x rdp-sec-check.pl ./rdp-sec-check.pl --help
Установка rdp-sec-check в BlackArch
sudo pacman -S rdp-sec-check
Команда для запуска очень простая:
rdp-sec-check ХОСТ
Например:
rdp-sec-check 192.168.0.101
На скриншоте вы можете видеть используемые на удалённом RDP сервере методы обеспечения безопасности. Можно увидеть, что после строки [+] Summary of security issues (краткий перечень проблем безопасности) ничего нет, значит явных проблем не выявлено.
Проверим другой, менее защищённый хост:
rdp-sec-check 192.168.0.89
Здесь мы видим следующие проблемы безопасности сервера RDP:
[+] Summary of security issues [-] 192.168.0.89:3389 has issue NLA_NOT_SUPPORTED_DOS [-] 192.168.0.89:3389 has issue SSL_SUPPORTED_BUT_NOT_MANDATED_MITM
В них сказано, что не используется NLA и поэтому возможна атака DOS. От себя добавлю, что если не используется NLA, то ещё и возможна атака человек-посередине. Далее сказано, что SSL поддерживается, но не является обязательной, что делает возможной атаку MITM (человек-посередине).
Скрипты Nmap для сбора информации и аудита RDP
Полный перечень скриптов: https://nmap.org/nsedoc/
Среди них я нашёл 3, имеющих отношение к RDP:
rdp-enum-encryption
Определяет, какой уровень безопасности и уровень шифрования поддерживаются службой RDP. Это происходит путём циклического перебора всех существующих протоколов и шифров. При запуске в режиме отладки сценарий также возвращает отказавшие протоколы и шифры, а также все обнаруженные ошибки.
rdp-ntlm-info
Этот скрипт перечисляет информацию от удалённых служб RDP с включённой аутентификацией CredSSP (NLA).
rdp-vuln-ms12-020
Проверяет, является ли машина уязвимой для уязвимости MS12-020 RDP.
Для запуска нужно использовать опцию —script, после которой можно указать скрипт, либо несколько скриптов через запятую:
sudo nmap -p 3389 -sU -sS --script rdp-enum-encryption,rdp-ntlm-info,rdp-vuln-ms12-020 192.168.0.101
Также можно задействовать все скрипты следующим образом:
sudo nmap -p 3389 -sU -sS --script 'rdp-*' 192.168.0.101
Пример поиска серверов RDP в локальной сети и получение информации с помощью NSE скриптов:
sudo nmap -p 3389 -sU -sS --script 'rdp-*' 192.168.0.0/24
Атака человек-посередине на RDP
Responder
Responder это комплексный инструмент для выполнения атаки человек-посередине в отношении методов аутентификации Windows. Среди прочих жульнических серверов, в программе имеется RDP сервер.
Смотрите пример использования Responder в статье «Взлом сетевой аутентификации Windows».
pyrdp
pyrdp — это инструмент для атаки человек-посередине и библиотека для работы с RDP написанные на Python 3.
Включает в себя три инструмента:
- pyrdp-clonecert
- pyrdp-mitm
- pyrdp-player
В pyrdp отсутствует собственный спуфер, поэтому перенаправление трафика нужно выполнять сторонними инструментами, такими как bettercap, Ettercap или MITMf.
Автор pyrdp создал свою собственную версию bettercap, главное отличие от оригинальной, которая при атаке перенаправляет весь трафик, в том, что эта версия перенаправляет только RDP трафик. Подробности об этом здесь: https://github.com/GoSecure/pyrdp/blob/master/docs/bettercap-rdp-mitm.md
Пример запуска атаки человек-посередине на RDP с помощью pyrdp:
pyrdp-mitm 192.168.0.101
Ошибка «ImportError: cannot import name 'RsaKey' from 'Crypto.PublicKey.RSA'»
Возможно возникновение следующей ошибки:
Traceback (most recent call last): File "/usr/bin/pyrdp-mitm", line 16, in <module> from pyrdp.core import settings File "/usr/lib/python3.8/site-packages/pyrdp/core/__init__.py", line 9, in <module> from pyrdp.core.FileProxy import FileProxy, FileProxyObserver File "/usr/lib/python3.8/site-packages/pyrdp/core/FileProxy.py", line 10, in <module> from pyrdp.core.observer import Observer File "/usr/lib/python3.8/site-packages/pyrdp/core/observer.py", line 7, in <module> from pyrdp.pdu import PDU File "/usr/lib/python3.8/site-packages/pyrdp/pdu/__init__.py", line 28, in <module> from pyrdp.pdu.rdp.connection import ClientChannelDefinition, ClientClusterData, ClientCoreData, ClientDataPDU, \ File "/usr/lib/python3.8/site-packages/pyrdp/pdu/rdp/connection.py", line 10, in <module> from Crypto.PublicKey.RSA import RsaKey ImportError: cannot import name 'RsaKey' from 'Crypto.PublicKey.RSA' (/usr/lib/python3.8/site-packages/Crypto/PublicKey/RSA.py)
Для её исправления выполните команды:
sudo pip3 uninstall PyCrypto sudo pip3 uninstall PyCryptodome sudo pip3 install PyCryptodome
Ошибка «The server failed the negotiation. Error: The server requires that the client support Enhanced RDP Security»
Также возможна такая ошибка:
[2020-04-17 15:37:52,717] - INFO - Joyce154823 - pyrdp.mitm.connections.tcp - New client connected from 192.168.0.53 [2020-04-17 15:37:52,717] - INFO - Joyce154823 - pyrdp.mitm.connections.x224 - Cookie: mstshash=Tester [2020-04-17 15:37:52,718] - INFO - Joyce154823 - pyrdp.mitm.connections.tcp - Server connected [2020-04-17 15:37:52,723] - INFO - Joyce154823 - pyrdp.mitm.connections.x224 - The server failed the negotiation. Error: The server requires that the client support Enhanced RDP Security (section 5.4) with CredSSP (section 5.4.5.2). [2020-04-17 15:37:52,725] - INFO - Joyce154823 - pyrdp.mitm.connections.tcp - Server connection closed. Connection to the other side was lost in a non-clean fashion: Connection lost.
Причина её в том, что на данный момент программа не поддерживает Network Level Authentication (NLA), то есть проверку подлинности на уровне сети. Чуть подробнее об этом сказано здесь: https://github.com/GoSecure/pyrdp/issues/168
Network Level Authentication (NLA) является хорошим способом дополнительной защиты RDP, поскольку без знания атакующим пароля пользователя Windows становится невозможно выполнить атаку человек-посередине на RDP.
seth
seth выполняет атаку MitM и извлекает учётные данные в виде простого текста из RDP подключений.
Использование:
/usr/share/seth/seth.sh <INTERFACE> <ATTACKER_IP> <VICTIM_IP> <GATEWAY_IP|HOST_IP>
Пример запуска:
sudo seth wlo1 192.168.0.89 192.168.0.101 192.168.0.1
Прочие программы
sensepost-xrdp
sensepost-xrdp это простейший инструмент удалённого рабочего стола X11 для эксплуатации сессий X11 не требующих аутентификации.
sticky-keys-hunter
sticky-keys-hunter это скрипт для тестирования RDP хостов на sticky keys и utilman backdoor.
Использование:
sticky-keys-hunter ЦЕЛЕВОЙ_IP
Связанные статьи:
- Инструкция по использованию Router Scan by Stas’M. Часть первая: Опции и анонимность сканирования (50.1%)
- Как пользоваться Kali Linux в WSL (подсистеме Windows для Linux): подборка лучших программ (ч. 1) (50.1%)
- Всё о RDP: от настройки до взлома (50%)
- sshprank: массовая проверка учётных данных SSH и быстрый сбор SSH баннеров (50%)
- Кража паролей и обход двухфакторной аутентификации с evilginx2 (37.3%)
- Аудит безопасности IP камер (RANDOM - 36.7%)