解密 Windows 8 应用程序和 Azure 之间的 TLS 数据包

逆向工程 解密 视窗-8
2021-06-24 03:20:17

在 Windows 8 的 Windows 应用商店应用程序开发中,有一个名为 remoteSettings 的类,它允许开发人员存储批量数据,以便用户可以跨多台机器访问它,只要他们使用相同的帐户登录。

我连接了 WireShark,发现数据包存储在 Azure 中,并使用 TLS 进行保护。我想自己进行 MITM,以便我可以解密数据包并查看数据是否在 Azure 上加密。

我显然没有 Azure 的私钥,所以我想知道是否有人知道如何完成 MITM 分析。

4个回答

您可以做的另一件事是拦截 48 字节 TLS 主密钥的创建,这可能是矫枉过正但在其他情况下很有用。对于许多 Windows 应用程序(包括 IE),这发生在lsass.exe以下函数中(取自 Win7 SP1 32 位):

Caller:  ncrypt!_Tls1ComputeMasterKey@32+0x57 
EIP:     ncrypt!_PRF@40+0x11a

然后,您可以通过将(Pre)-Master-Secret log filenameSSL 首选项设置为如下所示的文件文件,在 Wireshark 中解密捕获的数据包

RSA Session-ID:87492B3586DE289FAE1598B0A19CC7BCCB69371993F2C0DF32438034E06FE3FB
Master-Key:F58C0EFA2BF87602646B318400DFEB0C8CCDE59408C9F13C6D923F6208743BD34EA8BA17BCE02B9BD8DFED5A58036068

此处的会话 ID 可以在您感兴趣的流的 TLS 标头(未加密)中找到。(不要被 RSA 愚弄——这适用于所有 TLS 连接,无论使用的密码套件如何。)

这种方法的优点是,由于您不是在做中间人,因此客户端应用程序不必信任您的 CA,这在您尝试逆转某些实际上对加密正确的恶意软件时特别方便.

缺点是您需要能够调试lsass.exe,这可能很棘手;这里有一些关于如何做到这一点的信息

如果数据作为 HTTPS 传递,您可以尝试经典的Fiddler中间人方法。我不确定 Windows 商店是否尊重代理设置或是否有固定证书。如果它确实尊重代理设置,它应该这样做,并且它没有固定证书,你应该能够用 Fiddler 轻松地中间人。

如果数据不是 HTTPS 并且证书没有固定,一种选择是使用SSLNetcat代理安全连接您所做的是更改主机文件,以便 Store 可执行文件连接到本地运行的 SSLNetcat,然后设置 SSLNetcat,使其使用您拥有私钥的证书。然后,您要么让 SSLNetcat 将数据直接转发到您选择的程序,要么将私钥输入 Wireshark 并使用它来嗅探流量。

如果数据不是 HTTPS,并且二进制文件中的证书已固定且未存储在文件中,则您可以修补 Windows 应用商店可执行文件并将证书替换为您拥有私钥的自己的证书。OpenSSL 应该能够轻松地为您生成替换证书。然后可以将此私钥输入到 Wireshark 中,然后 Wireshark 将解密流量。

您非常接近复制保护区域,因此您可能会遇到许多复杂情况。

您可以采用多种方法来提取 Windows 应用商店使用的本地密钥并将其输入 Wireshark,但是,我认为最好的办法是注入一个挂钩网络 IO 功能send()recv() 脱离进程的 DLL

您可以尝试自己在“低级别”上执行此操作,但是为了实用主义的利益,您最好检查 Microsoft Detours 以进行挂钩,有很多使用它的示例 - 现在了解您的函数原型已经很容易了是唯一的基本要求。

您还可以尝试oSpy,它基本上挂钩了适当的 API 调用,并让您查看加密/解密前后的数据。

oSpy 是一个帮助在 Windows 平台上运行的逆向工程软件的工具。[...] 当嗅探在 API 级别完成时,它允许更细粒度地查看正在发生的事情。[...] 如果应用程序使用加密通信,也很容易拦截这些调用。oSpy 已经拦截了一个这样的 API,它是 MSN Messenger、Google Talk 等用于加密/解密 HTTPS 数据的 API。