
Персонализированная/расширенная реконструкция цепочки эксплойтов APT Darkhotel «Double Star» с акцентом на Windows 8.1 и смешанная с некоторыми моими собственными техниками
________ . . _________ __
_____ \ ____ __ _ | | | ____ / // | _____ _______
| | \ / _ \ | | | __ \ | | / __ \ _ \ \ \ \ _ __
| ` ( <_> )| | /| _\ | |\ / / \ | | / __ _| | /
/____ / _/ |/ | /|/ ___ > /___ / || (____ /||
/ / / / /
Эксплойт-цепочка RCE в IE/Firefox -> побег из песочницы -> EoP до SYSTEM
______________
| Remote PAC |
|____________|
^
| HTTPS
_______________ RPC/ALPC _______________ RPC/ALPC _______________ | firefox.exe | ----------> | svchost.exe | -----------> | spoolsv.exe | || || <----------- || | RPC/Pipe | _______________ | | malware.exe | <---| Execute impersonating NT AUTHORY\SYSTEM ||
~
Использование
Чтобы запустить эту эксплойт-цепочку, загрузите всю структуру релиза/папок на непропатченную машину Windows 8.1 x64 и откройте один из этих двух .html-файлов, находясь в интернете:
Первичная RCE может быть запущена через IE или FF и приведёт к выполнению процесса cmd.exe в вашем пользовательском сеансе с привилегиями NT AUTHORY\SYSTEM.
Отдельные эксплойты были успешно протестированы в следующем окружении:
Обратите внимание: хотя сами отдельные эксплойты могут работать на нескольких версиях Windows, полная цепочка работает только на Windows 8.1.
~
Обзор
Хотя в этой эксплойт-цепочке используются два (уже пропатченных) 0day-эксплойта, она также содержит технику побега из песочницы и повышения привилегий (EoP), которые по состоянию на 5/4/2021 всё ещё не пропатчены и остаются пригодными для интеграции в будущие цепочки атак.
Группа APT Darkhotel (предположительно родом из Южной Кореи) в начале 2020 года развернула кампанию против китайских и японских бизнес-руководителей и правительственных чиновников, используя комбинацию целевого фишинга и взлома сетей роскошных отелей. Использованные ими эксплойты (CVE-2020-0674 и CVE-2019-17026, вместе известные как «Double Star») представляли собой лёгкие 0day-вариации старых/существующих эксплойтов из 2019 года: а именно UAF-ошибки в устаревшем JavaScript-движке (jscript.dll) и ошибки алиасинга в движке Firefox IonMonkey.
Что делало использование этих 0day интересным, так это не только их способность достигать RCE через браузеры Internet Explorer и Firefox: CVE-2020-0674 в частности (UAF в устаревшем движке jscript.dll) эксплуатируется в любом процессе, где устаревший JS-код может выполняться через jscript.dll. В конце 2017 года Google Project Zero опубликовала пост в блоге под названием «aPAColypse now: Exploiting Windows 10 in a Local Network with WPAD/PAC and JScript» [1].
Это исследование выявило очень интересный вектор атаки, который (на тот момент) затрагивал все версии Windows, начиная с 7: служба WPAD (или «WinHTTP Web Proxy Auto-Discovery Service») содержит древнюю функциональность для обновления прокси-конфигураций через «PAC»-файл. Любой пользователь, который может обращаться к службе WPAD (работающей внутри процесса svchost.exe как LOCAL SERVICE) через RPC, может принудить её загрузить PAC-файл с удалённого URL-адреса, содержащий JS-код, отвечающий за установку правильной прокси-конфигурации для предоставленного пользователем URL. Что наиболее важно, устаревший движок jscript.dll используется для разбора этих PAC-файлов. Это открыло вектор атаки, при котором любой процесс (независимо от ограниченных привилегий пользователя или даже песочницы) мог подключиться к локальной службе WPAD через ALPC и принудить её загрузить вредоносный PAC-файл, содержащий эксплойт для jscript.dll, с удалённого URL-адреса. Это приводило к выполнению кода в контексте LOCAL SERVICE.
Darkhotel взяла эту концепцию и использовала её как побег из песочницы после получения RCE через Firefox или Internet Explorer. Следующий шаг их цепочки атак неясен: похоже, они каким-то образом повысили свои привилегии с LOCAL SERVICE до SYSTEM и приступили к выполнению своего вредоносного ПО из этого контекста. Во всём анализе цепочки атак Darkhotel Double Star мне не удалось найти подробного объяснения того, как они этого добились, однако можно с уверенностью предположить, что их техника не обязательно была 0day-эксплойтом. Процессы, запущенные от имени учётной записи LOCAL SERVICE, по умолчанию наделяются привилегией SeImpersonate и, таким образом, могут повышать свой контекст безопасности, если они могут принудить привилегированное соединение к себе через именованные каналы или ALPC.
Вероятно, группа APT Darkhotel использовала Rotten Potato для повышения привилегий от LOCAL SERVICE, поскольку это была самая простая и распространённая техника, широко применявшаяся несколько лет назад (а также техника, использованная в исследовании Google Project Zero «aPAColypse now»), однако я остановился на более надёжной/современной технике: имперсонации именованного канала при принудительном RPC-соединении от Print Spooler [2]. Эта техника сочетала старый RPC-интерфейс, популярный среди специалистов Red Team для сбора TGT в средах с включённым безусловным делегированием (также известный как «Printer Bug»), с атакой в стиле имперсонации/Rotten Potato, адаптированной для локального повышения привилегий.
Кроме того, вместо Windows 7 я решил сосредоточиться на Windows 8.1 из-за сложности, которую представляют её усиленные механизмы защиты, такие как недетерминированный LFH, ASLR с высокой энтропией и Control Flow Guard (CFG).
~
CVE-2020-0674
Вредоносный PAC-файл, содержащий UAF-эксплойт CVE-2020-0674, загружается в службу WPAD (svchost.exe, LOCAL SERVICE) через RPC-триггер. Содержит shellcode третьей стадии (Spool Potato EoP). Этот эксплойт также может служить двойной цели — как первичный вектор RCE через IE11 64-бит.
_______________ RPC _______________ CVE-2020-0674 ________________ | firefox.exe | -----> | svchost.exe | ---------------> | Spool Potato | || || | shellcode | |______________| ~
CVE-2019-17026
Firefox 64-бит: RCE через JIT/Type Confusion в IonMonkey. Представляет собой первичный вектор атаки, когда пользователь посещает заражённую веб-страницу с уязвимой версией Firefox. Этот компонент содержит shellcode первой стадии (egg hunter) и второй стадии (побег из песочницы WPAD), причём последний эффективен только на Windows 8.1 из-за жёстко заданных деталей RPC IDL-интерфейса для WPAD.
_______________ JIT spray ______________ DEP bypass _______________________ | firefox.exe | -----------> | Egg hunter | ------------> | WPAD sandbox escape | |___________| | shellcode | | shellcode (heap) | |________| |___________________|
~
Полезные нагрузки
Эта эксплойт-цепочка содержит три shellcode-пейлоада, находящихся в этом репозитории по пути Payloads\Compiled\JS в виде их JavaScript-закодированных shellcode-форм:
Когда в качестве первичного вектора RCE используется IE, нужны только стадии 2 и 3. Когда используется FF, применяются все три.
Я также включил несколько дополнительных shellcode для тестирования (MessageBoxA и WinExec). Обратите внимание: при использовании их с Firefox CVE-2019-17026 shellcode должен быть представлен как Uint8Array с префиксом в виде следующего egg-QWORD: 0x8877665544332211. В случае CVE-2020-0674 shellcode должен быть представлен как массив DWORD.
Также обратите внимание: при использовании пейлоада WinExec или MessageBoxA вместе с Firefox CVE-2019-17026 сначала нужно снизить уровень содержимого песочницы в «about:config» до 2.
~
Благодарности
maxpl0it - за написание первоначального анализа и PoC для CVE-2019-17026 с упором на ОС Linux, а также за написание первоначального анализа и PoC для CVE-2020-0674 с упором на IE8/11 в Windows 7 x64.
0vercl0k - за документирование внутреннего устройства IonMonkey в отношении алиасинга и GVN.
HackSys Team - за советы по службе WPAD и низкоуровневой отладке JS.
itm4n - за оригинальное исследование по объединению RPC-ошибки принтера с имперсонацией именованного канала.
~
Ссылки
[1] https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html [2] https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/