Как запустить приложение от имени другого пользователя windows 10
В этой статье я подробно расскажу о проблемах, с которыми столкнётся каждый системный администратор, использующий в своей работе возможность запуска программ от имени другого пользователя, в большинстве случаев от имени администратора. Если вы — тот самый сисадмин, прочитайте её внимательно, скорее всего вам требуется срочная смена своего пароля.
Самое важное, что должен уяснить администратор — из запущенной программы с повышенными правами не должно быть возможности запустить другую произвольную программу, поскольку права автоматически наследуются. Прежде чем вообще планировать создавать ярлык для запуска, следует самостоятельно убедиться, что в программе нет окон открытия других файлов или запуска справки с собственной программой обработки, где дополнительно можно вызвать диалог открытия других файлов справки, и тому подобные в данном случае уязвимости, которые позволят пользователю запустить произвольную программу с правами администратора. Ещё пример — программа при определённых или редких обстоятельствах открывает логи в блокноте, а уже там есть диалог открытия других файлов, вот и готовая уязвимость. То есть целевая программа должна быть изучена администратором вдоль и поперёк (а ещё лучше — написана самостоятельно), чтобы пользоваться ей было действительно безопасно.
RunAs из коробки
В системе есть родная утилита runas, позволяющая выполнять задачу запуска от другого имени, однако пользоваться ей нужно осторожно и в целях безопасности её нельзя применять для запуска программ с повышенными привилегиями, но можно наоборот — администратору запускать программы с правами обычного пользователя, хотя технически возможны оба варианта. Почему так? Параметр /savecred позволяет сохранить пароль для пользователя, от имени которого запускается программа, в профиле пользователя, который запускает программу. Однако этот же сохранённый пароль RunAs использует и для запуска любых других программ, запуск которых может инициировать пользователь, у которого сохранён пароль.
Рассмотрим это на примере: у нас есть Admin с правами администратора, User1 с необходимостью запуска программы от имени администратора, и все остальные пользователи, которые эту программу запускать не должны, назовём их условно User2, а тестовая программа — калькулятор (calc). Когда администратор хочет запустить программу от имени пользователя для проверки или из планировщика, он может сохранить пароль User1 в своём профиле, выполнив команду «runas /savecred /user:User1 calc», ввести пароль User1 и в дальнейшем для этой команды пароль запрашиваться не будет, но также он не будет запрашиваться и для других программ, помимо калькулятора. При этом User2, который выполнит у себя эту же команду, столкнётся с необходимостью ввода пароля для User1, поскольку в его профиле этот пароль заранее не сохранён. Такой сценарий допустим и безопасен, ведь администратор и так имеет полные права. Однако если мы выполним команду «runas /savecred /user:Admin calc» от имени User1 и введём пароль администратора, User1 сможет запускать любые программы от имени администратора, что полностью разрушает модель безопасности.
Вывод — использовать родной runas в составе системы для повышения прав на постоянной основе (с сохранением пароля) категорически нельзя, эта уязвимость должна быть очевидна каждому сисадмину. Да и без сохранения пароля вводить пароль администратора под ограниченным пользовательским сеансом не рекомендуется, если там заранее не были предприняты меры предосторожности, которые не позволяют запускать произвольные программы (SRP, AppLocker), иначе пользователь может запросто перехватить пароль. А мы переходим к неочевидным уязвимостям.
AdmiLink и его армия
Попыток преодолеть небезопасность стандартного runas предпринято множество, тысячи их. Самые известные — AdmiLink, CPAU, Encrypted RunAs и другие. Всех их объединяет конечный способ запуска, который мы разберём далее. В целом алгоритм работы этих программ такой: берём имя и пароль пользователя, от имени которого будет выполняться запуск целевой программы (как правило с правами администратора), добавляем к нему путь и контрольную сумму исполняемого файла (чтобы его нельзя было подменить на произвольный), и всю эту информацию дико шифруем, чтобы расшифровать могла только авторская программа, и желательно только на том же компьютере. Проблема в том, что вся эта защита не имеет никакого смысла, поскольку имя и пароль администратора можно перехватить тогда, когда он уже будет расшифрован. Дополнительная проблема в том, что авторы этих программ об этом не подозревают и убеждают системных администраторов в безопасности своих разработок:
Как работает RunAs и аналоги
Этот момент хорошо разобрал Mick Grove в своей статье Capturing credentials from ‘Encrypted RunAs’ software ещё в 2013 году. Он заметил, что любой подобный софт не изобретает велосипед, а использует для запуска программ от имени другого пользователя стандартную функцию CreateProcessWithLogonW, которой в качестве параметров нужно передавать логин и пароль в открытом виде. А это в свою очередь означает, что запросы к функциям можно перехватить и просто прочитать их параметры, получив на руки логин и пароль администратора. Для мониторинга здесь использовалась бесплатная программа API Monitor, и что самое важное, для её запуска не нужны права администратора, она отлично работает в пользовательском пространстве, поскольку обращение к функции CreateProcessWithLogonW происходит именно в контексте пользователя, а уже сама функция осуществляет запуск процесса с заданными учётными данными, что и следует из её названия.
Получение учётных данных администратора происходит по следующей цепочке:
Пользователь с ограниченными правами запускает ярлык, в котором хорошо зашифрованы данные для запуска программы.
RunAs или его аналоги проверяют корректность шифра и целостность программы, затем извлекают данные и в открытом виде передают их функции CreateProcessWithLogonW.
В это же время API-мониторинг перехватывает данные, переданные функции в качестве параметров, чем делает бессмысленным шифрование пароля и полностью компрометирует учётные данные администратора.
Всё пропало?
Какие меры нужно принять, если на вашем сервере использовался такой способ запуска программ для пользователей? В первую очередь нужно поменять пароли администраторов и провести аудит системы, не было ли взлома с использованием этой уязвимости. Если у вас был запрещён запуск всех посторонних программ, это слегка снижает градус проблемы, но только слегка — нужно убедиться, что пользователям не были доступны для записи те папки, из которых им был разрешён запуск программ, а добраться до них можно разными способами: кроме проводника, где доступ к ФС можно ограничить твиками, как минимум в систему встроены командная строка и PowerShell, запретить их запуск ограниченным пользователям тоже нужно было заранее. Имея же учётные данные администратора на руках, пользователь уже не ограничен ничем и все данные на таком сервере следует считать скомпрометированными. Помните, что безопасность сервера это комплексная мера, и она достигается суммой правильно настроенных параметров, многие из которых здесь не упомянуты.
Есть ли альтернативы?
Они как бы и есть, и их как бы нет. На данный момент мне известно об одной — RunAsRob, которая использует другой метод: вместо запуска программы от имени другого пользователя она по заранее сформированному списку разрешённых программ временно выдаёт права администратора запускаемой программе посредством службы, работающей от имени системы. Благодаря такому подходу исключается утечка учётных данных, а разграничивать доступ к целевым программам нужно NTFS-правами. На данный момент я не могу её рекомендовать, так как она платная и глючная, однако за неимением других в крайнем случае можно использовать эту. Для неинтерактивных программ однозначно лучше использовать планировщик с вызовом по событию в журнале.
В вышеупомянутой статье дополнительно указывается Just Enough Administration (JEA), однако моё исследование этого инструмента показало, что им не получится пользоваться полноценно для интерактивного запуска приложений с окнами — так как процессы запускаются от имени другого виртуального администратора, то окна программ не будут видны для текущего пользователя. JEA может помочь в организации запуска автоматических скриптов и просмотра вывода результатов консольных программ, это определённо информативнее планировщика, но для работы с оконными приложениями не годится.
Можно ли запретить в системе мониторинг API для ограниченных пользователей и этим решить проблему перехвата системных функций — на данный момент мне не известно. Если вам есть что добавить к этой статье, оставьте свой комментарий.
P. S. RestAdmin — концепция безопасного Run As Admin (решение было разработано после этой статьи).
Windows позволяет запускать приложения из вашей учетной записи в качестве другой учетной записи пользователя, если у вас есть учетные данные для другой учетной записи. Эта функция доступна во всех версиях Windows, то есть в Windows 7, 8 и 10. Хотя мы рассматриваем Windows 10 только в этой статье, тем же инструкциям можно следовать и в других версиях. С помощью этой функции вы можете не только запускать приложения с расширением .exe, но и выполнять практически все и любые расширения файлов, которые только сможете найти. Будь то командные файлы для разных установщиков, вы можете запускать их от имени другого пользователя.
Эта функциональность обеспечивается программой RunAs, встроенной в Windows. Для этого широко используется программа RunAs. Доступ к нему можно получить через командную строку вместе с проводником Windows, поэтому, если вы предпочитаете графический пользовательский интерфейс, для вас тоже найдется что-нибудь. Чтобы использовать эту программу, существует служба, которая должна работать в фоновом режиме. Программа RunAs зависит от службы вторичного входа в систему, чтобы иметь возможность запускать различные файлы от имени другого пользователя. Если служба не запущена и остановлена, вы не сможете достичь желаемого результата. Поэтому убедитесь, что служба запущена, посмотрев ее в окне служб Windows.
Оказывается, есть несколько способов запустить приложение от имени другого пользователя. Мы расскажем о различных методах, поэтому вы можете выбрать любой из тех, которые сочтете легкими и быстрыми. С учетом сказанного, давайте рассмотрим это.
Метод 1: с помощью проводника Windows
Один из способов запустить приложение от имени другого пользователя можно получить с помощью проводника Windows. Это один из самых простых способов сделать это, поскольку он совпадает с обычным способом запуска программы. Так же, как вы запускаете программу в своей текущей учетной записи, вы можете запускать ее из другой учетной записи таким же образом. Единственная разница в том, что вам придется выбрать другой вариант вместо двойного щелчка по приложению или выбора «Открыть» в раскрывающемся меню.
Теперь, в некоторых случаях, необходимая опция для запуска программы от имени другого пользователя может быть недоступна вам в раскрывающемся меню. Это из-за локальной политики Windows. В таком случае вам просто нужно будет изменить политику в окне редактора локальной групповой политики, и все будет в порядке. Для этого следуйте инструкциям ниже:
- Прежде всего, мы должны убедиться, что опция «Запускать от имени другого пользователя» видна для вас. Для этого откройте диалоговое окно «Выполнить», нажав клавиши Windows + R.
- Затем в диалоговом окне «Выполнить» введите gpedit.msc и нажмите клавишу Enter.
- Откроется окно редактора локальной групповой политики. Там перейдите по следующему пути:
Конфигурация компьютера> Административные шаблоны> Компоненты Windows> Пользовательский интерфейс с учетными данными
- Затем на правой панели дважды щелкните требуемый надежный путь для политики ввода учетных данных.Политики пользовательского интерфейса учетных данных
- Убедитесь, что для него установлено значение «Не настроено». Нажмите Применить, а затем нажмите ОК.Требовать надежный путь для параметров политики ввода учетных данных
- Как только вы это сделаете, перейдите в каталог, в котором существует приложение, которое вы хотите запустить.
- Щелкните приложение правой кнопкой мыши, удерживая нажатой клавишу Shift, и выберите в раскрывающемся меню параметр «Запуск от имени другого пользователя».Запуск Notepad ++ от имени другого пользователя
- После этого укажите имя пользователя и пароль другой учетной записи и нажмите ОК. Это запустит приложение от имени указанного пользователя.
Метод 2: использование командной строки
- Прежде всего, откройте меню «Пуск», а затем найдите командную строку, чтобы открыть его.
- После запуска окна командной строки введите следующую команду, чтобы запустить программу от имени другого пользователя:
- Перед нажатием клавиши Enter обязательно замените переменные USERNAME, PathToFile и UserPassword их соответствующими значениями.
- Как только вы это сделаете, нажмите клавишу Enter, и программа должна запуститься от имени указанного пользователя.
- Кроме того, вы можете создать командный файл с помощью указанной выше команды, поэтому вам не нужно открывать командную строку и вводить команду каждый раз, когда вы хотите запустить программу от имени другого пользователя.
- Для этого создайте текстовый документ и вставьте указанную выше команду в текстовый документ.
- После этого сохраните документ как пакетный файл, то есть с расширением .bat.
- Теперь каждый раз, когда вы хотите запустить приложение, просто запускайте этот .bat-файл, и он сделает всю работу за вас.
Метод 3: Использование меню Пуск
Наконец, вы также можете использовать пресловутое меню «Пуск» для запуска приложения от имени другого пользователя. Однако для этого вам нужно будет отредактировать политику в окне редактора локальной групповой политики. Как только вы это сделаете, вы сможете увидеть опцию «Запуск от имени другого пользователя», щелкнув правой кнопкой мыши приложение в меню «Пуск». Для этого следуйте инструкциям ниже:
- Прежде всего, откройте редактор локальной групповой политики, выполнив поиск в меню «Пуск».
- После того, как вы откроете редактор, перейдите по следующему пути:
Может возникнуть ситуация, когда необходимо запустить какую-нибудь программу от имени другой учетной записи существующей в компьютере. Причин этого может быть множество, например программа требует для работы прав администратора компьютера или любые другие, главное научиться запускать программы от имени другого пользователя компьютера.
Способов добиться этого существует множество, давайте рассмотрим некоторые штатные возможности операционной системы Windows. Проще всего, если требуется запустить программу от имени администратора, достаточно щелкнуть по запускаемому файлу или ярлыку правой кнопкой мыши и выбрать пункт «Запуск от имени администратора». Ввести пароль и нажать кнопку «OK», программа запуститься от имени администратора.
Чтобы запустить программу от имени другого пользователя системы, нужно с нажатой клавишей Shift на клавиатуре щелкнуть правой кнопкой мыши на нужном файле и выбрать в контекстном меню пункт «Запуск от имени другого пользователя», ввести его логин и пароль.
Есть правда пара особенностей, чтобы запустить программу от имени другой учетной записи, она должна иметь пароль. Учетная записи пользователя имеет имя и может быть указано еще полное имя, работать будет только при указании имени.
Бывает, программа запускается только от имени администратора, а вы пользуетесь обычной учетной записью, тогда можно сократить запуск программы на одно действие, достаточно зайти в свойства ярлыка и на вкладке «Совместимость» отметить галочку «Выполнять эту программу от имени администратора». Теперь двойной клик левой кнопкой мыши по этому ярлыку сразу будет требовать ввода пароля администратора.
Команда Runas для запуска программ от имени другого пользователя
Для часто запускаемых программ от имени другого пользователя, неудобно каждый раз нажимать Shift и щелкать правой кнопкой мыши, проще воспользоваться специальной встроенной командой Runas. Для этого создадим ярлык, который будет запускать нужную программу от имени другого пользователя компьютера. Как создать ярлык можно прочитать здесь. В поле «Объект» напишем следующую команду:
пользователь — учетная запись, от имени которой требуется запустить программу, записывается в виде имя_учетной_записи@имя_компьютера или имя_компьютера\имя_учетной_записи , хотя просто имя_учетной_записи тоже работает.
программа — имя исполняемого файла, который мы хотим запустить. Если исполняемый файл находится не в системных переменных окружения, необходимо указывать полный путь до него.
В случае если имя пользователя или путь программы содержат пробелы, нужно взять их в двойные кавычки по отдельности.
Сохраняем ярлык, теперь при его запуске будет появляться черное окно с просьбой ввести пароль. Внимание, при вводе пароля ничего не происходит, просто вводите его и нажимаете клавишу Enter .
Все хорошо работает, но вводить постоянно пароль быстро надоедает. На этот случай, команда Runas имеет специальный ключ /savecred . В случае его использования, пароль вводится только один раз при первом запуске, он сохраняется в недрах Windows и при последующих запусках подставляется автоматически. Вся команда выглядит следующим образом:
Внимание! Ключ /savecred не работает в Домашних версиях Windows.
Кажется вот оно счастье, однако есть определенные неудобства. Например, какая-либо программа отказывается запускаться в простой учетной записи. Вы запускаете ее вышеописанным способом, все замечательно. Теперь та же ситуация чуть под другим углом. Вы администратор компьютера, а например у вашего ребенка простая учетная запись и игра отказывается запускать под ним. Давать ему пароль администратора вы не намерены, поэтому вы создаете ярлык, прописываете ключ /savecred , вводите пароль первый раз и довольный потираете руки.
Дальнейшие события зависят от степени продвинутости человека, которому вы сделали такой ярлык. Если пользователь чайник в компьютерах, то можете спать спокойно, в противном случае, в один прекрасный день, он может додуматься поменять в ярлыке путь к исполняемому файлу на другой и сможет запускать другие программы от имени администратора.
Так же он получит доступ ко всем файлам на жестком диске компьютера, даже если доступ к ним запрещен его учетной записи, включая папки «Мои документы» других пользователей компьютера. Согласитесь, довольно серьезная дыра в безопасности компьютера при использовании команды Runas с ключом /savecred.
У команды Runas есть ограничения на запуск некоторых системных программ от имени администратора компьютера, в том числе проводника. В Windows XP это обходится использованием ключа /separate: runas /savecred /user:Андрей "explorer.exe /separate"
В более поздних версия операционной системы Windows он не работает, но можно воспользоваться любым другим файловым менеджером и получить доступ к файлам от имени админа.
Выходом в данном случае будет сделать такие настройки безопасности, чтобы нужная программа запускалась от имени простого пользователя или использовать сторонние программы для запуска от имени администратора.
В случае если эти способы не устраивают, можно попытаться максимально затруднить возможность несанкционированного запуска пользователем других программ от имени другого пользователя компьютера. Для этого требуется выполнить несколько дополнительных действий.
Во-первых, и самое главное, не говорить ему, что программа запускается от имени другого пользователя. Правда он может сам узнать об этом в диспетчере задач.
Во-вторых, сделать запуск с помощью пакетного (batch) файла. Открываете текстовый редактор, например блокнот и пишете там строчку, которую писали в поле «Объект» ярлыка. Сохраняете его с расширение .bat. Теперь при запуске этого пакетного файла, точно так же выполнится команда, написанная в нем. Однако этого не достаточно, так как его содержимое можно посмотреть и изменить в простом текстовом редакторе.
Если в имени пользователя или пути к файлу есть русские буквы, то его нужно сохранить в кодировке DOS 866 или в начало bat файла на отдельной строке необходимо вставить chcp 1251.
В-третьих, сделать bat файл не читаемым, чтобы затруднить пользователю анализ, каким образом запускается программа. Для этого сконвертируем наш bat файл в привычный exe. Можно воспользоваться одной из программ конвертеров, например бесплатной программой «Bat To Exe Converter» или любой другой на ваш вкус. Запускаете программу и в поле «Batch file» указываете ваш bat файл. В поле «Save as» куда и под каким именем сохранить результат. Дополнительно для большей конспирации можно на вкладке «Versioninformations» в поле «Icon file» указать значок для нашего будущего exe-шника в формате ico. Остальные параметры можно не трогать. Когда все будет готово, нажимаете кнопку «Compile» и получаете свой exe файл.
Теперь открывать его в текстовом редакторе бесполезно. Копируете его в папку с запускаемой программой, называете как-нибудь похоже на название программы и делаете на него обычный ярлык на рабочем столе.
В-четвертых, последний штрих, выдающий в нем командный файл, это на секунду появляющееся черное окно на рабочем столе. Избавиться от него совсем простым способом не получится, но можно достаточно просто свести его заметность к минимуму. Достаточно в свойствах ярлыка на вкладке «Ярлык» выбрать пункт «Свернутое в значок», теперь только на панели задач будет появляться на мгновение окно командной строки.
Все, теперь если человек от которого вы хотите скрыть админский пароль является чайником или обычным среднестатистическим пользователем можете спать спокойно. Конечно, грамотный человек сможет узнать содержимое созданного нами exe-шника, но по большому счету это не требуется. Достаточно догадаться, что используется команда runas и просто создать свой ярлык для запуска нужной программы так что, несмотря на все ухищрения это поможет только от начинающего пользователя.
Как удалить сохраненный пароль в команде Runas
Сохранив единожды пароль от учетной записи в команде runas, вы можете в дальнейшем запускать программы, не вводя его снова. Однако вам может потребоваться заблокировать возможность запускать программы от имени другой учетной записи пользователя компьютера с использованием сохраненного пароля в runas.
Чтобы удалить сохраненный пароль, выполните «Пуск» ⇒ «Панель управления» ⇒ «Учетные записи пользователей и семейная безопасность» ⇒ «Диспетчер учетных данных».
В разделе «Учетные данные Windows» (интерактивный вход в систему) удаляете не нужные больше записи из хранилища.
Как всегда запускать программу от имени другого пользователя
Всем известно, что для того, чтобы запустить программу от имени администратора нужно нажать на ярлык программы (или на сам файл) правой кнопкой мыши, и в появившемся контекстном меню выбрать Запуск от имени администратора. Также, ни для кого уже не секрет, что если перед тем как нажать на файле правой кнопкой мышки зажать Shift, то в контекстном меню появится пункт Запуск от имени другого пользователя.
В обоих случаях далее нужно будет ввести соответствующие учётные данные. Это хорошо работает, когда программу нужно запускать от имени другого пользователя не часто.
Если же программу приходится запускать каждый раз от имени другого пользователя, такой способ запуска становится, мягко говоря, немного неудобным.
Для того, чтобы не вводить каждый раз альтернативные учётные данные при запуске программы, можно создать особый ярлык, в котором прописать, что запускаемую по данному ярлыку программу, нужно запускать от имени другого пользователя.
Точнее ярлык создаётся самый обыкновенный, но в нём нужно кое-что изменить.
Например, мы хотим, чтобы Notepad++ всегда запускался от имени другого пользователя (не важно администратора, или нет).
Создаём на рабочем столе любым способом самый обыкновенный ярлык для запуска Notepad++. Открываем свойства только что созданного ярлыка (правая кнопка мышки | Свойства). Переходим на вкладку Ярлык и в поле Объект перед тем, что там есть (перед путём в к exe-файлу) вставляем следующий текст:где вместо domain\user нужно подставить имя своего пользователя (и если нужно – домена), от имени которого нужно запускать программу.
Т.е., например, для запуска Notepad++, (установленного в каталог по умолчанию) строка запуска будет иметь следующий вид:
Сохраняем внесённые изменения (нажимаем ОК).
Далее, при запуске программы через этот ярлык, она всегда будет запускаться от имени этого пользователя, не спрашивая пароль.
При желании/необходимости можно создать несколько ярлыков для запуска одной и той же программы от имени разных пользователей.
Читайте также: