denandz/SecretServerSecretStealer

GitHub: denandz/SecretServerSecretStealer

用于解密 Thycotic Secret Server 中存储的密码和敏感数据的 PowerShell 脚本,支持在线一键提取和离线静默解密两种模式。

Stars: 84 | Forks: 15

# SecretServerSecretStealer SecretServerSecretStealer 是一个 powershell 脚本,允许解密存储在 Thycotic Secret Server 安装实例中的密码(和其他项目)。该脚本暴露了两个方法:Invoke-SecretDecrypt 和 Invoke-SecretStealer。 Invoke-SecretDecrypt 需要你手动传递解密单个 secret 所需的各种数据(参见解密部分)。Invoke-SecretStealer 设计用于直接在 Thycotic Secret Server 机器上运行,只需将 web 根目录作为参数传入即可。SecretStealer 会解密数据库配置并连接到应用程序的 db。所有相关信息将被提取,并且所有 secrets 都会被解密。 ## 执行 Invoke-SecretStealer 应在 Secret Server 本机执行,例如: ``` Invoke-SecretStealer -WebRoot C:\inetpub\wwwroot\SecretServer ``` 可以执行 Invoke-SecretDecrypt 来解密特定项。你需要从数据库中检索以下字段:tbSecret.key、tbSecret.IvMEK、tbSecretItem.IV 和 tbSecretItem.ItemValue。请确保在这些条目之间正确关联 SecretID,因为中间密钥对于特定的 SecretID 是唯一的。可以使用以下 SQL 转储所有相关信息以及一些其他辅助数据: ``` select s.SecretName, f.SecretFieldName, s.[Key], s.IvMEK, i.ItemValue, i.IV from tbSecretItem as i JOIN tbSecret as s ON (s.SecretID = i.SecretID) JOIN tbSecretField as f on (i.SecretFieldID = f.SecretFieldID) ``` 检索到上述信息后,你可以运行 Invoke-SecretDecrypt ``` Invoke-SecretDecrypt -Item 9993c5097491ba2b42a10b9a9b7a6ab7239b107337c348086eeb5f5b29c76f33 -ItemIV CF4C2D4F7FA432D64D9712212A06EEA9 -IVMek 6080667306DA295A75E22667E9AD0376 -Key 5C195A500A3BF87C29163A52AC4EA2CFF6C5B69407B6F91A7C7B100B6D20121AAFD052C11B13D542EA2F42137258C2EF -EncryptionConfig C:\whatever\encryption.config ``` ## 解密 Thycotic Secret Server 的核心运作原则基本上就是“加密越多越好”。每个条目包含多个项目,例如密码、名称、URL 等。这些项目均使用特定于该条目的中间密钥进行加密。该中间密钥由主密钥加密,主密钥在每次安装时都是唯一的,并存储在 encryption.config 文件中。encryption.config 文件本身是一个二进制序列化对象,使用硬编码的密钥和 IV 进行加密(提示:Thycotic.ihawu.Base.FileHydrator 类)。从 Secret Server v10.4 开始,主密钥通过与一个硬编码字符串进行 XOR 混淆,然后使用硬编码密钥加密并存储在 encryption.config 文件中。 每个条目存储在 tbSecret 表中,该条目的每个项目则存储在 tbSecretItem 表中。tbSecret.key 和 tbSecret.IvMEK 分别是条目中间密钥的密文和 IV,这由主密钥解密。tbSecretItem.ItemValue 和 tbSecretItem.IV 是项目本身(例如密码)的密文和 IV,这由中间密钥解密。Invoke-SecretDecrypt 可以接收这些参数并解密项目,你还需要提供 Secret Server 安装根目录中的 encryption.config 文件。 ## 兼容性 ### < 10.4 此代码已在运行默认配置的多个 Secret Server 版本 V10.1 和 V10.2 实例上进行了测试。 ### == 10.4 此代码支持 SecretServer v10.4。在针对较新版本运行时,请指定 -NewFormat 标志。 v10.4 为 encryption.config 文件实现了一种新格式。该文件现在包含一个加密的 blob,它会被解密为专有的二进制格式。需要使用一些 XOR 逻辑从解密后的 blob 中提取长度字段和键值对。请查看 Get-MasterKeysv104 和 Get-XORValue 方法。 ### > 10.4 SecretServer v10.5 及更高版本更改了密钥和 IV 的存储方式。可以通过使用 [此 issue](https://github.com/denandz/SecretServerSecretStealer/issues/5#issuecomment-666905276) 中详述的步骤进行提取。 ### DPAPI 和 HSM 支持 SecretServerSecretStealer 现已支持 DPAPI。当然,你必须在本机的 SecretServer 上运行此脚本才能使解密生效。目前尚不支持 HSM。 如果你希望离线执行 secret 解密,并且主密钥受 DPAPI 保护,那么你需要首先从系统中提取主密钥,然后将其提供给 Invoke-SecretDecrypt 方法。如下所示: ``` $masterKeys = Get-MasterKeysv104 -path C:\inetpub\wwwroot\SecretServer\encryption.config $masterkeys.IsEncryptedWithDPAPI # should return true $decrypted = [Security.Cryptography.ProtectedData]::Unprotect([Convert]::FromBase64String($masterkeys.key256), $null, 'LocalMachine') [Text.Encoding]::ASCII.GetString($decrypted) ``` 上述操作将返回主 AES256 密钥,随后你可以使用它离线解密项目: ``` Invoke-SecretDecrypt -MasterKey -Key -IVMek -Item -ItemIV ``` 对于试图尽量减少在 Secret Server 上活动痕迹的红队人员来说,转储主密钥(或者在未启用 DPAPI 的情况下直接复制出 `encryption.config`),导出数据库并离线执行解密可能是一个更安全的做法。 ## 致谢 * Adrian "我会在周日上午 8 点在咖啡馆逆向这些该死的东西,因为我就是这种人" Hayes - (https://github.com/aj-code/) * Dozer - 10.4 互操作代码及 DPAPI 支持 * 无论最初是谁画了那个 Hello Kitty 风格的巴风特... ## 许可证 BSD 许可证,详情请见 LICENSE 文件
标签:AI合规, IIS, IPv6, Libemu, OpenCanary, PowerShell, Secret Server, StruQ, Thycotic, 凭据窃取, 多人体追踪, 安全测试, 密码解密, 攻击性安全, 数据展示, 数据库解密, 数据提取, 无线安全, 红队