【问题标题】:How to encrypt/hide ClearText password in PowerShell Transcript如何在 PowerShell 脚本中加密/隐藏 ClearText 密码
【发布时间】:2021-10-14 22:52:00
【问题描述】:

我在我的 PowerShell 配置文件中使用了 Start-Transcript 命令。这对我在以后需要时查看脚本的控制台输出非常有用。但是,有时我也会直接运行一些包含 ClearText 密码 的命令,例如 Set-ADAccountPassword cmdlet。现在,这些密码也会被捕获到 Transcript 日志文件中,这会带来安全风险。

那么,PowerShell 有没有办法识别这些与密码相关的命令,并在 Transcript 日志文件中使用 * 隐藏它们。

我在Start-Transcript 中看不到任何可以启用此行为的参数。有解决办法吗?

编辑: 使用的命令(带有 ClearText 密码)如下所示,

Set-ADAccountPassword -Identity 'CN=Elisa Daugherty,OU=Accounts,DC=Fabrikam,DC=com' -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force)

【问题讨论】:

标签: powershell security logging


【解决方案1】:

Set-ADAccountPassword cmdlet 接受的所有密码都是加密的 (SecureString) 密码:

Set-ADAccountPassword
   [-WhatIf]
   [-Confirm]
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADAccount>
   [-NewPassword <SecureString>]
   [-OldPassword <SecureString>]
   [-Partition <String>]
   [-PassThru]
   [-Reset]
   [-Server <String>]
   [<CommonParameters>]

不过,如果您遇到接受纯文本密码的 cmdlet(或外部命令),将是您需要解决的安全漏洞,因为这不是刚刚被Start-Transcript捕获,但也发送到主机控制台并显示。

也就是说,您不应该像Set-ADAccountPassword 的示例那样在脚本中硬编码密码:

Set-ADAccountPassword -Identity elisada -OldPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force) -NewPassword (ConvertTo-SecureString -AsPlainText "qwert@12345" -Force)
罢工>

改为使用加密字符串作为ConvertTo-SecureString 的输入。
要创建安全字符串,请使用以下命令:(也不要在脚本中对其进行硬编码):

Read-Host -Prompt "Enter password" -AsSecureString | ConvertFrom-SecureString

结果:

12345678d08c9ddf0115d1118c7a00c04fc297eb01000000c8e74a7ee4e2da4eae03ae6fbc416934123456789200000000001066000000010000200000002568f3e73d018b1d0ee8a616c8aa2e9614bad0a6bb62ac76aa4b2b90c0178d4b000000000e80000000020000200000002e443228fdf8e2c54b356420d854535e9acc13dcf635755ae80d17bca4ec3cce20000000a4517f6ca8873e9431a5cd9af714617116014ede30e1a927c856ed4738e03a2340000000ce49ddafe4da3f8cd64e14c347126d5e8907fa16deb9f5133f8807b675f40a3354465868414aba785fcde64bbd98a125924ccfb16ad718f8f24698c3dab88c0d

并在相关脚本中使用结果(不带-AsPlainText 开关),例如:

$OldPassword = '12345678d08c9ddf0115d1118c7a00c04fc297eb01000000c8e74a7ee4e2da4eae03ae6fbc416934123456789200000000001066000000010000200000002568f3e73d018b1d0ee8a616c8aa2e9614bad0a6bb62ac76aa4b2b90c0178d4b000000000e80000000020000200000002e443228fdf8e2c54b356420d854535e9acc13dcf635755ae80d17bca4ec3cce20000000a4517f6ca8873e9431a5cd9af714617116014ede30e1a927c856ed4738e03a2340000000ce49ddafe4da3f8cd64e14c347126d5e8907fa16deb9f5133f8807b675f40a3354465868414aba785fcde64bbd98a125924ccfb16ad718f8f24698c3dab88c0d'
$NewPassword = '12345678d08c9ddf0115d1118c7a00c04fc297eb01000000c8e74a7ee4e2da4eae03ae6fbc416934123456789200000000001066000000010000200000002568f3e73d018b1d0ee8a616c8aa2e9614bad0a6bb62ac76aa4b2b90c0178d4b000000000e80000000020000200000002e443228fdf8e2c54b356420d854535e9acc13dcf635755ae80d17bca4ec3cce20000000a4517f6ca8873e9431a5cd9af714617116014ede30e1a927c856ed4738e03a2340000000ce49ddafe4da3f8cd64e14c347126d5e8907fa16deb9f5133f8807b675f40a3354465868414aba785fcde64bbd98a125924ccfb16ad718f8f24698c3dab88c0d'
Set-ADAccountPassword -Identity elisada -OldPassword (ConvertTo-SecureString $OldPassword) -NewPassword (ConvertTo-SecureString $NewPassword)

注意 1加密的字符串应该只在创建它的帐户下工作。

注 2 引自SecureString Class

我们不建议您将 SecureString 类用于新的 发展。有关详细信息,请参阅SecureString shouldn't be used 在 GitHub 上。

【讨论】:

  • 谢谢 iRon,这很有帮助。有时,我不得不批量重置密码。我通常在 excel 的列中生成一些 随机密码,使用 Set-ADAccountPassword 命令,正如我在新列中的问题中所述,然后将这些命令从 Excel 复制粘贴到 PS控制台重置密码。然后,我将凭据说明发送给最终用户,并处理使用的 excel 表或将密码替换为 *s。您提供的解决方案确保更好的安全性!我将继续执行此操作。
猜你喜欢
  • 2010-10-10
  • 2013-04-16
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
相关资源
最近更新 更多