解密VMware Workstation密码(附工具)
2023-6-22 08:32:7 Author: 潇湘信安(查看原文) 阅读量:46 收藏

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

来源:Medium,作者:@David Azria、@Zur Ulianitzky

现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安设为星标”,否则可能看不到了

0x00 概述

我们一直在努力研究攻击者用来攻击您的 VMware 环境的技术,您将要阅读的内容是我们持续研究的成果。

您可能认为您的 VMware 密码是安全的。但对于经验丰富的黑客来说,即使是这些也是可以争夺的。

当您从 VMware Workstation 连接到 ESXi 或 Vsphere 服务器时,您可以选择在计算机上保存连接详细信息,包括密码。下次连接到服务器时,您无需再次输入凭据。

经典的“记住我”功能。

使用逆向工程的方法,我们分析了解密流程,发现我们可以自行解密保存的 VMware 凭据。如果我们能做到,那么经验丰富的黑客也能做到。

在此博客中,我们将逐步向您展示黑客如何窃取您的 VMware 凭据。最后,我们将向您展示我们创建的工具,它可以做到这一点,让红队队员的生活更轻松。

让我们进入研究。

0x01 解密流程

我们通过假设凭据保存在本地文件或注册表项中来开始研究。为了准确找到位置,我们使用了 SysInternals 工具中的 Procmon。

我们可以看到,当我们通过工作站添加或删除凭据时,会访问以下文件:

我们来看看这两个文件:

%AppData%\VMware\preferences-private.ini
%AppData%\VMware\ace.dat

这些文件似乎已加密。所以我们需要了解如何,以及到解密它们。我们将从 preferences-private.ini 文件开始。

0x02 preferences-private.ini

该文件包含以下属性:.encoding

encryption.userKeyencryption.keySafeencryption.data

encryption.userKey 值使用数据保护 API (DPAPI) 加密,可通过第一个常量 ~60 字节元数据识别。

DPAPI 允许使用来自当前用户的信息加密数据。因此,只有执行加密的用户才能解密数据。

让我们编写一个使用 Unprotect 函数并尝试解密数据的简单 .Net 应用程序:

我们执行应用程序并获得解密数据:

我们得到了一种加密算法类型 AES-256——我们也得到了一个密钥。我们称它为 KEY_1。

我们现在需要解密在 preferences-private.ini 文件中找到的其他属性的值,即 encryption.keySafe 和 encryption.data。为此,我们需要知道每个属性、使用的算法、初始化向量 (IV) 和密钥。

为了找到这些未知数,我们将使用静态和动态逆向工程分析技术。查看 Procmon 中的调用堆栈向我们展示了哪些 DLL 文件和函数需要访问加密文件。

我们在vmwarebase.dll文件中找到了对BCryptDecrypt函数的调用,这是一个用于解密数据的 WinAPI 函数:
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptdecrypt
就在函数调用之前,我们可以看到 IV,以及发送到函数的加密数据和返回的解密数据,它们被推送到堆栈。查看 MSDN 文档告诉我们,发送给函数的最后一个参数 hKey 是用于解密数据的密钥的句柄。
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgeneratesymmetrickey
这个句柄是从BCryptGenerateSymmetricKey密钥创建函数中获得的:

pbSecret 参数包含用于加密和解密过程的密钥(在 base64 解码之后)。

动态分析应该可以帮助我们获得实际的 IV 和密钥值,并了解完整的解密流程。

下面我们用WinDBG调试vmware.exe,用IDA同步地址基础镜像,插入断点,分析流程。

我们在BCryptGenerateSymmetricKey函数调用上插入断点,然后我们在栈上显示第五个参数pbSecret的内容,也就是秘钥。

经过base64编码后,我们得到:

mXhLLOJnBFo0tNr7PVaxuzmaxwOsWsR/i0k8RAJf9cs=

这就是我们的KEY_1,由上面的DPAPI解密得到。

现在我们在 BCryptDecrypt 函数调用上插入一个断点,然后我们将看到使用此密钥解密了哪个有效负载以及使用了哪个 IV:

堆栈上的第二个参数是加密的有效负载,第五个是 IV:

经过base64编码后,我们可以看到这个数据对应于preferences-private.ini文件中的encryption.keySafe值。前 16 个字节是 IV,其余是加密数据。

解密结果为:

简而言之,KEY_1 用于解密 encryption.keySafe 值,解密后的值是另一个密钥,我们称之为 KEY_2:

接下来,我们可以使用相同的方法,调试对 BCryptDecrypt 函数的调用,以完成我们对解密流程的理解。

使用 KEY_2,我们能够解密 encryption.data 属性。同样,前 16 个字节是 IV,使用 AES-256 算法,解密后的值为:

很好,我们成功解密了配置,我们有了主机名和用户名。但是……密码仍然是加密的。密码的解密密钥是什么?

为此,我们将继续处理工作站保存的第二个文件 ace.dat。

0x03 ace.dat

这是文件的内容:
%AppData%\VMware\ace.dat

您可以看到数据值已加密。我们将其称为 DATA_1。

跟踪对 BCryptGenerateSymmetricKey 函数的堆栈调用会将我们带到 vmwarebase.dll 文件中的硬编码密钥。此密钥用于解密 ace.dat 文件内容:

让我们使用它并解密 DATA_1 值,这是解密后的数据:

数据包含密钥派生函数 PBKDF2-HMAC-SHA-1、盐和加密数据值,我们称之为 DATA_2。

PBKDF2 算法用于根据秘密值和盐生成密钥。秘密值硬编码在 vmwarebase.dll 文件中:

让我们生成密钥并将其命名为 KEY_3:

使用 KEY_3,我们将解密 DATA_2 值,这是解密后的数据:

我们得到另一把钥匙,使用此密钥,我们从上面解密的配置中解密密码。

使用的 IV 是加密密码的前 16 个字节。

最后,这是明文密码!

0x04 工具解密

面的解密流程很长很复杂,所以我们也写了一个工具来完成这项工作;只需运行它,它就会解密 VMware Workstation 配置文件,包括密码。

它还可以通过尝试连接到服务器来验证提取的凭据是否有效。

点击下方名片进入公众号

回复关键字【230429】获取工具链接


信 安 考 证

需要考以下各类安全证书的可以联系我,价格优惠、组团更便宜,还送【潇湘信安】知识星球1年!

CISP、PTE、PTS、DSG、IRE、IRS、NISP、PMP、CCSK、CISSP、ISO27001...


推 荐 阅 读



文章来源: http://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247504532&idx=1&sn=9eb2cc84ad6e050d93aa4556eb5c3d48&chksm=cfa57687f8d2ff91b0fdb2cd49216095e9d1d7b2036aeacc2a18d16d73a32177c05bb5ce5393#rd
如有侵权请联系:admin#unsafe.sh