Bypass UAC

Bypass UAC

https://t.me/monkey_hacker

Контроль учетных записей пользователей (UAC) - это функция безопасности Windows, которая заставляет любой новый процесс по умолчанию запускаться в контексте безопасности непривилегированной учетной записи. Эта политика применяется к процессам, запущенным любым пользователем, включая самих администраторов. Идея заключается в том, что мы не можем полагаться только на личность пользователя, чтобы определить, должны ли некоторые действия быть разрешены.

Хотя это может показаться нелогичным, представьте случай, когда пользователь BOB неосознанно загружает вредоносное приложение из Интернета. Если BOB входит в группу администраторов, то любое приложение, которое он запустит, унаследует его привилегии маркера доступа. Поэтому если BOB решит запустить вредоносное приложение, а UAC будет отключен, вредоносное приложение мгновенно получит привилегии администратора. Вместо этого вредоносное приложение будет ограничено маркером неадминистративного доступа при включенной UAC.

UAC - это обязательный контроль целостности (MIC), который представляет собой механизм, позволяющий разграничивать пользователей, процессы и ресурсы путем присвоения каждому из них уровня целостности (IL). В общих чертах, пользователи или процессы с маркером доступа с более высоким IL смогут получить доступ к ресурсам с более низким или равным IL. MIC имеет приоритет над обычными DACL Windows, поэтому вы можете быть авторизованы для доступа к ресурсу в соответствии с DACL, но это не будет иметь значения, если ваш IL недостаточно высок.

Чтобы выполнить это разделение ролей, UAC немного по-разному относится к обычным пользователям и администраторам при входе в систему:

При входе в систему неадминистраторы получают один токен доступа, который будет использоваться для всех задач, выполняемых пользователем. Этот токен имеет Medium IL.

Администраторы получат два токена доступа:

  • Фильтрованный токен: Токен с лишенными привилегиями администратора, используемый для обычных операций. Этот токен имеет средний IL.
  • Повышенный токен: Токен с полными привилегиями администратора, используется, когда необходимо запустить что-то с административными привилегиями. Этот токен имеет высокий IL.

В основе UAC лежит служба Application Information Service или Appinfo. Когда пользователю требуется повышение уровня доступа, происходит следующее:

  1. Пользователь запрашивает запуск приложения от имени администратора.
  2. Выполняется вызов API ShellExecute с использованием глагола runas.
  3. Запрос передается в Appinfo для обработки повышения прав.
  4. Проверяется манифест приложения на предмет разрешения AutoElevation (подробнее об этом позже).
  5. Appinfo выполняет consent.exe, который показывает приглашение UAC на защищенном рабочем столе. Безопасный рабочий стол - это просто отдельный рабочий стол, который изолирует процессы от того, что запущено на рабочем столе пользователя, чтобы другие процессы не могли каким-либо образом повлиять на приглашение UAC.
  6. Если пользователь дает согласие на запуск приложения от имени администратора, служба Appinfo выполнит запрос, используя Elevated Token пользователя. Затем Appinfo установит ID родительского процесса нового процесса, чтобы он указывал на оболочку, из которой был сделан запрос на повышение статуса.

Case study: msconfig

Наша цель - получить доступ к командной строке High IL, не проходя через UAC. Для начала давайте откроем msconfig либо из меню "Пуск", либо из диалога "Выполнить":

Если мы проанализируем процесс msconfig с помощью Process Hacker (доступен на рабочем столе), мы заметим кое-что интересное. Даже когда нам не было показано приглашение UAC, msconfig запускается как процесс с высоким IL:

Это возможно благодаря функции под названием auto elevation, которая позволяет определенным двоичным файлам подниматься без участия пользователя. Более подробно об этом позже.

Если бы мы могли заставить msconfig породить оболочку для нас, оболочка унаследовала бы тот же токен доступа, который использует msconfig, и поэтому была бы запущена как процесс с высоким уровнем IL.

Case study: azman.msc

Как и в случае с msconfig, azman.msc будет автоматически подниматься, не требуя вмешательства пользователя. Если мы найдем способ породить оболочку из этого процесса, мы обойдем UAC. Обратите внимание, что, в отличие от msconfig, azman.msc не имеет встроенного способа создания оболочки. Мы можем легко преодолеть это с помощью творческого подхода.

Чтобы запустить оболочку, мы воспользуемся справкой приложения

На экране справки щелкните правой кнопкой мыши любую часть статьи справки и выберите View Source (Просмотреть источник).

Это вызовет процесс блокнота, который мы можем использовать для получения оболочки. Для этого перейдите в меню Файл->Открыть и убедитесь, что выбрали Все файлы в комбинированном окне в правом нижнем углу. Перейдите в C:\Windows\System32, найдите cmd.exe и щелкните правой кнопкой мыши, чтобы выбрать Открыть

Это снова обойдет UAC и даст нам доступ к командной строке с высокой степенью защиты. Вы можете посмотреть дерево процессов в Process Hacker, чтобы увидеть, как маркер высокой целостности передается от mmc (Microsoft Management Console, запускается через Azman) до cmd.exe

AutoElevate

Как уже упоминалось ранее, некоторые исполняемые файлы могут автоматически повышаться, достигая высокого IL без вмешательства пользователя. Это относится к большинству функций панели управления и некоторым исполняемым файлам, поставляемым с Windows.

Для автовыравнивания приложения необходимо выполнить некоторые требования:

  • Исполняемый файл должен быть подписан Издателем Windows.
  • Исполняемый файл должен находиться в доверенном каталоге, например %SystemRoot%/System32/ или %ProgramFiles%/.

В зависимости от типа приложения могут применяться дополнительные требования:

  • Исполняемые файлы (.exe) должны объявлять элемент autoElevate в своих манифестах. Для проверки манифеста файла можно использовать sigcheck, инструмент, предоставляемый в составе пакета Sysinternals. Вы можете найти копию sigcheck на своей машине по адресу C:\tools\ . Если мы проверим манифест msconfig.exe, мы найдем свойство autoElevate

Case study: Fodhelper

Fodhelper.exe - это один из исполняемых файлов Windows по умолчанию, отвечающий за управление дополнительными функциями Windows, включая дополнительные языки, приложения, не установленные по умолчанию, или другие характеристики операционной системы. Как и большинство программ, используемых для настройки системы, fodhelper может автоматически поднимать уровень при использовании стандартных настроек UAC, чтобы администраторы не получали запрос на повышение уровня при выполнении стандартных административных задач. Хотя мы уже рассмотрели исполняемый файл с автоподнятием, в отличие от msconfig, fodhelper можно использовать без доступа к графическому интерфейсу. С точки зрения злоумышленника, это означает, что его можно использовать через удаленную оболочку средней целостности и превратить в полнофункциональный процесс высокой целостности. Что было замечено в fodhelper, так это то, что он ищет в реестре определенный ключ, представляющий интерес:Когда Windows открывает файл, она проверяет реестр, чтобы знать, какое приложение использовать. В реестре хранится ключ, известный как Programmatic ID (ProgID) для каждого типа файла, с которым связано соответствующее приложение. Допустим, вы пытаетесь открыть файл HTML. Часть реестра, известная как HKEY_CLASSES_ROOT, будет проверена, чтобы система знала, что для его открытия необходимо использовать предпочитаемый вами веб-клиент. Команда для использования будет указана в подзакладке shell/open/command для ProgID каждого файла. Возьмем ProgID "htmlfile" в качестве примера:В действительности, HKEY_CLASSES_ROOT - это просто объединенное представление двух различных путей в реестре.

При проверке HKEY_CLASSES_ROOT, если в HKEY_CURRENT_USER (HKCU) есть ассоциация, специфичная для пользователя, то она будет иметь приоритет. Если ассоциация для конкретного пользователя не настроена, то вместо нее будет использоваться общесистемная ассоциация в HKEY_LOCAL_MACHINE (HKLM). Таким образом, каждый пользователь при желании может выбрать предпочитаемые приложения отдельно.

Возвращаясь к fodhelper, мы видим, что он пытается открыть файл под ProgID ms-settings. Создав ассоциацию для этого ProgID в контексте текущего пользователя в HKCU, мы отменим общесистемную ассоциацию по умолчанию и, следовательно, будем контролировать, какая команда будет использоваться для открытия файла. Поскольку fodhelper является исполняемым файлом autoElevate, любой порожденный им подпроцесс будет наследовать маркер высокой целостности, эффективно обходя UAC.


Report Page