Эксплуатация BlueKeep (CVE 2019-0708) дикой природе

Прошло почти шесть месяцев с тех пор, как была исправлена уязвимость в Microsoft Windows RDP CVE 2019-0708, получившая название BlueKeep. Сегодня исследователь безопасности Кевин Бомонт (Kevin Beaumont) разместил в Твиттере тему, в которой сообщается о BSOD (Blue Screen of Death) в его сети BlueKeep Honeypots.


Кевин любезно поделился с нами дампом, в котором мы обнаружили, попытки эксплуатации уязвимости. Из-за того, что включены только минидампы, трудно сделать однозначные выводы.

LimitedCrashDump.webpСбой вызова стека
Из первоначального наблюдения стек вызовов кажется отключенным. Примечательно, что адрес 0x1aec08не выделен или отсутствует в дампе. Вместо этого мы решили посмотреть на распределение пула с TSicтегом, который является тегом пула, используемым IcaAllocateChannelв termdd.sysдрайвере RDP для Windows.

Allocations.webpФрагмент выделения с тегом `TSic`
Глядя на TSicраспределение, ясно, что что-то не так. При нормальных обстоятельствах должно быть менее 100 выделений с TSicтегом, но в этом случае их более 19 000, что предполагает эксплуатацию.

В частности, выделяются блоки размером 0x170. Из предыдущего исследования BlueKeep мы знаем, что размер 0x170 — это точный размер структуры канала (плюс метаданные). Во время использования BlueKeep MS_T120структура канала освобождается, оставляя указатель. Чтобы воспользоваться этой уязвимостью, необходимо заполнить дыру в памяти выделением 0x170 байтов. Тысячи распределений размером 0x170 байтов предполагают использование метода «распыления кучи», поэтому давайте посмотрим глубже и подтвердим.

MS_120Allocation.webpВнутри одного из распределений байтов 0x170
Как и ожидалось, распределение является допустимой канальной структурой для эксплуатируемого MS_T120канала.

По смещению 0x100 в структуру канала имеется косвенный указатель на функцию. Чтобы получить Удаленное выполнение кода (RCE), злоумышленник должен перехватить этот указатель, чтобы получить свой шелл-код, поэтому сейчас важно определить, установлен ли он.

VTable.webp
Действительно, мы находим, что оно установлено. Если это эксплойт BlueKeep, мы должны обнаружить, что разыменование адреса fffffa80`08807048приведет к полезной нагрузке или эксплойту шеллкода.

KernelShellcode.webpРазыменование указателя
Наконец, мы подтверждаем, что этот сегмент указывает на исполняемый шелл-код. На этом этапе мы можем утверждать допустимые попытки эксплойта BlueKeep в дикой природе, используя шелл-код, который даже совпадает с шелл-кодом в модуле метаслоя BlueKeep!

KernelShellcodeCompare.webpРядом с шеллкодом в памяти и шеллкодом metasploit
Фрагмент шеллкода выполняет простой «egghunt» (сканирует системную память на наличие двоичной сигнатуры), чтобы найти остальную часть шеллкода. «Яйцо» есть 0x0b00dac0fefe42069. Сканируя память на предмет этого значения, мы найдем остаток шелл-кода.

KernelEgg.webpПоявления «яйца»
В памяти находятся сотни копий подписи, что соответствует кучному распылению.

KernelShellcodePart2.webpВторая часть шеллкода ядра
Опять же, вторая часть шелл-кода также совпадает с той, что была в модуле метаслоя BlueKeep. Поскольку большая часть шелл-кода эксплойта, по-видимому, соответствует метассплойту, можно предположить, что яйцо шелл-кода пользовательского режима не изменится. Проверяя это, мы сделали то же самое сканирование памяти, но на этот раз для яйца пользовательского режима 0xb00dac0fefe31337.

UsermodeShellcode.webpПользовательский режим Shellcode
Яйцо было не только одинаковым, но и полезный груз легко виден в конце шелл-кода. Это закодированная команда PowerShell.

PowershellCommand1.webpПервая из матрешек PowerShell
Расшифровывая команду PowerShell, мы получаем код для загрузки другой команды PowerShell с сервера злоумышленника.

После этого загружается другая закодированная команда PowerShell. И другой. В конце концов мы получаем команду, которая загружает и выполняет исполняемый файл.

FinalStagePowershell.webpПоследний этап матрешки PowerShell
Хэш этого бинарного файла известен VirusTotal как майнер криптовалюты.

Заключение
Любопытно, что эта общеизвестная уязвимая уязвимость, известная всем, кто хотел бы знать ее по крайней мере в течение шести месяцев, заняла так много времени, чтобы стать обнаруживаемым оружием. Можно предположить, что злоумышленники знают, что у них есть один шанс использовать их в масштабе, и это становится игрой о том, кто сделает это первым. Стоит также отметить, что массовая эксплуатация ради выгоды может быть затруднена из-за сопутствующих рисков.

Хотя эта предполагаемая деятельность вызывает обеспокоенность, сообщество по информационной безопасности (правильно) предсказало гораздо худшие потенциальные сценарии. Основываясь на наших данных, мы не видим всплеска неизбирательного сканирования на уязвимом порту, как мы видели, когда EternalBlue проник в Интернет через то, что сейчас известно как атака WannaCry. Вполне вероятно, что субъект низкого уровня просканировал Интернет и оппортунистически инфицировал уязвимые хосты, используя готовые утилиты для тестирования на проникновение.

 
Последнее редактирование модератором:
Назад
Сверху Снизу