持久性機制XorDdos使用各種持久性機制,在系統啟動時會自動支持不同的Linux發行版,如下所示。
初始化腳本惡意軟件會在/etc/init.d位置放置一個初始化腳本。初始化腳本是用於在系統啟動時運行任何程序的啟動腳本。它們遵循Linux標準基礎(LSB)樣式的標頭部分,包括默認運行級別、描述和依賴項。
放置在/etc/init.d/HFLgGwYfSC.elf位置的init腳本的內容
Cron腳本惡意軟件在/etc/cron.hour/gcc.sh的位置創建一個cron腳本。該cron腳本傳遞的參數如下:
gcc.sh腳本內容
然後它會創建一個/etc/crontab文件以每三分鐘運行一次/etc/cron.hourly/gcc.sh:
從/etc/crontab文件中刪除/etc/cron.hourly/gcc.sh條目並添加新條目的系統命令
文件“/etc/crontab.conf”的內容
SystemV運行級別運行級別是init和系統的一種模式,用於指定UnixsystemV-Style操作系統正在運行哪些系統服務。運行級別包含一個值,通常編號為0到6,每個值指定不同的系統配置,並允許訪問不同的進程組合。一些系統管理員根據他們的需要設置系統的默認運行級別,或者使用運行級別來識別哪些子系統正在工作,例如網絡是否正常運行。 /etc/rc run_level 目錄包含符號鏈接(符號鏈接),符號鏈接是指向原始文件的軟鏈接。這些符號鏈接指向應在指定的運行級別運行的腳本。
這個惡意軟件為放置在/etc/init.d/base_file_name 位置的init 腳本創建一個符號鏈接,這些目錄與/etc/rc run_level .d/S90 和/etc/rc.d/rc run_level .d/S9 base_file_name 0 base_file_name 的runlevels 1 到5 相關聯。
使用/etc/init.d/base_file_name 安裝rc.d 目錄的符號鏈接腳本
自動啟動服務該惡意軟件運行一個命令來安裝啟動服務,這些服務會在啟動時自動運行XorDdos。惡意軟件的LinuxExec_Argv2子例程使用提供的參數運行系統API。
命令chkconfig–add service_name 和update-rc.d 然後添加一個在引導時啟動守護進程的服務。
chkconfig和update-rc.d命令安裝啟動服務
基於參數的代碼流程XorDdos具有與提供給程序的參數數量相對應的特定代碼路徑。這種靈活性使它的操作更加健壯和隱秘。惡意軟件首先在沒有任何參數的情況下運行,然後運行另一個帶有不同參數的實例,比如pid和假命令,以執行清理、欺騙和持久化等功能。
在處理基於參數的控件之前,它調用readlinkAPI,第一個參數為/proc/self/exe以獲取其完整的進程路徑。完整路徑稍後用於創建自動啟動服務條目並讀取文件內容。
以下是不同參數的功能:
1.不帶任何參數的標準代碼路徑此代碼路徑描述了惡意軟件的標準工作流程,這也是XorDdos作為在系統啟動位置創建的條目的一部分運行的典型工作流程。
惡意軟件首先檢查它是否從/usr/bin/、/bin/或/tmp/位置運行。如果它沒有從這些位置運行,那麼它會在這些位置以及/lib/和/var/run/上使用10個字符的字符串名稱創建並自我複制。
它還在/lib/libudev.so位置創建了自己的一個副本。為了避免基於哈希值的惡意文件查找,它執行以下步驟,修改文件哈希值,使每個文件都是唯一的:
只有寫入時才會打開文件;
調用lseek(fd,0,SEEK_END)指向文件中的最後一個位置;
創建一個10個字符的隨機字符串;
在文件末尾寫入帶有額外空字節的字符串;
修改文件後,它運行二進製文件,執行雙fork(),並從磁盤中刪除其文件。
惡意軟件文件的末尾包含兩個隨機字符串,“wieegnexuk”和“yybrdajydg”,表明原始惡意軟件二進製文件被修改了兩次
2.清理代碼路徑在此代碼路徑中,惡意軟件使用作為PID提供的另一個參數運行,例如:
/usr/bin/jwvwvxoupv4849使用上面的示例,惡意軟件與IPC密鑰“0xDA718716”共享64字節大小的內存段,以檢查作為參數提供的另一個惡意軟件進程。如果沒有找到,它會運行自己的二進製文件而不帶任何參數,並調用fork()API兩次以確保第三代子進程沒有父進程。這導致第三代進程被init進程採用,從而將其與進程樹斷開連接並充當反取證技術。
另外,它在提供的$pid上執行以下任務:
獲取與提供的$pid對應的進程文件名;
刪除提供的$pid文件;
刪除已安裝的init服務:
刪除/etc/init.d/file_name
對於運行級別1-5,取消鏈接並刪除/etc/rc runlevel .d/S90 file_name
執行chkconfig-del file_name 命令;
執行update-rc.d file_name 刪除
結束作為參數提供的進程。
3.進程名欺騙代碼路徑這個惡意軟件生成了帶有兩個附加參數的新的被刪除的二進製文件:一個假的命令行及其PID,例如:
虛假命令可以包括:
在此代碼路徑中,惡意軟件使用進程名稱欺騙通過在運行時修改其虛假命令行來隱藏進程樹。然後,它通過使用命令“1”調用HidePidPort來隱藏其進程,並讀取與當前進程相關的磁盤上文件的內容。
然後,它進入一個5秒的循環,執行以下檢查:
3.1通過調用/proc/$pid/exe上的readlinkAPI,獲取特定於作為第三個參數的一部分提供的$pid的文件名。
3.2如果readlink調用失敗,這可能表明磁盤上的文件不存在。在這種情況下,會發生以下5種情況:
3.2.1打算刪除$pid的所有服務相關條目但失敗。這似乎是由於一個代碼缺陷造成的,當緩衝區應該從成功的readlinkAPI調用中填充時,該漏洞允許將歸零緩衝區作為服務名稱傳遞。
3.2.2創建類似於標準代碼路徑方案的目錄。
3.2.3調用文件/lib/libudev.so的statAPI。如果statAPI返回一個非零值,那麼它會嘗試將先前獲取的當前進程的圖像文件的內容複製到以下位置,並使用隨機名稱:
/usr/bin/
/bin/
/tmp/3.2.4如果對/lib/libdev.so的statAPI調用成功,則將/lib/libudev.so文件複製到上面列出的相同的三個目錄中。
3.2.5更改寫入或複製文件的哈希值,然後在不傳遞任何參數的情況下運行它。
3.3如果readlink調用成功並返回複製的字節數,則休眠一秒鐘,然後在五秒鐘內循環剩餘時間。
3.4取消隱藏當前進程和作為第三個參數的一部分提供的$pid;
3.5刪除當前進程的磁盤文件。
4.沒有提供任何參數的已知位置代碼路徑此代碼路徑與標準代碼路徑相似,主要區別在於惡意軟件從以下位置運行:
一旦它從其中一個位置運行,惡意軟件就會調用以下函數來執行各種任務:
4.1InstallSYS——顧名思義,這個函數是一個應該部署rootkit驅動程序的包裝器,但它只清零兩個本地數組。
虛擬InstallSYS例程
4.2AddService——創建前面提到的持久自動啟動項,以便惡意軟件在系統啟動時運行。
4.3HidePidPort——隱藏惡意軟件的端口和進程。
4.4CheckLKM——檢查rootkit設備是否處於活動狀態。它使用數字“0x9748712”和命令“0”的類似IOCTL調用來查找rootkit是否處於活動狀態。如果rootkit處於活動狀態,它會使用所有者值“0xAD1473B8”和組值“0xAD1473B8”通過函數lchown( 文件名、0xAD1473B8、0xAD1473B8)。
4.5decrypt_remotestr——使用相同的XOR密鑰“BB2FA36AAA9541F0”解碼遠程URL,以解碼config.rar和其他目錄。解碼URL後,它將它們添加到一個遠程列表中,該列表稍後用於從命令和控制(C2)服務器通信和獲取命令:
www[.]enoan2107[.]com:3306
www[.]gzcfr5axf6[.]com:3306
惡意活動線程在創建持久條目、刪除其活動證據並解碼config.rar之後,惡意軟件使用sem_initAPI初始化循環冗餘校驗(CRC)表,後跟未命名的信號量。該信號量使用apshared值設置為“0”進行初始化,從而使生成的信號量在所有線程之間共享。信號量用於維護訪問共享對象的線程之間的並發性,例如kill_cfg數據。
然後惡意軟件初始化三個線程來執行惡意活動,例如停止進程、創建TCP連接和檢索kill_cfg數據。
信號量和惡意線程初始化
kill_processkill_process線程執行以下任務:
解碼加密字符串;
獲取/var/run/gcc.pid的文件統計信息,如果不存在,則創建文件;
獲取/lib/libudev.so的文件統計信息,如果不存在,則創建目錄/lib並在/lib/libudev.so位置創建自身的副本;
獲取與當前進程相關的磁盤文件信息;如果失敗,則退出循環並停止當前進程;
從kill_cfg中讀取內容,並根據配置文件中匹配的指定項執行相應的操作,如停止進程或刪除文件,例如:
tcp_threadtcp_thread觸發與之前使用decrypt_remotestr()解碼的C2服務器的連接。它執行以下任務:
讀取文件/var/run/gcc.pid的內容,獲取一個唯一的32字節魔術字符串,用於在連接C2服務器時識別設備;如果該文件不存在,則創建該文件並使用一個隨機的32字節字符串對其進行更新。
計算CRC標頭,包括設備的詳細信息,例如魔術字符串、操作系統版本、惡意軟件版本、rootkit存在、內存統計信息、CPU信息和LAN速度。
加密數據並將其發送到C2服務器。
等待從C2服務器接收以下任何命令,然後使用exec_packet子例程對該命令進行操作。
系統信息收集
daemon_get_killed_processdaemon_get_killed_processthread從之前解碼的遠程URL(hxxp://aa[.]hostasa[.]org/config[.]rar)下載kill_cfg數據,並使用前面提到的相同XOR密鑰對其進行解密。然後它會休眠30分鐘。
daemon_get_killed_process線程函數從遠程URL獲取並解碼kill_cfg數據
DDoS攻擊線程池惡意軟件調用sysconf(_SC_NPROCESSORS_CONF)來獲取設備中的處理器數量。然後,它創建的線程數量是設備上找到的處理器數量的兩倍。
在內部調用每個線程都會調用線程例程threadwork。使用全局變量“g_stop”和從C2服務器接收的命令,threadwork然後發送精心製作的數據包65535次以執行DDoS攻擊。
如何防禦Linux平台的威脅XorDdos的模塊化特性為攻擊者提供了一種多功能木馬,能夠感染各種Linux系統架構。它的SSH暴力攻擊是一種相對簡單但有效的技術,可用於獲得對許多潛在目標的root訪問權限。
XorDdos擅長竊取敏感數據、安裝rootkit設備、使用各種規避和持久性機制以及執行DDoS攻擊,使攻擊者能夠對目標系統造成潛在的重大破壞。此外,XorDdos可用於引入其他危險威脅或為後續活動提供載體。
XorDdos和其他針對Linux設備的威脅都表明,擁有跨越眾多Linux操作系統發行版、具有全面能力和完整可見性的安全解決方案是多麼重要。 MicrosoftDefenderforEndpoint提供了這樣的可見性和保護,以捕捉這些新出現的威脅,其下一代反惡意軟件和終端檢測和響應(EDR)功能。利用來自集成威脅數據的威脅情報,包括客戶端和雲啟發式、機器學習模型、內存掃描和行為監控,MicrosoftDefenderforEndpoint可以檢測和補救XorDdos及其多階段模塊化攻擊。這包括檢測和防止其使用惡意shell腳本進行初始訪問、從全局可寫位置放置並執行二進製文件以及終端上的任何潛在後續活動。