安卓ELF惡意軟件深度分析
ELF病毒背景
1.Android病毒發展趨勢
自 2010 年開始,全球進入了移動互聯網時代,作為主流移動操作系統Android也得到了迅猛發展。Android病毒也從簡單到復雜,從單純的dex病毒轉向為elf病毒(其中elf是Linux下的可執行程序)。這一發展趨勢有幾個原因:
- 經過多年發展程序編寫人員水平普遍提高,大量的linux程序移植到android系統,病毒也隨之發展。
- android系統碎片化嚴重,提取漏洞不斷累積導致病毒攻擊方式多元化 ,
- elf文件具有比dex程序更難分析的特點。
- 常規殺軟沒有root權限,難以查殺病毒。
2.ELF病毒紀元圖
感染情況:
root類病毒自2014年9月至2016年7月份的感染量
主要兩大家族感染量
3.感染用戶案例
下面是Facebook上用戶感染ELF病毒的案例,可以看出,由于沒有ROOT權限,無法直接清除病毒。
ELF病毒危害形式
1.提權
利用漏洞獲取ROOT權限,如病毒rootnik:
病毒獲取ROOT 權限時,運行/data/local/tmp/下的Matrix(ROOT組件,命令:./Matrix /data/local/tmp 1),病毒程序Matrix從fileWork中解密并釋放支持文件,調用腳本wsroot.sh進行ROOT。腳本wsroot.sh 運行時傳入參數/data/local/tmp、1,其中/data/local/tmp為支持文件路徑,1代表不安裝superuser,提權文件為su8。
ROOT后在系統目錄下添加提權應用 在/system/bin/下生成文件su8,作為提權的su程序,該程序可以被任何App用來獲取ROOT權限使用,存在巨大隱患。
文件列表(都為提供ROOT 權限服務)
- /system/xbin/su8
- /system/xbin/sugote
- /system/xbin/supolicy
- /system/xbin/daemonsu
2.對抗
偽裝替換系統服務
病毒將系統啟動時init.rc內要啟動的服務替換成病毒服務,并在病毒服務啟動后再調用原始服務。
如木馬Android.Troj.at_Seed.a,會將自身的主要模塊拷貝到系統目錄/system/bin內,偽裝成系統服務debuggerd(該服務可以偵測到程序崩潰,并將崩潰時的進程狀態信息輸出到文件和串口中,以供開發人員分析調試使用。),并將原系統服務debuggerd改名為debuggerd_real,這一方式在ROOT工具中也有使用,下圖是使用kingroot對手機進行ROOT后,/system/bin/debuggerd文件尾內容:
病毒不止利用debuggerd服務,有的病毒會利用/system/bin/vold服務,如地獄火,一樣的手段,一樣的效果。(vold服務:Volume Daemon存儲類的守護進程,作為Android的一個本地服務,負責處理諸如SD、USB等存儲類設備的插拔等事件。)
感染boot.img
通過修改boot.img分區并刷回的方式感染/sbin,修改init.rc文件,達到每次開機自啟的目的。
由于/sbin目錄和init.rc文件位于一個RAM disk中,該RAM disk是一個只讀的、位于內存中的文件系統,從設備磁盤的boot分區加載而來,所有的更改都不會寫回磁盤,每次都是直接從分區中讀取,所以無法通過remount,刪除來清除病毒。需要刷回boot.img來清除病毒,增大清除難度。如病毒oldbot、地獄火。
創建守護進程
創建守護進程,時刻監控自身進程或文件,當進程被結束或者并文件被刪除時及時啟動進程或恢復病毒文件。如:病毒ghostpush,舞毒蛾。
修改病毒隱藏權限
病毒給衍生文件和apk包設置隱藏屬性(+i),使其無法被刪除,無法被卸載。
linux文件系統可以設置文件隱藏屬性,如下圖:
將文件的屬性設置為 +i 屬性則可以使文件不被刪除。如ghostpush病毒等,將自身elf文件設置成+i屬性。
3.云控
由于android系統的碎片化,各子系統的ROOT模式,控制方案有顯著不同,使病毒大量采取云端控制的方案,使用云控的方式可以根據不同的子系統下載不同的ROOT方案,使用不同的控制指令,大大減少代碼量,使得病毒更加靈活、可控。
通過云控獲取ROOT方案
病毒通過上傳感染機器的實際環境,獲取相對應的ROOT方案,如danpay家族的client病毒。
client下載加密的ROOT提權工具壓縮包并根據不同的手機設備下載對應的ROOT工具下載地址和方案:
http://abcll0.us:9009/gamesdk/doroot.jsp
http://my2014.us:9009/gamesdk/advert.jsp
4.注入
通過elf注入系統進程,修改程序執行或竊取內部信息。
注入瀏覽器進行流量劫持
注入瀏覽器進程,劫持特定網站,可以做詐騙,釣魚等非法活動,如病毒Android.TROJ.triada.mc通過elf文件rinject將病毒的so文件注入到瀏覽器進程,將系統的loadUrl函數注冊為靜態函數的方式進行hook,使得瀏覽器在訪問特定網站時被劫持。
ringect注入器(通過ptrace):
將病毒so文件/system/lib/libremeth.so注入到瀏覽器進程中:
通過hook android.webkit.WebView類的loadUrl函數實現劫持:
木馬劫持后訪問網絡流程:
注入社交應用獲取聊天記錄
病毒注入“手機QQ”、“微信”社交應用,獲取聊天記錄并上傳遠端服務器, 通過inject將病毒so文件注入到“手機QQ”或“微信”的進程中,獲取其控制權,并在so中動態加載病毒的dex文件以便竊取聊天內容,并上傳。
ELF病毒所在目錄
1.所在目錄
- /system/bin
系統內可執行文件所在路徑,內存在大量系統服務,在系統PATH內。
- /system/xbin
系統內可執行文件所在路徑,在系統PATH內。
- /sbin
Android系統只讀分區,里面存放了幾個重要守護進程的二進制文件,通過更新boot.img可將病毒刷到此目錄。
- /system/etc/
Linux系統的目錄,存放配置文件。
- /system/usr
用戶文件夾,包含共享、鍵盤布局、時間區域文件等。
- /data/local/tmp/
data目錄中的可以提權目錄,一般用來運行可執行文件
2.目錄特點
目錄占比圖:
除了/data/local/tmp/目錄外都需要ROOT權限
1)ELF病毒絕大多數都具有ROOT權限。
2)病毒運行后首要的行為是獲取ROOT權限。
/system/bin、/system/xbin目錄占絕大多數
1)這兩個目錄是path路徑方便ROOT提權。
2)bin目錄方便偽裝成系統服務。
ELF病毒ROOT(提權)方案
1.分類
按照方案獲取分為云端獲取和本地釋放兩種。
按照ROOT程序分為特定漏洞提權和ROOT工具提權
2.ROOT工具簡述
PingPongRoot:是由國內安全大牛Keen Team團隊開發出來的主要針對三星S6的ROOT工具,主要利用CVE-2015-3636漏洞。能ROOT大量Android 5.1及其以下的系統。
TowelRoot:是美國知名黑客Geohot開發出來的一款ROOT工具,號稱可以Root所有2014年6月3日之前的Android設備,利用漏洞CVE-2014-3153。
Mtkfb:該工具由ele7enxxh根據nforest@KeenTeam的報告以及網上的提權代碼整理。該工具利用了mtkfb_ioctl函數越界寫內存提權漏洞。
FramaRoot:是由XDA論壇用 “Alephzain“發布的一款一鍵ROOT工具,針對設備版本較低,利用了Boromir, Barahir, Frodo, Legolas, Aragorn, Gandalf, Pippin 和 Farahir漏洞(mmap邊界檢查漏洞) 。
Root助手: 深圳市網卓信息科技有限公司開發的一款ROOT軟件,整合大量漏洞,提供一鍵ROOT功能,被病毒利用。
ELF病毒對傳統殺軟的挑戰
1.權限
大量ELF病毒都是主動利用漏洞對中毒手機進行ROOT,大量病毒還會刪除原有ROOT管理程序,使得其他應用無法使用ROOT權限。
安全軟件需要在已經獲取ROOT權限的手機上申請ROOT權限,這就導致殺軟獲取ROOT權限的數量比ELF病毒獲取ROOT權限的數量少很多,處于被動。
2.殘留
普通殺軟在處理Android病毒時,一般的手段是直接卸載,對于system的應用引導用戶進行停用,這樣的處理無法滿足對ELF病毒的處理(elf進程將備份的病毒還原或啟動)。
殘留的ROOT后門,可以被其他病毒直接使用。
1)案例:用病毒殘留的后門文件PPM將sdcard目錄下的apk程序拷貝到/system/app/目錄,當手機重啟后達到安裝app的目的。
2)案例:運行病毒殘留/system/bin/.alpha 直接獲得ROOT權限
近兩個月(20160524-20150726)殘留的root后門(elf文件)
3.針對性
普通殺軟難于針對性的對不同危害的ELF進行處理。
專殺的解決方案
加強引導,在用戶授權的情況下,積極獲取ROOT權限,使專殺和病毒處于同一起跑線。
采用模塊化架構,可以針對不同危害采取不同的模塊進行查殺、修復。
由于權限的提高可以完全將殘留的ELF文件刪除。
木馬專殺下載地址:http://cn.cmcm.com/activity/push/cm/stk/1/
查殺效果