是否可以解密 SSL 连接(缺少暴力破解)?

逆向工程 解密
2021-06-17 06:21:21

我正在尝试对协议进行逆向工程(它适用于服务器即将关闭的游戏)。我有两件事:1)程序的二进制文件 2)来自 Wireshark 的数据包转储(如果需要,我仍然能够获得另一个转储)。现在,从我从转储中可以看到的协议是 TLS/SSL(不确定是哪一个)加密的。我知道 Wireshark 具有解密这些数据包的能力,因为我有所需的密钥......但是我到底如何从二进制文件中提取密钥?

tl;dr 鉴于原始二进制文件,我可以访问纯文本 SSL 吗?

2个回答

如果您在二进制文件运行时有权访问它,则完全有可能提取解密 SSL/TLS 会话所需的密钥,即使使用完美的前向保密有一个 48 字节的密钥,称为主密钥,由双方共享,用于生成连接的会话密钥。

如果应用程序使用标准的 Win32 API 进行 SSL 连接,则拦截密钥生成的点在 inside lsass.exe, at:

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

更多信息可以在我对“解密 Windows 8 应用程序和 Azure 之间的 TLS 数据包”的回答中找到

更一般地说,我(与几位优秀的合著者)最近开发了用于扫描所有内存访问以获取有趣数据(例如 SSL/TLS 密钥)的技术。一篇关于此的论文(“ Tappan Zee (North) Bridge: Mining Memory Accesses for Introspection ”)已在 CCS 上发表,其软件可在 github 上找到:PANDA/TZB特别看一下keyfind插件,它采用样本(加密)数据包并扫描内存访问以获取 TLS 主密钥。

查找新应用程序生成 TLS 主密钥的位置的过程是:

  1. 使用 PANDA 创建进行加密连接的应用程序的记录,并保存数据包捕获(在 QEMU 监视器中begin_record <session_name>,运行应用程序,然后end_record <session_name>.
  2. scripts/list_enc.py在抓包上运行以提取keyfind插件所需的信息将此信息放在keyfind_config.txt.
  3. begin_replay <session_name>使用-panda-plugin x86_64-softmmu/panda_plugins/panda_keyfind.so命令行上的指定运行会话的重播(在 QEMU 监视器中)在(非常)很长时间后,它会吐出匹配 TLS 密钥被读取或写入的代码位置key_matches.txt

该文档目前非常粗略,但查看源代码应该可以解决您的任何问题(并随时在此处要求澄清!)。

有关为此使用熊猫的更多信息,请参见:此处

正确实施的SSL 流量具有前向保密性。这意味着即使您拥有整个数据包转储和所需的私钥,您也无法解密它。正如 Brendan Dolan-Gavitt 在他的回答中指出的那样,您需要在运行时访问二进制文件才能做到这一点。

您可以尝试做的是使用ettercap 之类的东西设置 SSL mitm 根据 SSL 实现,这可能有点复杂并且可能不起作用。

现在,不是直接回答您的问题,但它可能会帮助您实现您想要的:

你可以做的另一件事,因为你的目标是分析底层协议是在更高层次上做钩子。我以前使用oSpy做过类似的工作。

oSpy 是一个帮助在 Windows 平台上运行的逆向工程软件的工具。由于当今存在的专有系统数量众多(同步协议、即时消息等),如果仅限于传统技术,开发可互操作的解决方案所需的工作量将很快成为一个很大的负担。然而,当嗅探在 API 级别完成时,它允许对正在发生的事情进行更细粒度的查看。

oSpy 通过附加到要分析其流量的进程然后监视某些 API 来工作。