Бесплатно Экспресс-аудит сайта:

12.03.2020

Запуск программ в Windows без прав администратора при помощи RunWithRestrictedRights

Автор: Ashwin

Задавались ли вы вопросом, безопасно ли запускать очередное скачанное приложение? В этой статье мы рассмотрим этот вопрос. Одно из наилучших решений – запуск программы в песочнице (например, в Sandboxie ) или на виртуальной машине, поскольку в этом случае права доступа у приложения будут серьезно ограничены.

Мне всегда было интересно, почему приложениям нужны расширенные права. Например, в случае утилит для усиления безопасности системы или управления функциями в Windows, такой запрос правомерен, но в других ситуациях всё не так очевидно. Программы, после запуска которых появляются всплывающие окна от UAC (User Account Control; Контроль учётных записей пользователей), могут не запуститься вовсе, если вы не разрешите.

Рисунок 1: Описание и параметры приложения RunWithRestrictedRights

С другой стороны, было бы неплохо использовать эту возможность в принудительном режиме. И здесь нам на помощь приходит RunWithRestrictedRights. Эта утилита, управляемая из командной строки, использует Windows Integrity Mechanism для ограничения прав приложений, чтобы не нанести вред системе (лучше, чем PSExec).

Когда я впервые запустил RunWithRestrictedRights, возникла ошибка «a required privilege is not held by the client» (у клиента нет необходимых привилегий). Для решения этой проблемы у учетной записи должны быть следующие права, используемые RunWithRestrictedRights при управлении другими приложениями:

  1. Настройка квот памяти для процесса (Adjust memory quotas for a process).

  2. Замена маркера уровня процесса (Replace a process level token).

Более подробно об этих правах можно узнать в официальной документации . Права добавляются в разделе Control Panel (Панель управления) > Administrative Tools (Администрирование) > Local Security Policy (Локальная политика безопасности) > User Rights Assignment (Назначение прав пользователя). Следует убедиться, что в вышеуказанные разрешения добавлена группа «Администраторы». После внесения изменения необходимо перезагрузить компьютер.

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

Как использовать RunWithRestrictedRights

  1. Запустите командную строку с административными правами (этот шаг очень важен).

  2. Введите команду, используя следующий шаблон: C:RunWithRestrictedRights.exe "application".

Необходимо указать местонахождение директории с файлом RunWithRestrictedRights.exe. Я использую папку H:Downloads. Слово «application» нужно заменить на приложение, которое выходите запустить (Notepad, MSPaint и так далее).

Таким образом, итоговая команда должна выглядеть так: H:DownloadsRunWithRestrictedRights.exe notepad. Для удобства можно привязать переменную окружения к местонахождению приложения.

Рисунок 2: Пример запуска приложения с ограниченными правами

Если всё сделано правильно, приложение с ограниченными привилегиями должно запуститься. В командной строке вы также увидите новое сообщение, что «notepad» запущен на уровне Medium Integrity с идентификатором процесса – aaaa, где aaaa – четырехзначный номер.

Попробуем запустить приложение, не являющее частью операционной системы и требующее UAC (например, Kingston SSD Manager).

Я запустил команду C:Windowssystem32>H:DownloadsRunWithRestrictedRights.exe "C:Program Files (x86)Kingston_SSD_ManagerKSM.exe".

Рисунок 3: Пример запуска приложения от стороннего разработчика

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

Как проверить, что приложение запущено с ограниченными правами? Разработчик рекомендует использовать Process Explorer. Зайдите в свойства процесса и посмотрите флаги BUILTINAdministrators, Mandatory Label и Local account and member of Administrators group (см. рисунок ниже).

Рисунок 4: Свойства процесса KSM.exe

Кроме того, в RunWithRestrictedRights предусмотрено несколько параметров, которые можно использовать следующим образом: RunWithRestrictedRights.exe <application> -argument.

Аргумент –w запустит приложение с ограничениями сразу же, но возврата к командной строке не произойдет, пока программа не закроется. Например, H:DownloadsRunWithRestrictedRights.exe "notepad" –w.

Хотите запускать программы с уровнем Low Integrity? Воспользуйтесь аргументом –l. В случае с аргументом –P используются права группы Power Users. Аргумент -d <sid> запрещает использование прав SID. Аргумент –v предназначен для отображения более детальной информации.

В общем, довольно простое приложение, позволяющее повысить уровень безопасности.

Заключение

RunWithRestrictedRights – портативное приложение, которое работает, начиная с Windows 7 и выше (хотя разработчики утверждают, что в Windows XP тоже работает). Утилита также поддерживает Windows Server 2003 и более поздние версии. Программа разработана компанией Core Technologies, которая также разрабатывает Service Trigger Editor , рассмотренным нами недавно.

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

С учетом вышесказанного, для выполнения ежедневных обязанностей хорошей идеей будет использование аккаунтов обычных пользователей, а административных – только в случае крайней необходимости. В 2017 году компания Microsoft сообщила, что пользователи могут защититься от 94% критических уязвимостей в Windows, если будут использовать неадминистративные учетные записи.