我们网络上的一台机器被 Meterpreter 入侵了。
我们在整个入侵期间捕获了流量,并在建立连接时对受感染机器进行了内存转储。
我们可以解码我们捕获的HTTPS/SSL流量吗?
到目前为止,我们已经使用 Volatility 的 dumpcerts 插件提取了一些公共证书,但没有明显的私有证书。既然连接仍然建立,那么私钥肯定必须在某个地方的内存中吗?
TLS 版本是 TLSv1 1.0。算法标识符是 sha256WithRSAEncryption。
我们网络上的一台机器被 Meterpreter 入侵了。
我们在整个入侵期间捕获了流量,并在建立连接时对受感染机器进行了内存转储。
我们可以解码我们捕获的HTTPS/SSL流量吗?
到目前为止,我们已经使用 Volatility 的 dumpcerts 插件提取了一些公共证书,但没有明显的私有证书。既然连接仍然建立,那么私钥肯定必须在某个地方的内存中吗?
TLS 版本是 TLSv1 1.0。算法标识符是 sha256WithRSAEncryption。
是的,您可以提取密钥。私钥和对称密钥存在于密码库(例如 OpenSSL)的内存中。您必须提取对称密钥才能解密 TLS 流量。OpenSSL 将其保存在 struct 中SSL->session->master_key
。如果您不确切知道正在使用什么库,一种简单的蛮力方法是从内存中提取所有适当大小的缓冲区,并尝试用每个缓冲区解密 TLS 流,直到成功。
您还可以使用 GDB,如从 OpenSSL 应用程序中提取预主密钥中所述,它可以为您提供可以插入 Wireshark 的预主密钥。虽然该答案侧重于实时内存转储,但如果您有核心转储,它应该也能正常工作。使用 Volatility 转储链接到 TLS 库的进程内存,然后您可以在其上使用 GDB。如果 OpenSSL 没有使用调试符号编译,您可能不得不求助于蛮力方法。
这在一定程度上取决于您仍然在记忆中获得的数据类型以及握手期间协商的 TLS 功能。如果您可以向 Wireshark 提供例如 TLS-Channel 的主密钥,Wireshark 可以帮助您解密流量。