Проблема использования RunAs на серверах
В этой статье я подробно расскажу о проблемах, с которыми столкнётся каждый системный администратор, использующий в своей работе возможность запуска программ от имени другого пользователя, в большинстве случаев от имени администратора. Если вы — тот самый сисадмин, прочитайте её внимательно, скорее всего вам требуется срочная смена своего пароля.
Зачем это вообще нужно? Бывают ситуации, когда пользователю с ограниченными правами требуется выполнить программу, которой для выполнения специфической работы требуются повышенные права. Например, программисту нужно предоставить возможность завершать определённые процессы бухгалтерской программы, некоторым пользователям из бухгалтерии требуется возможность переключать ключи безопасности в интерактивном режиме и так далее. Часть этих задач можно выполнять неинтерактивно, при этом несколько страдает удобство, поскольку пользователь не видит интерфейс программы и может разве что получить системное сообщение о завершении работы программы, об этом способе подробно рассказал мой коллега Вадим Стеркин в своём блоге: Как выполнять задачи с полными правами обычным пользователем без ввода пароля администратора. Способ отличный для своих задач, в моей же статье речь пойдёт о рисках и безопасности выполнения интерактивных программ от имени других пользователей, где полной автоматизации достичь нельзя и есть необходимость взаимодействия с интерфейсом.
Запуск программы с правами администратора БЕЗ ввода пароля при помощи AdmiLink
Самое важное, что должен уяснить администратор — из запущенной программы с повышенными правами не должно быть возможности запустить другую произвольную программу, поскольку права автоматически наследуются. Прежде чем вообще планировать создавать ярлык для запуска, следует самостоятельно убедиться, что в программе нет окон открытия других файлов или запуска справки с собственной программой обработки, где дополнительно можно вызвать диалог открытия других файлов справки, и тому подобные в данном случае уязвимости, которые позволят пользователю запустить произвольную программу с правами администратора. Ещё пример — программа при определённых или редких обстоятельствах открывает логи в блокноте, а уже там есть диалог открытия других файлов, вот и готовая уязвимость. То есть целевая программа должна быть изучена администратором вдоль и поперёк (а ещё лучше — написана самостоятельно), чтобы пользоваться ей было действительно безопасно.
RunAs из коробки
В системе есть родная утилита runas, позволяющая выполнять задачу запуска от другого имени, однако пользоваться ей нужно осторожно и в целях безопасности её нельзя применять для запуска программ с повышенными привилегиями, но можно наоборот — администратору запускать программы с правами обычного пользователя, хотя технически возможны оба варианта. Почему так? Параметр /savecred позволяет сохранить пароль для пользователя, от имени которого запускается программа, в профиле пользователя, который запускает программу. Однако этот же сохранённый пароль RunAs использует и для запуска любых других программ, запуск которых может инициировать пользователь, у которого сохранён пароль.
Как запускать все программы от имени Администратора | Режим одобрения администратором | УБО #1
Рассмотрим это на примере: у нас есть 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 и другие. Всех их объединяет конечный способ запуска, который мы разберём далее. В целом алгоритм работы этих программ такой: берём имя и пароль пользователя, от имени которого будет выполняться запуск целевой программы (как правило с правами администратора), добавляем к нему путь и контрольную сумму исполняемого файла (чтобы его нельзя было подменить на произвольный), и всю эту информацию дико шифруем, чтобы расшифровать могла только авторская программа, и желательно только на том же компьютере. Проблема в том, что вся эта защита не имеет никакого смысла, поскольку имя и пароль администратора можно перехватить тогда, когда он уже будет расшифрован. Дополнительная проблема в том, что авторы этих программ об этом не подозревают и убеждают системных администраторов в безопасности своих разработок:
Так вот, AdmiLink — это очень неплохой «кирпич» в системе защиты, задачей которого является БЕЗОПАСНЫЙ ЗАПУСК программ. Безопасный запуск означает, что:
Пользователь сможет запускать нужную программу с нужными правами.
Пользователь не сможет узнать пароль Администратора через ярлык запуска.
Пользователь не сможет запустить не разрешенную Администратором программу, даже подменив исполняемый файл или командную строку в ярлыке.
admilink.ru/admilink.htm#NotProtected
Как работает 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 (решение было разработано после этой статьи).
Источник: habr.com
Windows: Создать ярлык для запуска программы от имени администратора. (AdmiLink)
Довольно часто возникает ситуация, когда некоторые программы отказываются корректно работать без прав администратора. Если давать права администратора не сильно хочется или это запрещено политикой компании, то вам пригодится утилитка AdmiLink, которая создает ярлыки для запуска программ с правами другого пользователя. Есть конечно штатный runas /savecred и утилитка Марка Руссиновича PSExec, но на мой взгляд AdmiLink более прост в обращении.
На момент написания статьи актуальная версия программы (версия 3.0) нормально работает со всеми операционными системами семейства Windows включая Windows 10. Скачать софтинку можно отсюда или с оф. сайта.
Создание ярлыка происходит в три этапа:
Этап номер раз. Выбор программы и ключей запуска.

На этом этапе указывается полный путь к программе, параметры командной строки, рабочий каталог программы и режим отображения окна. Расшифровку режимов отображения можно посмотреть нажав кнопку «Выбрать. «
Этап номер два. Выбор пользователя под которым будет запускаться программа.

На этом этапе указываются Домен имя пользователя и пароль. Пользователи без пароля не канают. AdmiLink просто откажется продолжать, если вы введете пользователя без пароля. Проверить правильность введенных данных можно кнопкой «Тестировать». При правильных логине/пароле вы увидите окошко:

и надпись «Account is good to use.» в окне с программы. Также можно задать таймаут при старте в поле «AdmiRun ждет при старте, сек», при создании ярлыка для автозапуска.
Этап номер три. Собственно создание ярлыка.
После проверки пользователя генерируем строку запуска AdmiLink одноименной кнопкой. На вкладке LNK вводим имя ярлыка, выбираем папку назначения и файл со значком. Если хотите поместить ярлык в общий профиль, чтобы он появился у всех пользователей, ставьте галку All Users.

После чего нажимаем «Сгенерировать командную строку» и «Создать ярлык сейчас!». Радуемся жизни.
Единственный серьёзный минус программы — при изменении конечного файла ярлык перестает работать. AdmiLink пишет ошибку «Не могу выполнить . целевой файл был измененобновленудален . «. Поэтому если вы доработали скрипт или обновили программу, ярлык нужно создавать заново.
Источник: tmie.ru
unix-newbie
Для таких нужд есть встроенное в винду средство RunAs, которое позволяет редактировать ярлык на запуск приложения, явно указав при этом логин и пароль администратора системы. То-есть, при наличии «моска», пользователь может спокойно просмотреть Ваши данные в свойствах ярлыка. Но, лекарство есть. И имя ему AdmiLink.
Сия программка абсолютно бесплатна и написана отечественным коллегой, здоровья ему и линуху на сервер. Описание (полнейшее и подробнейшее) к данной софтинке вот.
Кр атко: программа делает ярлык на запускаемое приложение с помещением его в указываемый Вами путь, при этом Вы вбиваете имя пользователя и пароль от своей учетной записи, выбирая Ваш домен или локальную учетку. Пароль и логин он тут же забывает. Затем программа генерирует «ключ запуска», который вбивается в ярлык. Учетные данные в нем зашифрованы и просмотреть их не представляется возможным. Все, ярлык создан, приятной работы Вашему пользователю.
И еще! Некоторые программы (только под Windows 7, как я подозреваю, ибо под «хрюшкой» такого нет) не дружат с «Системой контроля учетных записей». И при запуске созданного ярлыка либо ничего не происходит (вообще) либо вываливается ошибка. Для этого есть решение, описанное в статье, текст которой я на всякий противопожарный продублирую:
Запуск программ под администратором в Windows 7
Admilink при работе в Windows 7 может выдавать ошибку при попытке запуска созданного ярлыка для какой-нибудь программы, которую мы хотим выполнить под админом.
Выглядит это так (здесь и далее скрины и идея с oszone.net):
Происходит это из-за проблем с пресловутым «Контролем учетных записей пользователя» (User Account Control или UAC). Кто-то отключает UAC, но я не стал, все-таки лишний контроль не помешает. Ладно, а как жить дальше-то?
Решение не обычное, сразу сам бы не додумался, наверное:
Нам будет нужна утилита Elevate от Johannes Passing. Эта утилита из командной строки запустит нашу программу, которой нужны права администратора и у которой есть проблемы с поддержкой UAC:
> «C:AdminElevateReleaseElevate.exe» «C:EVERESTPORTABLEEVERESTULTIMATEPORTABLE.exe»
Выведется запрос UAC и приложение запустится от имени администратора.
Вот как это будет выглядеть в программе Admilink:
Вот так вот, желаю всем удачи! Большое спасибо автору программы и замечательной статье на oszone.net, в которой описан способ работы Admilink в Windows 7.
По ссылке на Elevate качаем вот этот архив , в котором находите экзешник Elevate.exe под свою разрядность системы. Дальнейшие действия, я думаю, ясны. Всем удачи и чтоб стояло и не висло!
Источник: unix-newbie.blogspot.com
Admilink что это за программа
Группа: Пользователи
Сообщений: 298
Регистрация: 30.12.2006
Из: Северной столицы
Пользователь №: 296.968
Респектов: 21
AdmiLink 1.2
Описание: Эта утилита позволяет Администратору создать ярлык, который запускает некоторую конкретную (с защитой от подмены) программу от имени Администратора из-под пользователя с ограниченными правами.
Кратко о программе AdmiLink
AdmiLink — утилита, при помощи которой Администратор может создать ярлык, дающий возможность пользователям с ограниченными правами запускать конкретную (без возможности подмены!) программу с правами Администратора (или любого другого пользователя) без (интерактивного) ввода пароля.
Типичным применением программы AdmiLink является администрирование защищенных систем, в которых пользователь работает в основном под своей ограниченной учетной записью, и только отдельные, строго ограниченные Администратором функции запускает под Администратором, не зная его пароля и не имея возможности запускать другие, несанкционированные программы.
Другим типичным примером является использование AdmiLink для запуска потенциально опасных программ, например, Web браузера, с пониженными правами без ввода пароля. Так, чтобы избежать заражения машины вирусом, можно запускать Web браузер под учетной записью ограниченного пользователя, что резко снижает вероятность повреждения системы. Чтобы не вводить каждый раз пароль ограниченного пользователя, на Рабочем Столе можно сделать ярлык для запуска Web браузера под ограниченным пользователем.
» Программа AdmiLink также содержит полезные дополнительные функции, нужные Администратору, такие как: «
AdmiCalc — формульный калькулятор для выполнения расчетов, с поддержкой переменных и обширным набором стандартных функций.
AdmiCrypt — позволяет шифровать сообщения для передачи по открытому каналу связи, а также кодироватьдекодировать сообщения в разных системах кодировки (HEX,URL,BASE64).
AdmiTerm — терминал для запуска программ, а также связи по именованным каналам, сокетам TCP/IP и последовательным COM-портам. Это полезно, например, если надо настраивать связь, измерительную аппаратуру, либо запускать программы в случае, когда, например, командный интерпретатор cmd.exe отключен Администратором из соображений безопасности.
AdmiGuard — утилита, содержащая набор средств для ограничения тех функций Windows, которые (потенциально) снижают защищенность системы. Позволяет, например, запрещать запуск командного интерпретатора, диспетчера задач, редактора реестра, контекстного меню, ограничивать доступ к дискам и сетевым ресурсам и т.д.
»» Нажмите, для закрытия спойлера | Press to close the spoiler ««
В общем, AdmiLink — хороший помощник Администратора, содержащий ряд уникальных функций, которые не так легко найти, тем более в одной, и притом свободной, программе.
Источник: softoroom.org