在PowerShell脚本中保护密码

问题描述 投票:1回答:2

我正在编写一个PowerShell脚本,每隔几个月,第三方应用程序会自动调用以执行以下操作:

  1. 使用[System.Web.Security.Membership]::GeneratePassword()随机生成密码,然后使用Export-PfxCertificate和OpenSSL的passin密码。
  2. 使用静态密码通过COM API向不支持API密钥或任何其他内容的第三方系统进行身份验证。

安全地做到这一点的最佳方法是什么?

据我所知,#1没有任何问题,但我在网上看到的关于#2的一切建议:

  • 要求用户在执行脚本时提供凭据,但这会使自动化过程失败。
  • 使用PSCredential,但这不可能。
  • 使用加密的密钥/密码文件,但据我所知,由于您仍然有效地将密码与脚本文件一起存储,因此没有任何意义 - 如果服务器受到损害,那么他们可以阅读来自脚本的密码或解密密钥文件中的密码。除非您使用未存储在服务器上的自定义加密密钥,否则会导致自动化失败。
powershell security passwords
2个回答
0
投票

对于#2,有许多资源/文章涉及使用PowerShell时保护凭据。

从Windows Credential Manager开始...

Install-Module -Name "CredentialManager"

Get-Command -Module "CredentialManager"

$Target = "YourServerName"
$UserName = "Administrator"
$Secure = Read-host -AsSecureString
New-StoredCredential -Target $Target -UserName $UserName -SecurePassword $Secure -Persist LocalMachine -Type Generic

Get-StoredCredential -Target "servername" –AsCredentialObject

Remove-StoredCredential -Target "servername"

......然后看其他方法。有关其他方法,请参阅此问答。 Passwords in powershell logging

至于...

如果服务器受到损害

...如果一个邪恶的人进入你的系统,为了能够做到这一点,那么这就开始了:Ten Immutable Laws Of Security (Version 2.0)


0
投票

你检查过Azure Key Vault或类似的东西吗?

如果您走这条路线,请查看Az模块(Windows PowerShell 5.1或PowerShell Core)。 Az.KeyVault子模块具有许多用于使用Vault的功能。

编辑:为了解决安全问题,我们对系统了解不多。但是,这些是我要研究的内容:

  1. 最低权限:确保此服务帐户只能执行它应该执行的操作。
  2. 使用时间限制:如果已知应执行此计划,请将系统配置为仅允许帐户在此期间成功进行身份验证,如果可能,甚至允许JIT权限。
  3. 基于位置的限制:仅允许帐户从该位置进行身份验证。最好的结果,能够限制应该执行它的特定服务器(可能需要专用的出口IP)。
  4. 审核:监控并警告这些设置的更改。

如果这些已经存在,那么您的暴露是实际系统受到攻击,并且攻击者可以在允许的范围内在允许的范围内进行意外更改。在这一点上,这是一个相当低的风险,这比不实施这样的控制要好得多。

这些可以在应用程序中实现,或者如果可以与应用程序集成,则可以通过第三方受信任的身份验证源实现。

© www.soinside.com 2019 - 2024. All rights reserved.