USDT官网

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

不久前,我们遇到了一个取证案例,一个Linux服务器被攻破,一个修悔改的OpenSSH二进制文件被加载到一个web服务器的内存中。修改后的OpenSSH二进制文件被攻击者用作系统的后门。在系统遭到损坏时,客户拥有pcap和系统的虚拟机监控程序截图。凭据这个发现,我们更先嫌疑是否有可能通过从内存截图中恢复密钥质料来解密SSH session并获得有关它的知识。在本文中,我将先容我对OpenSSH所做的研究,并公布一些从内存中转储OpenSSHsession密钥的工具,并连系使用pcap解密和剖析session,另外我还向2020 Volatility framework plugin contest提交了我的研究成果。

SSH协议

首先,我会阅读OpenSSH及其事情原理。幸运的是,OpenSSH是开源的,因此我们可以轻松下载和阅读实现细节。RFC的内容,虽然读起来有点死板,但也包罗了厚实的信息。从较高的条理来看,SSH协议如下所示:

1.SSH协议+软件版本交流;

2.算法协商(KEX INIT):

2.1密钥交流算法;

2.2加密算法;

2.3MAC算法;

2.4压缩算法;

3.密钥交流;

4.用户认证;

5.客户请求“session”类型的频道

6.客户端请求一个伪终端;

7.客户端与session举行交互;

一更先,客户端就会连接到服务器并发送协议版本和软件版本:

SSH-2.0-OpenSSH_8.3,服务器以其协媾和软件版本举行响应。交流初始协媾和软件版本后,所有流量都封装在SSH框架中。SSH框架主要存在于框架的长度、填充长度、有用载荷数据、填充内容和MAC中。 SSH框架示例如下:

使用dissect.cstruct剖析的SSH框架示例

在协商加密算法并天生session密钥之前,SSH框架将不被加密,而且纵然加密了该框架,凭据算法的差别,部门框架可能也不会被加密。例如,aes256-gcm不会对框架中的4个字节长度举行加密,然则chacha20-poly1305会举行加密。

接下来,客户端将向服务器发送KEX_INIT新闻,以更先协商session的参数,例如密钥交流和加密算法。凭据这些算法的顺序,客户端和服务器将选择双方都支持的第一个首选算法。在KEX_INIT新闻之后,交流几个与密钥交流相关的新闻,然后双方相互发送NEWKEYS新闻。这个新闻会告诉另一方一切都准备好更先加密session,而且流程中的下一个框架将被加密。在双方都获得新的加密密钥生效后,客户端将请求用户身份验证,并凭据服务器上设置的身份验证机制执行基于密码/密钥/等的身份验证。通过session身份验证后,客户端将打开一个通道,并凭据请求的操作(ssh/ sftp/ scp等)通过该通道请求服务。

恢复session密钥

恢复session密钥的第一步是剖析OpenSSH源代码并调试现有的OpenSSH二进制文件,我实验自己编译OpenSSH,将天生的session密钥记录在某个地方,并附加一个调试器,然后在程序的内存中搜索这些密钥。乐成以后,session密钥保存在堆中的内存中。对源代码的更多深入研究使我了解了卖力发送和吸收NEWKEYS框架的函数。我发现有一个存储“session_state”结构的“ssh”结构,该结构又包罗与当前SSHsession有关的所有信息,包罗一个newkeys结构,其中包罗与加密、mac和压缩算法有关的信息。经由深入研究,我们最终找到了包罗密码名称、密钥、IV和块长度的“shenc”结构。OpenSSH的结构概述如下所示:

SSHENC的结构和关系

以及shenc结构的界说:

,

usdt支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

SSHENC结构

很难在内存中找到密钥自己(由于它只是一个随机字节的字符串),然则shenc和其他结构加倍怪异,具有一些我们可以验证的属性。然后,我们可以抓取程序的整个内存地址空间,并验证针对这些约束的每个偏移量。我们可以检查以下属性:

1.名称,密码,密钥和iv成员都是有用的指针;

2. name成员指向一个有用的密码名,该密码名称即是cipher-> name;

3.key_len在有用范围内;

4.iv_len在有用范围内;

5.block_size在有用范围内;

若是我们针对所有这些约束举行验证,那么应该能够可靠地找到shenc结构。为此,我更先构建一个POC Python剧本,该剧本可以在一个实时主机上运行,该主机连接到历程并为该结构勾勒出内存。可以在这里找到此剧本的源代码,它实际上事情得很好,并为找到的每个密钥输出一个json blob。因此,我演示了可以使用Python和ptrace从流动主机中恢复session密钥,然则我们若何从内存截图中恢复session密钥呢?这就是Volatility发挥作用的地方。Volatility是一个用Python编写的内存取证框架,可以编写自界说插件。经由一些起劲,我能够编写Volatility 2插件,而且能够剖析内存截图并转储session密钥!对于Volatility 3 plugin contest ,我还将该插件移植到了Volatility 3,并提交了该插件并举行了研究。

Volatility 2 SSH Session密钥转储器的输出效果

解密和剖析流量

用于加密和解密通讯的session密钥的恢复是乐成的,接下来是解密通讯流量!我更先用pynids(TCP剖析和重组库)剖析一些pcap。我使用内部开发的dissect.cstruct库剖析数据结构,并开发了剖析框架来剖析ssh等协议。剖析框架基本上以准确的顺序将数据包送入协议剖析器,因此,若是客户端发送2个数据包,而服务器响应3个数据包,则这些数据包也将以相同的顺序提供给剖析器。这对于保持整体协议状态很主要,剖析器基本上使用SSH框架,直到遇到NEWKEYS框架为止,这表明下一框架已加密。现在,剖析器从该源中窥视流中的下一框架,并迭代提供的session密钥,以实验解密该框架。若是乐成,剖析器将以该状态安装session密钥以解密session中的其余框架,剖析器险些可以处置OpenSSH支持的所有加密算法,详细历程可以查看以下动图:

SSH协议剖析

最后是运行中的剖析器,你可以在其中看到解密和剖析SSHsession的历程,还暴露了用户用于身份验证的密码:

解密和剖析的SSHsession示例

总结

本文我研究了SSH协议,以及若何将session密钥存储并保存在OpenSSH的内存中,并找到了一种从内存中提取它们并在 *** 剖析器中使用它们来解密SSH会话并将其剖析为可读输出的方式。本研究中使用的剧本可以在以下链接中找到:

将Python POC转储为SSHsession密钥;

Volatility 2插件;

Volatility 3插件;

SSH协议剖析器;

更好的选择将是在Wireshark中实现这个解密器和剖析器。

有趣的是,在研究时代,我还在OpenSSH源代码的ssh_set_newkeys函数中遇到了这些注释行。实在这很取笑,若是纰谬这些行举行注释并在OpenSSH二进制文件中举行编译,那么这项研究就会难题得多。

OpenSSH源代码片断

本文翻译自:https://research.nccgroup.com/2020/11/11/decrypting-openssh-sessions-for-fun-and-profit/: 欧博开户声明:该文看法仅代表作者自己,与本平台无关。转载请注明:usdt充值接口(www.caibao.it):取证剖析之 OpenSSH Session 信息解密
发布评论

分享到:

usdt充值(www.caibao.it):打鼾者的呼噜声到底有多响 打呼噜可以治好吗
1 条回复
  1. 环球UG官网
    环球UG官网
    (2021-02-09 00:04:54) 1#

    文很美丽

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。