360安全衛士 · 2015/11/17 15:12android
隨着移動端安全軟件對APK的查殺能力趨於成熟以及Google對Android安全性重視的提升,病毒與反病毒的主戰場已逐漸從APP層擴展到Linux底層。並且病毒做者也開始把PC端的病毒自我保護手段運用到移動端上,在移動端大量使用了免殺、加密、隱藏、反虛擬機等傳統PC端病毒自我保護技術。可是以前一直還未出現過經過感染技術實現自我保護的病毒,這次,360安全團隊首次發現了在Android系統中經過感染方式隱藏自身惡意代碼的木馬病毒——長老木馬之四。數據庫
去年11月份,360安全團隊截獲了惡意手機木馬「長老三代」,詳細剖析挖掘了長老木馬的整個有機生態鏈。並從傳播源頭開始進行強力打擊,導致猖狂一時的長老木馬迅速地消聲滅跡。近期360安全團隊發現改頭換面的新版長老木馬又「重出江湖」。安全
分析後發現,木馬與「長老三代」有緊密的關係,在長老木馬三代「瘋狂崛起」時,以其子模塊的形式存在,功能有限,並且也不具有對抗安全軟件的能力,所以,咱們將其命名爲「長老四代」。服務器
長老木馬三代核心主體模塊debuggerd與此子模塊耦合度很是高。好比子模塊由虛假debuggerd來啓動,並且子模塊運行時須要訪問由假冒debuggerd下載生成的文件讀取遠程服務器地址,下載地址等。通過木馬做者的「精心改進」後,子模塊從「私生子」華麗「蛻變」爲長老木馬核心模塊。框架
與以前老版本相比,雖然在惡意行爲特徵上仍然以隱私劫取、惡意扣費爲主,可是自我保護與對抗安全軟件方面有較大技術突破。例如,在移動安全領域首次採用了靜態感染技術,感染系統運行依賴的lib文件,加大了查殺難度。此外,還採用類似文件路徑欺騙法、 樣本MD5自變化等傳統PC端的病毒技術。下圖的文件MD5分別爲778ff1b54aaf88075523f1a8b7c233f九、3a93af95ec45aabb44018fdc4dd34243。函數
圖1 兩個長老4代 ELF可執行文件的對比工具
對比能夠看出,是文件末尾嵌入32位長度的字符串,致使同一版本長老四,出現幾十萬個變種。進一步分析發現,長老四會讀取這段字符,解密後看成KEY,用於私有數據庫等配置文件的AES/DES加密與解密。代碼以下:測試
圖2 獲取AES密鑰的部分代碼加密
長老木馬的進化以下:spa
圖3 長老四代進化圖
通過一段時間的觀察與分析,咱們梳理了「長四」的發現過程及關鍵的時間節點,如圖所示:
圖4 長老四代發現過程及響應
長老木馬四代主要分爲launcher和核心做惡的ELF可執行模塊。ELF可執行模塊又包括distillery、plugins及redbean三個主要部分。 redbean模塊會注入系統Phone進程,具備Phone進程權限,能夠在未經用戶容許下,後臺私自訂購SP業務,屏蔽訂購確認和成功短信,給用戶形成經濟上的損失。
長老木馬四代做惡流程以下:
圖5 長老四代流程圖
從啓動方式來看,長老三代主要以替換系統原生文件爲自身鏡像,隨系統啓動時執行,因爲安全軟件對於這種類型的查殺方法已比較成熟,長老木馬四代採用更加隱蔽的「靜態感染」啓動方式,將惡意代碼插入到被感染的系統文件,在被感染系統文件中完成長老木馬四代的啓動工做。長老四代是在Android系統中首次採用感染技術的木馬。
「長老四代」靜態感染啓動原理以下:
一、感染守護進程啓動時依賴的正常庫文件。在庫文件的導入表裏添加launcher的路徑,使守護進程隨操做系統啓動時,加載並執行launcher的惡意代碼。以下圖所示,被感染的系統庫文件的導入表中包含惡意庫文件libs6x.so的路徑。
圖6 被感染的系統庫文件\system\bin\libglog.so
二、Linux的動態連接器在加載ELF可執行文件或動態連接庫時完成裝載、映射、重定向後,首先依次執行pre_init、init、init_array節中描述地址指向的函數。這些函數都是早於入口點執行的。
圖7 Launcher的init_array節
Linux的動態鏈接器執行這些函數的初衷原來是爲了程序執行前初始化C++靜態構造函數,C庫的IO等等。木馬做者巧妙利用Linux動態連接器對ELF文件的裝載原理,在init_array段裏寫入了啓動病毒長老四代的代碼。
圖8 啓動長老木馬可執行文件的代碼片斷
這種「靜態感染」方式加大了咱們的查殺難度。首先,加強了長老四代的隱蔽性,被感染的系統文件裝載時加載惡意launcher,接着launcher啓動ELF可執行文件。因爲被感染的系統庫文件除了導入表多了一行字符串(launcher的路徑)以外,與其餘正常系統庫文件徹底相同,容易躲過安全軟件的「火眼金睛」。其次,增長殺毒軟件的修復難度,因爲被感染的庫文件隨系統進程啓動時嘗試加載導入表中的全部so文件,可能會由於安全軟件的暴力刪除致使手機系統掛機。
長老四代被launcher調度啓動後,會生成隱藏的空文件「/data/local/tmp/.l1
」和「/data/local/tmp/.l6
」。根據長老木馬版本,這些隱藏的空文件名有所不一樣。隨後,生成加密的主體模塊「distillery-1.0.7.drk
」,解密後生成「distillery.dex.jar
」,並加載執行其中的函數「com.alkohol.Main.main
」。
主要模塊說明以下:
distillery
distillery.dex.jar
爲長老木馬四代病毒的核心主體框架,實現長老四代的核心功能。distillery模塊的「com.alkohol.Main.main
」函數,運行時接受4個參數:
arg0=長老木馬路徑、arg1=null、arg2=長老木馬版本、arg3=null。
複製代碼
圖9 長老木馬運行時實際傳遞的參數值
distillery框架運行後生成的主要文件及文件夾:
圖10 長老四代生成的主要文件及文件夾
圖11 實際運行時留下的的文件及文件夾
核心插件
distillery主體框架啓動後會解密plugins下的全部加密drk文件,並加載到內存中。
這些插件實現了接受遠程服務端指令、惡意扣費、短信攔截監控、心跳、日誌提交、下載和更新插件等長老木馬四代的全部核心功能。
圖12 插件列表
其中,具有核心功能的插件有mojito、margarita和gin。
mojito插件:完成手機短信監控的功能,過濾關鍵詞由遠程服務器下發,主要屏蔽SP扣費業務訂購成功或確認短信,使用戶沒法察覺到本身訂購了SP業務,短信監控相關部分代碼以下:
圖13 短信監控插件部分代碼
Margarita插件:完成手機扣費功能,實現扣費功能的代碼片斷以下:
圖14 付費插件部分關鍵代碼
Gin插件:注入相關核心模塊,解密後是redbean.dex.jar
。redbean.dex.jar
打包了whitebean和libblackbean模塊。whitebean和libblackbean的最終目的是把readbean.dex.jar
注入到Phone進程中。注入成功後readbean.dex.jar
能夠實現讀取攔截短信內容,後臺撥號等敏感惡意行爲。
長老四代的注入流程是,whitebean在遠程進程中加載libblackbean.so,libblackbean.so調用JNI_CreateJavaVM實現加載核心模塊readbean.dex.jar
。
whitebean啓動時接受6個參數:
arg0=待注入的目標進程、arg1=負責加載jar的so模塊、arg2=核心模塊、arg3=保存臨時dex文件(jar運行時生成的臨時dex存放路徑)、arg4=運行模式(Debug模式和Release模式)、arg5=服務端日誌存放路徑。
複製代碼
運行時實際傳遞的參數值:
./whitebean
com.android.phone
libblackbean.so
/data/usr/readbean.dex.jar
/data/usr/cache Release
/data/usr/server.log
複製代碼
whitebean運行後在遠程進程com.android.phone
的導入表中搜索獲取dlopen、 dlsym、dlclose、dlerror等函數的調用地址,經過這些函數實現遠程加載libblackbean.so,並調用libblackbean.so的inject_entry函數,把其他的參數(redbean.dex.jar
、/data/usr/cache Release
、/data/usr/server.log
)所有傳遞給它。
libblackbean.so的inect_entry導出函數被執行後,調用JNI_CreateJavaVM加載redbean.dex.jar
,而且調用redbean.dex.jar
中com.android.phone.os.Program
的Main函數。以此整個注入過程結束,下圖爲注入過程相關運行日誌。
圖15 注入過程相關運行日誌
Redbean
Redbean模塊注入到Phone進程後具有了與Phone進程相同權限,能夠獲取敏感短信內容(好比手機驗證支付密碼)、私自訂購SP業務、攔截短信(攔截刪除SP訂購成功短信)、後臺撥號、關閉WIFI、打開G網等。
其函數com.android.phone.os.Programs.main
被調用時接受2個參數:
arg0=運行日誌保存路徑、arg1=日誌輸出級別。
複製代碼
main函數首先會初始化16個Command類。這些類會根據遠程服務端下發的指令實現IMSI獲取、短信發送與攔截、短信讀取、切換APN、獲取用戶地裏位置等指令。
圖16 初始化16個Command類
注入後,發送用戶手機信息(包括病毒版本、IMEI、IMSI、MAC地址等)到遠程服務器(v9bt.heycould.org/crutch
):
圖17 發送的用戶信息
接着監聽本地3549端口,等待遠程服務端下發指令:
圖18 握手鍊接過程
咱們在跟進長老木馬四代時,發現了疑似做者開發的木馬測試程序。主要有注入測試程序和SP業務訂購測試程序。
一、注入測試程序
經過該測試程序咱們能更加清晰的瞭解木馬做者的意圖。木馬做者編寫調試工具對本身編寫的全部模塊的功能進行了全面測試,如獲取手機信息、注入行爲成功與否、短信屏蔽與攔截、短信發送、APN切換等多種功能。
下圖中能夠看到幾個很是敏感的功能,好比「後臺通話」、「編輯屏蔽內容」、「注入」等:
圖19 redbean注入測試程序
後臺通話功能能夠在後臺給某特定電話號碼撥號。在測試程序中發現了木馬做者用做測試用的手機號,該手機號是否爲木馬做者本人還沒法肯定。
圖20 後臺通話測試相關代碼
二、SP業務訂購測試程序
木馬做者爲了方便測試SP業務訂購模塊,還作了SP業務訂購測試工具。從該測試工具中能夠看到木馬做者事先已開通了SP業務通道,經過發送短信驗證訂購SP業務,並屏蔽掉SP提供商發送的確認短信和定製成功短信等。
圖21 SP業務訂購測試程序
測試程序的開發期時間線:
圖22 木馬測試工具開發時間線
測試程序的IP地址主要集中在北京與天津,美國也曾出現過,從開發的頻率中能夠看出,在2015年春節的時候,是開發版本最少的,5月和8月的高峯期,是主要功能的開發,做者對10多個手機品牌進行了病毒兼容性測試,在測試程序開發初期的2014年6月到2015年初進行了大量的兼容性測試,開發者主要使用的手機有ZTE_P六、 TCL_S960、 VOTO_V六、Sony_S39h。從這些數據推測病毒開發者應該是團隊合做,具備測試流程的專業團隊。
咱們從360安全中心後臺統計該木馬總感染量已經超過80萬,近半年感染趨勢以下圖所示:
圖23 長老四代感染數量
受長老四代影響的手機用戶機型和系統也是很是的普遍,感染該木馬的機型和系統分佈以下圖所示:
圖24 木馬感染機型分佈
圖25 木馬感染系統分佈
從地域分佈來看,廣東省是受到該木馬影響最大,分佈圖以下圖所示:
圖26 木馬感染地域分佈
隨着360手機急救箱用戶數的增加,被查殺到的木馬愈來愈多,360手機急救箱獨有的深度完整掃描,能夠深度掃描和完美清除底層ELF病毒和APK病毒,目前市場上的主流手機安全產品幾乎沒有支持ELF完整深度掃描的功能,若是您的手機刷過第三方ROM或者手機已經Root,建議您採用360手機急救箱進行一次完整的深度掃描,幫助您安全用機。
/system/bin/playlpn | /system/bin/tinycapr |
/system/bin/sdiokit | /system/bin/racdvd |
/system/bin/kyexe | /system/bin/mkaswap |
/system/bin/setfatr | /system/bin/tunefs |
/system/bin/chcomn | /system/bin/s6xd |
/system/bin/getnforce | /system/bin/swaproff |
/system/bin/bcdcmd | /system/bin/md2pd |
/system/bin/rstrcon | /system/bin/dtfexe |
/system/bin/lpnkey | /system/bin/ftmdmn |
/system/bin/thrmal | /system/bin/tinyplayr |
/system/bin/hvdcpy | /system/bin/setnforce |
/system/bin/lowcat | /system/bin/ipoctl |
/system/bin/setsebl | /system/bin/dhdp6s |
/system/bin/rildm2 | /system/bin/npsobex |
/system/bin/confwexe | /system/bin/ccaptst |
/system/bin/hciattch | /system/bin/ntfsfixr |
/system/bin/mc640d | /system/bin/srvcext |
/system/bin/getsebl | /system/bin/clatdc |
/system/bin/smdiexe | /system/bin/ddcexe |
/system/lib/libbcd.so | /system/lib/libkye.so | /system/lib/libs6xd.so |
/system/lib/libbcdcmd.so | /system/lib/libkyexe.so | /system/lib/libsdi.so |
/system/lib/libcca.so | /system/lib/liblan.so | /system/lib/libsdioki.so |
/system/lib/libccapts.so | /system/lib/liblow.so | /system/lib/libsetfat.so |
/system/lib/libchc.so | /system/lib/liblowcat.so | /system/lib/libsetnfo.so |
/system/lib/libcon.so | /system/lib/liblpn.so | /system/lib/libsetseb.so |
/system/lib/libchcomn.so | /system/lib/liblpnkey.so | /system/lib/libsim.so |
/system/lib/libcla.so | /system/lib/liblsm.so | /system/lib/libsimg2l.so |
/system/lib/libclatdc.so | /system/lib/liblsm3cm.so | /system/lib/libsmd.so |
/system/lib/libcon.so | /system/lib/libmc6.so | /system/lib/libsmdiex.so |
/system/lib/libconfwe.so | /system/lib/libmc640d.so | /system/lib/libsrv.so |
/system/lib/libddc.so | /system/lib/libmd2.so | /system/lib/libsrvcex.so |
/system/lib/libddcexe.so | /system/lib/libmd2pd.so | /system/lib/libthr.so |
/system/lib/libddd.so | /system/lib/libmka.so | /system/lib/libthrmal.so |
/system/lib/libdhd.so | /system/lib/libmkaswa.so | /system/lib/libtin.so |
/system/lib/libdhdp6s.so | /system/lib/libnps.so | /system/lib/libtinyca.so |
/system/lib/libdtf.so | /system/lib/libnpsobe.so | /system/lib/libtinypl.so |
/system/lib/libdtfexe.so | /system/lib/libntf.so | /system/lib/libtun.so |
/system/lib/libftm.so | /system/lib/libntfsfi.so | /system/lib/libtunefs.so |
/system/lib/libftmdmn.so | /system/lib/libpla.so | /system/lib/libswa.so |
/system/lib/libgetnfo.so | /system/lib/libplaylp.so | /system/lib/libswapro.so |
/system/lib/libgetseb.so | /system/lib/libracdvd.so | /system/lib/libget.so |
/system/lib/libgeu.so | /system/lib/librac.so | /system/lib/libset.so |
/system/lib/libhci.so | /system/lib/libril.so | /system/lib/libs6x.so |
/system/lib/libhciatt.so | /system/lib/librildm2.so | /system/lib/librim.so |
/system/lib/libhvd.so | /system/lib/librstrco.so | /system/lib/libipoctl.so |
/system/lib/libhvdcpy.so | /system/lib/librst.so | /system/lib/libipo.so |
329846b610c76e884095ea9d5f5c8834 |
082bf566cc352c394577af7f1f797ae5 |
4659b1400f48318d0f63c47dc2b9b72e |
a86827029a76240557e6c30b2792df14 |
789295e3d7887a4c3c32b3a6e75e554f |
cef52d7da4882ab0a0501842d394295a |
2dab85922133d23af30daa3d77d09476 |
f7ba67aa8d5675f18990375e3454235b |
eac6a1cbae6f58a44cdbf7238ef91fa2 |
0dbf5bdfc6dd1bca39cff140e4fc7d59 |
d4e4e3f6cbef3808f8ad917a540f836d |
da7a39444869e39264f8f1ddc9c42a97 |
e42b6ce6c3931989c975ce59c457d66a |
e111dcc031a84ef725bcf3e81ed71f36 |
8de2c6ae586916cba989e0019105d274 |
ad18e3a36d3a67e1ecbc2220cae1483f |
8e2b79548050e4b9ad60d1d984f12d9d |
933a65e0105c4c0f5440aeffb3c1a764 |
8b2bd87da31254ef4ecb4ffcb8f26aa6 |
ae4936e5aad44b320f2bf5d698c92db4 |
706c4b63184a2ab2f809169a2b8fe9eb |
803573b88583e4b81dec39643d6f41b7 |
09ba245c80582cf115a870f43f3bc053 |
09dbbc772799723e43c34c9fae2f4ad8 |
0ae3e4a351cfe9d6228296537db418ec |
0fd672c1f0333403a59bbdf04c0af05e |
148c7874455c10834f0e7937f15dbddf |
18d8f5803e1f580c2410bb98b59a127d |
22046f82b2a72e5686603ab538b3a08a |
24af8fc3faf1a488d444e9a4de066073 |
25e881576d9c389e445787626f6cf43f |
2cce7a5f8d1b64b8f5b2e2760cc85894 |
33d5e3e723d3873420fc70a767de5e40 |
37fc9630b0dabe98b6d23bf6e5cc3aa2 |
3b2d947123032f130938fb361d2bd2cd |
3feab5d93fe5ff6a17f43ecfccd52274 |
45bf3cd32b9926ad516dd114c2f86fd2 |
5562b855d6355c963e12a66bea648c9e |
55eb106019a630b89b506feda186c287 |
5e9053e17e962cbbd8b36d6b1077684a |
5ff96879be23ac965bc2e2b6ded9234e |
60bab93a8a7930334283aee53089c746 |
6289059110505539e2feb61aecfcafee |
6405d4d65e2a7e124f6b067a87e2a3c3 |
691fe3e6f56fc2dcb2acd67c68c95c16 |
73f98eaa2ce77a5027a5dbff80841b90 |
79f1d3d921279777a0922e09c579815c |
7b8dfae2e5bedec452af3c2187d3dfdf |
8bb83547ec903cbb272ec21e6ff8c11e |
99b246167b11d9aa912a346a3f976486 |
9ded2e0b0557a18412ff8d17141594df |
9fdc479b76099b099ad85fafb3d80d17 |
a5dcad67df52793cc72a706697ddfb00 |
a91fb51b9ecaff59e0aa3f9131ae9f0d |
b7a29b102f332dc7ddc94c86d514e9fc |
bf12b4062293e553878e5a8ed5e5c8ee |
c372ab758d39e6e03ac544c053dba011 |
c4a942a1b5cffd89f79b9ed9c0dc7fc1 |
FakeDebuggerd.A:blogs.360.cn/360mobile/2…
FakeDebuggerd.B:blogs.360.cn/360mobile/2…
FakeDebuggerd.C:blogs.360.cn/360mobile//…