Эта статья входит в число добротных статей

BlueKeep

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Логотип уязвимости BlueKeep

BlueKeep — это компьютерная уязвимость в реализации Microsoft Remote Desktop Protocol, позволяющая осуществить удалённое выполнение кода[en]. 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 Network Level Authentication (NLA)[en] — опции протокола RDP, требующей осуществлять аутентификацию пользователя до установления соединения[7].

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

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

История[править | править код]

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

В тот же день, когда была выпущена рекомендация АНБ, группа исследователей из координационного центра CERT сообщила о другой уязвимости, связанной с протоколом RDP в Windows 10 обновления за май 2019 и Windows Server 2019. В частности, исследователями отмечался тот факт, что учётные данные Network Level Authentication[en] кэшируются в клиентской системе, и пользователь может повторно получить доступ к своему подключению 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 для удалённого выполнения кода (RCE)[en]. Структуры данных с информацией о динамических каналах хранятся в невыгружаемом пуле. Память под сообщения, хранящиеся в очереди канала, также выделяется в невыгружаемом пуле. Освобождение выделенной под конкретное сообщение памяти происходит только в момент его чтения из канала, то есть если из канала не происходит чтение, то память будет освобождена только в момент закрытия соединения[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].
  • Использование NLA[en] в RDP. Однако данный метод все равно позволяет успешно провести атаку в случае наличия у злоумышленника действующей учётной записи в системе[7].

Примечания[править | править код]

  1. 1 2 Goodin, Dan. Exploit for wormable BlueKeep Windows bug released into the wild - The Metasploit module isn't as polished as the EternalBlue exploit. Still, it's powerful., Ars Technica (6 сентября 2019). Архивировано 27 ноября 2019 года. Дата обращения 28 ноября 2019.
  2. Warren, Tom Microsoft warns of major WannaCry-like Windows security exploit, releases XP patches. The Verge (14 мая 2014). Дата обращения: 28 ноября 2019. Архивировано 2 сентября 2019 года.
  3. 1 2 Cimpanu, Catalin Even the NSA is urging Windows users to patch BlueKeep (CVE-2019-0708). ZDNet. Дата обращения: 28 ноября 2019. Архивировано 6 сентября 2019 года.
  4. 1 2 Goodin, Dan. Microsoft practically begs Windows users to fix wormable BlueKeep flaw, Ars Technica (31 мая 2019). Архивировано 22 июля 2019 года. Дата обращения 28 ноября 2019.
  5. A remote code execution vulnerability exists in Remote Desktop Services formerly known as Terminal Services when an unauthenticated attacker connects to the target system using RDP and sends specially crafted requests, aka 'Remote Desktop Services Remote Code Execution Vulnerability'.. Дата обращения: 28 ноября 2019. Архивировано 9 ноября 2019 года.
  6. 1 2 3 4 5 6 RDP Stands for "Really DO Patch!" – Understanding the Wormable RDP Vulnerability CVE-2019-0708 (недоступная ссылка). McAfee Blogs (21 мая 2019). Дата обращения: 18 ноября 2019. Архивировано 21 мая 2019 года.
  7. 1 2 Prevent a worm by updating Remote Desktop Services (CVE-2019-0708)'. Дата обращения: 30 ноября 2019. Архивировано 1 декабря 2019 года.
  8. Microsoft. Security Update Guide - Acknowledgements, May 2019. Microsoft (Май 2019). Дата обращения: 28 ноября 2019. Архивировано 23 ноября 2019 года.
  9. Microsoft dismisses new Windows RDP 'bug' as a feature. Naked Security (6 июня 2019). Дата обращения: 28 ноября 2019. Архивировано 17 декабря 2019 года.
  10. Stockley, Mark. RDP BlueKeep exploit shows why you really, really need to patch, NakedSecurity.com (1 июля 2019). Архивировано 7 декабря 2019 года. Дата обращения 28 ноября 2019.
  11. Staff. CVE-2019-0708: Remote Desktop Services remote code execution vulnerability (known as BlueKeep) - Technical Support Bulletin. Sophos (29 мая 2019). Дата обращения: 28 ноября 2019. Архивировано 3 июля 2019 года.
  12. Goodin, Dan. Chances of destructive BlueKeep exploit rise with new explainer posted online - Slides give the most detailed publicly available technical documentation seen so far., Ars Technica (22 июля 2019). Архивировано 8 ноября 2019 года. Дата обращения 28 ноября 2019.
  13. Cimpanu, Catalin. US company selling weaponized BlueKeep exploit - An exploit for a vulnerability that Microsoft feared it may trigger the next WannaCry is now being sold commercially., ZDNet (25 июля 2019). Архивировано 8 ноября 2019 года. Дата обращения 25 ноября 2019.
  14. Greenberg, Andy. DejaBlue: New BlueKeep-Style Bugs Renew The Risk Of A Windows worm, Wired (13 августа 2019). Архивировано 13 апреля 2021 года. Дата обращения 28 ноября 2019.
  15. Cimpanu, Catalin. BlueKeep exploit to get a fix for its BSOD problem, ZDNet (11 ноября 2019). Архивировано 18 ноября 2019 года. Дата обращения 28 ноября 2019.
  16. Greenberg, Andy. The First BlueKeep Mass Hacking Is Finally Here—but Don't Panic - After months of warnings, the first successful attack using Microsoft's BlueKeep vulnerability has arrived—but isn't nearly as bad as it could have been., Wired (2 ноября 2019). Архивировано 2 декабря 2019 года. Дата обращения 28 ноября 2019.
  17. Immanni, Manikanta. The First BlueKeep Mass Hacking Is Finally Here—but Don't Panic - After months of warnings, the first successful attack using Microsoft's BlueKeep vulnerability has arrived—but isn't nearly as bad as it could have been. (2 ноября 2019). Архивировано 3 ноября 2019 года. Дата обращения 28 ноября 2019.
  18. Microsoft works with researchers to detect and protect against new RDP exploits, Microsoft (7 ноября 2019). Архивировано 23 ноября 2019 года. Дата обращения 28 ноября 2019.
  19. 1 2 Analysis of CVE-2019-0708 (BlueKeep). MalwareTech (31 мая 2019). Дата обращения: 29 ноября 2019. Архивировано 17 сентября 2019 года.
  20. BlueKeep Exploit Analysis. Medium (18 сентября 2019). Дата обращения: 29 ноября 2019. Архивировано 27 ноября 2019 года.
  21. 1 2 BlueKeep: A Journey from DoS to RCE (CVE-2019-0708). MalwareTech (6 сентября 2019). Дата обращения: 29 ноября 2019. Архивировано 28 ноября 2019 года.
  22. Stockley, Mark. RDP exposed: the wolves already at your door, Sophos (17 июля 2019). Архивировано 18 октября 2019 года. Дата обращения 28 ноября 2019.

Ссылки[править | править код]