Jump to content

一、概述近期,我們發現一種新型的Linux惡意軟件Symbiote被報導出來,該惡意軟件被描述為“幾乎不可能被檢測到”。之所以被命名為Symbiote(中文含義:共生體),也是基於該樣本的攻擊性質:作為非獨立運行的共享庫文件加載到其他正在運行的進程中。其目的是竊取遠程主機的登錄憑證以及後門訪問。

下面將對該惡意軟件的其中一個樣本進行詳細分析。

二、詳情分析1加載方式

LD_PRELOAD是Linux系統的一個環境變量,它可以影響程序的運行時的鏈接(Runtime linker),允許你定義在程序運行前優先加載的動態鏈接庫。通過這個環境變量,可以在主程序和其動態鏈接庫的中間加載別的動態鏈接庫。通過覆蓋正常的庫函數,注入到正在運行的進程,從而達到特定的目的。

該樣本使用同名、同參數的自定義函數,通過LD_PRELOAD的方式加載到其他進程中,進而覆蓋掉同名的系統函數,優先調用自定義函數,達到調用過程劫持效果。

所有的劫持函數都如下圖邏輯:

图片圖1

2進程隱藏

該樣本會隱藏自身加載到其他程序中的共享庫痕跡,以及隱藏一起部署的其他惡意程序。

隱藏其他惡意程序

實現方式為,掛鉤readdir、readdir64、stat、statx、fstatat、fstatat64等函數,目標文件在/proc下時,獲取執行命令,判斷是否為需要隱藏的進程,若是,則跳過該條目信息,繼續執行返回下一個無需隱藏的文件條目信息。

图片圖2

图片圖3

本樣本隱藏的進程名

certbotx64

certbotx86

javautils

隱藏共享庫痕跡

除了隱藏一起部署的其他惡意程序,還會隱藏自身模塊。如用戶可通過ldd命令輸出指定的每個程序或共享對象所需的共享對象(共享庫)。如下圖所示,ldd命令會調用execve函數,該樣本就通過掛鉤execve的方式劫持返回結果。

图片圖4

通過LD_TRACE_LOADED_OBJECTS環境變量判斷是否為列出其動態庫依賴項(ldd命令)。

图片圖5

具體隱藏過程如下,fork一個子進程去執行命令,返回結果到管道。

图片圖6

在本進程中,使用後面的字符串數據覆蓋掉需要隱藏的自身庫字符串再輸出,達到隱藏效果。

图片

圖7

運行效果圖如下,該樣本目前只是過濾硬編碼寫入的文件名,改名後就會顯示出來,不排除後續版本會更新為自動獲取名稱。

图片圖8

3文件隱藏

除了隱藏進程相關的文件,還會隱藏其他非進程的信息存儲文件。在Linux系統中,使用ls、dir、tree等命令顯示出目錄下的文件信息,通過掛鉤文件相關函數readdir、readdir64就可以實現文件隱藏。

具體細節如下,讀取到需隱藏的文件流時,繼續讀取下一個,直至該文件流為非隱藏文件或為空才返回。這樣就跳過了惡意文件,達到隱藏目的。

图片

圖9

图片圖10

隱藏的文件列表

certbotx64

certbotx86

javautils

bancodobrasildev

search.so

certbot.h

cert.h

4網絡隱藏

該樣本採用了三種流量隱藏的方法,分別是劫持fopen函數、劫持注入eBPF、劫持libpcap庫函數。

劫持fopen函數

檢測到程序使用fopen讀取\proc\net\目錄下的文件時,便會生成一個臨時文件,讀取源文件的每一行並將過濾掉指定端口的數據寫入臨時文件,最後將過濾後的臨時文件句柄返回調用者,達到隱藏效果。

图片

圖11

图片

圖12

劫持注入eBPF

BPF(Berkeley Packet Filter), 中文翻譯就是伯克利包過濾器。從字面意思可以知道它的主要功能是用來過濾數據包的。根據介紹,BPF 鉤子位於網絡驅動中盡可能早的位置,無需進行原始包的複制就可以實現最佳的數據包處理性能,掛載的BPF程序是運行過濾的理想選擇。

下面是BPF流程圖:

图片圖13

劫持方法是掛鉤函數setsockeopt,該函數用於設置socket狀態。

檢測到使用SO_ATTACH_FILTER方式調用時,表示該調用用於數據包過濾。此時就會先將自身的BPF字節碼添加到其他軟件的BPF字節碼前,先一步過濾掉需隱藏的流量,再執行其他軟件注入的BPF字節碼進行過濾。

本樣本用此方法過濾TCP連接中指定端口的流量(包括入站出站)。

图片圖14

劫持libpcap庫函數

實現方法是掛鉤函數pcap_loop、pcap_stats這兩個函數。

掛鉤函數pcap_loop、pcap_stats這兩個函數,在函數pcap_loop中,劫持捕獲流量後執行的回調函數,在惡意回調函數中,匹配流量中需要過濾的域字符串,通過包數計數器加一,丟掉這個流量包。

本樣本中用此方法隱藏UDP流量數據。

图片圖15

图片圖16

5惡意功能

該樣本的主要目的有:竊取用戶登入憑證,後門遠程訪問、文件下載命令執行。

憑證記錄

當用戶使用ssh或者scp並通過公私密鑰key進行遠程主機訪問時,掛鉤後的read便會獲取調用程序命令行參數,獲取遠程主機的地址、連接RSA私鑰等信息。

图片

圖17

图片

圖18

使用簡化的CR4算法加密後,存放在/usr/include/cerbot.h文件中,並通過DNS 地址(A) 記錄請求洩露到攻擊者的控制的域名。

图片

圖19

图片圖20

後門遠程訪問

該樣本劫持Linux系統上可插拔認證模塊(PAM)的關鍵函數pam_set_item、pam_authenticate、pam_acct_mgmt。其中pam_set_item函數用於截取用戶登入密碼,pam_authenticate函數用於校驗密碼。

图片

圖21

图片

圖22

這意味著攻擊者可以使用寫入的硬編碼口令,以任意用戶遠程訪問受害者服務器。

而當其他用戶使用遠程訪問工具(ssh)訪問受害者服務器時,便會獲取遠程主機ip、登入口令等信息,作為憑證竊取的一部分發送至攻擊者域名。

文件下載命令執行

在使用pam_authenticate函數進行身份驗證時,若不是攻擊者訪問,還會向其命令與控制域CC發送DNS 地址(TXT) 記錄請求。 TXT 記錄的格式為%MACHINEID%.%C2_DOMAIN%。

如果收到響應,惡意軟件使用base64 解碼內容,使用Ed25519算法檢查內容鑰簽名,使用RC4解密內容,並在生成的bash 進程中執行shell 腳本。

6CR4

在該樣本中,所有的字符串都是通過簡化的CR4算法獲取,該CR4算法核心如下:

index=0j=0forOdrTextinrange(textlen):j=(j+1)%256index=(index+S[j])%256S[j],S[index]=S[index],S[j]hexList[OdrText]^=S[(S[j]+S[index])%256]三、檢測思路底層函數繞過:該樣本是通過掛鉤用戶層的一些關鍵函數進行隱藏,可以通過更底層的文件操作函數進行檢測。

特殊工具:還可以使用完全靜態編譯的工具,如busybox,該工具靜態編譯Linux常用命令,不依賴共享庫,此方式可以破解該樣本的隱藏手段。

行為特徵檢測:該樣本目前還未隱藏export與環境變量顯示相關的命令結果,所以還可以檢測環境變量LD_PRELOAD,進而發現問題。

流量特徵檢測:既然在終端上不好檢測流量,那就在在網絡出口處進行流量檢測。

欺騙檢測:針對蒐集到的隱藏文件信息,創建同名文件判斷是否被隱藏,也可以檢測。

內存特徵匹配:經過測試,可以使用yara規則掃描進程內存檢測╭( `∀′ )╯。

四、IOC用於接收憑證記錄數據

x3206.caixa.cx

dev42.bancodobrasil.dev

用於下發命令執行數據

x4206.caixa.cx

dev21.bancodobrasil.dev

憑證存儲路徑

/usr/include/cerbot.h

/usr/include/java.h

/etc/mpt64.h

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...