
Уязвимость BDU:2020-00220 (CVE-2020-0642) Windows
Уязвимость BDU:2020-00220 (CVE-2020-0642) представляет собой критическую ошибку в компоненте Win32k операционной системы Windows. Она связана с некорректной обработкой объектов в памяти ядром системы, что позволяет злоумышленнику повысить привилегии до уровня ядра (NT AUTHORITY\SYSTEM) через специально сконструированное приложение. Для эксплуатации атакующему требуется локальный доступ к системе и возможность выполнения кода с ограниченными правами.
Анализ уязвимости
Уровень опасности: 7.8 (HIGH)
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:L (Вектор атаки): Локальный – эксплуатация требует физического или удаленного интерактивного доступа к целевой системе.
-
AC:L (Сложность эксплуатации): Низкая – не требуется сложных условий для стабильной работы эксплоита.
-
PR:L (Уровень привилегий): Низкий – атакующий должен обладать базовыми правами пользователя (например, учетной записи без админских прав).
-
UI:N (Вовлеченность пользователя): Не требуется – атака не требует действий со стороны пользователя.
-
S:U (Область воздействия): Не изменяется – уязвимость не затрагивает другие компоненты системы.
-
C:H (Конфиденциальность): Высокий – позволяет читать любые данные в памяти.
-
I:H (Целостность): Высокий – дает возможность модифицировать системные файлы и настройки.
-
A:H (Доступность): Высокий – допускает полный контроль над системой.
Условия эксплуатации
-
Целевые ОС: Windows 7–10 (включая Server-версии) до обновлений января 2020 г.
-
Доступ: Локальная авторизация под учетной записью без привилегий администратора.
-
Сценарии:
-
Компрометация через вредоносное ПО (например, троянец, загруженный пользователем).
-
Атака на рабочие станции в корпоративной сети через RDP-сессии с ограниченными правами.
-
Уязвимые операционные системы
- Windows 10: Версии 1607, 1709, 1803, 1809, 1903, 1909 (32-bit, 64-bit, ARM64)
- Windows 7: SP1 (32-bit, 64-bit)
- Windows 8.1: Все редакции (32-bit, 64-bit, RT ARM)
- Windows Server Core-установки: 1803, 1903, 1909
- Windows Server 2008: SP2 (32-bit, 64-bit, Itanium), Server Core
- Windows Server 2008 R2: SP1 (64-bit, Itanium), Server Core
- Windows Server 2012/R2: Все редакции (включая Server Core)
- Windows Server 2016/2019: Все редакции (включая Server Core)
Технический механизм уязвимости
Уязвимость возникает в драйвере win32k.sys
, отвечающем за обработку графических операций и объектов пользовательского режима. Ошибка заключается в некорректной валидации указателей при работе с callback-функциями (см. структуру KernelCallbackTable
в PEB). При уничтожении оконных объектов драйвер не проверяет состояние связанных структур в памяти, что приводит к use-after-free (UAF).
Анализ эксплоита
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2020-0642.
Эксплоит (на C++) использует подмену callback-функций в таблице KernelCallbackTable
процесса:
// 1. Перехват callback-функций PTEB teb = NtCurrentTeb(); PPEB peb = teb->ProcessEnvironmentBlock; PVOID pCCI2 = &((PVOID*)peb->KernelCallbackTable)[2]; // Индекс 2: WM_CREATE OrgCCI2 = (PFNUSER32CALLBACK)InterlockedExchangePointer((PVOID*)pCCI2, &NewCCI2); // 2. Создание окон-триггеров HWND hParent = CreateWindow(L"ScrollBar", L"Parent", WS_OVERLAPPEDWINDOW, ...); HWND hChild = CreateWindow(L"ScrollBar", L"Child", WS_VISIBLE, ...); // 3. Активация UAF Flag1 = TRUE; SendMessage(hChild, WM_LBUTTONDOWN, 0, 0); // Инициирует цепочку уничтожения окон
Пошаговое выполнение:
-
Подготовка:
-
Эксплоит заменяет оригинальные callback-функции (индексы 2 и 3 в
KernelCallbackTable
) на свои обработчикиNewCCI2
иNewCCI3
.
-
-
Создание окон:
-
hParent
иhChild
создаются как объекты классаScrollBar
.
-
-
Триггер уязвимости:
-
При отправке
WM_LBUTTONDOWN
дочернему окну система начинает уничтожать родительское окно (DestroyWindow(hParent)
), но из-за флагаFlag2
выполнение прерывается вNewCCI3
, оставляя объекты в неконсистентном состоянии.
-
-
Эскалация привилегий:
-
Манипуляция с освобожденной памятью позволяет перезаписать структуры ядра и выполнить произвольный код с правами SYSTEM.
-
Возможные последствия успешной атаки
-
Полный контроль над системой: Установка руткитов, скрытый запуск процессов.
-
Кража данных: Доступ к зашифрованным файлам, паролям LSASS, токенам аутентификации.
-
Перемещение в сети: Компрометация доменных контроллеров через передачу хэшей NTLM.
-
Создание бэкдоров: Регистрация вредоносных служб или задач планировщика.
Способы защиты
-
Установка обновлений:
-
Патч Microsoft (январь 2020 г.).
-
-
Принцип минимальных привилегий:
-
Ограничение прав пользователей через GPO: запрет запуска неподписанных приложений.
-
-
Endpoint Detection and Response (EDR):
-
Правила для детектирования подозрительных операций с
win32k.sys
:# Пример правила для Elastic EDR process.where(args : "CreateWindow" and subtype : "ScrollBar") AND registry.modified : "HKLM\SYSTEM\CurrentControlSet\Services\Win32k"
-
-
Блокировка на уровне хоста:
-
Для локальных уязвимостей IPS неэффективны. Используйте:
-
Device Guard: Блокировка неподписанных двоичных файлов.
-
Attack Surface Reduction (ASR): Правило "Блокировка создания дочерних процессов" (
D4F940AB-401B-4EFC-AADC-AD5F3C50688A
).
-
-
Заключение
BDU:2020-00220 (CVE-2020-0642) демонстрирует классический сценарий UAF в ядре Windows. Ключевая мера защиты — своевременное обновление систем. Для legacy-сред рекомендуется строгий контроль целостности ПО и сегментация сети для ограничения перемещения атакующего.
