
Обход UAC в Windows 8.1 и 10 с использованием WinSxS в «dccw.exe».
Этот эксплойт злоупотребляет тем, как «dccw.exe» управляет «WinSxS», используя производный метод «Bypass UAC» Лео Дэвидсона, чтобы получить оболочку администратора без запроса согласия. Он поддерживает архитектуры «x86» и «x64». Кроме того, он был успешно протестирован на Windows 8.1 9600, Windows 10 14393, Windows 10 15031 и Windows 10 15062.
Если вы хотите узнать, как запустить скрипт, обратитесь к разделу использование. Кроме того, вы можете запустить его в Metasploit и получить сеанс Meterpreter с правами администратора.
Чтобы разработать новый обход UAC, сначала нам нужно найти уязвимость в системе, а если быть точнее, уязвимость в процессе с автоматическим повышением привилегий (auto-elevate). Чтобы получить список таких процессов, мы использовали инструмент Sysinternals под названием Strings. После этого мы увидели некоторые процессы с автоматическим повышением привилегий, такие как «sysprep.exe», «cliconfig.exe», «inetmgr.exe», «consent.exe» или «CompMgmtLauncher.exe», которые имели (некоторые до сих пор имеют) уязвимости, позволяющие выполнить «bypass UAC». Поэтому мы начали изучать, как работают другие процессы с автоматическим повышением привилегий, с помощью приложения Sysinternals под названием Process Monitor (ProcMon), но сосредоточившись на процессе «dccw.exe».
Однако, прежде чем приступить к работе с ProcMon, мы сначала проверили манифест таких приложений с помощью другого приложения Sysinternals под названием Sigcheck, и, конечно же, в нашем случае «dccw.exe» является процессом с автоматическим повышением привилегий.
Затем мы смогли начать отслеживать ход выполнения «dccw.exe» с помощью ProcMon, чтобы увидеть, не происходит ли что-то странное, — и мы сразу это заметили. В определённый момент, если «dccw.exe» запущен как 64-битный процесс на 64-битной машине с Windows, он ищет каталог «C:\Windows\System32\dccw.exe.Local\» для загрузки конкретной DLL под названием «GdiPlus.dll», так же, как если бы он выполнялся на 32-битной машине с Windows. Если же запустить его как 32-битный процесс на той же машине, процесс будет искать каталог «C:\Windows\SysWOW64\dccw.exe.Local\». Затем, в связи с тем, что он не существует, процесс всегда ищет папку по пути «C:\Windows\WinSxS\», чтобы получить нужную DLL; имя этой папки имеет следующую структуру:
[архитектура]_microsoft.windows.gdiplus_[порядковый_код]_[версия_Windows]_none_[порядковый_номер]
Если мы заглянем в каталог «WinSxS», мы увидим более одной папки, соответствующей этой структуре; это означает, что «dccw.exe» может загрузить нужную DLL из любой из этих папок. Единственное, в чём мы точно уверены, — это то, что если приложение вызывается как x86-процесс, имя папки будет начинаться со строки «x86», а если запустить его как x64-процесс, его имя будет начинаться со строки «amd64».
Этой ситуацией можно злоупотребить для выполнения DLL-хайждекинга (DLL hijacking) и последующего выполнения кода с высоким уровнем целостности без запроса согласия.
Как только мы обнаружили ошибку во время выполнения процесса с автоматическим повышением привилегий, нам нужно проверить, можно ли ею злоупотребить. Для этого мы просто создали папку «dccw.exe.Local» по нужному пути и внутри этой папки создали папки, расположенные в «WinSxS», к которым процесс может обратиться для загрузки «GdiPlus.dll», но без самой DLL.
Теперь, если мы запустим «dccw.exe», мы увидим, что процесс нашёл папку «dccw.exe.Local» и одну из папок «WinSxS», но не нашёл нужную DLL, что вызывает ошибку. Это то, чего мы ожидали, поскольку этой ситуацией может воспользоваться злоумышленник, как мы упоминали ранее.
На данный момент мы уже знаем, что можем выполнить обход UAC в Windows 10, злоупотребляя «dccw.exe», но как?
Самый используемый метод обхода UAC — тот, что разработан Лео Дэвидсоном. Однако он выполняет внедрение в процесс для вызова COM-объекта IFileOperation, что может быть обнаружено некоторыми антивирусными программами, поэтому более удачный подход к его использованию — тот, что называется Masquerade PEB и применяется Cn33liz в его собственном обходе UAC.
Кроме того, нам пришлось изменить способ вызова IFileOperation в новых версиях Windows 10, поскольку метод Лео Дэвидсона вызывает запрос UAC, начиная со сборки 15002. Таким образом, способ вызова этой операции такой же, как в оригинале, но без флагов операций «FOF_SILENT», «FOFX_SHOWELEVATIONPROMPT» и «FOF_NOERRORUI».
Перед запуском эксплойта важно проверить некоторые аспекты, чтобы не выполнить его неудачно и тем самым не вызвать срабатывание средств защиты. Первое, что мы проверяем, — версию сборки Windows, поскольку некоторые версии не уязвимы к нашему эксплойту (те, у которых версия сборки ниже 7600). После этого мы убеждаемся, что у нас ещё нет прав администратора: если они уже есть, нет причин запускать скрипт. Затем мы проверяем настройки UAC, чтобы подтвердить, что они не установлены в значение «Always notify» («Всегда уведомлять»), поскольку если бы они были установлены в это значение, наш эксплойт был бы бесполезен. Наконец, мы проверяем, принадлежит ли пользователь группе администраторов, потому что в противном случае эксплойт не сработает.
При разработке эксплойта важно, чтобы он работал на как можно большем количестве систем, включая 32-битные версии Windows. Чтобы добиться этого, нам нужно скомпилировать наш эксплойт для таких систем, поскольку его также можно запускать и на 64-битных системах.
Когда наш 32-битный эксплойт выполняется на 64-битной машине с Windows, способ работы «dccw.exe» несколько отличается из-за использования WOW64 (подсистемы Windows, которая позволяет 64-битным машинам запускать 32-битные приложения). Это означает, что папка «dccw.exe.Local» будет искаться в каталоге «C:\Windows\SysWOW64\» вместо «C:\Windows\System32\», а целевая «GdiPlus.dll» будет 32-битной DLL, что подразумевает её поиск в папке, соответствующей шаблону имени «C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_*». Однако при выполнении на 32-битной системе Windows эксплойт будет работать как ожидается.
Наконец, важно отметить, что нам нужно учитывать все пути, соответствующие шаблону «C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_*», при выполнении DLL-хайждекинга, чтобы гарантировать 100% эффективности.