Русская Википедия:BlueKeep

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Файл:BlueKeep logo.svg
Логотип уязвимости BlueKeep

BlueKeep — компьютерная уязвимость в реализации Microsoft Remote Desktop Protocol, позволяющая осуществить Шаблон:Iw. BlueKeep подвержены все необновлённые версии Windows линейки Windows NT, начиная с Windows 2000 и заканчивая Windows Server 2008 R2 и Windows 7. В сентябре 2019 года был выложен в открытый доступ эксплоит BlueKeep в составе проекта Metasploit[1].

Согласно АНБ и Microsoft, BlueKeep потенциально может использоваться компьютерными червями, причём Microsoft заявляет, основываясь на оценке в 1 миллион уязвимых устройств, что подобная атака может иметь размах, сравнимый с EternalBlue-атаками, такими как NotPetya и WannaCry[2][3][4].

Уязвимости был выделен CVE-идентификатор CVE-2019-0708[5].

Краткое описание

Уязвимость BlueKeep была обнаружена в реализации протокола RDP в некоторых версиях ОС Windows в мае 2019. RDP — это проприетарный протокол, обеспечивающий удалённый доступ к компьютерам под управлением Windows. BlueKeep никак не относится к механизму работы самого протокола и затрагивает только его реализацию. В частности, уязвимость затрагивает часть кода, отвечающую за управление так называемыми виртуальными каналами (англ. virtual channels). RDP использует различные виртуальные каналы для передачи данных различного типа. Например, в канале «rdpsnd» передаётся звук, в то время как канал «cliprdr» используется для передачи содержимого буфера обмена. Дополнительные виртуальные каналы могут использоваться для предоставления расширений протокола RDP на уровне пользовательского приложения. В Windows 2000 было доступно только 32 статических виртуальных канала, в связи с чем для обхода этого ограничения был предложен механизм динамических виртуальных каналов, позволяющий передавать несколько динамических каналов в одном статическом. Статические каналы создаются при создании RDP-сессии и существуют до её закрытия, в то время как динамические каналы могут создаваться и удаляться по запросу клиента. Также, в отличие от статических каналов, нумерующихся целым числом от 0 до 31, динамические каналы идентифицируются своим строковым именем. Windows связывает имена динамических каналов с номерами статических каналов в функциях _IcaBindVirtualChannels и _IcaRebindVirtualChannels, содержащихся в драйвере termdd.sys[6].

По умолчанию RDP резервирует номер 31 для внутреннего, не предназначенного для прямого использования пользователем виртуального канала с названием «MS_T120». Однако проверка существования пользовательского виртуального канала с таким же названием в драйвере не производится. Таким образом, злоумышленник может создать ещё один динамический канал с названием «MS_T120» и привязать его к статическому каналу с другим номером. При этом с новым номером будет связан указатель на уже существующий экземпляр динамического канала «MS_T120». При закрытии созданного злоумышленником канала происходит освобождение памяти, после чего в системе остаётся связанный с номером 31 висячий указатель на канал «MS_T120», что может приводить к ошибкам доступа к памяти[6]. Ситуация усугубляется тем, что создание динамических виртуальных каналов может происходит до стадии аутентификации пользователя, что позволяет BlueKeep использоваться компьютерными червями. Эту проблему частично решает использование появившейся в Windows Vista Шаблон:Iw — опции протокола RDP, требующей осуществлять аутентификацию пользователя до установления соединения[7].

Microsoft выпустила обновление безопасности (в том числе для нескольких версий Windows, чей срок поддержки подошёл к концу, в частности, для Windows XP) 14 мая 2019 года[4]. Исправленная версия драйвера termdd.sys не позволяет назначать каналу с названием «MS_T120» номера, отличные от 31.

Название «BlueKeep» данной уязвимости дал эксперт в области компьютерной безопасности Кевин Бомонт в своём посте в Twitter.

История

Впервые BlueKeep была упомянута Национальным центром кибербезопасности Великобритании[8], отчёт Microsoft был представлен 14 мая 2019 вместе с обновлением безопасности, исправляющим данную уязвимость. Позже, 4 июня 2019, свою рекомендацию по безопасности выпустило АНБ[3].

В тот же день, когда была выпущена рекомендация АНБ, группа исследователей из координационного центра CERT сообщила о другой уязвимости, связанной с протоколом RDP в Windows 10 обновления за май 2019 и Windows Server 2019. В частности, исследователями отмечался тот факт, что учётные данные Шаблон:Iw кэшируются в клиентской системе, и пользователь может повторно получить доступ к своему подключению RDP автоматически в случае его обрыва. Корпорация Microsoft отвергла эту уязвимость как преднамеренное поведение, утверждая, что его можно отключить с помощью механизма групповой политики[9].

По состоянию на июнь 2019 было представлено несколько рабочих PoC эксплуатирования данной уязвимости. В частности, свои версии представили McAfee[6] и Sophos[10][11]. 22 июля 2019 более подробная информация о BlueKeep была представлена на конференции спикером из китайской компании, занимающейся вопросами информационной безопасности[12]. 25 июля 2019 эксперты заявили, что коммерческая версия эксплоита могла быть доступна на тот момент[13].

13 августа 2019 было сообщено о DejaBlue, новой группе связанных с BlueKeep уязвимостей. Помимо старых версий Windows, DejaBlue также оказались подвержены более новые версии ОС вплоть до Windows 10[14].

6 сентября 2019 в открытом доступе появился эксплоит уязвимости BlueKeep в составе Metasploit[1]. Однако первоначальная версия эксплоита оказалась крайне ненадёжной из-за частого случая появления ошибки BSoD. Исправленная версия стала доступна позднее[15].

2 ноября 2019 было сообщено о первой массовой хакерской BlueKeep-атаке, связанной с криптовалютой Monero[16][17]. 8 ноября 2019 Microsoft подтвердила факт совершения атаки и призвала пользователей как можно скорее обновить свои версии Windows[18].

Механизм

DoS-атака

Простейшим вариантом эксплуатации уязвимости BlueKeep является реализация DoS-атаки на её основе. При подключении клиента на сервере автоматически создаётся канал «MS_T120», связанный со статическим номером 31. При помощи RDP-запроса MCS Connect Initial PDU with GCC Conference Create Request клиент может создавать дополнительные динамические каналы по своему усмотрению, при этом сервер возвращает номера связанных статических каналов в ответном RDP-сообщении. Поскольку данный запрос происходит до этапа аутентификации пользователя, злоумышленнику не нужно иметь учётную запись в системе для успешного проведения атаки. Если клиент укажет «MS_T120» в списке каналов, то сервер повторным вызовом функции _IcaBindVirtualChannels привяжет уже существующий экземпляр структуры канала к номеру, отличному от 31. При завершении сессии сервер сначала освободит выделенную память при закрытии канала, созданного злоумышленником, после чего попытается освободить ту же самую память при попытке закрытия канала с номером 31. Таким образом, происходит двойное освобождение памяти внутри драйвера termdd.sys. Поскольку ошибка происходит в пространстве ядра, она приводит к падению операционной системы в BSoD[19][20].

RCE-атака

Куда большую опасность представляет использование BlueKeep для Шаблон:Iw. Структуры данных с информацией о динамических каналах хранятся в невыгружаемом пуле. Память под сообщения, хранящиеся в очереди канала, также выделяется в невыгружаемом пуле. Освобождение выделенной под конкретное сообщение памяти происходит только в момент его чтения из канала, то есть если из канала не происходит чтение, то память будет освобождена только в момент закрытия соединения[21].

Для проведения RCE злоумышленнику необходимо заново выделить и перезаписать память по тому адресу, где до освобождения памяти находилась структура канала «MS_T120». Для того чтобы осуществить выполнение вредоносного кода, достаточно поменять значение указателя на таблицу виртуальных методов в этой структуре на нужное значение. Данную задачу сильно облегчает отсутствие механизма предотвращения выполнения данных (DEP) в невыгружаемом пуле в версиях Windows до Windows 7. Это означает, что вредоносный код можно разместить по тому же адресу, где размещена поддельная таблица виртуальных методов. Как изменение указателя, так и непосредственное размещение вредоносного кода можно произвести через вышеупомянутый механизм посылки сообщений в канале, из которого не будет производиться чтение[21].

Методы защиты

  • Установка обновлений безопасности для Windows XP, Windows Vista, Windows 7, Windows Server 2003, Windows Server 2008 и Windows Server 2008 R2, либо использование более новых версий Windows, не подверженных BlueKeep. Исправленная версия драйвера termdd.sys содержит дополнительные проверки в функциях _IcaBindVirtualChannels и _IcaRebindVirtualChannels, удостоверяющие, что каналу «MS_T120» нельзя назначить отличный от 31 номер[19].
  • Отключение RDP полностью там, где это возможно, либо сведение его использования к минимуму. Это позволяет снизить вероятность проведения успешной атаки на основе подобной BlueKeep уязвимости в будущем[6].
  • Также можно запретить осуществление доступа к удалённым машинам по RDP из внешнего Интернета. В качестве альтернативы можно осуществлять доступ по RDP только через VPN[22].
  • Смена TCP-порта для RDP со значения по умолчанию (3389) на другой порт[6]. Это затрудняет сканирование портов злоумышленником с целью поиска машин, уязвимых к BlueKeep.
  • Мониторинг входящих RDP-соединений на уровне файрвола, в частности, блокирование любых запросов с попыткой назначения каналу «MS_T120» номера, отличного от 31[6].
  • Использование Шаблон:Iw в RDP. Однако данный метод все равно позволяет успешно провести атаку в случае наличия у злоумышленника действующей учётной записи в системе[7].

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Хакерские атаки 2010-х Шаблон:Добротная статья