Режим одобрения администратором
Даже если пользователи
запускают только программы, совместимые с правами обычного
пользователя, некоторые операции все равно требуют административных
прав. Подавляющее большинство установок программного обеспечения
требует административных прав для создания каталогов и параметров
реестра в размещениях, общих для всей системы, или для установки
драйверов устройств либо служб. Изменение глобальных системных
параметров Windows и приложений также требует административных прав,
как, например, функция родительского контроля в Windows Vista.
Большую часть этих операций можно было бы выполнить путем
переключения на отдельную учетную запись администратора, но
неудобство такой процедуры вероятнее всего приведет к тому, что
большинство пользователей будет выполнять свои ежедневные задачи,
так и оставшись в административной учетной записи.
В связи с этим Windows Vista
содержит расширенные функциональные возможности “запуска от имени”,
чтобы обычные пользователи могли комфортно запускать процессы с
административными правами. Эти возможности нужны для того, чтобы у
приложений был способ определения операций, для которых система
может по мере необходимости получать административные права от имени
приложения. На этом моменте я кратко остановлюсь ниже.
Далее, чтобы пользователи,
действующие как системные администраторы, могли работать с правами
обычного пользователя, не вводя имена пользователей и пароли каждый
раз, когда им нужно обратиться к административным правам, в Windows
Vista введен режим одобрения администратором (Admin Approval Mode,
AAM). Эта функция создает для пользователя два набора учетных данных
для входа в систему: один с правами обычного пользователя, а другой
с административными. Так как каждый пользователь в системе Windows
Vista или является обычным пользователем, или работает в основном
как обычный пользователь в AAM, разработчики должны рассчитывать на
то, что все пользователи Windows — это обычные пользователи, в
результате чего будет больше программ, работающих с правами обычного
пользователя без виртуализации или режима совместимости.
Предоставление процессу
административных прав называется повышением прав. Если эта процедура
выполняется под учетной записью обычного пользователя, она
называется повышением “через плечо” (Over the Shoulder, OTS),
поскольку требует ввода учетных данных для учетной записи, которая
является членом группы администраторов. Это похоже на ситуацию,
когда “из-за спины” обычного пользователя что-то печатает другой
пользователь. Повышение, выполняемое пользователем AAM, называется
повышением по согласию, поскольку пользователь просто должен
одобрить присвоение его административных прав.
Windows Vista считает
пользователя администратором, если он является членом любой из групп
административного типа, перечисленных на рис. 8.
Рис 8 Административные группы
Встроенная группа “Администраторы”
Администраторы сертификатов |
Администраторы домена |
Корпоративные администраторы |
Администраторы политик |
Администраторы схем |
Контроллеры домена |
Корпоративные контроллеры домена с доступом только для чтения |
Контроллеры домена с доступом только для чтения |
Операторы учета |
Операторы архива |
Операторы шифрования |
Операторы настройки сети |
Операторы печати |
Системные операторы |
Серверы RAS |
Опытные пользователи |
Пред-Windows 2000 доступ |
Многие из перечисленных групп используются
только в системах – участниках доменов и непосредственно не дают
пользователям локальных административных прав, но позволяют им
изменять параметры всего домена. Если пользователь является членом
любой из этих групп, но не фактической группы администраторов, то,
вместо повышений согласия, он обращается к своим административным
правам через OTS-повышения.
Когда пользователь,
принадлежащий одной из перечисленных групп, входит в систему,
Windows Vista создает маркер, представляющий версию
административного идентификатора этого пользователя, но с правами
обычного пользователя. Новый маркер лишается всех привилегий,
назначенных пользователю, кроме привилегий, перечисленных на рис. 9, которые являются применяемыми по умолчанию
привилегиями обычного пользователя.
Рис 9 Привилегии обычного пользователя
Понятное название
Внутреннее имя
Обход перекрестной проверки |
SeChangeNotifyPrivilege |
Завершение работы системы |
SeShutdownPrivilege |
Отключение компьютера от стыковочного узла |
SeUndockPrivilege |
Увеличение рабочего набора процесса |
SeIncreaseWorkingSetPrivilege |
Изменение часового пояса |
SeTimeZonePrivilege |
Кроме того, все группы
административного типа отмечаются в новом маркере флагом
USE_FOR_DENY_ONLY. На рис. 10 в окне
программы Sysinternals Process Explorer (средство управления
процессами, которое можно загрузить на веб-узле microsoft
.com/technet/sysinternals) слева показано членство в группах и
привилегии процесса, работающего с административными правами, а
справа — без административных прав. (Для предотвращения
неосторожного использования модель безопасности Windows требует,
чтобы перед использованием привилегия со снятым флагом была
включена.)
Рис.
10 Маркеры администратора AAM и
обычного пользователя
Группа с флагом “только для
запрещения” может использоваться только для запрещения
пользовательского доступа к ресурсу, но никогда не разрешает доступ.
Тем самым закрывается брешь в системе безопасности, которая может
возникнуть в случае полного удаления группы. Например, у файла есть
список управления доступом (ACL), который запрещает любой доступ для
группы “Администраторы”, но предоставляет некоторый доступ другой
группе, к которой относится пользователь. Если группа
администраторов отсутствует в маркере, этот пользователь получит
доступ к файлу, поскольку версия его идентификатора со стандартными
правами имеет больше прав доступа, чем административная.
Автономные системы, которыми
обычно являются домашние компьютеры, и системы, входящие в состав
доменов, обрабатывают AAM-доступ со стороны удаленных пользователей
по-разному, поскольку доменные компьютеры в своих разрешениях
доступа к ресурсам могут использовать доменные административные
группы. Когда пользователь обращается к общедоступному файловому
ресурсу на автономном компьютере, Windows запрашивает удостоверение
удаленного пользователя с правами обычного пользователя, но на
системах, объединенных в домен, Windows соблюдает все членства
пользователя в группах домена, запрашивая административный
идентификатор пользователя.
Удобное получение административных прав
Определить потребность в
административных правах системы и приложений можно множеством
способов. Один из них — команда контекстного меню и ярлык “Запуск от
имени администратора” в пользовательском интерфейсе проводника. Эти
элементы содержат цветной значок щита, который должен быть добавлен
ко всем кнопкам или пунктам меню, выбор которых приводит к повышению
прав. При выборе элемента “Запуск от имени администратора” проводник
вызывает API-функцию ShellExecute с командой “runas”.
Подавляющее большинство
программ установки требует административных прав, поэтому загрузчик
образов, который инициирует запуск исполняемого файла, содержит код
обнаружения установщиков для выявления устаревших версий
установщиков. Часть алгоритмов используемой загрузчиком эвристики
довольно проста: он ищет слова “setup”, “install” или “update” в
имени файла образа или внутренней информации о версии. Более сложные
алгоритмы включают просмотр в исполняемом файле последовательностей
байтов, обычно применяемых сторонними разработчиками в служебных
программах – установочных оболочках.
Чтобы определить, нуждается
ли целевой исполняемый файл в правах администратора, загрузчик
образов также вызывает библиотеку совместимости приложений
(appcompat). Библиотека обращается к базе данных совместимости
приложений, чтобы определить, связаны ли с исполняемым файлом флаги
совместимости RequireAdministrator или RunAsInvoker.
Самый общий способ запросить
для исполняемого файла административные права — добавить в его файл
манифеста приложения тег requestedElevationLevel. Манифесты — это
XML-файлы, содержащие дополнительные сведения об образе. Они были
введены в Windows XP как способ определения зависимостей для
параллельно используемых библиотек DLL и сборок Microsoft .NET
Framework. Наличие в манифесте элемента trustInfo (он показан ниже
во фрагменте дампа Firewallsettings.exe) означает, что исполняемый
файл был написан для Windows Vista и содержит элемент
requestedElevationLevel. Атрибут level этого элемента может иметь
одно из трех значений: asInvoker, highestAvailable и
requireAdministrator.
<trustInfo
xmlns=”urn:schema-microsoft-com:asm.v3”>
<security>
<requestedPrivileges>
<requestedExecutionLevel
Level=”requireAdministrator”
uiAccess=”false”/>
</requestedPrivileges>
</security>
</trustInfo>
Исполняемые файлы, не
требующие административных прав, например Notepad.exe, имеют
значение атрибута asInvoker. В некоторых исполняемых файлах заложено
допущение, что администраторы всегда хотят получить максимальный
доступ. Поэтому в них используется значение highestAvailable.
Пользователю, запускающему исполняемый файл с этим значением,
предлагается повысить права, только если он работает в режиме AAM
или рассматривается как администратор согласно определенным ранее
правилам и в связи с этим должен повысить права для обращения к
своим административным привилегиям. Примерами приложений, для
которых используется значение highestAvailable, могут служить
программы Regedit.exe, Mmc.exe и Eventvwr.exe. Наконец, значение
requireAdministrator всегда инициирует запрос повышения и
используется всеми исполняемыми файлами, которым не удастся
выполнить свои действия без административных прав.
В приложениях со специальными
возможностями атрибуту uiAccess задается значение "true" для
управления окном ввода в процессах с повышенными правами. Кроме
того, для обеспечения этих возможностей они должны быть подписаны и
находиться в одном из нескольких безопасных размещений, включая
%SystemRoot% и %ProgramFiles%.
Значения, задаваемые
исполняемым файлом, можно легко определить, просмотрев его манифест
с помощью служебной программы Sysinternals Sigcheck, например:
sigcheck –m <executable>
При запуске образа, который
запрашивает административные права, службе сведений о приложении
(известна также как AIS, находится в
%SystemRoot%\System32\Appinfo.dll), которая работает в процессе
Service Host (%SystemRoot%\System32\Svchost.exe), предписывается
запустить программу Consent.exe (%SystemRoot%\System32\Consent.exe).
Программа Consent создает снимок экрана, применяет к нему эффект
затемнения, переключается на рабочий стол, доступный только
системной учетной записи, устанавливает затемненный снимок в
качестве фона и открывает диалоговое окно повышения прав, содержащее
сведения об исполняемом файле. Вывод на отдельном рабочем столе
предотвращает изменение этого диалогового окна любой вредоносной
программой, работающей под учетной записью пользователя.
Рис.
11 Диалоговые окна OTS-повышения
Если образ является
компонентом Windows, подписанным цифровой подписью корпорации
Майкрософт, и находится в системном каталоге Windows, то, как
показано вверху на рис. 11, в верхней
части диалогового окна добавляется синяя полоса. Серая полоса
(среднее диалоговое окно) обозначает образы, подписанные цифровой
подписью, отличной от подписи корпорации Майкрософт, а оранжевая
полоса (нижнее диалоговое окно) предназначена для неподписанных
образов. Для образов, подписанных цифровой подписью, в диалоговом
окне повышения показывается значок образа, описание и издатель, а
для неподписанных образов — только общий значок, имя файла и
примечание “Издатель неизвестен”. Это усложняет для вредоносных
программ имитацию подлинного программного обеспечения. Кнопка
“Сведения” внизу диалогового окна раскрывается, показывая командную
строку, которая будет передана исполняемому файлу при его запуске.
Диалоговое окно программы Consent для режима AAM, показанное на
Figure 12, подобно окну для
OTS-повышения, но вместо запроса на ввод учетных данных
администратора там имеются кнопки “Далее” и “Отмена”.
Рис.
12 Диалоговое окно AAM-повышения
Если пользователь отклоняет
повышение прав, Windows возвращает процессу, инициировавшему запуск,
ошибку “Отказано в доступе”. Если пользователь соглашается на
повышение, введя учетные данные администратора или нажав кнопку
“Далее”, служба AIS вызывает функцию CreateProcessAsUser для запуска
процесса с необходимым административным идентификатором. Хотя
технически родителем процесса с повышенными правами является служба
AIS, она использует новую поддержку со стороны функции
CreateProcessAsUser, которая устанавливает запускаемому процессу в
качестве кода родительского процесса код процесса, который
изначально его запустил (см. рис. 13).
Именно поэтому процессы с повышенными правами не изображаются как
потомки процесса Service Hosting службы AIS в таких средствах, как
обозреватель процессов, которые показывают деревья процессов.
Рис. 13 Поток повышения прав
Даже при том, что диалоговые
окна повышения выводятся на отдельном безопасном рабочем столе, по
умолчанию пользователи не имеют никакого способа проверить тот факт,
что они видят подлинное диалоговое окно, а не окно, открытое
вредоносной программой. Для AAM это не проблема, поскольку
вредоносная программа со своим фальшивым диалоговым окном Consent не
может получить административных прав. Однако эта программа может
дождаться ОТС-повышения обычного пользователя, перехватить его и
использовать троянское диалоговое окно для захвата учетных данных
администратора. С этими учетными данными вредоносная программа может
получить доступ к учетной записи администратора и инфицировать
ее.
В связи с этим в
корпоративных средах ОТС-повышения должны быть строго запрещены.
Чтобы отключить ОТС-повышения (и уменьшить количество вызовов службы
поддержки), запустите редактор локальных политик безопасности
(Secpol.msc) и для параметра “Управление учетными записями
пользователей: поведение запроса на повышение прав для обычных
пользователей” выберите значение
Automaticallydenyelevationrequests.
Пользователи домашних
компьютеров, которые сами отвечают за свою безопасность, должны
настроить ОТС-повышения таким образом, чтобы для их применения
необходимо было ввести специальное сочетание клавиш (SAS), которое
вредоносная программа не сможет перехватить или имитировать. Чтобы
настроить SAS, нужно запустить редактор групповых политик
(Gpedit.msc), перейти к разделу “Конфигурация компьютера” –
“Административные шаблоны” – “Компоненты Windows” – “Интерфейс
пользователя для учетных данных” и включить параметр “Требовать
достоверный путь для входа в учетную запись”. После этого обратиться
к диалоговому окну повышения можно будет, нажав сочетание клавиш
CTRL+ALT+DELETE.