Remote Desktop глазами атакующего

08.06.2020

Компании, у которых не были организованы системы удалённого доступа, в экстренном порядке разворачивали их пару месяцев назад. Не все администраторы были готовы к такой “жаре”, как следствие — упущения в безопасности: некорректная конфигурация сервисов или даже установка устаревших версий ПО с обнаруженными ранее уязвимостями. Одним эти упущения уже вернулись бумерангом, другим повезло больше, но выводы уж точно стоит сделать всем. Лояльность к дистанционной работе кратно возросла, и всё больше компаний принимают удалёнку как допустимый формат на постоянной основе.

Итак, вариантов обеспечения удалённого доступа множество: различные VPN, RDS и VNC, TeamViewer и другие. Администраторам есть из чего выбрать, основываясь на специфике построения корпоративной сети и устройств в ней. Самыми популярными остаются VPN решения, однако, многие небольшие компании выбирают RDS (Remote Desktop Services), оно проще и быстрее в развёртывании.

В этой статье мы подробнее поговорим о безопасности RDS. Сделаем краткий обзор известных уязвимостей, а также рассмотрим несколько сценариев старта атаки на сетевую инфраструктуру, основанную на Active Directory. Надеемся, кому-то наша статья поможет провести работу над ошибками и повысить безопасность.

Недавние уязвимости RDS/RDP

Любое ПО содержит ошибки и уязвимости, которые эксплуатируются злоумышленниками, и RDS не является исключением. В последнее время Microsoft часто сообщал о новых уязвимостях, мы решили сделать их краткий обзор:

CVE-2019-0787

Эта уязвимость ставит под удар пользователей, подключающихся к скомпрометированному серверу. Злоумышленник может заполучить контроль над пользовательским устройством или закрепиться в системе, чтобы иметь постоянный удалённый доступ.

CVE-2019-1181 / CVE-2019-1182 / CVE-2020-0609

Эта группа уязвимостей позволяет неавторизованному злоумышленнику удалённо выполнять произвольный код на сервере с RDS с помощью специально сформированного запроса. Также их можно использовать для создания червей — вредоносного ПО, заражающего соседние по сети устройства самостоятельно. Таким образом, данные уязвимости могут поставить под удар всю сеть компании, и спасёт от них только своевременное обновление.

ПО для удалённого доступа получило повышенное внимание как исследователей, так и злоумышленников, поэтому вскоре мы, возможно, услышим о новых подобных уязвимостях. Хорошая новость в том, что не для всех уязвимостей доступны публичные эксплоиты. Плохая — злоумышленнику, обладающему экспертизой, не составит труда написать эксплоит для уязвимости по описанию, либо используя такие приемы как Patch Diffing (о нём писали наши коллеги в статье ). Потому рекомендуем регулярно обновлять ПО и следить за появлением новых сообщений об обнаруженных уязвимостях.

Атаки

Мы переходим ко второй части статьи, где покажем, как начинаются атаки на сетевую инфраструктуру, основанную на Active Directory. Описанные методы применимы для следующей модели нарушителя: злоумышленник, обладающий учётной записью пользователя и имеющий доступ к Remote Desktop Gateway — терминальному серверу (зачастую он доступен, например, из внешней сети). Применив эти методы, злоумышленник сможет продолжить атаку на инфраструктуру, и закрепить свое присутствие в сети. Конфигурация сети в каждом конкретном случае может отличаться, но описанные приемы довольно универсальны.

Примеры выхода из ограниченного окружения и повышения привилегий

При доступе к Remote Desktop Gateway злоумышленник, скорее всего, столкнется с некоторой ограниченной средой. При подключении к терминальному серверу на нём запускается приложение: окно для подключения по протоколу Remote Desktop для внутренних ресурсов, проводник, офисные пакеты либо любое другое ПО. Целью атакующего будет получение доступа к исполнению команд, то есть к запуску cmd или powershell. В этом могут помочь несколько классических техник побега из “песочницы” для Windows. Рассмотрим их далее.

Вариант 1. Злоумышленник имеет доступ к окну подключения Remote Desktop в рамках Remote Desktop Gateway:

Раскрывается меню “Show Options”. Появляются опции для манипуляции файлами конфигурации подключения:

Из этого окна возможно беспрепятственно попасть в Проводник, нажав любую из кнопок “Open” или “Save”:

Открывается Проводник. Его “адресная строка” даёт возможность запуска разрешённых исполняемых файлов, а также листинга файловой системы. Это может быть полезно атакующему в случае, когда системные диски скрыты и доступ к ним напрямую невозможен:

Демо-видео

Подобный сценарий можно воспроизвести, например, при использовании в качестве удаленного ПО Excel из пакета Microsoft Office.

Демо-видео

Кроме того, не стоит забывать про макросы, используемые в данном офисном пакете. Наши коллеги рассматривали проблему безопасности макросов в этой статье .

Вариант 2. Используя те же вводные, что и в прошлом варианте, атакующий запускает несколько подключений к удалённому рабочему столу под одним и тем же аккаунтом. При повторном подключении первое будет закрыто, а на экране появится окно с уведомлением об ошибке. Кнопка помощи в этом окне вызовет на сервере Internet Explorer, после чего атакующий может перейти в Проводник.

Демо-видео

Вариант 3. При настроенных ограничениях на запуск исполняемых файлов, атакующий может столкнуться с ситуацией, когда групповые политики запрещают запуск cmd.exe администратором. Есть способ обойти это при помощи запуска bat файла на удалённом рабочем столе с содержимым вида cmd.exe /K <команда>. Ошибка при запуске cmd и успешный пример выполнения bat файла приведён на рисунке ниже.

Вариант 4. Запрет запуска приложений при помощи чёрных списков по названию исполняемых файлов не панацея, их можно обойти. Рассмотрим следующий сценарий: мы запретили доступ к командной строке, запретили запуск Internet Explorer и PowerShell при помощи групповых политик.

Атакующий пытается вызвать справку — никакого отклика. Пытается запустить powershell через контекстное меню модального окна, вызванное с нажатой клавишей Shift — сообщение о запрете запуска администратором. Пытается запустить powershell через адресную строку — снова никакого отклика. Как же обойти ограничение?

Достаточно скопировать powershell.exe из папки C:\Windows\System32\WindowsPowerShell\v1.0 в пользовательскую папку, изменить имя на отличное от powershell.exe, и возможность запуска появится. По умолчанию при подключении к удалённому рабочему столу предоставляется доступ к локальным дискам клиента, откуда атакующий может скопировать powershell.exe и после переименования запустить.

Демо-видео

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

Рекомендации и заключение

Как мы видим, даже в ограниченной среде есть пространство для развития атаки. Однако можно усложнить жизнь атакующему. Приводим общие рекомендации, которые пригодятся как в рассмотренных нами вариантах, так и в других случаях.

  1. Ограничьте запуск программ черными/белыми списками, используя групповые политики. При этом в большинстве случаев остается возможность запуска кода. Рекомендуем ознакомиться с проектом LOLBAS, чтобы иметь представление о недокументированных способах манипуляции файлами и исполнения кода в системе
  2. Рекомендуем комбинировать оба типа ограничений: например, можно разрешить запуск исполняемых файлов, подписанных компанией Microsoft, но ограничить запуск cmd.exe.
  3. Отключите вкладки настроек Internet Explorer (можно сделать локально в реестре)
  4. Отключите через regedit вызов встроенной справки Windows
  5. Отключите возможность монтирования локальных дисков для удалённых подключений, если такое ограничение не критично для пользователей
  6. Ограничьте доступ к локальным дискам удалённой машины, оставьте доступ только к пользовательским папкам

Надеемся, вам было как минимум интересно, а как максимум — это статья поможет сделать удалённую работу вашей компании безопаснее.

Обсудить статью на habr

Авторы: Максим Прокопович и Александр Бычков, пентестеры Digital Security.