【技術向】Linux動態連結庫預載入型後門

星河Salaxy發表於2021-06-10

一.  原理分析

動態連結庫預載入機制是系統提供給使用者執行自定義動態連結庫的一種方式,在可執行程式執行之前就會預先載入使用者定義的動態連結庫的一種技術。


該技術可用於重寫系統中有漏洞的庫函式,從而達到修復漏洞的目的,如get_host_byname導致ghost漏洞的這類函式。攻擊者同樣可利用該技術寫rootkit,透過重寫系統檔案、網路、程式相關的庫函式,達到隱藏檔案或程式的目的。

相較於普通的使用者空間rootkit,該技術更加隱蔽,難以被發現,相較於核心模組rootkit,該技術的相容性更好,編寫難度更低。因此,這種型別的rootkit逐年增多,難以查殺。


由於動態連結庫的預載入機制和全域性符號介入機制,可控制程式執行時的連結(Runtime linker),允許使用者在程式執行前優先載入自定義的動態連結庫,使得惡意動態連結庫優先於正常動態連結庫載入,根據全域性符號介入的順序原理來”短路”正常函式,最終優先執行攻擊者定義的惡意函式。


惡意動態連結庫主要有3種利用方式:

1. 將惡意動態連結庫透過LD_PRELOAD環境變數進行載入。

2. 將惡意動態連結庫透過/etc/ld.so.preload配置檔案進行載入。

3. 修改動態連結器來實現惡意功能,例如修改動態連結器中預設的用於預載入的配置檔案路徑/etc/ld.so.preload為攻擊者自定義路徑,然後在裡面寫入待載入的惡意動態連結庫,當然修改的方法還有很多,如修改預設環境變數,直接將要hook的動態連結庫寫入動態連結器中。



二. LD_PRELOAD劫持

這種劫持相對較簡單,可以透過以下方法實現:


劫持方法:

1) LD_PRELOAD=/lib/f1c8d7.so

將LD_PRELOAD的值設定為要預載入的動態連結庫

2) export LD_PRELOAD

匯出環境變數使該環境變數生效

3) 一般情況下相關的庫檔案會被加上隱藏屬性

圖片

檢測方法

檢視環境變數即可檢測是否存在劫持:

圖片


三.  /etc/ld.so.preload劫持


劫持方法:

這種劫持方式是目前最主流的,透過修改配置,將其載入惡意庫檔案實現劫持。可使用github裡面的工具來實現(https://github.com/mempodippy/cub3)

圖片


檢測方法:

使用cat無法檢視相應的內容;使用busybox可以看到相應的內容,說明存在庫劫持。並且其型別是修改/etc/ld.so.preload內容,增加惡意庫檔案實現劫持。


由於cat命令被劫持了,因此我們可以使用strace來追蹤/bin/cat命令的載入情況,可以看到其訪問/etc/ld.so.preload,並且開啟了/lib/cub3.so這個庫檔案。


修復方法:

透過去掉隱藏屬性來處理修復:

./busybox lsattr -ia  /etc/ld.so.preload

./busybox chattr -ia  /etc/ld.so.preload

./busybox rm -rf/etc/ld.so.preload /lib/cub3.so


四.   修改動態連結器


修改動態連結器實現惡意功能目的有多種方法,這裡使用替換動態連結器中的預設預載入配置檔案/etc/ld.so.preload路徑的rootkit,來實現更加隱蔽的惡意動態連結庫預載入,安裝的方法是修改動態連結器中配置檔案路徑/etc/ld.so.preload為自定義的路徑,然後再在該路徑中寫入要預載入的惡意動態連結庫的絕對路徑。測試使用的惡意rootkit名稱為Vlany,


下載地址為:https://github.com/mempodippy/vlany。

 

實驗環境:

靶機ubuntu16  核心:Linux 4.4.0-31-generic x86_64


攻擊機:Kali2020   核心:4.17.0-kali1-amd64       架構:x86_64 #不支援


劫持方法:


1. 建立檔案:

quick_install.sh:

圖片


install.sh:

圖片


2. 編譯安裝

quick_install.sh下載專案後解壓呼叫install.sh指令碼,首先會檢測SElinux是否關閉。如果沒關閉,指令碼會關閉SElinux。此時需要重啟機器。

檢驗完SElinux,程式出現提示框,選擇grub配置位置,來確認當機器重啟後後門依然生效。根據機器實際情況填寫,預設/etc/grub.conf。

等待gcc等依賴安裝完成,設定透過ssh連線的PAM使用者名稱,記住此後門使用者名稱:

圖片


設定PAM密碼:

圖片


設定PAM埠:

圖片


設定連線是否使用SSL加密:

圖片


設定accept()後門密碼:

圖片


設定accept()後門隱藏埠:

圖片


完成後,指令碼會提示是否安裝作者新研究的snodew後門這裡選擇NO

全部配置完成後,呈現出如下連線資訊:

圖片


3. 連線後門

在攻擊機建立檔案ssh.sh

圖片


使用其他機器連線後門:sh ssh.sh kionf 192.168.43.167 4397

圖片

圖片


顯示連線成功

在被攻擊端檢視是否有異常連線,完全隱藏沒有顯示出任何連線資訊,並且檢視/etc/passwd檔案,沒有我們所使用的kionf使用者

圖片

https://github.com/mempodippy/detect_preload上的檢測程式未能檢測出:

圖片


檢測方法:


使用strace命令來檢視預載入的配置檔案是不是/etc/ld.so.preload檔案,如下圖: 

圖片

圖片

動態連結庫預載入的配置檔案是/sbin/.XqASUKZb而不是原有的配置檔案,我們即可確認系統中存在修改動態連結器的rootkit


清除方法

清除修改動態連結器的rootkit,需要使用相同系統的相同版本動態連結器替換被修改了的動態連結器,才能達到徹底清除的目的。

暫時緩解的方式則是將上方檢測過程中看到的惡意動態連結庫刪除,以及將對應的動態連結庫配置檔案中的內容清除。



五.  參考連結


https://kionf.com/2018/10/25/rookit-vlany/

https://www.freebuf.com/column/162604.html

https://www.freebuf.com/articles/system/223311.html


相關文章