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

В последние несколько лет эпидемия вредоносных программ развивается угрожающими темпами. Несмотря на применение принципов многоуровневой защиты, подразумевающих одновременную работу антивирусных и антишпионских программ, а также брандмауэра, даже внимательный пользователь может стать жертвой вредоносного ПО. Загруженный файл, инфицированный вредоносным ПО, злоупотребление уязвимостями обозревателя Internet Explorer (IE) без участия пользователя, неосторожный щелчок на вложении к письму от знакомого – все это может привести к неработоспособности системы и многочасовой возне с установочным диском ОС Windows и установщиками приложений.

Как следует из материала в журнале eWeek, один из наиболее действенных способов предотвратить проникновение в систему вредоносного ПО, а даже если это произошло, избежать повторной установки полезных приложений, состоит в том, чтобы запускать приложения от имени пользователя с ограниченными правами (иными словами, участника группы «Пользователи Windows»). В настоящее время подавляющее большинство пользователей ОС Windows работают с правами группы администраторов. Это и понятно: только членство в этой группе позволяет устанавливать ПО и принтеры, вносить изменения в параметры питания и настройки часового пояса. Кроме того, многие приложения сомнительного качества требуют доступа на запись к таким каталогам, как \Program Files и \Windows, и/или разделам реестра в ветви HKLM\Software, а значит, не могут работать в контексте учетной записи пользователя с ограниченными правами.

Существует альтернативное решение – запускать от имени пользователя с ограниченными правами не все, а лишь отдельные приложения, которым необходим доступ в Интернет и которые, соответственно, представляют большую угрозу безопасности системы. Примеры таких приложений – обозреватель Internet Explorer и почтовый клиент Outlook. Специалисты корпорации Майкрософт намерены реализовать такую возможность в ОС Windows Vista посредством защищенного режима обозревателя Internet Explorer и контроля учетных записей (UAC), но она доступна даже в Windows 2000 и последующих версиях операционной системы посредством программ Process Explorer и PsExec.

Команда Run as Limited User (Запуск от имени пользователя с ограниченными правами) в меню File (Файл) программы Process Explorer открывает диалоговое окно, которое выглядит и работает во многом аналогично стандартному диалоговому окну Run (Запуск программы) ОС Windows, но зато запускает указанный процесс без прав администратора.

clip_image001

Команда PsExec с параметром –l позволяет добиться такого же эффекта через командную строку:

clip_image002

Запуск процессов от имени пользователей с ограниченными правами при помощи программы PsExec имеет одно существенное преимущество - для наиболее востребованных команд PsExec на рабочем столе можно сохранять ярлыки. К примеру, чтобы создать ярлык для запуска почтового клиента Outlook, щелкните на рабочем столе правой кнопкой мыши, выберите в контекстном меню пункты New (Создать) > Shortcut (Ярлык), укажите путь к программе PsExec в поле размещения и нажмите кнопку Next (Далее). На следующей странице введите в качестве имени ярлыка «Outlook» и нажмите кнопку Finish (Готово). Щелкните на ярлыке правой кнопкой мыши, выберите в контекстном меню пункт Properties (Свойства) и добавьте к пути к клиенту Outlook (например, C:\Program Files\Microsoft Office\Office11\Outlook.exe), указанному в поле Target (Объект), последовательность параметров “-l –d“. Наконец, нажмите кнопку Change Icon (Сменить значок), перейдите к исполняемому файлу Outlook и выберите первый значок из предложенного набора. При двойном щелчке на таком ярлыке перед запуском клиента Outlook на экране ненадолго появится окно командной строки. Это - признак запуска приложения от имени пользователя с ограниченными правами.

Обе программы - как Process Explorer, так и PsExec - при помощи API-интерфейса CreateRestrictedToken создают новый контекст безопасности (маркер), который является копией текущего контекста без прав администратора и принадлежности к группе. После создания маркера, подобного тому, что ОС Windows присваивает стандартным пользователям, программа Process Explorer путем вызова функции CreateProcessAsUser запускает процесс с новым маркером.

Помимо прочего, программа Process Explorer помогает сравнить маркер процесса, исполняемого с полным набором прав администратора, и маркер ограниченного доступа - для этого следует открыть вкладку Security (Безопасность) диалогового окна Process Properties (Свойства процесса). К примеру, на левом из двух нижеследующих изображений приводятся свойства экземпляра обозревателя Internet Explorer, который исполняется в контексте учетной записи, участвующей в группе администраторов, а на правом - тот же обозреватель, но запущенный с помощью диалогового окна Run as Limited User (Запуск от имени пользователя с ограниченными правами).

clip_image003

Различия между двумя списками привилегий сразу бросаются в глаза, поскольку у маркера ограниченного пользователя их значительно меньше. Программа Process Explorer указывает привилегии, присвоенные группе «Пользователи», и вычеркивает все остальные, в том числе такие широкие, как SeDebugPrivilege, SeLoadDriverPrivilege и SeRestorePrivilege.

Различия между списками групп менее заметны. В свойствах обоих маркеров указана группа Builtin\Administrators (Встроенные\Администраторы), но в версии с ограниченными правами с ней сопоставлен флаг Deny (Запретить). Для того, чтобы всем стало полностью понятно значение этого флага, следует провести небольшой ликбез на тему модели безопасности Windows.

Разрешения, назначенные объекту, в среде Windows хранятся в списках управления доступом на уровне пользователей (Discretionary Access Control Lists, DACL), состоящих из элементов управления доступом (Access Control Entries, ACE) в количестве от нуля и более. В каждом таком элементе указывается пользователь или группа, к которой он относится, тип - Allow (Разрешить) или Deny (Запретить) - и права доступа (например, на чтение или удаление), которые этот элемент предоставляет или запрещает. Когда тот или иной процесс пытается открыть объект, ОС Windows, как правило, анализирует все элементы ACE в списке DACL объекта на предмет соответствия пользователю или любой группе из указанных в маркере процесса. Если группе назначен флаг Deny (Запретить), то в ходе проверки прав доступа участникам этой группы доступ к объектам может быть только запрещен.

Функция CreateRestrictedToken сопоставляет группы, от участия в которых в конечном маркере предполагается отказаться, с флагом Deny (Запретить). Это альтернатива удалению групп, в случае которого образуется брешь в системе безопасности - процесс, применяющий новый маркер, может при некоторых условиях получить доступ к объектам, доступ к которым участникам удаленных групп явно запрещен. Таким образом, пользователи могут фактически обходить разрешения посредством API. Возьмем для примера каталог, разрешения которого запрещают доступ участникам группы Builtin\Administrators (Встроенные\Администраторы), но разрешают доступ пользователю Mark. К этому каталогу нельзя будет обратиться посредством первого экземпляра обозревателя Internet Explorer, изображенного выше, но можно при помощи версии с ограниченными правами.

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

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

В следующей записи я опишу систему контроля учетных записей (UAC), появившуюся в ОС Windows Vista. Она работает по тому же принципу, что и программы Process Explorer и PsExec, но благодаря изменениям, внесенным в оконную систему и модель защиты объектов процессов, лучше отделяет друг от друга процессы с разным уровнем привилегий.

Исходная запись создана пользователем Mark Russinovich 02.03.2006 в 10:29:00
Запись перенесена из блога Sysinternals.com/Blog