RunAsSpc Details and examples
Любой пользователь Windows может запустить в своей сессии программу от имени другого пользователя с помощью Run As. Благодаря этому вы можете выполнить скрипт (.bat, .cmd, .vbs, .ps1), запустить исполняемый .exe файл или установку приложения (.msi, .cab) с полномочиями другого пользователя.
Например, вы можете использовать RunAs для установки программ или запуска программ/скриптов/MMC оснасток с правами администратора непосредственно в сессии обычного непривилегированного пользователя. Также через RunAs вы можете запустить приложение, настроенное в профиле другого пользователя (приложение загрузится с настройки из профиля другого пользователя).
За возможность запуска программ от имени другого пользователя в Windows отвечает служба Вторичный вход в систему (Secondary Log-on). Если эта служба остановлена, тогда все описанные методы runas работать не будут. Вы можете проверить, что служба запущена с помощью следующей команды PowerShell:
В Windows есть несколько способов запустить программу или процесс от имени другого пользователя.
runas /noprofile /user:Domain Name\user account
asked Dec 18, 2012 at 23:27
To automatically authenticate, add the /savecred
flag. You’ll have to enter the password on the script’s first run, but it will be saved after that.
Realize that runas
will then be able to use the saved credentials to execute any given program, so do think about how that could be a security issue before going this route.
Your usage is correct though, just add the program path at the end.
To delete a saved credential search for the Credential Manager in Control Panel.
2 gold badges12 silver badges25 bronze badges
answered Dec 19, 2012 at 0:53
Louis Waweru
37 gold badges131 silver badges196 bronze badges
The runas
command should prompt you for the credentials when you run the batch file to execute the specified command. As long as you run it in cmd.exe. This is due to the need for the standard input neccessary to prompt for the password. You cannot just double click it. Storing a password in plaintext in a batch file is a bad idea because it’s insecure. That’s why it prompts at runtime.
answered Dec 18, 2012 at 23:42
1 silver badge5 bronze badges
answered Dec 18, 2012 at 23:41
1 gold badge7 silver badges16 bronze badges
Я пытаюсь запустить visual studio 2010 из командной строки с помощью “RUNAS”, чтобы я мог запускать ее как другого пользователя. Я выполнил следующую команду:
Я искал это некоторое время, и единственный найденный мной ответ заключался в том, что я не вижу введенный пароль, но он введен в любом случае и что я должен вводить неверный пароль. Я уверен, что не набираю неверный пароль.
Ответ 1
Есть так много вещей, о которых вы забыли:
- Каков ваш поставщик услуг входа в систему? Вы привязаны к домену?
- выполняется ли это из командной строки UAC с повышенными правами?
- Как выглядит настоящее имя пользователя? Это системная учетная запись?
- действительно ли пользовательская учетная запись существует на вашем компьютере?
- Вы можете выйти из системы и войти в систему как пользователь с вашего компьютера?
- Это также работает при отключении от сети?
- действительно ли вы набираете эту команду или вызывается из .bat или script?
- “не может ввести пароль”, вы не можете ввести его или ему не нравится, что вы набрали?
Serverfault.com – хорошее место, чтобы спросить об аутентификации пользователя.
Ответ 2
На самом деле, у меня была та же проблема с W7 Enterprise (подключался к домену, переключаясь на локально определенного пользователя-администратора) без повышения UAC с помощью команды:
Он запросил меня для пароля.
Он также работал, когда я явно менял его на:
Ответ 3
У меня только что была эта проблема.
Так что проверь свои косые черты.
-
November 9 2005, 22:55
Сохранение паролей в команде RunAs
Продвинутым пользователям и администраторам для решения различных задач бывает крайне необходимо запускать приложения от имени другого аккаунта. В этой статье мы рассмотрим некоторые новые возможности данного процесса в Windows XP Professional1 и Windows 2003, а также расскажем о компоненте управления удостоверениями.
Итак, не секрет, что для решения этой задачи в Windows существует стандартная команда RUNAS, формат её таков:
RUNAS /USER:имя_пользователя “запускаемая_программа”
Однако вам каждый раз надо будет вводить пароль пользователя, от имени которого вы хотите запустить программу. Это неудобно, но очень разумно с точки зрения безопасности, ибо пароль не должен так просто лежать в bat-файле.
В Windows XP Professional и Windows 2003 у команды RUNAS появился новый ключ, который эту проблему решает – /SAVECRED. Если вы укажете его в команде RUNAS, то пароль вам будет предложено ввести только один раз. А далее всевозможные запуски любых программ от имени этого пользователя через команду RUNAS пароля запрашивать не будут!
Затем легким движением нажимаем кнопку “Управление паролями”.
В этой статье я подробно расскажу о проблемах, с которыми столкнётся каждый системный администратор, использующий в своей работе возможность запуска программ от имени другого пользователя, в большинстве случаев от имени администратора. Если вы — тот самый сисадмин, прочитайте её внимательно, скорее всего вам требуется срочная смена своего пароля.
Зачем это вообще нужно? Бывают ситуации, когда пользователю с ограниченными правами требуется выполнить программу, которой для выполнения специфической работы требуются повышенные права. Например, программисту нужно предоставить возможность завершать определённые процессы бухгалтерской программы, некоторым пользователям из бухгалтерии требуется возможность переключать ключи безопасности в интерактивном режиме и так далее. Часть этих задач можно выполнять неинтерактивно, при этом несколько страдает удобство, поскольку пользователь не видит интерфейс программы и может разве что получить системное сообщение о завершении работы программы, об этом способе подробно рассказал мой коллега Вадим Стеркин в своём блоге: Как выполнять задачи с полными правами обычным пользователем без ввода пароля администратора. Способ отличный для своих задач, в моей же статье речь пойдёт о рисках и безопасности выполнения интерактивных программ от имени других пользователей, где полной автоматизации достичь нельзя и есть необходимость взаимодействия с интерфейсом.
Самое важное, что должен уяснить администратор — из запущенной программы с повышенными правами не должно быть возможности запустить другую произвольную программу, поскольку права автоматически наследуются. Прежде чем вообще планировать создавать ярлык для запуска, следует самостоятельно убедиться, что в программе нет окон открытия других файлов или запуска справки с собственной программой обработки, где дополнительно можно вызвать диалог открытия других файлов справки, и тому подобные в данном случае уязвимости, которые позволят пользователю запустить произвольную программу с правами администратора. Ещё пример — программа при определённых или редких обстоятельствах открывает логи в блокноте, а уже там есть диалог открытия других файлов, вот и готовая уязвимость. То есть целевая программа должна быть изучена администратором вдоль и поперёк (а ещё лучше — написана самостоятельно), чтобы пользоваться ей было действительно безопасно.
I could just be making some kind of basic mistake as I’m not hugely experienced with command prompt, but I’m not completely clueless.
asked Sep 5, 2012 at 20:43
Since this is a home environment, I’m slightly less nervous about this answer. You should read the notes in the policy I am going to mention to understand what the implications are.
answered Sep 5, 2012 at 20:58
I believe you can use SysInternal’s PSexec.exe to force elevation.
You could try for example running this: psexec \\%computername% -i -h notepad.exe
answered Sep 5, 2012 at 21:41
Mark Allen
1 gold badge21 silver badges23 bronze badges
You can use VBScript to elevate commands:
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "cmd.exe", "", "", "runas", 1
Save as a *.vbs
and then launch it with cscript
or wscript
answered Sep 6, 2012 at 0:37
5 gold badges52 silver badges76 bronze badges
Elevation happens when you’re try to start an executable that’s been marked as requiring elevation, causing the UAC prompt. It’s not just an option on CreateProcess. So if you’re running non-elevated copy of cmd and want it to run another ordinary command but have it run elevated, you need an interlude command that can run it for you but is marked for elevation. It’s complicated by the fact that current directories and environment variables don’t get inherited by the elevated child.
answered Sep 6, 2012 at 2:31
Nicole Hamilton
1 gold badge21 silver badges43 bronze badges
I ran across RunAsSpc that will perform the RunAs command, but include the ability to read/write with an encrypted so your password is not exposed.
Author states these requirements are met by using RunAsSpc
- The user does not have to enter a password, like runas.
- Only the applications allowed by me, could be started by the user.
- The tool must not be bypassed by simple renaming the application name or saving of identification (e.g. runas /savecred)
- It should be simple to handle.
answered Sep 18, 2014 at 4:45
10 gold badges33 silver badges53 bronze badges
You can use su
utility. It elevates through UAC. You can download it here.
answered Jul 4, 2019 at 11:20
Команда RUNAS – запуск приложения от имени другого пользователя Windows .
RunAS
Запуск из командного файла приложений от имени Администратора без запроса UAC.
Формат командной строки RUNAS:
RUNAS /trustlevel:уровень доверия программа
Параметры командной строки:
/noprofile – Не загружать профиль пользователя. Это приводит к более быстрой загрузке приложения, но может стать причиной неправильной работы некоторых приложений.
/profile – Загружать профиль пользователя. Этот параметр установлен по умолчанию.
/env – Использовать текущие параметры среды.
/netonly – Учетные данные предназначены только для удаленного доступа.
/savecred – Использовать учетные данные, сохраненные пользователем. Этот вариант не доступен в выпусках Windows 7 Домашняя или Windows 7 Начальная и будет проигнорирован.
/smartcard – Для указания учетных данных используется смарт-карта.
/showtrustlevels – Отобразить список уровней доверия, которые можно использовать в качестве аргументов параметра /trustlevel.
/trustlevel – Значение “уровень доверия” должно быть перечислено в списке уровней доверия.
программа – Командная строка для EXE. См. примеры ниже.
runas /showtrustlevel – отобразить уровни доверия, существующие в системе. В ответ будет отображаться перечень в виде:
В системе доступны следующие уровни доверия:
0x20000 (Обычный пользователь)
Кроме значения trustlevel равного 0x20000 можно пользоваться значениями 0x10000, соответствующему минимальному набору привилегий и 0x40000, стандартному для данного пользователя набору.
Для просмотра отличий разных уровней доверия можно воспользоваться командой Whoami, выполняя ее в сеансе командного процессора, запускаемого с каждым из уровней trustlevel
runas /trustlevel:0x20000 cmd.exe – запустить командный процессор cmd.exe с использованием уровня доверия, полученного в предыдущем примере.
runas /trustlevel:0x40000 cmd.exe – запустить командный процессор cmd.exe с использованием стандартного уровня доверия.
Примечание: в сеансе командной строки, запущенной с использованием параметра /trustlevel, список привилегий соответствующий каждому уровню доверия можно получить с использованием команды whoami /priv,
а полные сведения об учетной записи – whoami /ALL
Примечание: параметр /profile несовместим с параметром /netonly.
Примечание: параметр /savecred несовместим с параметром /smartcard .
Для запуска приложений от имени администратора с использованием runas.exe необходимо изменить стандартные настройки безопасности системы:
– включить учетную запись Администратора ( по умолчанию, она отключена);
– задать пароль для пользователя Администратор;
whoami
/priv
whoami
Пароли, запоминаемые при использовании утилиты RUNAS.EXE с параметром /savecred можно
изменить или удалить с помощью оснастки управления сохраненными паролями:
При наборе ключевых значений нужно соблюдать регистр символов.
Для управления сохраненными учетными записями в командной строке Windows используется утилита
CMDKEY.EXE
Весь список команд CMD Windows
Всё пропало?
Какие меры нужно принять, если на вашем сервере использовался такой способ запуска программ для пользователей? В первую очередь нужно поменять пароли администраторов и провести аудит системы, не было ли взлома с использованием этой уязвимости. Если у вас был запрещён запуск всех посторонних программ, это слегка снижает градус проблемы, но только слегка — нужно убедиться, что пользователям не были доступны для записи те папки, из которых им был разрешён запуск программ, а добраться до них можно разными способами: кроме проводника, где доступ к ФС можно ограничить твиками, как минимум в систему встроены командная строка и PowerShell, запретить их запуск ограниченным пользователям тоже нужно было заранее. Имея же учётные данные администратора на руках, пользователь уже не ограничен ничем и все данные на таком сервере следует считать скомпрометированными. Помните, что безопасность сервера это комплексная мера, и она достигается суммой правильно настроенных параметров, многие из которых здесь не упомянуты.
Запуск программ от имени другого пользователя без ввода пароля
Вы можете сохранить пароль пользователя, который вы вводите. Для этого используется параметр /savecred.
После указания пароля он сохранится в диспетчере паролей Windows.
При следующем запуске команды runas под этим же пользователем с ключом
/savecred
Windows автоматически получит сохраненный пароль из Credential Manager, и не будет запрашивать его повторно.
Чтобы вывести список всех пользователей, для которых сохранены пароли, используется команда:
Однако использование параметра /savecred не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой команды под данными привилегиями, или даже сменить чужой пароль. Кроме того, сохраненные пароли из Credential Manager можно легко украсть, поэтом лучше запретить использование сохраненных паролей (а тем более нельзя сохранять пароль привилегированной административной учетной записи).
Примечание. Кроме того, ключ /savecred не работает в Home редакциях Windows.
Аналогичным образом можно запустить любую другую оснастку (главное знать ее имя).
RunAsSpc can be used like the runas command, but additionally with a password parameter.
RunAsSpc.exe /program:”path\yourApp.exe” /user:”anyAccount” /password:”accountPassword”
As example:
RunAsSpc.exe /program:”c:\windows\system32\regedt32.exe” /user:”admin” /password:”pw”
There is no security check and the password is in clear text.
Ну, и зачем тебе права?
Программа может запрашивать права администратора условно в двух случаях:
- Когда хочет получить доступ туда, куда «простым смертным» нельзя: например, создавать файлы в системных каталогах.
- Когда программу скомпилировали со специальным флагом «Требовать права администратора».
С первым случаем все понятно: берем в руки замечательную программу Марка Руссиновича Process Monitor, смотрим, что происходит, и куда программа пытается залезть:
Куда это лезет этот 7Zip?
И по результатам исследования выдаем права пользователю на нужный каталог или ветку реестра.
Сложнее, если случай клинический, и так просто выдать права не получится: например, программа требует сильного вмешательства в работу системы вроде установки драйверов. Тогда придется придумывать всякий колхоз, про который речь пойдет в последнем разделе статьи. Пока подробнее освещу второй случай — когда стоит флажок.
Если сильно упростить, то в специальном манифесте программы (к слову, установщики — это тоже программы) могут быть три варианта запуска:
- asInvoker. Программа запускается с теми же правами, что и породивший ее процесс (как правило, это explorer.exe c правами пользователя);
- highestAvailable. Программа попросит максимально доступные пользователю права (у администратора появится окно с запросом повышения UAC, у пользователя — нет);
- requireAdministrator. Программа будет требовать права администратора в любом случае.
Если разработчик твердо решил требовать права администратора, даже если они не нужны, то обойти это можно малой кровью.
AdmiLink и его армия
Попыток преодолеть небезопасность стандартного runas предпринято множество, тысячи их. Самые известные — AdmiLink, CPAU, Encrypted RunAs и другие. Всех их объединяет конечный способ запуска, который мы разберём далее. В целом алгоритм работы этих программ такой: берём имя и пароль пользователя, от имени которого будет выполняться запуск целевой программы (как правило с правами администратора), добавляем к нему путь и контрольную сумму исполняемого файла (чтобы его нельзя было подменить на произвольный), и всю эту информацию дико шифруем, чтобы расшифровать могла только авторская программа, и желательно только на том же компьютере. Проблема в том, что вся эта защита не имеет никакого смысла, поскольку имя и пароль администратора можно перехватить тогда, когда он уже будет расшифрован. Дополнительная проблема в том, что авторы этих программ об этом не подозревают и убеждают системных администраторов в безопасности своих разработок:
Так вот, AdmiLink — это очень неплохой «кирпич» в системе защиты, задачей которого является БЕЗОПАСНЫЙ ЗАПУСК программ. Безопасный запуск означает, что:
Пользователь не сможет узнать пароль Администратора через ярлык запуска.
Пользователь не сможет запустить не разрешенную Администратором программу, даже подменив исполняемый файл или командную строку в ярлыке.
RunAs из коробки
В системе есть родная утилита runas, позволяющая выполнять задачу запуска от другого имени, однако пользоваться ей нужно осторожно и в целях безопасности её нельзя применять для запуска программ с повышенными привилегиями, но можно наоборот — администратору запускать программы с правами обычного пользователя, хотя технически возможны оба варианта. Почему так? Параметр /savecred позволяет сохранить пароль для пользователя, от имени которого запускается программа, в профиле пользователя, который запускает программу. Однако этот же сохранённый пароль RunAs использует и для запуска любых других программ, запуск которых может инициировать пользователь, у которого сохранён пароль.
Вывод — использовать родной runas в составе системы для повышения прав на постоянной основе (с сохранением пароля) категорически нельзя, эта уязвимость должна быть очевидна каждому сисадмину. Да и без сохранения пароля вводить пароль администратора под ограниченным пользовательским сеансом не рекомендуется, если там заранее не были предприняты меры предосторожности, которые не позволяют запускать произвольные программы (SRP, AppLocker), иначе пользователь может запросто перехватить пароль. А мы переходим к неочевидным уязвимостям.
Запуск программ от имени из командной строки
В Windows есть консольная утилита runas.exe, которую можно использовать для запуска приложений от имени другого пользователя из командной строки. Также команда runas позволяет сохранить пароль пользователя в Windows Credential Manager, чтобы его не приходилось набирать каждый раз.
Совет. Если имя пользователя содержит пробелы, его нужно взять в кавычки:
Можно, например, открыть панель управления под другим пользователем:
Введите пароль для corp\server_admin: Попытка запуска C:\Windows\notepad.exe C:\tmp\2871997x64.txt от имени пользователя "corp\server_admin" ...
Если указали несуществующее имя пользователя или неверный пароль, появится ошибка:
RUNAS ERROR: Unable to run - yourcommand 1326: The user name or password is incorrect.
RUNAS ERROR: Unable to acquire user password
Иногда нужно запустить программу от имени доменного пользователя с компьютера, который не добавлен в домен AD. В этом случае нужно использовать такую команду (при условии, что в сетевых настройках вашего компьютера указан DNS сервер, который может отрезолвить этот домен):
Если для запуска программы от другого пользователя не нужно загружать его профиль, используйте параметр /noprofile. При этом приложение запускается намного быстрее, но может вызвать некорректную работу программ, которые хранят данные в профиле пользователя.
Ярлык с запуском программы от имени другого пользователя
Вы можете создать на рабочем столе ярлык для запуска программы от имени другого пользователя. Просто создайте новый ярлык, в окне с адресом объекта которого укажите команду
с нужными параметрами:
При запуске такого ярлыка будет запрашиваться пароль пользователя.
Если в ярлыке runas добавить параметр
, то пароль будет запрошен только один раз. После этого пароль будет сохранен в Credential Manager и автоматически подставляться при запуске ярлыка от имени другого пользователя без запроса пароля.
Такие ярлыки довольно часто используются для запуска программ, которые требуют прав администратора для запуска. Однако есть более безопасные способы запуска программы без прав администратора, или отключения запроса UAC для определенного приложения.
Есть ли альтернативы?
Они как бы и есть, и их как бы нет. На данный момент мне известно об одной — RunAsRob, которая использует другой метод: вместо запуска программы от имени другого пользователя она по заранее сформированному списку разрешённых программ временно выдаёт права администратора запускаемой программе посредством службы, работающей от имени системы. Благодаря такому подходу исключается утечка учётных данных, а разграничивать доступ к целевым программам нужно NTFS-правами. На данный момент я не могу её рекомендовать, так как она платная и глючная, однако за неимением других в крайнем случае можно использовать эту. Для неинтерактивных программ однозначно лучше использовать планировщик с вызовом по событию в журнале.
Запуск программы от имени другого пользователя из Проводника Windows (File Explorer)
Примечание. Если пункт меню «Запуск от имени другого пользователя» отсутствует, см. следующий раздел.
В появившемся окне Windows Security нужно указать имя и пароль пользователя, под чьей учетной записью нужно запустить программу и нажать кнопку ОК.
- Если нужно запустить программу от имени пользователя Active Directory, нужно указать его имя в формате userPrincipalName (
[email protected]
) или samAccountName (
DomainName\UserName
); - Если ваш компьютер добавлен в домен AD, то для запуска программы от имени локальной учетной записи пользователя ее имя нужно указать в формате:
.\localusername
.
Важно. Вы можете запустить программу от имени другого пользователя только, если для него задан пароль. Использовать Runas для пользователя с пустым паролем не получится.
Откройте Диспетчер задач и убедитесь, что приложение запущенно под указанным пользователем.
Ну ладно, держи права
Казалось бы, самым очевидным решением для запуска нашего странного ПО выглядит использование встроенной утилиты Runas. Документация доступна на сайте Microsoft.
Ну, посмотрим, что из этого выйдет.
runas /savecred /user:Администратор "C:\Program Files\7-Zip\7zFM.exe"
Действительно, RunAs запустит 7zip с правами учетной записи «Администратор», спросит пароль и запомнит его. Потом ярлык с такой строкой запуска будет запускать 7zip под Администратором без вопросов.
Есть один существенный недостаток: пароль запоминается на уровне системы, и теперь, используя команду Runas, можно будет запускать абсолютно любую программу. Это мало чем отличается от прямого предоставления админских прав сотрудникам, так что использовать это решение не стоит.
Зато runas может быть полезен, когда сотрудник знает пароль администратора, но работает под ограниченной учетной записью (по идее так должен делать каждый системный администратор).
Если мы начали с консольных команд, то перейдем к более высокоуровневым скриптам. Интересное решение было предложено в статье «Планктонная Windows», где упомянутый выше Runas обвязывался js-скриптом и пропускался через обфускатор. У решения есть и очевидный минус — скрипт можно раскодировать.
Чуть более интересным методом в 2к20 являются возможности PowerShell и его работа с паролями. Подробнее можно почитать в материале «Защита и шифрование паролей в скриптах PowerShell».
Если вкратце: в PS работа с паролями производится через специальный тип данных SecureString и объект PSCredential. Например, можно ввести пароль интерактивно:
$Cred = Get-Credential
Затем сохранить пароль в зашифрованном виде в файл:
$Cred.Password | ConvertFrom-SecureString | Set-Content c:\pass.txt
И теперь использовать этот файл для неинтерактивной работы:
$username = "Domain\Администратор"
$pass = Get-Content C:\pass.txt | ConvertTo-SecureString
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass
К сожалению, файл этот можно использовать только на том ПК, на котором его создали. Чтобы этого избежать, можно сделать отдельный ключ шифрования. Например так:
$AESKey = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
$AESKey | out-file C:\password_aes.key
Теперь при помощи этого ключа пароль можно зашифровать:
$Cred.Password| ConvertFrom-SecureString -Key (get-content C:\password_aes.key
)| Set-Content C:\pass.txt
$pass = Get-Content C:\pass.txt | ConvertTo-SecureString -Key (get-content C:\password_aes.key)
К сожалению, с безопасностью дела обстоят так же печально: утащить пароль не составляет трудностей, если есть доступ к файлу с ключом шифрования и зашифрованным паролем. Да, можно добавить обфускации и скомпилировать скрипт в .exe вместе с нужными файлами. Но нужно понимать, что это — полумеры.
В свое время я использовал для решения подобных задач свой любимый AutoIt, где компилировал скрипт с командой RunAs и радовался… До тех пор, пока не узнал, что AutoIt (особенно старых версий) декомпилируется на раз-два.
Другим интересным вариантом может быть применение назначенных заданий — если создать назначенное задание от админского аккаунта, пользователю для работы будет достаточно его запуска. К сожалению, для интерактивной работы с приложением это решение не подходит.
На свете существует несколько сторонних решений, призванных решить задачу. Остановлюсь на парочке из них.
Пожалуй, одна из самых известных утилит — это AdmiLink, разработанная Алексеем Курякиным для нужд ядерной физики. Программа и принципы ее работы описаны на официальном сайте. Я, как обычно, позволю себе более краткое описание.
Программа состоит из трех модулей. AdmiLink — это графическое окно, где можно создать ярлык на нужное приложение (в принципе, в ряде случаев достаточно только его).
Основное окно программы.
Помимо непосредственно создания ярлыка (и да, запрос UAC тоже можно подавлять), есть и дополнительные функции вроде калькулятора, терминала и удобных настроек политик безопасности. Со всеми возможностями программы читателю предлагается разобраться самостоятельно.
Второй модуль называется AdmiRun и представляет из себя консольную утилиту. Она умеет запускать приложения от имени администратора, получив в качестве одного из параметров строку, созданную через AdmiLink. В строке шифруется имя пользователя и пароль, при этом участвует и путь к программе.
На первый взгляд все выглядит безопасно, но, к сожалению, код программ закрыт, и насколько можно доверять разработчику — вопрос.
Третий модуль — AdmiLaunch — отвечает за запуск окон в разных режимах, и он используется для запуска AdmiRun, если создавать ярлык через AdmiLink.
В целом, решение проверено годами и поколениями отечественных системных администраторов. Но добавлю и альтернативу из-за рубежа.
RunAsRob — довольно интересное ПО за авторством немецкого разработчика Оливера Хессинга (Oliver Hessing). В отличие от AdmiLink, ПО устанавливается как служба, запускаемая под привилегированной учетной записью (администратора или системы). Как следствие, подготовленный ярлык обращается к службе, которая уже в свою очередь запускает заданное ПО.
Особенность программы в том, что есть возможность авторизовать не только программы, но и папки (включая сетевые). А хранение настроек в реестре позволило добавить шаблоны групповых политик, примерно как мы писали в статье «Погружение в шаблоны и приручение GPO Windows». Благодаря этому при необходимости настройки можно применять прямо из Active Directory.
Основное окно программы.
Программа богато документирована на официальном сайте.
У этого автора есть еще и программа RunAsSpc, позволяющая запускать исполняемые файлы под правами другого пользователя, передавая учетные данные через зашифрованный файл.
Мне остается только добавить, что это ПО бесплатно только для личного использования.
Но учтите, что из программы, запущенной под административными правами, можно натворить бед. Например, запустить привилегированную командную консоль через диалог Файл — Открыть.
Запускаем cmd.exe прямо из редактора реестра.
Немного защититься помогут политики запрета контекстного меню и прочих диспетчеров задач, часть из которых может настроить AdmiLink. Но в любом случае следует быть осторожным.
А вам приходилось городить странные костыли? Предлагаю делиться историями в комментариях.
Использование RunAs в PowerShell
Если вам нужно запускать программы/процессы от имени другого пользователя из PowerShell, вы можете использовать командлет Start-Process (управление процессами с помощью PowerShell). Сначала нужно запросить учетную запись и пароль пользователя:
$Cred = (Get-Credential)
Для запуска процесса от имени другого пользователя можно использовать:
Start-Process -FilePath "powershell.exe" -Credential $Cred
Либо можно запросить учетную запись и пароль интерактивно через Windows Security:
Если вам нужно запустить программу через runas от имени другого администратора в привилегированном режиме (по умолчанию UAC запускает программу в not-elevated пользовательском контексте), можно использовать такую команду PowerShell:
Или стороннюю утилиту ShelExec:
ShelExec /Verb:runas cmd.exe
В проводнике Windows отсутствует пункт “Запуск от имени другого пользователя”
В Windows вы можете скрыть или показать в проводнике пункт меню RunAs с помощью двух параметров реестра:
- Параметр HideRunAsVerb (тип REG_DWORD) в ветке реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer (1 – скрыть пункт runas, 0 – показать)
- Параметр EnableSecureCredentialPrompting (REG_DWORD) в HKLM\ Software\Microsoft\Windows\CurrentVersion\Policies\CredUI (1 – скрыть, 0 – показать)
Второму параметру реестра соответствует отдельная опция GPO.
Нет, не будет тебе прав
В системе Windows, начиная с Vista, появилась служба UAC, которая помимо прочего отвечает за запросы программ на повышение прав. Не все программы «переваривали» работу с этой службой. Поэтому в системе был доработан механизм совместимости приложений, позволяющий прямо задать программе ее поведение — запрашивать права или нет.
Простейшим вариантом работы с этим механизмом будет использование переменных среды.
Рассмотрим пример с редактором реестра. Действительно, запуская regedit.exe под администратором, мы получаем запрос на повышение прав:
Запрос повышение прав.
Если же мы запустим редактор реестра из консоли, предварительно поменяв значение переменной среды __COMPAT_LAYER на:
set __COMPAT_LAYER=RUNASINVOKER
То запроса UAC не будет, как и административных прав у приложения:
Бесправный редактор реестра.
С конкретным примером такой неприятной программы можно столкнуться при загрузке классификаторов банков из 1С с сайта РБК по ссылке http://cbrates.rbc.ru/bnk/bnk.exe. Если обновление классификаторов отдается на откуп самим пользователям и нет возможности поменять загрузку на bnk.zip (а современные 1С это поддерживают), то приходится придумывать костыли. Ведь bnk.exe — самораспаковывающийся архив, в котором зачем-то прописано «Требовать права администратора».
Поскольку ярлычками тут обойтись не выйдет, ведь 1С сама скачивает файл и запускает его, то придется применять тяжелую артиллерию — Microsoft Application Compatibility Toolkit.
Документация к ПО, как обычно, доступна на официальном сайте, загрузить можно как часть Windows Assessment and Deployment Kit. Сам процесс решения проблемы несложен.
Создаем исправление приложения.
Имя и издатель значения не имеют. Имеет значение только расположение файла — тут нужно указать реальный проблемный bnk.exe (где он будет лежать на самом деле — не важно).
Далее необходимо в списке исправлений выбрать RunAsInvoker.
Выбираем нужный фикс.
Все остальное оставляем по умолчанию, сохраняем базу данных. Должно получиться примерно так:
Созданный фикс для bnk.exe.
После этого достаточно будет установить базу данных, щелкнув по ней правой кнопкой и выбрав Install. Теперь пользователи смогут сами грузить классификаторы банков.
Все становится хуже, если приложению действительно нужны права админа. Тогда добавление прав на системные объекты и исправления не помогают.
Как работает RunAs и аналоги
Получение учётных данных администратора происходит по следующей цепочке:
Пользователь с ограниченными правами запускает ярлык, в котором хорошо зашифрованы данные для запуска программы.
RunAs или его аналоги проверяют корректность шифра и целостность программы, затем извлекают данные и в открытом виде передают их функции CreateProcessWithLogonW.
В это же время API-мониторинг перехватывает данные, переданные функции в качестве параметров, чем делает бессмысленным шифрование пароля и полностью компрометирует учётные данные администратора.
[Конспект админа] Что делать, если программа хочет прав администратора, а вы нет
(с) Вася Ложкин.
К сожалению, в работе сисадмина нет-нет да и приходится разрешать пользователям запускать всякий софт с админскими правами. Чаще всего это какие-нибудь странные китайские программы для работы с оборудованием. Но бывают и другие ситуации вроде небезызвестного bnk.exe.
Попробуем разобрать решения, которые позволят и программу запустить, и безопасника с финансистом не обозлить.
Как добавить пункт “Запуск от имени” для программ в меню Пуск?
Осталось обновить групповые политики (gpupdate /force) и убедиться, что у программ в меню Пуск появится новое контекстное меню Дополнительно -> Запуск от имени другого пользователя.
Пункт “запуск от имени” отсутствует у Universal Windows Platform (UWP) приложения из Microsoft Store. Вы можете запустить UWP приложение от другого пользователя из командной строки с помощью runas.exe.
Выведите список приложений Microsoft Store на компьютере с помощью PowerShell:
Можно найти конкретное приложение
Найдите имя нужного приложения в списке. Например, для запуска встроенного клиента Microsoft Teams Chat от другого пользователя, выполните:
If you want to hide the login credentials you can configure an encrypted file
- If the name of the encrypted file is >> crypt.spc << , you can start it by a double-click on RunAsSpc.exe.in the same directory.
- Drag your encrypted file and drop it onto RunAsSpc.exe
- On command line >>RunAsSpc.exe /cryptfile:”path\NameOfCryptfile” <<
- Create a shortcut or link like >> c:\path\runasspc.exe /cryptfile:”path\NameOfCryptfile” <<
- Link the file extension (open with) *.spc on your system to RunAsSpc.exe, to run the encrypted file by double-click.
- You can also use your own file extension.
Build encrypted files:
Install msi file acdSee 4.0.msi over the domain account installaccount.
Call a msc file like the computerconsole
To run a vbs script
Insert a registry entry
To start a batchfile like *.bat or *.cmd
To install Java with parameters /S /V /qn
To run a Batchfile with some options like optionA optionB optionC
To use environment variables
Call with rundll32 the >>>Add / Remove programs applet<<<
Contact:
Licence:
RunAsSpc is only free for private use.
For companies and other organisations we deliver a licensed version, registered to the organisation name.
Order RunasSpc >>>
Download RunasSpc >>>
Date: 2023-02-09
Data protection
Imprint