公司新聞

銘說|針對新型惡意軟件Redis P2Pinfect的發(fā)現(xiàn)與研究分析

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2023-08-16    瀏覽次數(shù):
 

近期,我們的研究人員遇到了一種針對Redis數(shù)據(jù)存儲部署的新型惡意軟件,該惡意軟件被命名為“P2Pinfect”,它由Rust編寫,主要被用來充當(dāng)僵尸網(wǎng)絡(luò)代理。該惡意軟件樣本包括一個可移植嵌入式文件(PE)以及一個附加的ELF可執(zhí)行文件,這表明其具有跨平臺兼容性。

據(jù)進一步研究發(fā)現(xiàn),此變體是通過利用CVE-2022-0543進行傳播,而CVE-2022-0543是Redis某些版本中存在的LUA沙箱逃逸漏洞。接下來銘說將為您做進一步的詳細闡述。

P2Pinfect功能特性總結(jié):

  • · 多次嘗試利用Redis進行初始訪問;
  • · 利用Rust進行有效負載開發(fā),增加分析難度;
  • · 使用多種規(guī)避技術(shù)來阻礙動態(tài)分析;
  • · 對Redis和SSH服務(wù)器進行互聯(lián)網(wǎng)掃描;
  • · 以類似蠕蟲的方式進行自我復(fù)制。

初始訪問

研究人員在對蜜罐遙測進行分類時首次遇到了P2Pinfect。該惡意軟件通過利用復(fù)制功能來破壞Redis數(shù)據(jù)存儲的暴露實例,復(fù)制功能允許Redis實例以分布式方式運行。而這會允許追隨者節(jié)點充當(dāng)領(lǐng)導(dǎo)節(jié)點的精確副本,為數(shù)據(jù)存儲和故障轉(zhuǎn)移提供高可用性。

在云環(huán)境中,針對Redis的常見攻擊模式是使用惡意實例來啟用復(fù)制,通過連接到一個公開的Redis實例并發(fā)出SLAVEOF命令來實現(xiàn)。當(dāng)復(fù)制完成后,攻擊者就可以加載一個惡意模塊(Linux共享對象文件),該模塊擴展了Redis本身的功能。這種初始訪問載體于2018年首次展示,此后多次被運用于云惡意軟件活動中,其中包含H2miner和最近的Headcrab。


圖1  P2Pinfect用于初始訪問的Redis命令(事件排序是非線性的)

P2Pinfect使用了多種已知的Redis漏洞進行初始訪問,但最終成功破壞Cado蜜罐基礎(chǔ)設(shè)施的正是上述方法。從截圖中可以看出,隨著惡意的SLAVEOF命令被下達,針對惡意領(lǐng)導(dǎo)者的Cado Redis被部署復(fù)制。

在進行復(fù)制后,MODULE LOAD命令開始加載惡意共享對象文件exp.so。這個共享對象擴展了Redis的功能,為攻擊者提供了反向shell訪問,并添加一個新命令system.exec,將允許在主機上運行任意shell命令。

然后system.exec通過/dev/tcp反向shell向C2服務(wù)器發(fā)出命令,最終檢索并執(zhí)行主要的Linux負載。

P2Pinfect還嘗試通過cron我們之前描述的未經(jīng)身份驗證的RCE機制來危害Redis主機。


圖2  用于注冊惡意cronjob的示例Redis命令

這種濫用config set dir命令的方法也可用于攻擊者控制的SSH密鑰,可確保利用后門對主機進行訪問。P2Pinfect也嘗試此漏洞利用,在其他Redis漏洞利用嘗試失敗時提供冗余。

主要有效載荷

檢索到的主要有效負載是使用Rust的外部函數(shù)接口(FFI)庫,是一個用C語言和Rust語言組合編寫的ELF。有效負載具有一個典型的libc_start_main入口和一個C語言函數(shù),該函數(shù)在其他設(shè)置操作中為進程進行系統(tǒng)調(diào)用注冊了許多sigaction。然后它分成一個典型的Rust lang_start函數(shù),用來執(zhí)行有效負載的Rust組件。該組件還使用FFI與C函數(shù)進行互操作。除此之外,二進制文件還使用了UPX進行打包。

執(zhí)行后,該二進制文件將更新主機的SSH配置。它使用捆綁的配置文件將sshd_config文件更新到接近默認狀態(tài)。而這會刪除任何可能妨礙作者通過SSH訪問服務(wù)器的配置,并啟用密碼驗證。然后重啟SSH服務(wù),并將以下密鑰放入當(dāng)前用戶的authorized_keys文件中:

然后它使用bash運行以下命令:

相關(guān)內(nèi)容:

  • · 將wget和curl二進制文件分別重命名為wgbtx和clbtx。這可能是為了阻止事件響應(yīng)者使用它們來下拉取證工具,并阻止EDR解決方案檢測命令的使用情況。這是針對云威脅參與者的常見TTP ;

  • · 檢查iptables命令,如果找沒有找到則進行安裝。它有幾個特定于單個包管理器的命令,所以不管使用的是什么Linux發(fā)行版,都可以安裝它;

  • · 檢查awk命令,如果沒有找到則進行安裝。和前面的命令一樣,它將嘗試使用幾個包管理器;

  • · 檢查 netstat 命令,如果沒有找到則進行安裝。和前面的命令一樣,它將嘗試使用幾個包管理器;

  • · 使用netstat和awk收集當(dāng)前到目標(biāo)主機上運行的Redis服務(wù)器的所有IP的列表;

  • · 添加一個iptable的規(guī)則,允許從這些IP到redis服務(wù)器的上獲取流量;

  • · 添加一個iptables規(guī)則,來拒絕所有其他流量到redis服務(wù)器;

  • · 添加一個iptables允許所有流量流向隨機選擇的端口的規(guī)則,主要有效負載在該端口上偵聽僵尸網(wǎng)絡(luò)通信。

由于Redis服務(wù)器是已知的易受攻擊的,惡意軟件使用iptables表明這是為了防止任何其他威脅行為者破壞Redis服務(wù)器,同時仍然允許Redis服務(wù)器的合法運營商仍然訪問服務(wù)器,以免信息泄露。

為了在重新啟動后建立持久性,二進制文件會寫入/path/to/binary到.bash_logout.無論是通過TTY還是通過SSH退出任何bash會話,都會導(dǎo)致二進制文件重新顯示。通常,這可以通過使用.bashrc登錄時運行命令,但使用.bash_logout是在注銷之后生成的,這可以確保任何執(zhí)行系統(tǒng)檢查的分析人員都沒有機會發(fā)現(xiàn)該進程。

釋放有效載荷

一個名為bash的二進制文件被放入 /tmp ,并使用execv() 運行,參數(shù)為-bash。這樣做會導(dǎo)致ps aux在運行后,文件自動刪除。bash二進制文件掃描 /proc ,并打開stat中的每個進程,并監(jiān)視/proc變更目錄,如果二進制文件被終止,它將重新啟動主負載,如下所示:


圖3  被丟棄的bash二進制文件重新顯示被終止的負載的審計日志

bash還能夠在主二進制文件上執(zhí)行升級。它讀取主二進制文件,并驗證它與從僵尸網(wǎng)絡(luò)中提取的最新簽名文件是否匹配。如果不匹配(如:篡改或有新版本可用),則舊實例被終止,新版本以隨機名稱下載到相同目錄然后執(zhí)行。

主二進制文件還將監(jiān)控文件操作的其他進程。由于一些不明確的標(biāo)準(zhǔn)(如打開的文件數(shù)量和IOPS),它會試圖殺死超過閾值的進程。據(jù)推測,這是為了嘗試檢測事件響應(yīng)或分析工具,列舉磁盤或創(chuàng)建內(nèi)存轉(zhuǎn)儲。


圖4  顯示向其他進程發(fā)送SIGKILL的示例的內(nèi)核跟蹤日志

除了bash之外,一個名為miner的二進制文件的副本以一個隨機的名稱放在當(dāng)前目錄中被執(zhí)行然后刪除。盡管名字如此,但這個二進制文件實際上并不是一個加密礦工。唯一觀察到的行為是它重復(fù)進行休眠調(diào)用。然而,由于僵尸網(wǎng)絡(luò)操作員可以隨時更新二進制文件,因此該有效負載可能只是處于休眠狀態(tài),等待僵尸網(wǎng)絡(luò)增長到特定規(guī)模時才能被激活。

僵尸網(wǎng)絡(luò)

P2Pinfect惡意軟件針對僵尸網(wǎng)絡(luò)的利用點。每臺受感染的服務(wù)器都被視為一個節(jié)點,然后該節(jié)點會連接到其他受感染的服務(wù)器。假設(shè)命令是通過在網(wǎng)絡(luò)上傳播簽名的消息來發(fā)布的,這會使得整個僵尸網(wǎng)絡(luò)可以在不使用集中式C2服務(wù)器的情況下互相牽連。

啟動后,二進制文件開始在0.0.0.0上監(jiān)聽,端口隨機選擇,通常在60100和60150之間。該端口用于與其他對等端通信,在一個簡單的HTTP服務(wù)器上提供大量有效負載,并使用HTTPS進行實際的僵尸網(wǎng)絡(luò)協(xié)調(diào)。HTTPS服務(wù)器主要使用硬編碼證書(該證書在所有僵尸網(wǎng)絡(luò)成員中都是相同的),很可能該證書也被用作客戶端證書以向服務(wù)器進行身份驗證(相互TLS)。

鑒于證書的頒發(fā)日期,該活動很可能是在6月29日或之后開始的。

二進制文件以逗號分隔的IP和端口對列表啟動,這些IP和端口對經(jīng)過加密,然后以base64編碼作為其第一個參數(shù)。它將訪問這些服務(wù)器之一,以獲取以下所有二進制文件的副本:

  • · Linux–Linux系統(tǒng)的主要ELF有效負載;

  • · 用于Windows系統(tǒng)的windows主PE負載;

  • · miner–ELF二進制linux系統(tǒng);

  • · win miner–用于windows系統(tǒng)的PE二進制文件 -_sign文件,其中包含二進制的加密簽名;

然后使用HTTP服務(wù)器提供這些二進制文件(這樣其他新的對等點可以獲得一個副本)。

然后,二進制文件將自己注冊給其他僵尸網(wǎng)絡(luò)對等體。它通過在/ip上發(fā)送HTTP請求來實現(xiàn)這一點,該請求返回正在運行的惡意軟件的本地主機IP。惡意軟件試圖從ipv4.icanhazip.com獲取其IP,但是由于這是惡意軟件的常見TTP,該請求可能會被阻止或欺騙,因此它可能會使用其他對等體進行檢查。而這也可以用于驗證對等體是否在線,接著它會與每個對等體建立TLS連接。


圖5  nhazip和/ip的HTTP請求

擴散

此時,二進制文件將嘗試感染更多的主機。二進制文件將讀取bash_history、ssh config和已知的hosts文件,以收集用戶、IPs和ssh密鑰的列表。然后,使用這些信息來嘗試感染新的實例。該二進制文件還將選擇一個隨機的/16網(wǎng)絡(luò)前綴來掃描暴露的SSH和Redis服務(wù)器,并使用密碼列表來嘗試暴力破解它遇到的相關(guān)服務(wù)器。

對于Redis服務(wù)器,它將嘗試利用LUA沙箱逃逸漏洞或使用和SLAVEOF命令MODULELOAD加載惡意模塊。

一旦獲得對主機的訪問權(quán)限,它就會以與最初受感染的服務(wù)器相同的方式感染該主機,即刪除自身的副本(從內(nèi)置HTTP服務(wù)器獲?。┎⑹褂霉?jié)點列表作為參數(shù)執(zhí)行它。

結(jié)論

P2Pinfect設(shè)計精良,采用復(fù)雜的復(fù)制和C2技術(shù)。選擇使用Rust還可以更輕松地跨平臺移植代碼(Windows和Linux二進制文件共享許多相同的代碼),同時也使代碼的靜態(tài)分析變得更加困難。這是由于Rust本身的復(fù)雜性,以至于缺乏可用于分析的工具。

研究人員遇到的樣本與Unit42分析的Windows變體具有類似的功能。盡管如此,我們的研究人員沒有發(fā)現(xiàn)任何證據(jù)表明該惡意軟件專門針對云環(huán)境。根據(jù)分析期間收集的信息,無論它們是云托管還是本地部署,P2Pinfect可能會在大多數(shù)Linux主機上運行。

 
 

上一篇:鐘山職業(yè)技術(shù)學(xué)院攜手聚銘網(wǎng)絡(luò)共建安全運維體系

下一篇:標(biāo)準(zhǔn)化更新-SAS_2023-08