日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
取證分析之OpenSSHSession信息解密

不久前,我們遇到了一個取證案例,一個Linux服務(wù)器被攻破,一個修改過的OpenSSH二進(jìn)制文件被加載到一個web服務(wù)器的內(nèi)存中。修改后的OpenSSH二進(jìn)制文件被攻擊者用作系統(tǒng)的后門。在系統(tǒng)遭到破壞時,客戶擁有pcap和系統(tǒng)的虛擬機(jī)監(jiān)控程序截圖。根據(jù)這個發(fā)現(xiàn),我們開始懷疑是否有可能通過從內(nèi)存截圖中恢復(fù)密鑰材料來解密SSH session并獲得有關(guān)它的知識。

在本文中,我將介紹我對OpenSSH所做的研究,并發(fā)布一些從內(nèi)存中轉(zhuǎn)儲OpenSSHsession密鑰的工具,并結(jié)合使用pcap解密和解析session,另外我還向2020 Volatility framework plugin contest提交了我的研究成果。

SSH協(xié)議

首先,我會閱讀OpenSSH及其工作原理。幸運(yùn)的是,OpenSSH是開源的,因此我們可以輕松下載和閱讀實現(xiàn)細(xì)節(jié)。RFC的內(nèi)容,雖然讀起來有點(diǎn)枯燥,但也包含了豐富的信息。從較高的層次來看,SSH協(xié)議如下所示:

(1) SSH協(xié)議+軟件版本交換;

(2) 算法協(xié)商(KEX INIT):

  • 密鑰交換算法;
  • 加密算法;
  • MAC算法;
  • 壓縮算法;

(3) 密鑰交換;

(4) 用戶認(rèn)證;

(5) 客戶請求“session”類型的頻道;

(6) 客戶端請求一個偽終端;

(7) 客戶端與session進(jìn)行交互;

一開始,客戶端就會連接到服務(wù)器并發(fā)送協(xié)議版本和軟件版本:

SSH-2.0-OpenSSH_8.3,服務(wù)器以其協(xié)議和軟件版本進(jìn)行響應(yīng)。交換初始協(xié)議和軟件版本后,所有流量都封裝在SSH框架中。SSH框架主要存在于框架的長度、填充長度、有效載荷數(shù)據(jù)、填充內(nèi)容和MAC中。 SSH框架示例如下:

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

在協(xié)商加密算法并生成session密鑰之前,SSH框架將不被加密,并且即使加密了該框架,根據(jù)算法的不同,部分框架可能也不會被加密。例如,aes256-gcm不會對框架中的4個字節(jié)長度進(jìn)行加密,但是chacha20-poly1305會進(jìn)行加密。

接下來,客戶端將向服務(wù)器發(fā)送KEX_INIT消息,以開始協(xié)商session的參數(shù),例如密鑰交換和加密算法。根據(jù)這些算法的順序,客戶端和服務(wù)器將選擇雙方都支持的第一個首選算法。在KEX_INIT消息之后,交換幾個與密鑰交換相關(guān)的消息,然后雙方互相發(fā)送NEWKEYS消息。這個消息會告訴另一方一切都準(zhǔn)備好開始加密session,并且流程中的下一個框架將被加密。在雙方都獲得新的加密密鑰生效后,客戶端將請求用戶身份驗證,并根據(jù)服務(wù)器上配置的身份驗證機(jī)制執(zhí)行基于密碼/密鑰/等的身份驗證。通過session身份驗證后,客戶端將打開一個通道,并根據(jù)請求的操作(ssh/ sftp/ scp等)通過該通道請求服務(wù)。

恢復(fù)session密鑰

恢復(fù)session密鑰的第一步是分析OpenSSH源代碼并調(diào)試現(xiàn)有的OpenSSH二進(jìn)制文件,我嘗試自己編譯OpenSSH,將生成的session密鑰記錄在某個地方,并附加一個調(diào)試器,然后在程序的內(nèi)存中搜索這些密鑰。成功以后,session密鑰保存在堆中的內(nèi)存中。對源代碼的更多深入研究使我了解了負(fù)責(zé)發(fā)送和接收NEWKEYS框架的函數(shù)。我發(fā)現(xiàn)有一個存儲“session_state”結(jié)構(gòu)的“ssh”結(jié)構(gòu),該結(jié)構(gòu)又包含與當(dāng)前SSHsession有關(guān)的所有信息,包括一個newkeys結(jié)構(gòu),其中包含與加密、mac和壓縮算法有關(guān)的信息。經(jīng)過深入研究,我們最終找到了包含密碼名稱、密鑰、IV和塊長度的“shenc”結(jié)構(gòu)。OpenSSH的結(jié)構(gòu)概述如下所示:

SSHENC的結(jié)構(gòu)和關(guān)系

以及shenc結(jié)構(gòu)的定義:

SSHENC結(jié)構(gòu)

很難在內(nèi)存中找到密鑰本身(因為它只是一個隨機(jī)字節(jié)的字符串),但是shenc和其他結(jié)構(gòu)更加獨(dú)特,具有一些我們可以驗證的屬性。然后,我們可以抓取程序的整個內(nèi)存地址空間,并驗證針對這些約束的每個偏移量。我們可以檢查以下屬性:

  • 名稱,密碼,密鑰和iv成員都是有效的指針;
  • name成員指向一個有效的密碼名,該密碼名稱等于cipher-> name;
  • key_len在有效范圍內(nèi);
  • iv_len在有效范圍內(nèi);
  • block_size在有效范圍內(nèi);

如果我們針對所有這些約束進(jìn)行驗證,那么應(yīng)該能夠可靠地找到shenc結(jié)構(gòu)。為此,我開始構(gòu)建一個POC Python腳本,該腳本可以在一個實時主機(jī)上運(yùn)行,該主機(jī)連接到進(jìn)程并為該結(jié)構(gòu)勾勒出內(nèi)存??梢栽谶@里找到此腳本的源代碼,它實際上工作得很好,并為找到的每個密鑰輸出一個json blob。因此,我演示了可以使用Python和ptrace從活動主機(jī)中恢復(fù)session密鑰,但是我們?nèi)绾螐膬?nèi)存截圖中恢復(fù)session密鑰呢?這就是Volatility發(fā)揮作用的地方。Volatility是一個用Python編寫的內(nèi)存取證框架,可以編寫自定義插件。經(jīng)過一些努力,我能夠編寫Volatility 2插件,并且能夠分析內(nèi)存截圖并轉(zhuǎn)儲session密鑰!對于Volatility 3 plugin contest ,我還將該插件移植到了Volatility 3,并提交了該插件并進(jìn)行了研究。

Volatility 2 SSH Session密鑰轉(zhuǎn)儲器的輸出結(jié)果

解密和解析流量

用于加密和解密通信的session密鑰的恢復(fù)是成功的,接下來是解密通信流量!我開始用pynids(TCP解析和重組庫)解析一些pcap。我使用內(nèi)部開發(fā)的dissect.cstruct庫解析數(shù)據(jù)結(jié)構(gòu),并開發(fā)了解析框架來解析ssh等協(xié)議。解析框架基本上以正確的順序?qū)?shù)據(jù)包送入?yún)f(xié)議解析器,因此,如果客戶端發(fā)送2個數(shù)據(jù)包,而服務(wù)器響應(yīng)3個數(shù)據(jù)包,則這些數(shù)據(jù)包也將以相同的順序提供給解析器。這對于保持整體協(xié)議狀態(tài)很重要,解析器基本上使用SSH框架,直到遇到NEWKEYS框架為止,這表明下一框架已加密?,F(xiàn)在,解析器從該源中窺視流中的下一框架,并迭代提供的session密鑰,以嘗試解密該框架。如果成功,解析器將以該狀態(tài)安裝session密鑰以解密session中的其余框架,解析器幾乎可以處理OpenSSH支持的所有加密算法,具體過程可以查看以下動圖:

SSH協(xié)議解析

最后是運(yùn)行中的解析器,你可以在其中看到解密和解析SSHsession的過程,還暴露了用戶用于身份驗證的密碼:

解密和解析的SSHsession示例

總結(jié)

本文我研究了SSH協(xié)議,以及如何將session密鑰存儲并保存在OpenSSH的內(nèi)存中,并找到了一種從內(nèi)存中提取它們并在網(wǎng)絡(luò)解析器中使用它們來解密SSH會話并將其解析為可讀輸出的方法。本研究中使用的腳本可以在以下鏈接中找到:

  • 將Python POC轉(zhuǎn)儲為SSHsession密鑰;
  • Volatility 2插件;
  • Volatility 3插件;
  • SSH協(xié)議解析器;
  • 更好的選擇將是在Wireshark中實現(xiàn)這個解密器和解析器。

有趣的是,在研究期間,我還在OpenSSH源代碼的ssh_set_newkeys函數(shù)中遇到了這些注釋行。其實這很諷刺,如果不對這些行進(jìn)行注釋并在OpenSSH二進(jìn)制文件中進(jìn)行編譯,那么這項研究就會困難得多。

OpenSSH源代碼片段

本文翻譯自:https://research.nccgroup.com/2020/11/11/decrypting-openssh-sessions-for-fun-and-profit/

【責(zé)任編輯:趙寧寧 TEL:(010)68476606】


本文題目:取證分析之OpenSSHSession信息解密
網(wǎng)站地址:http://www.dlmjj.cn/article/dpsdpde.html