Interested Article - BlueKeep

Логотип уязвимости BlueKeep

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

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

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

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

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

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

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

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

История

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

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

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

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

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

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

Механизм

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 .

RCE-атака

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

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

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

  • Установка обновлений безопасности для 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 номер .
  • Отключение RDP полностью там, где это возможно, либо сведение его использования к минимуму. Это позволяет снизить вероятность проведения успешной атаки на основе подобной BlueKeep уязвимости в будущем .
  • Также можно запретить осуществление доступа к удалённым машинам по RDP из внешнего Интернета . В качестве альтернативы можно осуществлять доступ по RDP только через VPN .
  • Смена TCP - порта для RDP со значения по умолчанию (3389) на другой порт . Это затрудняет сканирование портов злоумышленником с целью поиска машин, уязвимых к BlueKeep.
  • Мониторинг входящих RDP-соединений на уровне файрвола , в частности, блокирование любых запросов с попыткой назначения каналу «MS_T120» номера, отличного от 31 .
  • Использование в RDP. Однако данный метод все равно позволяет успешно провести атаку в случае наличия у злоумышленника действующей учётной записи в системе .

Примечания

  1. Goodin, Dan (2019-09-06). . Ars Technica . из оригинала 27 ноября 2019 . Дата обращения: 28 ноября 2019 .
  2. Warren, Tom . The Verge (14 мая 2014). Дата обращения: 28 ноября 2019. 2 сентября 2019 года.
  3. Cimpanu, Catalin . ZDNet . Дата обращения: 28 ноября 2019. 6 сентября 2019 года.
  4. Goodin, Dan (2019-05-31). . Ars Technica . из оригинала 22 июля 2019 . Дата обращения: 28 ноября 2019 .
  5. Дата обращения: 28 ноября 2019. 9 ноября 2019 года.
  6. . McAfee Blogs (21 мая 2019). Дата обращения: 18 ноября 2019. Архивировано из 21 мая 2019 года.
  7. . Дата обращения: 30 ноября 2019. 1 декабря 2019 года.
  8. Microsoft . . Microsoft (май 2019). Дата обращения: 28 ноября 2019. 23 ноября 2019 года.
  9. . Naked Security (6 июня 2019). Дата обращения: 28 ноября 2019. 17 декабря 2019 года.
  10. Stockley, Mark (2019-07-01). . NakedSecurity.com . из оригинала 7 декабря 2019 . Дата обращения: 28 ноября 2019 .
  11. Staff. . Sophos (29 мая 2019). Дата обращения: 28 ноября 2019. 3 июля 2019 года.
  12. Goodin, Dan (2019-07-22). . Ars Technica . из оригинала 8 ноября 2019 . Дата обращения: 28 ноября 2019 .
  13. Cimpanu, Catalin (2019-07-25). . ZDNet . из оригинала 8 ноября 2019 . Дата обращения: 25 ноября 2019 .
  14. Greenberg, Andy (2019-08-13). . Wired . из оригинала 13 апреля 2021 . Дата обращения: 28 ноября 2019 .
  15. Cimpanu, Catalin (2019-11-11). . ZDNet . из оригинала 18 ноября 2019 . Дата обращения: 28 ноября 2019 .
  16. Greenberg, Andy (2019-11-02). . Wired . из оригинала 2 декабря 2019 . Дата обращения: 28 ноября 2019 .
  17. Immanni, Manikanta (2019-11-02). . из оригинала 3 ноября 2019 . Дата обращения: 28 ноября 2019 .
  18. . Microsoft . 2019-11-07. из оригинала 23 ноября 2019 . Дата обращения: 28 ноября 2019 .
  19. . MalwareTech (31 мая 2019). Дата обращения: 29 ноября 2019. 17 сентября 2019 года.
  20. . Medium (18 сентября 2019). Дата обращения: 29 ноября 2019. 27 ноября 2019 года.
  21. . MalwareTech (6 сентября 2019). Дата обращения: 29 ноября 2019. 28 ноября 2019 года.
  22. Stockley, Mark (2019-07-17). . Sophos . из оригинала 18 октября 2019 . Дата обращения: 28 ноября 2019 .

Ссылки

  • (англ.)
  • (англ.)
  • (англ.)
  • в YouTube (англ.)
Источник —

Same as BlueKeep