В каждой версии Windows (начиная с Vista) есть стандартный компонент UAC (User Account Control). Он включен по умолчанию и не дает пользователю «выстрелить себе в ногу», запустив какую-нибудь малварь с правами админа. В этой статье мы расскажем, как использовать «контроль учетных записей» в своих целях — например, запустить любой код с правами администратора или даже как системный процесс.

WARNING


Вся информация приводится исключительно в ознакомительных целях! Microsoft рекомендует патчить винду вовремя, не работать в админской учетке без реальной необходимости, не обходить UAC и не донимать техподдержку сообщениями об уязвимостях.

Методы обхода UAC продолжают находить и сейчас, модифицируя старые приемы и открывая новые. Самое сложное — подобрать подходящие способы для конкретной атакуемой системы. Концептуально разных приемов известно с десяток, а если считать их вместе с модификациями и гибридными способами, то наберется больше двадцати. Прочитать о них подробнее и посмотреть соответствующие примеры кода на GitHub можно по ссылкам в этой статье.
 

UAC как огромный баг

В хакерской философии многое заимствовано из боевых искусств. Например, мастер айкидо практически не атакует сам. Он лишь подмечает ошибки соперника и обращает его усилия против него самого. Так же и просчеты в защитных системах позволяют превратить их в хакерский инструмент. Сейчас мы разберем несколько способов обхода UAC и даже его использования для запуска своего кода с повышенными привилегиями. Многие из этих методов уже реализованы в троянах и позволяют им скрытно внедряться в систему.

 

Белый список для черных шляп

Во всех версиях Windows для UAC существует так называемый белый список — набор системных компонентов, для которых не применяются ограничивающие правила. Поэтому один из самых распространенных методов атаки сводится к попытке найти любые приложения из белого списка и попытаться внедрить в них свою *.dll.

Провести атаку типа DLL hijack сравнительно просто, хотя и здесь не обходится без подводных камней. Они свои в каждой версии ОС, а также зависят от настроек, учетной записи, разрядности ОС, установленных компонентов и патчей.

Например, в Windows 7/8 (но не 8.1) можно использовать штатную программу подготовки системы к развертыванию sysprep.exe, чтобы подгрузить свою версию cryptbase.dll или другой библиотеки. Для этого достаточно поместить ее рядом с экзешником, поскольку он начинает искать и подгружать DLL’ки из своего каталога. Однако при попытке просто скопировать свой файл в каталог %systemroot%/system32/sysprep/ мы получим сообщение об ошибке.

Доступ в \system32\ запрещен
Доступ в \system32\ запрещен

У пользователя нет прав доступа на запись в системный каталог, а администратор должен подтвердить это действие через UAC. Чтобы наш код получил необходимые права без лишних вопросов, используем другой трюк — с автономным установщиком обновлений Windows.

Поместим cryptbase.dll в архив CAB. Не будем останавливаться на том, как сделать эту элементарную операцию. Она подробно описана на сайте Microsoft. Пусть наша библиотека называется evil.dll и находится в каталоге \FCKUAC на диске C:\. Тогда следующей командой мы сделаем «заряженный» архив:

makecab C:\FCKUAC\evil.dll C:\FCKUAC\evil.cab
Архив с нашей библиотекой
Архив с нашей библиотекой

Скормим этот архив автономному установщику обновлений (Windows Update Standalone Installer).

wusa C:\FCKUAC\evil.cab /quite /extract:%systemroot%\system32\sysprep\

Он распакует его в \system32\sysprep\, а «контроль учетных записей» будет молчать.

Утилита sysprep как встроенный бэкдор
Утилита sysprep как встроенный бэкдор

Если умеешь программировать, то можешь запустить sysprep.exe скрыто — например, через CreateProcess() с флагом StartupInfo.wShowWindow = SW_HIDE. На скрытые окна сегодня ругаются эвристические анализаторы многих антивирусов, но сейчас мы говорим только про UAC — ему все равно. После такого запуска sysprep.exe попытается загрузить и выполнить библиотеку CRYPTBASE.dll, но на ее месте окажется наша, уже содержащая нужную нам функциональность. Она совершенно легально поднимет права нашему коду, и UAC примет это как должное.

Это происходит потому, что wusa и sysprep находятся в белом списке, а все приложения из этого списка могут поднимать себе права без участия UAC. Наш же код из подгружаемой установщиком библиотеки унаследует права родительского процесса sysprep.exe и также будет считаться доверенным.

Использование sysprep для обхода UAC
Использование sysprep для обхода UAC

Рассмотренный выше трюк совместного использования wusa и sysprep представляет собой модифицированный метод Лео Дэвидсона (Leo Davidson). Исходный вариант был применим только к непропатченной Windows 7 и был описан еще в 2009 году в рассылке компьютерного сообщества Оксфордского университета. Копия приводится на его сайте, который из-за обилия подобного кода внесен в списки потенциально опасных.

Метод Дэвидсона в различных модификациях уже много лет используется для внедрения троянов, особенно семейства Win32/Carberp. Пик эпидемии пришелся на осень 2011 года, но способ до сих пор работает в следующем типичном сценарии: действия выполняются в 32-битной версии Windows 7/8 под учетной записью администратора при включенном UAC с настройками по умолчанию. Простому пользователю нельзя запускать wusa.exe, но многие до сих пор сидят под админом без реальной необходимости. Просто им лень создавать пользовательские учетки и управлять правами доступа даже через встроенные средства.

Мэтт Грэбер (Matt Graeber) уточняет, что данный метод не работает «как есть» в Windows 8.1/10, поскольку в этих ОС изменены как sysprep.exe, так и сам UAC. Теперь программа подготовки системы к развертыванию загружает DLL только из %windir%\system32\.

 

Автоматическое повышение привилегий

Если по каким-то причинам доступа к установщику обновлений нет, то можно использовать другой вариант — копирование файла в системный каталог методом IFileOperation.

Суть метода в том, что для обхода UAC в нашей библиотеке создается COM-объект IFileOperation. Он позволяет скопировать файл куда угодно (в том числе в системную директорию \system32\ и ее подкаталоги), автоматически повышая для этого привилегии, так как функция будет иметь флаг auto-elevate.

Вот пример использования объекта IFileOperation для копирования файла в системный каталог.

Метод внедрения своей библиотеки в процесс explorer.exe рассматривается в этом примере.

Список приложений из белого списка можно посмотреть тут. Также его можно сгенерировать самому, просто найдя в системном каталоге Windows экзешники, содержащие строку autoelevate.

Создаем список программ из белого списка UAC
Создаем список программ из белого списка UAC

В зависимости от используемой программы из белого списка и версии Windows можно подменить ту или иную библиотеку (см. таблицу).

Стандартные компоненты и подменяемые библиотеки
Стандартные компоненты и подменяемые библиотеки

Методы перебора этих вариантов собраны в одну PowerShell-утилиту.

 

ISecurityEditor

Удивительно, что большинство методов обхода «контроля учетных записей» были умышленно заложены самими разработчиками Windows. Провал «Висты» маркетологи связали с неудобным поведением нового компонента, и в «семерке» UAC постарались сделать менее назойливым. Для этого пришлось делать костыли из белого списка и метода автоматического повышения привилегий (без подтверждения пользователем) у сорока с лишним системных программ. К функции autoElevate были написаны COM-интерфейсы: документированный IFileOperation (который разбирался выше) и недокументированный ISecurityEditor, об использовании которого мы поговорим сейчас.

Благодаря встроенным в UAC бэкдорам компьютеры с Windows 7 заражались незаметно для пользователя. Они становились полигоном для малвари и частенько попадали в ботнеты. Один из них (под названием Simda) успешно развивался на протяжении пяти лет, используя для внедрения кода интерфейс ISecurityEditor. В Microsoft проблему частично устранили лишь в 2015 году. Исправленный ISecurityEditor стал работать только с объектами файловой системы, указанными в константе SE_FILE_OBJECT.

Непропатченные системы встречаются до сих пор. Пример обхода UAC с использованием уязвимой версии ISecurityEditor приводится здесь.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Группировка APT28 эксплуатирует недавно исправленную уязвимость в Adobe Flash Player

Эксперты компании Proofpoint обнаружили, что «правительственные» хакеры из группы APT28 (о…