1-й Нижний Михайловский проезд
- 1 year ago
- 0
- 0
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 .
Простейшим вариантом эксплуатации уязвимости BlueKeep является реализация DoS-атаки на её основе. При подключении клиента на сервере автоматически создаётся канал «MS_T120», связанный со статическим номером 31. При помощи RDP-запроса MCS Connect Initial PDU with GCC Conference Create Request клиент может создавать дополнительные динамические каналы по своему усмотрению, при этом сервер возвращает номера связанных статических каналов в ответном RDP-сообщении. Поскольку данный запрос происходит до этапа аутентификации пользователя, злоумышленнику не нужно иметь учётную запись в системе для успешного проведения атаки. Если клиент укажет «MS_T120» в списке каналов, то сервер повторным вызовом функции _IcaBindVirtualChannels привяжет уже существующий экземпляр структуры канала к номеру, отличному от 31. При завершении сессии сервер сначала освободит выделенную память при закрытии канала, созданного злоумышленником, после чего попытается освободить ту же самую память при попытке закрытия канала с номером 31. Таким образом, происходит двойное освобождение памяти внутри драйвера termdd.sys . Поскольку ошибка происходит в пространстве ядра , она приводит к падению операционной системы в BSoD .
Куда большую опасность представляет использование BlueKeep для . Структуры данных с информацией о динамических каналах хранятся в невыгружаемом пуле . Память под сообщения, хранящиеся в очереди канала, также выделяется в невыгружаемом пуле. Освобождение выделенной под конкретное сообщение памяти происходит только в момент его чтения из канала, то есть если из канала не происходит чтение, то память будет освобождена только в момент закрытия соединения .
Для проведения RCE злоумышленнику необходимо заново выделить и перезаписать память по тому адресу, где до освобождения памяти находилась структура канала «MS_T120». Для того чтобы осуществить выполнение вредоносного кода, достаточно поменять значение указателя на таблицу виртуальных методов в этой структуре на нужное значение. Данную задачу сильно облегчает отсутствие механизма предотвращения выполнения данных (DEP) в невыгружаемом пуле в версиях Windows до Windows 7 . Это означает, что вредоносный код можно разместить по тому же адресу, где размещена поддельная таблица виртуальных методов. Как изменение указателя, так и непосредственное размещение вредоносного кода можно произвести через вышеупомянутый механизм посылки сообщений в канале, из которого не будет производиться чтение .