Linux后門RedXOR
一、簡介
RedXOR是一個針對Linux終端和服務器的新的復雜后門程序,在2021年2月24號首次在VT上被上傳以及發現。這些樣本在 VirusTotal 中的檢測率較低,且大多是從印度尼西亞和臺灣上傳的。RedXOR使用名為Adore-ng的開源LKM rootkit來隱藏其進程。
二、行為分析
首先調用fork函數,創建子進程并讓父進程直接退出,使父進程被init接管成為僵尸進程去執行以后的操作。通過判斷用戶是否為root用戶還是普通用戶,選擇用戶根目錄下創建一個“.po1kitd.thumb”隱藏目錄。

接著分析AddAuto函數,使用readlink讀取當前進程的源路徑可以獲取當前程序的絕對路徑。如果當前進程的二進制文件不叫”po1kitd-update-k“,則重命名為它。

在創建一個名為”po1kitd-update.sh“的shell腳本,內容為用sh來執行”.po1kitd-update-k“文件,設置為開機執行,并在之后執行它。

嘗試rootkit,通過insmod命令將“po1kitd.ko”文件中的內容加載到內核中。

通過在/proc目錄下創建po1kitd文件再刪除,判斷KLM rootkit是否已經生效。根據Google知道該RAT使用的rootkit是開源的adore-ng(“CheckLKM”邏輯幾乎與“adore-ng”rootkit中的adore_init函數相同)。而在adore-ng中,已經hook掉了具體proc文件系統的lookup回調函數為adore_lookup,將隱藏進程的操作放到該lookup中。創建文件的目的不是創建一個新文件,而是希望使執行流到達lookup調用。如果文件的uid和sid被設置成實現約定好的id,那么就說明該文件要隱藏。然后,該RAT將進程的suid與uid進行比較,如果不匹配或者uid為“10”,則rootkit生效了。

離開AddAuto函數,回到main函數,跟進hide_proc函數。
根據之前的分析,我們可以知道這里調用open函數是為了觸發adore_lookup調用,而adore-ng發現文件的前綴為”hide-“就調用hide_proc函數,根據pid隱藏進程,從而實現進程隱藏。

該RAT將C2地址、端口、驗證的用戶名和密碼配置存儲在可執行二進制文件中。配置值由“doXor”函數解密,解密邏輯是針對字節的簡單異或。其中ServerIP和Password處于被加密狀態,經過doXor為解密狀態,而ProxyServer、ProxyUser和ProxyPwd因為不需要用到則是相反。它們解密后的明文內容如下圖所示。


main_process函數是該RAT的主要邏輯。若ServerIP與LastIP不同,則調用write_hidden_ip函數將ServerIP加密后的內容存儲到“/var/tmp/.po1kitd-k3i86dfv”文件中,并復制到LastIP中。接下來便是連接C2服務器了。

該RAT使用tcp進行通信,但是通過自己定義使用類似http的形式交互。對于數據部分,該RAT使用待傳數據的長度對數據進行異或后再發送。

先獲取Content-Length等數字信息,之后根據這些值來接收對應長度的內容。這部分接受的數據以128個字節為處理單元,通過analysisData函數負責處理來獲取整型數字或長整型。之后接收到的數據需要通過doXor函數進行解密。

后接收到的數據內容中,前兩個字節為命令代碼。因為一共有19個命令,這里只選其中幾個介紹,其他的命令參考下文的列表。
調用Portmap函數,把RPC程序號轉化為Internet的端口號。

pty 模塊定義了處理偽終端概念的操作:啟動另一個進程,并能夠以編程方式對其控制終端進行寫入和讀取。創建管道,使用pty打開一個shell,通過管道來實現與shell交互。

向管道寫入要執行的命令,shell的讀端會收到命令并執行。

通過調用getFSYYSData函數獲取目錄信息,getFSYSData函數主要是通過directory函數進行信息獲取和整理的,directory函數細節如下圖所示。

該RAT通過調用uninstall函數擦除痕跡。

命令代碼功能如下:
1. 0 調用get_sys_info函數,獲取系統信息
2. 8 向文件寫入一個字節的內容,并當寫入長度達到要求時給文件“chmod 0777 ”
3. 9 結束進程,擦除痕跡
4. 1010 調用install_LKM函數,安裝LKM rootkit
5. 2049 調用getFSYSData函數,列出目錄及目錄內文件的信息
6. 2054 調用send_download函數,上傳文件
7. 2055 fopen,以“ab”或“wb”的形式打開文件
8. 2056 system,直接調用system執行傳過來的命令
9. 2058 remove,刪除文件
10. 2059 rename,重命名文件或目錄
11. 2060 rmdir,刪除目錄
12. 2061 功能與2059相同
13. 2062 mkdir,創建目錄
14. 2066 fwrite,將數據寫到某個文件
15. 3000 pty.spawn('/bin/sh'),打開一個shell
16. 3058 write,借由管道將要執行的命令寫入到shell中執行
17. 3999 szShellClosed = 1,關閉shell
18. 4001 調用Portmap函數,把RPC程序號轉化為Internet的端口號
19. 4002 kill portmap創建的進程,關閉portmap
三、IOC
樣本名稱:.po1kitd-update-k
來源:https://www.tutorialjinni.com/download-redxor-backdoor-sample-1/0a76c55fa88d4c134012a5136c09fb938b4be88a382f88bf2804043253b0559f.py
MD5:2bd6e2f8c1a97347b1e499e29a1d9b7c
SHA-1:33b25277b4bc49e565bdabf2232b7c1412ce2796
SHA-256:0a76c55fa88d4c134012a5136c09fb938b4be88a382f88bf2804043253b0559f
C2地址:158.247.208.230
四、總結
如果發現在用戶根目錄下存在".po1kitd.thumb"的目錄,則該主機可能已經被控制了。受害者可以通過殺死來自“.po1kitd-update-k”二進制文件的進程,刪除".po1kitd.thumb"和"/var/tmp/.po1kitd-k3i86dfv"目錄,以及檢查“/etc/init.d/”和"/usr/syno/etc/rc.d/“目錄中是否存在名為“po1kitd-update.sh”的文件,若有則刪除。還要將已經加載的Adore-ng rootkit從內核中卸載下來。最后還要查看系統日志,查看“.po1kitd-update-k”程序是否有在其他地方創建文件或目錄,及時清除,確保擦除所有痕跡。