Автоматический RDP чекер на конфигурацию

Расматривая тему уязвимостей Windows систем мы продолжим расказ о атаках направленных на корпоративные сети затронутой . Удивительное дело, но теперь техника Pass-the-Hash работает и для RDP-подключений. То есть мы можем аутентифицироваться с помощью NTLM-хеша пользователя при подключении по RDP!

С другой стороны, я недавно узнал, что, оказывается, не все люди в курсе, что это такое - PtH. А потому кратенько расскажу про это дело.
Итак, начнем с того, что в ОС Windows многопользовательская система и потому ей надо хранить пароли пользователей. Но хранить их в открытом тексте не секьюрно, а потому их хранят захешироваными. Хеширование - это однонаправленная функция, по результату которой нельзя узнать входное значение (то есть нельзя «расшифровать»). NT-хеш - это тот формат, в котором винда хранит пароли. Причем подчеркну, что даже если это отдельный хост или домен - формат хранения один.


Второй важный момент - это глубокая поддержка Single Sign-on («единая» автоматическая аутентификация) виндой на базе NTLM-аутентификации. В ней не передается в открытом виде ни пароль, ни сам NT-хеш. Алгоритм такой: сначала клиент посылает запрос на подключение, потом сервер возвращает ему случайно сгенеренную последовательность (challenge). После этого клиент берет хеш-пользователя, соединяет c challeng’eм, хеширует и отправляет на сервер. Тот, в свою очередь, делает то же самое. И если хеши совпадают, то пользователь верный.

Выводом здесь будет то, что NT-хеш является полным эквивалентом пароля пользователя. Ведь почти все сервисы, которые есть в экосистеме Windows, поддерживают NTLM-аутентификацию. Например, HTTP, SMB (через который мы можем подключаться и управлять хостом удаленно), SMTP, FTP, подключения к SQL-серверу и так далее.

Таким образом, захакав какой-то хост в домене, мы можем получить хеши пользователей из памяти и дальше ходить по сети, аутентифицируясь везде с ними. Это техника и называется Pass-the-Hash. В итоге защита домена складывается, как карточный домик.

Исключением всегда был протокол RDP. Раньше можно было подключиться, только введя пароль. И это составляло проблему, так как очень часто бывают закрытые сегменты (DMZ, например) в корпоративной сети, где на файрволе разрешен доступ только RDP (чтобы админы могли админить).

Так вот, в Windows 8.1 и 2012 R2 по умолчанию теперь есть поддержка аутентификации с хешем. Но изначально у микрософта эта функция называется Restricted Admin Mode, и о «поддержке» PtH они, конечно, не говорят.

А потому давайте скажем спасибо ресерчерам с labs.portcullis.co.uk за то, что они поведали миру всю правду (подробности, видеосмотри там же). Теперь коротко о практике. Все, что нам нужно для подключения, - результат трудов FreeRPD Project, то бишь опенсорсный RDP-клиент (по умолчанию входит в Kali). После публикации исследования они внедрили поддержку PtH прямо в него. А потому для подключения нам требуется следующая строка в консоли:

xfreerdp / d : domain_name / u : Administrator / pth : 8846F7EAEE8FB117AD06BDD830B7586C / v : 192.168.0.1

где после /d: - имя домена,
после /u: - имя пользователя,
после /pth: -хеш,
после /v: - IP сервера.

Продается полностью автоматический многопоточный чекер RDP серверов на конфигурацию. Чекер написан на C++ и основан на чистом протоколе RDP без использования каких-либо сторонних библиотек. Грамотная организация многопоточности позволяет выжать максимум возможностей из железа и максимально сократить время, требуемое для проверки больших списков.

Чекер обладает следующими преимуществами
Работает в несколько потоков, а не процессов. Это объясняется в первую очередь тем, что используется чистая реализация протокола "на сокетах". Никаких специализированных библиотек от Microsoft не используется.
Процесс проверки серверов полностью автоматизирован. Никаких ручных манипуляций не требуется! Достаточно запустить чекер один раз и забыть о его работе. Всё остальное он сделает сам.
Работает со всеми версиями операционных систем семейства Windows - от XP до Windows 10. Серверные ОС также поддерживаются. В тестировании принимали участие различные машины, среди которых были Windows 7, Windows Server 2003, Windows Server 2008, Windows Server 2012.
При работе буфер обмена остается нетронутым. Используется файловая схема синхронизации, что делает работу чекера на машине незаметной. Можно спокойно делать свои дела и забыть о том, что он выполняет свою работу.
Расшаривается только специальная временная директория, а не весь диск. Это позволяет запускать чекер и не бояться, что кто-то с сервера сможет получить или изменить файлы на машине с запущенным чекером.

Чекер умеет делать
Запускать произвольные exe файлы (в любом количестве) на удаленной машине.
Получать системную информацию о компьютере: название и версию ОС, разрядность ОС, наличие административных прав у учетной записи, модель процессора и количество ядер, размер ОЗУ.
Определять входящую и исходящую скорость интернет соединения (автоматически определяется ближайший сервер для тестирования).
Определять настоящий внешний IP адрес, и уже по нему определять страну, область, город, ZIP, провайдера, ISP, почтовый сервер, временную зону.
Проверять настоящий внешний IP адрес на его наличие в блек листах, а также определять proxy score этого адреса.
Определять браузер, используемый по умолчанию.

Фичи чекера
Возможность приостановить работу чекера и продолжить с места остановки.
Возможность горячего изменения количества потоков во время паузы. Не нужно запускать процесс чека заново для того, чтобы просто изменить количество потоков. Таким же образом можно полностью изменить другие настройки. Следует только поставить на паузу, выполнить изменения, а затем продолжить.
Полное управление всеми тайм-аутами.
Возможность указать количество попыток с автоматически увеличиваемыми тайм-аутами в случае неудачной попытки подключения. Это позволяет подсоединяться даже к самым проблемным rdp серверам.

Системные требования
В системе должен быть установлен Microsoft Visual C++ 2012 Redistributable
Количество возможных потоков полностью зависит от оперативной памяти и возможностей процессора. Среднее количество памяти, которое требуется для одного потока равно 3 мегабайтам.

Стоимость чекера: 0.7 BTC (без привязки) [~400$]
Контакт jid:

Как и в прошлых клиентских версиях операционных систем Майкрософт, пользователи Pro и Enterprise Windows 10 (но не Home) редакций могут удаленно подключаться к своим компьютерам через службу удаленных рабочих столов (RDP). Однако есть ограничение на количество одновременных RDP сессии – возможна одновременная работа только одного удаленного пользователя. При попытке открыть вторую RDP сессию, сеанс первого пользователя предлагается завершить.

В английской версии предупреждение такое:

Another user is signed in. If you continue, they’ll be disconnected. Do you want to sign in anyway?

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

  1. Поддержка RDP доступа имеется только в старших редакциях Windows (Professional и выше), а в домашних редакциях (Home) этот функционал отключен.
  2. Возможно только одно удаленного RDP подключения. При попытке открыть вторую RDP-сессию, пользователю предлагается завершить существующее подключение.
  3. В том случае, есть пользователь работает за консолью компьютера (локально), при удаленном подключении RDP, его сеанс будет отключен (заблокирован). Правильно и обратное утверждение: удаленный RDP сеанс принудительно завершается, если пользователь авторизуется на консоле системы

По сути, ограничение на количество одновременных rdp подключений является не техническим, а скорее лицензионным, запрещающее создавать на базе рабочей станции терминальный RDP сервер для работы нескольких пользователей. Хотя с технической точки зрения любая редакция Windows при наличии достаточного количества памяти может поддерживать одновременную работу нескольких десятков удаленных пользователей (в среднем на одну сессию пользователя без учета запускаемых приложений требуется 150-200 Мб памяти). Т.е. максимальное количество одновременных сессий в теории ограничивается только ресурсами компьютера.

Мы рассмотрим два способа отключить ограничение на количество одновременных RDP подключений к Windows 10:

Важно . Изначально в самой первой версии статьи основным рабочим вариантом, позволяющим снять ограничение на количество одновременных RDP подключений пользователей был способ модификации и подмены файла termsrv.dll в папке %SystemRoot%\System32. Однако при установке нового билда Windows 10 или некоторых обновлений безопасности, этот файл обновляется. В результате приходится каждый раз редактировать этот файл Hex редактором, что довольно утомительно. Поэтому в качестве основного способа организации бесплатного терминального сервера на клиентской Windows 10 стоит считать утилиту RDP Wrapper Library .

Примечание . Модификации системы, описанные в этой статье, вероятно, будут считаться нарушением лицензионного соглашения на Windows со всеми вытекающими последствиями.

RDP Wrapper Library

Альтернативой модификации файла termsrv.dll является использование проекта RDP Wrapper Library . Эта программа работает в качестве прослойки между менеджером управления службами (SCM- Service Control Manager) и службой терминалов (Terminal Services) и позволяет включить не только поддержку нескольких одновременных RDP сессии, но и активировать поддержку RDP Host на домашних редакциях Windows 10. RDP Wrapper не вносит никаких изменений в файл termsrv.dll, просто подгружая termsrv с изменёнными параметрами.

Таким образом, это решение будет работать даже при обновлении версии файла termsrv.dll, что позволяет не опасаться обновлений Windows.

Важно . Перед установкой RDP Wrapper: важно, чтобы у вас использовалась оригинальная (непропатченная) версия файл termsrv.dll. В противном случае RDP Wrapper может работать не стабильно, или вообще не запускаться.

Скачать RDP Wrapper можно с репозитория GitHub: https://github.com/binarymaster/rdpwrap/releases (последняя доступная версия RDP Wrapper Library v1.6.2 вышла относительно недавно – 28 декабря 2017 года). Судя по информации на странице разработчика, поддерживаются все версии Windows. Windows 10 поддержиывается вплость до версии Insider Preview build 10.0.17063.1000 от 13 декабря 2017 года.

Совет . Кстати говоря, доступны исходники RDP Wrapper Library, что позволяет при желании самому собрать исполняемые файлы.

Архив RDPWrap-v1.6.2.zip содержит несколько файлов:

  • RDPWinst.exe -программа установки/удаления RDP Wrapper Library
  • RDPConf.exe - утилита настройки RDP Wrapper
  • RDPCheck.exe - Local RDP Checker — утилита проверки RDP
  • install.bat, uninstall.bat, update.bat - пакетные файлы для установки, удаления и обновления RDP Wrapper

Чтобы установить утилиту, запускам файл install.bat с правами администратора.

После окончания установки запускаем RDPConfig.exe . И удостоверяемся, что в секции Diagnostics все элементы окрашены в зеленый цвет.

Примечание . В моем случае, т.к. на компьютере отсутствует доступ в интернет, программа не смогла получить с Github актуальную версию INI файла с настройками под мою версию Windows. Поэтому в статусе указано . Скачайте файл rdpwrap.ini с ресурса разработки и поместите его в каталог установки. Перезапустите службу и убедитесь, что надпись сменилась на .

Из интересных особенностей новой версии RDP Wrapper:

  • опция Hide users on logon screen – позволяет .
  • При отключении опции Single session per user — будут разрешены несколько одновременных RDP сессий под одной учетной записью (устанавливается ключ реестра fSingleSessionPerUser = 0 в ветке HKLM\SYSTEM\ CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser).

В том случае, если после обновления версии Windows, RDP Wrapper не работает, проверьте, что в секции Diagnostics присутствует надпись .

Попробуйте обновить ini файл скриптом update.bat , либо вручную и переустановить службу

rdpwinst.exe -u
rdpwinst.exe -i

Пытаемся открыть вторую RDP сессию. Все получилось! Теперь наша Windows 10 позволяет одновременно подключаться по RDP сразу двум удаленным пользователям.

Утилита должна работать на всех поддерживаемых на данный момент редакциях Windows: Windows Vista, Windows 7, Windows 8, Windows 8.1 и Windows 10. Таким образом из любой клиентской версии Windows можно сделать сервер терминалов.

Модификация файла termsrv.dll

Примечание . Данный способ применим только к RTM версии Windows 10 x64 (10240).

Убрать ограничение на количество RDP подключений можно с помощью модификации файла termsrv.dll (файл библиотеки, используемый службой Remote Desktop Services). Файл находится в каталоге C:\Windows\System32).

Перед модификацией файла termsrv.dll желательно создать его резервную копию (в случае необходимости можно будет вернуться к первоначальной версии файла):

copy c:\Windows\System32\termsrv.dll termsrv.dll_backup

Перед правкой файла termsrv.dll нужно стать его владельцем и предоставить группе администраторов полные права на него (все операции выполняются аналогично описанным в статье ). Затем остановите службу Remote Desktop service (TermService) из консоли services.msc или из командной строки:

Net stop TermService

Для редакции Windows 10 x64 RTM (версия файла termsrv.dll — 10.0.10240.16384): Откройте файл termsrv.dll с помощью любого HEX редактора (к примеру, Tiny Hexer)

Найдите строку:

39 81 3C 06 00 00 0F 84 73 42 02 00

И замените ее на:

B8 00 01 00 00 89 81 38 06 00 00 90

Сохраните файл и запустите службу TermService.