本文來自微信公眾號(hào)“嘶吼專業(yè)版”,作者/山卡拉。
安全研究人員最近發(fā)現(xiàn)了一種名為Snowblind的新型Android銀行木馬,它利用了Linux內(nèi)核特性seccomp,這一特性是傳統(tǒng)上用于安全防護(hù)的。Snowblind安裝了一個(gè)seccomp過濾器,用于攔截系統(tǒng)調(diào)用并繞過應(yīng)用程序中的反篡改機(jī)制,即使這些應(yīng)用程序具有強(qiáng)大的混淆和完整性檢查。
這種新的攻擊向量使得該惡意軟件能夠竊取登錄憑據(jù)、繞過雙因素認(rèn)證,并竊取數(shù)據(jù),功能非常強(qiáng)大。有人認(rèn)為這種技術(shù)有潛力以多種方式被利用來攻擊應(yīng)用程序。
傳統(tǒng)上,安卓惡意軟件可利用輔助功能服務(wù)竊取用戶輸入或控制應(yīng)用程序,但現(xiàn)在應(yīng)用程序可以檢測到惡意的輔助功能服務(wù),迫使攻擊者采用重新打包攻擊來繞過檢測。
Snowblind的工作原理
Snowblind是一種新惡意軟件,它利用Linux內(nèi)核安全功能seccomp來發(fā)起更為復(fù)雜的重新打包攻擊。
與使用虛擬化的FjordPhantom不同,Snowblind在應(yīng)用程序的防篡改代碼運(yùn)行之前注入了一個(gè)帶有seccomp過濾器的本機(jī)庫,從而重定向系統(tǒng)調(diào)用,使應(yīng)用程序無法檢測到篡改,并允許惡意輔助功能服務(wù)在不被發(fā)現(xiàn)的情況下運(yùn)行。
Seccomp是一種Linux內(nèi)核功能,它允許用戶進(jìn)程定義系統(tǒng)調(diào)用策略,并充當(dāng)沙盒機(jī)制以減少攻擊面。
引入了兩種模式,嚴(yán)格模式只允許有限的系統(tǒng)調(diào)用,而seccomp-bpf通過Berkeley Packet Filters提供了精細(xì)的控制。
盡管傳統(tǒng)上seccomp在設(shè)備制造商的自定義內(nèi)核中是分散的,但它在Android 8(Oreo)中獲得了關(guān)注,其中Google在Zygote中實(shí)現(xiàn)了seccomp來限制應(yīng)用程序的系統(tǒng)調(diào)用,并在CTS(兼容性測試套件)中添加了測試以確保更廣泛的采用,這表明seccomp-bpf可能在大多數(shù)運(yùn)行Android 8及更高版本的設(shè)備上可用,甚至可能在更早的版本上可用。
Seccomp-bpf是Linux內(nèi)核的一項(xiàng)功能,它允許進(jìn)程限制其可以進(jìn)行的系統(tǒng)調(diào)用,通過阻止進(jìn)程進(jìn)行未經(jīng)授權(quán)的系統(tǒng)調(diào)用來提高安全性。
結(jié)構(gòu)已定義
要使用seccomp-bpf,開發(fā)人員首先定義一個(gè)BPF(伯克利數(shù)據(jù)包過濾器)程序,該程序指定允許哪些系統(tǒng)調(diào)用,可以基于系統(tǒng)調(diào)用號(hào)、系統(tǒng)調(diào)用的參數(shù)或調(diào)用進(jìn)程。
一旦定義了BPF程序,就會(huì)使用prctl()系統(tǒng)調(diào)用將其應(yīng)用于進(jìn)程。
整合所有內(nèi)容
帶有PR_SET_SECCOMP選項(xiàng)的prctl()系統(tǒng)調(diào)用允許進(jìn)程安裝seccomp過濾器,該過濾器是一個(gè)指向BPF程序的指針,用于定義允許哪些系統(tǒng)調(diào)用。
當(dāng)進(jìn)程嘗試進(jìn)行系統(tǒng)調(diào)用時(shí),內(nèi)核首先檢查seccomp過濾器,如果過濾器允許該系統(tǒng)調(diào)用,內(nèi)核就會(huì)進(jìn)行系統(tǒng)調(diào)用。
如果過濾器不允許系統(tǒng)調(diào)用,內(nèi)核就會(huì)向進(jìn)程返回一個(gè)錯(cuò)誤。
在arm64上執(zhí)行的示例
應(yīng)用程序已經(jīng)采取了諸如實(shí)現(xiàn)自己的系統(tǒng)調(diào)用和混淆等對(duì)策。
Snowblind注入了一個(gè)安裝seccomp過濾器的本機(jī)庫,允許除open()之外的所有系統(tǒng)調(diào)用。
當(dāng)目標(biāo)防篡改庫嘗試打開文件時(shí),過濾器會(huì)觸發(fā)SIGSYS信號(hào)。自定義信號(hào)處理程序在重新執(zhí)行open()調(diào)用之前將原始應(yīng)用程序的文件路徑注入其中,從而有效地繞過防篡改檢查。