Как защитить свое RDP-подключение
Возросшая в последние годы популярность подключений рабочего стола Windows или, как говорят, RDP-подключений привели к резкому скачку количества атак на RDP-сервера и рабочие станции. Причём, большая их часть бывают успешными, что вносит нестабильность в работу сети и утерю конфиденциальных данных компаний и их сотрудников. Борьбу с этим явлением несколько лет назад начала компания Microsoft, выпустив в 2019 году патч по закрытию уязвимостей в службе. И с каждым выпуском нового патча этот процесс продолжается до сих пор. При этом дополнительную защиту может обеспечить выбор проверенного хостинг-провайдера с надёжной инфраструктурой , ориентированного на безопасность и стабильность.Однако всё равно остаётся достаточно много путей проникновения в систему через RDP-подключения, некоторые из которых зависят от самих пользователей, не соблюдающих правила безопасности при настройке и использовании подключения. Рассмотрим основные из известных уязвимостей, а также возможные пути их устранения.
Основные уязвимости и типы атак на RDP
Уязвимости в безопасности службы обусловлены многими факторами, большинство из которых не связаны непосредственно с протоколом RDP (Remote Desktop Protocol), а вызваны такими причинами, как, например, ошибки в реализации компонентов и служб, неправильная конфигурация протокола, не соблюдение пользователями правил безопасности и многими другими.
Для поиска и выявления уязвимостей в работе службы злоумышленники обычно используют ряд специализированных программ, имеющихся в открытом доступе. Их первоначальной задачей является сбор информации обо всех RDP-подключениях – статусы TCP и UDP портов (для службы по умолчанию используется порт 3389), текущая конфигурация протокола, проверка на наличие в канале SSL-шифрования и некоторые другие данные.
Приведём пример использования известного сетевого сканера (утилита Nmap) для выявления состояния портов и другой информации на нашем хосте. Для этого наберём в терминале Linux следующую команду:
$ nmap -T5 -sV -O localhost
Здесь опция -T5 определяет тип сканирования; опция sV задаёт проверку открытых портов и определение версий служб; опция –O задаёт обнаружение ОС; localhost – задаёт сканирование всех портов на локальном IP 127.0.0.1 .
Ниже приведены выборочные результаты сканирования хоста.
Выход команды:
Host is up (0.000072s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
25/tcp open smtp Exim smtpd 4.96
8443/tcp open ssl/https-alt
Вместо локального хоста мы могли бы указать любой сегмент сети и получить данные обо всех портах и RDP-подключениях выбранного сегмента.
Утилита Nmap имеет ряд готовых скриптов для сбора данных о подключениях, их названия вводятся в командной строке при ёё запуске. Например, скрипт rdp-enum-encryption выявляет уровень шифрования RDP-канала. Это реализуется за счёт циклического перебора известных средств шифрования передаваемых данных. В случае, если обнаружилось, что в канале отсутствует SSL-шифрование, злоумышленник может применить атаку типа «человек по середине», которая будет рассмотрена нами ниже по тексту.
В зависимости от результатов работы программы-сканера выполняются дальнейшие действия по осуществлению взлома, то есть, выбирается наиболее подходящий тип атаки в каждой конкретной ситуации.
Выделим основные уязвимости, имеющиеся в канале:
- Слабая парольная защита;
- Отсутствие шифрования в канале;
- Неправильная настройка протокола;
- Ошибки в реализации RDP-службы;
- Ошибки в компоненте RDG;
- Перехват сеанса.
Рассмотрим детальнее каждый из путей взлома.
Слабая парольная защита
Это один из основных путей проникновения, обусловленный использованием пользователями службы ненадёжного или малонадёжного пароля для своей учётной записи Windows. Именно здесь злоумышленники пытаются в первую очередь найти «дыру» в безопасности и это им часто удаётся. Перехватив учётные данные хотя бы одного пользователя, можно легко получить доступ ко всем другим аккаунтам и передаваемым по каналу данным.
Такой вид атак относится к категории Brute-Force (грубый взлом). Принцип их осуществления заключается в выполнении операций последовательного подбора паролей и логинов для всех учётных записей пользователей одной или нескольких станций выбранного сетевого сегмента. Такие атаки получили общее название «атаки методом подбора». Они имеют ряд разновидностей в зависимости от деталей реализации – подбор по словарю, с подстановкой учётных данных, с распылением паролей и некоторые другие.
Для осуществления этого вида атаки могут использоваться такие программы, как, например, Hydra или Crowbar, имеющие широкие возможности для осуществления разных способов подбора паролей и других учётных данных.
Приведём пример применения утилиты Crowbar для организации атаки на подключения рабочего стола.
В случае использования для взлома только одного пароля и списка имён пользователей, находящегося в отдельном файле, реализация атаки методом подбора для одного IP-адреса может выглядеть так:
$ ./crowbar.py -b rdp -s 192.168.2.209/32 -U ~/Desktop/user_list1 -c 123456
Здесь ~/Desktop/user_list1 – путь к файлу с именами пользователей; 123456 – один из самых распространённых в сети паролей.
Для «обработки» подсети со многими станциями, при наличии списков паролей и имён пользователей атака может быть реализована следующим образом:
$ ./crowbar.py -b rdp -s 192.168.2.0/24 -U ~/Desktop/all_users -C ~/Desktop/all_passwords -d
В случае использования пользователями «слабых» паролей злоумышленники будут иметь большие шансы на «успех». Что касается имён пользователей или логинов, то их сбор не составляет большого труда. Имена сотрудников легко можно перехватить из корпоративной переписки или взять из открытых источников, например, таких как Linkedin и многих других ресурсов для профессионалов и / или коммерческих компаний.
Для защиты от атак рассматриваемого вида может помочь правильная настройка локальной политики безопасности на рабочих станциях под ОС Windows. Например, если в настройках ограничить количество неудачных подключений к компьютеру до 2-х или 3-х попыток, то после их использования, учётная запись пользователя, с которой производится вход, автоматически будет блокироваться. Это один из самых простых способов повышения уровня безопасности в отношении указанных атак.
Отсутствие шифрования в RDP-канале
По результатам предварительного сбора информации по подключениям рабочего стола может быть обнаружено, что какой-то из каналов может не иметь шифрования передаваемых данных, то есть, ни один из SSL/TLS сертификатов не поддерживается. В этом случае, вероятнее всего будет применена атака типа MiTM (Man in the Middle) или, как говорят, «человек по середине». Её суть сводится к перехвату данных аутентификации и другой незащищённой информации методом прослушивания канала.
Приведём пример реализации MiTM атаки с помощью специально разработанной для целей обучения безопасной работе в сети утилиты Seth, созданной на языке Python и средствах управления UNIX-оболочки Bash.
Для проведения атаки необходимо знание трёх параметров: IP целевой станции, локальный IP и идентификатор используемого сетевого интерфейса.
Команда запуска утилиты может выглядеть следующим образом:
$ ./seth.sh vboxnet0 192.168.57.{1,103,50}
Здесь vboxnet0 – сетевой интерфейс.
Приведём выборочные результаты работы программы:
Keyboard Layout: 0x409 (English_United_States)
Key press: 3
Key press: LShift
Key press: S
Key release: S
Key release: LShift
Key press: E
Key release: E
Key press: C
Key release: C
Key press: R
Key release: R
Key press: E
Key release: E
Key press: T
Key release: T
Connection lost
[*] Cleaning up...
[*] Done.
После запуска утилиты, она входит в режим прослушивания NTLM-хэша. Когда пользователь целевого компьютера проходит сеанс аутентификации, устанавливается соединение, и данные хэша, а также введённый им пароль тут же появляются на экране злоумышленника как показано выше (слово SECRET).
Следует отметить, что на экране пользователя станции, подвергшейся взлому, перед установлением соединения должно было появиться сообщение диспетчера сертификатов о конфликте, при котором имя сервера не совпадает с доверенным центром сертификации. В этом случае установление соединения возможно только после его подтверждения со стороны пользователя в окне запроса (была нажата кнопка ДА). Если бы не было подтверждения, то потери данных не произошло бы. Это яркий пример несознательного отношения пользователей к вопросу безопасности при работе в сети.
Основным способом избежать атаки является использование SSL/TLS сертификата, гарантирующего образование защищённого канала передачи данных между рабочей станцией и сервером.
Также может помочь включение аутентификации на уровне сети – опция NLA (Network Level Authentication). Сделать это можно несколькими способами. Приведём один из простейших.
Для рабочей станции под управлением Windows 7 включить проверку аутентификации на уровне сети можно следующим образом: Панель управления > Система и безопасность > Настройка удалённого доступа.
В появившемся окне Свойства системы включить опцию «Разрешить подключаться только с компьютеров, на которых работает удалённый рабочий стол с проверкой подлинности на уровне сети», как показано ниже.
После включения опции, следует нажать кнопку Применить. Теперь NLA на этой станции включено, а значит, она защищена.
Неправильная настройка протокола
Мы уже упоминали о такой важной опции, как NLA-аутентификация. По умолчанию, в настройках всех ОС Windows она отключена, то есть, аутентификация производится на более низком канальном уровне, что делает подключение рабочего стола уязвимым для самого широкого спектра атак типа DDoS (Distributed Denial of Service).
Таким атакам могут быть подвержены протоколы, веб-приложения, почта и многие другие объекты и сетевые службы. DDoS-атаки включают многочисленные виды и подвиды, каждый из которых требует отдельного подхода к защите от него.
Перечислим лишь некоторые из разновидностей DDoS-атак:
- Волюметрические;
- CharGEN-флуд;
- UDP-флуд;
- ICMP-флуд;
- TCP-флуд;
- Сеансовые атаки;
- Slowloris.
Объединяет все эти виды их общая нацеленность на полное выведение из строя или блокирование объекта взлома. Это заключено в самом их названии – «распределённый отказ в обслуживании».
Что касается подключений рабочего стола, то применение NLA-аутентификации является обязательным условием защиты от DDoS-атак. Выше мы уже рассматривали вопрос о её включении.
Ошибки в реализации RDP-службы
Это уязвимость типа use after free одного из системных драйверов, использующихся в службе. Она возникает из-за ошибок динамической памяти во время выполнения кода программы. Это даёт возможность злоумышленнику запустить удалённое выполнение кода или RCE (Remote Code Execution) на стороне целевой машины. При этом атаке могут быть подвержены как старые версии Windows, так и новые. Впервые уязвимость была опубликована компанией Microsoft в 2019 году.
Защитой от RCE может стать своевременное выполнение обновлений версий ОС и установка соответствующих патчей с закрытием уязвимостей от Microsoft.
Ошибки в компоненте RDG
Уязвимость была обнаружена в компоненте большинства версий Windows Server – шлюзе удаленных рабочих столов RDG (Remote Desktop Gateway). Шлюз выполняет функции маршрутизатора и Proxy-сервера при подключении пользователей к RDP-серверу. Уязвимость существует в коде, обрабатывающем данные UDP-протокола. Она позволяет удалённо, ещё до аутентификации, выполнять RCE-код на целевых машинах, использующих подключения рабочего стола.
Её появление стало возможным, из-за наличия двух ошибок в DLL-библиотеке компонента – CVE-2020-0609 и CVE-2020-0610, которые были опубликованы Microsoft ещё в 2020 году.
Для того, чтобы обезопасить свою станцию от взлома через эту брешь в системе безопасности, следует установить соответствующий патч Microsoft. Также можно воспользоваться способом полного отключения UDP (порт 3391), поскольку, как мы уже отмечали, уязвимость существует только для этого протокола. Это можно сделать, например, с помощью брандмауэра.
Перехват сеанса
Уязвимость позволяет получить данные одного из активных сеансов службы, при условии наличия известных учётных данных хотя бы одного пользователя службы, например, Х1. Эти данные могут быть получены одним из рассмотренных нами ранее способов.
Например, мы хотим получить данные активного пользователя службы удалённого стола с именем Х2. Для осуществления атаки мы должны пройти аутентификацию в службе под учётными данными Х1. После этого необходимо запустить одну из программ для извлечения паролей, находящихся в памяти, например, утилиту Mimikatz и вывести все активные сеансы. Используя удалённые команды модуля TypeScript мы можем подключиться к одному из сеансов пользователя Х2 и получить его учётные данные.
Приведённая схема атаки показывает серьезную уязвимость всей корпоративной службы удалённого рабочего стола в случае «утери» учётных данных хотя бы одного сотрудника компании. Поэтому защитой тут может быть чёткое соблюдение правил безопасности всеми пользователями, а также выполнение правильной настройки RDP-подключений.
Как избежать взлома RDP-подключения
Исходя из изложенного в предыдущем разделе, сформулируем рекомендации по защите удалённых подключений рабочего стола от взлома без использования дополнительных программных средств:
- Применение сотрудниками компаний «сложных» паролей для своих учётных записей Windows , при необходимости можно воспользоваться генератором паролей — это поможет надёжно защитить доступ и снизить риск взлома.
- Широкое применение средств защиты, предусмотренных настройками локальной политики безопасности пользовательских станций и серверов ОС Windows;
- Использование только защищённых SSL/TLS каналов передачи данных между сервером и терминалами;
- Установка сетевого уровня аутентификации NLA в настройках RDP-протокола;
- Своевременное обновление версий ОС и установка специальных патчей Microsoft с исправлениями ошибок в компонентах Windows.
Выполнение приведённых рекомендаций во многих случаях позволит избежать взлома и потери конфиденциальных данных компаний и их сотрудников.
Как защитить RDP через IPBan
Ещё несколько лет назад было обнаружено, что во время «отбития» атак на сетевые службы, в том числе и на RDP, происходят непомерно большие затраты машинных ресурсов объекта взлома – ЦП, памяти и т. д. Это стало толчком для создания программных средств блокирования IP, с которых происходят атаки.
Одним из первых и наиболее известных программных средств управляемого блокирования IP-адресов стала программа IPBan с открытым исходным кодом. Она имеет полностью бесплатную ветвь версий, а также платный расширенный вариант с веб-панелью и возможностью управления настройками многих станций сетевого кластера.
Бесплатные релизы программы по умолчанию (из коробки) защищают следующие протоколы, службы и базы данных:
- RDP;
- SSH (Secure Shell);
- SMTP (Simple Mail Transfer Protoco);
- MySQL;
- SQL Server.
Однако список возможностей программы этим не исчерпывается. Она позволяет подключить и настроить любую другую систему для защиты от атак. Единственным условием для этого должно быть наличие в ней средства просмотра и регистрации событий или файла журнала, на основании данных которых могла бы производиться блокировка адресов, с которых производится подключение.
Приведём пример установки и использования бесплатной версии программы для ОС Windows. Разобьём процесс на несколько этапов:
- Подготовка среды и и настройка параметров локальной безопасности;
- Загрузка программы на ПК;
- Настройка параметров конфигурации IPBan;
- Запуск и выполнение программы;
- Проверка результатов работы.
Подготовка среды выполнения и настройка параметров локальной безопасности
Для начала, необходимо проверить наличие на компьютере библиотеки .NET Framework 4.0 или более новой версии, и в случае отсутствия, установить библиотеку. Для версий программы 1.7.1 и выше, понадобится .NET Framework 6.0 или новее.
Как уже упоминалось, для работы программы необходима фиксация системных событий. Для этого внесём изменения в локальную политику безопасности нашей станции, чтобы IP-адреса могли отображаться в системных журналах. Для этого вызовем окно для ввода команд Windows (Win + R), введём в нём название службы secpol.msc и нажмём ОК.
В появившемся окне локальной политики безопасности активируем опции: Аудит событий входа в систему и Аудит входа в систему, как показано ниже.
Результат обновления локальной политики безопасности должен быть таким, как показано ниже.
Загрузка программы на ПК
Скачиваем архив программы с GitHub-репозитория разработчиков и помещаем его на локальный диск своего ПК.
Извлекаем файлы архива в директорию Программа IPBan, как показано ниже.
Список появившихся файлов представлен на скрине.
Настройка параметров конфигурации IPBan
Утилита позволяет установить широкий спектр значений параметров конфигурации, учитывающих политику безопасности для данной станции. Это можно сделать с помощью её файла конфигурации. Откроем в текстовом редакторе файл ipban.config и выставим в нём следующие параметры:
- Время действия блокировки IP-адреса в соответствии с политикой безопасности компании: <add key="BanTime" value="01:00:00:00"/>;
- Допустимое количество неудачных попыток входа: <add key="FailedLoginAttemptsBeforeBan" value="3"/>;
- Добавить в «белый список» IP-адреса – исключения из общего правила: <add key="Whitelist" value="178.20.159.99"/>.
Сохраним внесённые изменения и выйдем из редактора.
Запуск и выполнение программы
В директории развёрнутой программы выделим файл DigitalRuby.IPBan.exe и выберем в контекстном меню команду Запуск от имени Администратора.
Во время развёртывания IPBan появляется окно выполнения кода с результатами запуска. Наличие в окне сообщения IPBan is running correctly будет говорить о том, что программа успешно развёрнута и работает в фоновом режиме, то есть, «слушает» входы служб, установленных по умолчанию, в том числе и RDP.
В случае фиксации неудачных попыток входа в систему, которые выходят за рамки установленных параметров безопасности, их IP будут блокироваться в автоматическом режиме.
Для того, чтобы прописать IPBan, как службу Windows, необходимо запустить cmd консоль, в которой ввести следующую команду:
sc.exe create IPBAN type=own start=delayed-auto binPath= d:\Программа IPBan\IPBan-Windows-x86_2_0_1\DigitalRuby.IPBan.exe DisplayName=IPBAN
Проверка результатов работы
Проверить работу утилиты можно несколькими способами. Самый простой способ проверки заключается в просмотре файла логов с именем logfile.txt или подобном, в котором фиксируются все неудачные попытки входа в систему, а также баны. Забанить или разблокировать любой из IP-адресов можно в файле ban.txt директории службы.
Для контроля работы и просмотра заблокированных адресов также можно воспользоваться средствами просмотра журналов Windows. Для этого нужно вызвать окно запуска команд (Win + R), где ввести команду eventvwr и нажать ОК. В результате появится окно со списком журналов событий разных категорий: приложение, безопасность, установка, система и перенаправление событий. Выбрав журнал безопасность в левой части окна, можно увидеть результаты аудита системы безопасности ПК (см. скрин).
Также можно управлять IPBan, как службой, запустив соответствующий сервис в консоли с помощью команды services.msc. Службу IPBan можно будет найти в списке служб запущенного сервиса и проверить, чтобы был выставлен тип запуска «в автоматическом режиме».
Основные рекомендации
Кроме уже приведённых выше рекомендаций для уменьшения риска проникновения в систему через службу удалённого рабочего стола, можно привести ряд общих рекомендаций для повышения уровня безопасности:
- Изменить стандартный порт для службы удалённого рабочего стола на любой другой;
- Сделать резервные копии ключевых данных и ограничить к ним доступ;
- Использовать многофакторную аутентификацию;
- Ограничить количество одновременно работающих пользователей службы;
- Если служба не используется, то выключить её и отключить на брандмауэре все внешние соединения на порту службы;
- Запретить подключение учётным записям с пустыми паролями. Это можно сделать с помощью настройки локальных параметров безопасности: Локальные политики - Параметры безопасности – «Учётные записи: ограничить использование пустых паролей ... ».