Модуль PowerShell Secret Management: безопасное хранение и использование паролей

Microsoft недавно выпустила крайне интересный PowerShell модуль SecretManagement . Данный модуль можно использовать для безопасного хранения и использования сохраненных паролей в ваших PowerShell скриптах. Данный модуль условно состоит из двух составляющих: SecretStore vault – собственно дефолтное хранилище паролей, и движок SecretManagement , который позволяет работать с хранилищами паролей. Поддерживается как встроенное хранилище (SecretStore vault), так и внешние инструменты для хранения паролей, например: KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager и т.д. С помощью SecretsManagement вы можете сохранить любые пароли и извлечь их в любой момент. Можно хранить не только пароли, но и лицензионные ключи, ключи доступа, и любую другую конфиденциальную информацию (поддерживаются типы объектов Hashtable, Byte, String, SecureString и PSCredential).

В этой статье мы покажем, как использовать модуль Secret Management в ваших скриптах PowerShell для хранения и извлечения учетных данных, а также пример интеграции с KeePass.

Установка модуля Secret Management

Модуль SecretsManagement требует наличие установленного Windows PowerShell версии 5.1 или PowerShell Core.

Для установки модуля Secrets Management с помощью менеджера пакетов NuGet, выполните команду:

Install-Module -Name Microsoft.PowerShell.SecretManagement

Чтобы установить хранилище паролей SecretStore , предлагаемой Microsoft по умолчанию, выполните команду:

Install-Module -Name Microsoft.PowerShell.SecretStore

Чтобы вывести список доступных командлетов в модулях, используйте команды:

Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStore

Создаем хранилище паролей (SecretStore Vault)

Сначала нужно создать локальное хранилище паролей. Я назову его MyDomainPassdb и назначу в качестве хранилища паролей по умолчанию.

Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault

Если настройки политики выполнения скриптов PowerShell блокируют запуск модуля, можете изменить настройки для текущей сессии так:

Set-ExecutionPolicy -Scope Process Unrestricted

Вы можете создавать и использовать как локальные, так и удаленные хранилища паролей.

Следующая команда выведет список зарегистрированных хранилищ паролей для текущего пользователя:

Get-SecretVault

Задайте мастер пароль для доступа к хранилищу паролей:

Get-SecretStoreConfiguration

В случае утери мастер пароля от вашего SecretStore Vault, вы не сможете получить доступ к сохраненной в нем информации.

По умолчанию доступ к хранилищам паролей определяется следующими настройками:

  • Scope – CurrentUser (хранилище доступно только текущему пользователю);
  • Authentication – Password (доступ к хранилищу через мастер пароль);
  • PasswordTimeout – 900 (длительность сессии, в течении которой мастер пароль не запрашивается повторно – 15 минут, можно увеличить: Set-SecretStoreConfiguration -PasswordTimeout 1200) ;
  • Interaction – Prompt (нужно ли запрашивать мастер пароль при внесении изменений).

Чтобы отключить запрос мастер пароля для доступа к хранилищу (не рекомендуется), нужно установить Authentication = None:

Set-SecretStoreConfiguration -Authentication None

Чтобы изменить мастер пароль, воспользуйтесь командлетом Set-SecretStorePassword .

В Windows локальное хранилище пароля хранится в профиле пользователя в каталоге %LOCALAPPDATA%MicrosoftPowerShellsecretmanagement .

К сожалению, модуль Secret Management нельзя использовать для сервисных MSA/gMSA аккаунтов , т.к. для них не создаются профили.

Управление сохранёнными паролями с помощью модуля Secret Management

Чтобы добавить строку типа SecureString в хранилище паролей используется командлет Set-Secret. Нужно указать имя хранилища и название записи:

Set-Secret -Vault MyDomainPassdb -Name user1

Укажите пароль, который нужно сохранить в базу.

Или можно сохранить защищаемое значение так (например GitHub ключ):
Set-Secret -Vault MyDomainPassdb -Name CORP_GITHUB_TOKEN -Secret 'gitHUB_API_AUThToken'

Будьте внимательны при указании закрытой информации в консоли PowerShell в открытом виде, т.к. она сохранится в истории команд PowerShell .

Вывести список записей в хранилище паролей можно так:

Get-SecretInfo

В PowerShell 7.0 можно вывести защищаемое значение из базы паролей в открытом виде с помощью опции –AsPlainText ( обновите версию PowerShell , если нужно):

Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString –AsPlainText

В большинстве случаев для работы в сетях Windows вам нужно сохранять в хранилище паролей не просто пароль, а пару – учетная запись и пароль. В этом случае нужно сохранить эту пару в виде объекта PSCredential . Также может быть удобно добавить метаданные с описанием сохраненной записи.

Set-Secret -Vault MyDomainPassdb -Name adm_kbuldogov -Secret (Get-Credential) -Metadata @{description = "AD domain domain admin account resource.loc"}

Если вы не хотите вводить имя учетной записи в окне Get-Credential, можно указать ее так:

Set-Secret -Vault MyDomainPassdb -name adm_aivanov -Secret (get-credential corpadm_aivanov)

Вести список сохранённых паролей и их описание можно так:

Get-SecretInfo | Ft Name, Metadata

Как использовать сохраненные пароли в скриптах PowerShell?

Теперь вы можете использовать сохраненные пароли в своих скриптах и командах PowerShell. Например, у одного из заказчиков из соображений безопасности и защиты административных учетных записей для каждого администратора нарезали с десяток учетных записей (под разные сервисы/задачи). Использовать одинаковые пароли запрещено, выполняется регулярный аудит паролей . Вводить пароли каждый раз для них довольно утомительно.

С помощью модуля SecretManagement можно безопасно сохранить пароли в локальный файл и вызывать их при необходимости .

Например, для подключения к удалённому компьютеру и запуска команды через PowerShell Remoting , можно использовать такой код:

Enter-PSSession -ComputerName dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_aivanov)

Аналогичным образом можно упростить доступ к Exchange/Office365 :

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch1.remontka.com/PowerShell/ -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name admex_aivanov)

Или Azure AD :

Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm_aivanov)

Или просто получить значение имени и пароля в переменную:

$Cred = Get-Secret -Vault MyDomainPassdb user1

Получаем доступ к паролям в KeePass из PowerShell

Вы можете использовать модуль SecretManagement для доступа к другим популярным хранилкам паролей. Рассмотрим, как получить доступ к сохраненным паролям в файле KeePass (*.kdbx).

Сначала нужно установить модуль SecretManagement для взаимодействия с KeePass:

Install-Module -Name SecretManagement.KeePass

Затем зарегистрируйте хранилище KeePass в своем профиле пользователя:

Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:UsersrootDocumentspersonal_creds.kdbx"
UseMasterPassword = $true
}

Чтобы проверить доступ к файлу KeePass, выполните команду:

Test-SecretVault -Name KeePassDB

Укажите мастер пароль для доступа к файлу KeePass. Если вы указали правильный пароль, команда должна вернуть True.

Теперь можно вывести список сохраненных паролей в базе KeePass.

Get-SecretInfo -Vault KeePassDB

Чтобы сохранить новые пароль в KeePass:

Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential remontkaILO_adm)

Аналогичным образом вы можете подключить любое другое популярное решение для хранения паролей и использовать его в PowerShell.

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago