Jump to content

symbiote-linux-threat-intezer-blog-graphic-1024x475px.png

幾個月前,Intezer的安全研究人員Joakim Kennedy和BlackBerry威脅研究與情報團隊發現了一種新出現的且從未被檢測到的Linux惡意軟件,研究人員已將其命名為Symbiote。

Symbiote 與通常遇到的其他Linux 惡意軟件的不同,它需要感染其他正在運行的進程才能對受感染的設備發起攻擊。它不是一個運行以感染設備的獨立可執行文件,而是一個共享對象(SO) 庫,它使用LD_PRELOAD (T1574.006) 加載到所有正在運行的進程中,然後通過寄生的方式潛入設備實施攻擊。一旦它感染了所有正在運行的進程,它就會獲得攻擊目標的rootkit 功能、獲取憑證的能力和遠程訪問能力。

LD_PRELOAD是Linux系統的一個環境變量,它可以影響程序的運行時的鏈接(Runtime linker),它允許你定義在程序運行前優先加載的動態鏈接庫。這個功能主要就是用來有選擇性的載入不同動態鏈接庫中的相同函數。通過這個環境變量,我們可以在主程序和其動態鏈接庫的中間加載別的動態鏈接庫,甚至覆蓋正常的函數庫。一方面,我們可以以此功能來使用自己的或是更好的函數(無需別人的源碼),而另一方面,我們也可以以向別人的程序注入程序,從而達到特定的目的。

Symbiote的首次出現最早發現Symbiote 是在2021 年11 月,它似乎是針對拉丁美洲的金融部門而編寫的。一旦感染成功,它就會隱藏起來。由於惡意軟件隱藏了所有文件、進程和網絡構件,因此在受感染的設備上執行實時取證可能不會發現任何問題。除了rootkit 功能外,該惡意軟件還為攻擊者提供了一個後門,以使用硬編碼密碼以設備上的任何用戶身份登錄,並以最高權限執行命令。

截止發稿時,研究人員還未找到足夠的證據來確定Symbiote 是否被用於高度針對性或廣泛的攻擊。

Symbiote 的一個特殊之處是其Berkeley Packet Filter (BPF) 掛鉤功能。 Symbiote 並不是第一個使用BPF 的Linux 惡意軟件。例如, 方程式組織(Equation Group)開發的高級後門一直在使用BPF 進行隱蔽通信。然而,Symbiote 利用BPF 隱藏受感染設備上的惡意網絡流量。當管理員在受感染的設備上啟動任何數據包捕獲工具時,BPF 字節碼被注入內核,定義應該捕獲哪些數據包。在這個過程中,Symbiote 首先添加它的字節碼,這樣它就可以過濾掉它不希望數據包捕獲軟件看到的網絡流量。

逃避檢測Symbiote非常隱蔽,該惡意軟件被設計為通過LD_PRELOAD指令由鏈接器加載。這允許它在任何其他共享對象之前加載。由於它首先被加載,才可以從為應用程序加載的其他庫文件中“劫持導入”。 Symbiote 使用它通過掛鉤libc 和libpcap 函數來隱藏它在設備上的存在。逃避檢測過程如下圖所示。

1.png

Symbiote逃避檢測技術

Host 活動Symbiote 惡意軟件除了隱藏自己在設備上的存在外,還隱藏與可能與其一起部署的惡意軟件相關的其他文件。在二進製文件中,有一個RC4 加密的文件列表。調用掛鉤函數時,惡意軟件首先會動態加載libc 並調用原始函數。此邏輯用於所有掛鉤函數。具體示例如下圖所示。

2.png

從libc 解析readdir 的邏輯

如果調用應用程序試圖訪問/proc 下的文件或文件夾,惡意軟件會刪除其列表中進程名稱的輸出。下面列表中的進程名稱是從我們發現的樣本中提取的。

3.png

如果調用應用程序沒有嘗試訪問/proc 下的內容,則惡意軟件會從文件列表中刪除結果。從我們檢查的所有樣本中提取的文件顯示在下面的列表中。一些文件名與Symbiote 使用的文件名相匹配,而其他文件名與疑似是受感染設備上的攻擊者使用的工具的文件名相匹配。該列表包括以下文件。

4.png

通過LD_PRELOAD將Symbiote加載到進程中的一個後果是,像ldd 這樣的工具(一種打印每個程序所需的共享庫的實用程序)會將惡意軟件列為加載的對象。為了解決這個問題,惡意軟件掛鉤execve 並在環境變量LD_TRACE_LOADED_OBJECTS 設置為1 的情況下查找對該函數的調用。 ldd 的手冊頁是這樣解釋其中原因的:

通常情況下,ldd 調用標準動態鏈接器,並將LD_TRACE_LOADED_OBJECTS 環境變量設置為1。這會導致動態鏈接器檢查程序的動態依賴關係,並找到加載滿足這些依賴關係的對象。對於每個依賴項,ldd 顯示匹配對象的位置和加載它的十六進制地址。

當惡意軟件檢測到這一點時,它會像ldd 一樣執行加載程序,但它會從結果中刪除自己的條目。

網絡活動Symbiote 還具有隱藏受感染設備上的網絡活動的功能。它使用三種不同的方法來實現這一點。第一種方法涉及掛鉤fopen 和fopen64。如果調用應用程序嘗試打開/proc/net/tcp,惡意軟件會創建一個臨時文件並將第一行複製到該文件。然後,它掃描每一行,以確定是否存在特定端口。如果惡意軟件在它正在掃描的一行中找到了它正在搜索的端口,它就會跳到下一行。否則,該行被寫入臨時文件。一旦原始文件被完全處理,惡意軟件就會關閉文件,並將臨時文件的文件描述符返回給調用者。本質上,這給了調用進程一個清除的結果,它排除了惡意軟件想要隱藏的所有網絡連接條目。

Symbiote 用來隱藏其網絡活動的第二種方法是劫持任何注入的數據包過濾字節碼。 Linux 內核使用擴展的Berkeley Packet Filter (eBPF)來允許基於用戶域進程提供的規則進行數據包過濾。過濾規則以內核在虛擬機(VM) 上執行的eBPF 字節碼的形式提供。因為內核直接執行過濾,這最大限度地減少了內核和用戶空間之間的上下文切換,從而提高了性能。

如果受感染設備上的應用程序嘗試使用eBPF 執行數據包過濾,Symbiote 會劫持過濾過程。首先,它掛鉤了libc 函數setsockopt。如果使用選項SO_ATTACH_FILTER 調用該函數,該選項用於在套接字上執行數據包過濾,它會在調用應用程序提供的eBPF 代碼之前添加自己的字節碼。

代碼片段1 顯示了由其中一個Symbiote 樣本注入的字節碼的註釋版本。如果它們符合以下條件,則字節碼被釋放:

马云惹不起马云 IPv6(TCP 或SCTP)和src 端口(43253 或43753 或63424 或26424);

马云惹不起马云IPv6(TCP 或SCTP)和dst端口43253;

马云惹不起马云IPv4(TCP 或SCTP)和src 端口(43253 或43753 或63424 或26424);

马云惹不起马云IPv4(TCP 或SCTP)和dst端口(43253 或43753 或63424 或26424);

雖然此字節碼僅根據端口釋放數據包,但研究人員還觀察到基於IPv4 地址的流量過濾。在所有情況下,過濾都會對來自設備的入站和出站流量進行操作,以隱藏兩個方向的流量。如果條件不滿足,它只是跳轉到調用應用程序提供的字節碼的開頭。

如代碼片段1 所示,從其中一個樣本中提取的字節碼包含32 條指令。這段代碼不能單獨注入內核,因為它假定在它之後存在更多字節碼。這個字節碼中有一些跳轉,會跳到調用進程提供的字節碼的開頭。如果沒有調用者的字節碼,注入的字節碼會跳出邊界,這是內核不允許的。像這樣的字節碼要么必須手寫,要么通過修補編譯器生成的字節碼。這兩種選擇都表明該惡意軟件是由熟練的開發人員編寫的。

5.1.png

5.2.png

5.3.png

代碼片段1:從一個Symbiote 樣本中提取的帶註釋的字節碼

Symbiote 用來隱藏其網絡流量的第三種方法是掛鉤libpcap 函數。惡意軟件使用此方法過濾掉指向列表中域名的UDP 流量。它掛鉤函數pcap_loop 和pcap_stats 來完成這個任務。對於接收到的每個數據包,Symbiote 都會檢查UDP 有效負載以查找要過濾掉的域的子字符串。如果找到匹配項,惡意軟件會忽略該數據包並增加一個計數器。 pcap_stats 使用此計數器通過從處理的真實數據包數中減去計數器值來“更正”處理的數據包數。如果數據包有效負載不包含其列表中的任何字符串,則調用原始回調函數。該方法用於過濾掉UDP 數據包,而字節碼方法用於過濾掉TCP 數據包。通過使用這三種方法,惡意軟件可確保隱藏所有流量。

Symbiote的攻擊目標除了隱藏設備上的惡意活動外,該惡意軟件的目標是獲取憑據並為攻擊者提供遠程訪問。憑證收集是通過掛鉤libc 讀取函數來執行的。如果ssh 或scp 進程正在調用該函數,它會捕獲憑據。憑證首先使用嵌入式密鑰使用RC4 加密,然後寫入文件。例如,惡意軟件的一個版本將捕獲的憑據寫入文件/usr/include/certbot.h。

除了在本地存儲憑據外,還會洩露憑據。數據經過十六進制編碼並分塊,以通過DNS 地址(A) 記錄請求洩露到攻擊者控制的域名。 A 記錄請求的格式如下:

6.png

代碼片段2:Symbiote 用於洩露數據的DNS 請求結構

惡意軟件檢查設備是否在/etc/resolv.conf 中配置了名稱服務器。如果沒有,則使用Google 的DNS (8.8.8.8)。除了向域名發送請求外,Symbiote 還將其作為UDP 廣播發送。

對受感染計算機的遠程訪問是通過連接幾個Linux可插入身份驗證模塊(PAM)函數來實現的。當服務試圖使用PAM對用戶進行身份驗證時,惡意軟件會根據硬編碼的密碼檢查提供的密碼。如果提供的密碼匹配,掛起的函數將返回一個成功響應。由於鉤子在PAM中,所以它允許攻擊者對使用PAM的任何服務設備進行身份驗證。這包括像Secure Shell (SSH)這樣的遠程服務。

如果輸入的密碼與硬編碼的密碼不匹配,惡意軟件會將其保存並洩露,作為其鍵盤記錄功能的一部分。此外,惡意軟件還會向其命令與控制(C2) 域發送DNS TXT 記錄請求。 TXT 記錄的格式為%MACHINEID%.%C2_DOMAIN%。如果收到響應,惡意軟件base64 會解碼內容,檢查內容是否已由正確的ed25519 私鑰簽名,使用RC4 解密內容,並在生成的bash 進程中執行shell 腳本。此功能可以作為一種打破僵局的方法運行,以在正常過程不起作用的情況下重新獲得對設備的訪問權限。

一旦攻擊者通過受感染設備的身份驗證,Symbiote 就會提供獲得root 權限的功能。首次加載共享對象時,它會檢查環境變量HTTP_SETTHIS。如果變量設置了內容,則惡意軟件將有效用戶和組ID 更改為root 用戶,然後通過系統命令在執行內容之前刪除變量。

此過程要求SO 設置了setuid 權限標誌。一旦系統命令退出,Symbiote 也會退出進程,以防止原始進程執行。下圖顯示了執行的代碼。這允許通過在shell 中以任何用戶身份運行HTTP_SETTHIS=' /bin/bash -p ' /bin/true作為shell中的任何用戶。

7.png

使用root權限執行命令的邏輯

網絡基礎設施Symbiote 惡意軟件使用的域名冒充巴西的一些主要銀行。這表明這些銀行或其客戶是Symbiote 的潛在目標。利用惡意軟件使用的域名,研究人員成功地發現了一個相關的樣本,該樣本被上傳到VirusTotal,名稱為certbotx64。這個文件名與我們最初獲得的Symbiote樣本中列出的一個文件相匹配。該文件被識別為一個名為dnscat2的開源DNS隧道工具。

該示例在二進製文件中有一個配置,該配置使用git[.]bancodobrasil[.]dev 域作為其C2 服務器。在2 月和3 月期間,該域名解析為與Njalla 的虛擬專用服務器(VPS) 服務相關聯的IP 地址。 DNS 記錄顯示,幾個月前,相同的IP 地址被解析為ns1[.]cintepol[.]link 和ns2[.]cintepol[.]link。 Cintepol是巴西聯邦警察提供的一個情報門戶,該門戶允許警察訪問聯邦警察提供的不同數據庫,作為他們調查的一部分。用於此冒充域名的名稱服務器從2021 年12 月中旬到2022 年1 月末一直處於活動狀態。

同樣從2022 年2 月開始,caixa[.]wf 域的名稱服務器指向另一個Njalla VPS IP。下圖顯示了這些事件的時間線。除了網絡基礎設施之外,還包括文件提交給VirusTotal 的時間戳。這三個Symbiote 樣本是由來自巴西的同一提交者上傳的。這些文件似乎是在基礎架構上線之前提交給VirusTotal 的。

鑑於這些文件是在基礎設施上線之前提交給VirusTotal 的,並且由於某些樣本包含隱藏本地IP 地址的規則,因此這些樣本有可能在使用之前提交給VirusTotal 以測試防病毒檢測。此外,巴西於11 月底提交了一個似乎正在開發中的版本,進一步表明VirusTotal 正被Symbiote 背後的攻擊者或組織用於檢測測試。

8.png

顯示文件何時提交給VirusTotal 以及網絡基礎設施何時啟動的時間線

與其他惡意軟件的相似之處Symbiote 似乎是為竊取憑據和提供對受感染Linux 服務器的遠程訪問而設計的。 Symbiote 並不是第一個為此目的開發的Linux 惡意軟件。 2014 年,ESET 發布了對Ebury 的深入分析,Ebury 是一個OpenSSH 後門,也會執行憑據竊取。兩個惡意軟件家族使用的技術有一些相似之處。兩者都使用掛鉤函數來捕獲憑據並將捕獲的數據作為DNS 請求外洩。但是,這兩個惡意軟件家族對後門的身份驗證方法是不同的。當我們第一次使用Intezer Analyze 分析樣本時,只檢測到唯一代碼。由於Symbiote 和Ebury/Windigo 或任何其他已知惡意軟件之間沒有共享代碼,研究人員得出結論,Symbiote 是一種新的、未被發現的Linux 惡意軟件。

9.png

總結Symbiote 是一種具有高度隱蔽性的惡意軟件。它的主要目標是捕獲憑據並加快對受感染設備的後門訪問。由於惡意軟件作為用戶級rootkit 運行,因此要檢測到它很困難。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...