• <menu id="0egea"><tt id="0egea"></tt></menu>
  • <nav id="0egea"></nav>
  • <nav id="0egea"></nav>
  • <nav id="0egea"></nav>
  • 公司新聞

    銘說|針對新型惡意軟件Redis P2Pinfect的發現與研究分析

    來源:聚銘網絡    發布時間:2023-08-16    瀏覽次數:
     

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

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

    P2Pinfect功能特性總結:

    • · 多次嘗試利用Redis進行初始訪問;
    • · 利用Rust進行有效負載開發,增加分析難度;
    • · 使用多種規避技術來阻礙動態分析;
    • · 對Redis和SSH服務器進行互聯網掃描;
    • · 以類似蠕蟲的方式進行自我復制。

    初始訪問

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

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


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

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

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

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

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


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

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

    主要有效載荷

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

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

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

    相關內容:

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

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

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

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

    • · 使用netstat和awk收集當前到目標主機上運行的Redis服務器的所有IP的列表;

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

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

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

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

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

    釋放有效載荷

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


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

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

    主二進制文件還將監控文件操作的其他進程。由于一些不明確的標準(如打開的文件數量和IOPS),它會試圖殺死超過閾值的進程。據推測,這是為了嘗試檢測事件響應或分析工具,列舉磁盤或創建內存轉儲。


    圖4  顯示向其他進程發送SIGKILL的示例的內核跟蹤日志

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

    僵尸網絡

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

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

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

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

    • · Linux–Linux系統的主要ELF有效負載;

    • · 用于Windows系統的windows主PE負載;

    • · miner–ELF二進制linux系統;

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

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

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


    圖5  nhazip和/ip的HTTP請求

    擴散

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

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

    一旦獲得對主機的訪問權限,它就會以與最初受感染的服務器相同的方式感染該主機,即刪除自身的副本(從內置HTTP服務器獲?。┎⑹褂霉濣c列表作為參數執行它。

    結論

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

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

     
     

    上一篇:鐘山職業技術學院攜手聚銘網絡共建安全運維體系

    下一篇:標準化更新-SAS_2023-08