来源:Medium,作者:@David Azria、@Zur Ulianitzky
现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
0x00 概述
您可能认为您的 VMware 密码是安全的。但对于经验丰富的黑客来说,即使是这些也是可以争夺的。
当您从 VMware Workstation 连接到 ESXi 或 Vsphere 服务器时,您可以选择在计算机上保存连接详细信息,包括密码。下次连接到服务器时,您无需再次输入凭据。
经典的“记住我”功能。
使用逆向工程的方法,我们分析了解密流程,发现我们可以自行解密保存的 VMware 凭据。如果我们能做到,那么经验丰富的黑客也能做到。
在此博客中,我们将逐步向您展示黑客如何窃取您的 VMware 凭据。最后,我们将向您展示我们创建的工具,它可以做到这一点,让红队队员的生活更轻松。
让我们进入研究。
0x01 解密流程
我们可以看到,当我们通过工作站添加或删除凭据时,会访问以下文件:
我们来看看这两个文件:
%AppData%\VMware\preferences-private.ini
%AppData%\VMware\ace.dat
这些文件似乎已加密。所以我们需要了解如何,以及到解密它们。我们将从 preferences-private.ini 文件开始。
0x02 preferences-private.ini
该文件包含以下属性:.encoding
encryption.userKey
encryption.keySafe
encryption.data
encryption.userKey 值使用数据保护 API (DPAPI) 加密,可通过第一个常量 ~60 字节元数据识别。
DPAPI 允许使用来自当前用户的信息加密数据。因此,只有执行加密的用户才能解密数据。
让我们编写一个使用 Unprotect 函数并尝试解密数据的简单 .Net 应用程序:
我们得到了一种加密算法类型 AES-256——我们也得到了一个密钥。我们称它为 KEY_1。
我们现在需要解密在 preferences-private.ini 文件中找到的其他属性的值,即 encryption.keySafe 和 encryption.data。为此,我们需要知道每个属性、使用的算法、初始化向量 (IV) 和密钥。
为了找到这些未知数,我们将使用静态和动态逆向工程分析技术。查看 Procmon 中的调用堆栈向我们展示了哪些 DLL 文件和函数需要访问加密文件。
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptdecrypt
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgeneratesymmetrickey
pbSecret 参数包含用于加密和解密过程的密钥(在 base64 解码之后)。
动态分析应该可以帮助我们获得实际的 IV 和密钥值,并了解完整的解密流程。
下面我们用WinDBG调试vmware.exe,用IDA同步地址基础镜像,插入断点,分析流程。
我们在BCryptGenerateSymmetricKey函数调用上插入断点,然后我们在栈上显示第五个参数pbSecret的内容,也就是秘钥。
经过base64编码后,我们得到:
mXhLLOJnBFo0tNr7PVaxuzmaxwOsWsR/i0k8RAJf9cs=
这就是我们的KEY_1,由上面的DPAPI解密得到。
现在我们在 BCryptDecrypt 函数调用上插入一个断点,然后我们将看到使用此密钥解密了哪个有效负载以及使用了哪个 IV:
经过base64编码后,我们可以看到这个数据对应于preferences-private.ini文件中的encryption.keySafe值。前 16 个字节是 IV,其余是加密数据。
解密结果为:
接下来,我们可以使用相同的方法,调试对 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 文件内容:
数据包含密钥派生函数 PBKDF2-HMAC-SHA-1、盐和加密数据值,我们称之为 DATA_2。
PBKDF2 算法用于根据秘密值和盐生成密钥。秘密值硬编码在 vmwarebase.dll 文件中:
使用 KEY_3,我们将解密 DATA_2 值,这是解密后的数据:
使用的 IV 是加密密码的前 16 个字节。
最后,这是明文密码!
0x04 工具解密
它还可以通过尝试连接到服务器来验证提取的凭据是否有效。
点击下方名片进入公众号
回复关键字【230429】获取工具链接
信 安 考 证
CISP、PTE、PTS、DSG、IRE、IRS、NISP、PMP、CCSK、CISSP、ISO27001...
推 荐 阅 读