劉井強,李斌,陳立章,陳彬
(哈爾濱工業大學(威海)計算機科學與技術學院,山東 威海264209)
基于Android系統免Root主防方法的研究
劉井強,李斌,陳立章,陳彬
(哈爾濱工業大學(威海)計算機科學與技術學院,山東 威海264209)
為解決Android手機獲取Root權限系統安全性的降低,非Root授權下Android手機安全應用防護效果不理想的一系列問題,研究了ART運行時工作原理、Java反射機制和AOP原理,設計驗證了一套免Root主動防御機制,避免了傳統防護應用在系統內核層Hook系統關鍵函數需要Root授權帶來的安全問題以及在應用層調用API效果不理想的現狀,實現了對手機應用的敏感行為攔截,能夠達到增強Android手機防護的效果。
Android系統;免Root主防;AOP;Hook;行為攔截;Dalvik
Android是Google推出的以Linux內核為基礎的開源移動操作系統,采用4層分層架構,從上層到底層依次為應用層、應用框架層、Android運行時和庫文件層、Linux內核層,Android系統層次架構如圖1所示。
近幾年智能手機的普及暴露出一系列移動平臺安全問題,尤其是Android平臺惡意應用泄露隱私的現象更是屢見不鮮[1],Android平臺敏感行為檢測已經成為安全研究的熱點[2]。入侵檢測等被動防御技術不能在系統的脆弱性方面做出預判斷,而主動防御技術能夠克服這一缺點,通過分析敏感操作預測攻擊角度,做出主動防御策略響應[3]。通過在Linux內核層對服務和進程進行注入,Android安全應用從惡意代碼定義出發,Hook系統關鍵函數調用,能夠對程序惡意行為做出判斷,但前提是取得Root授權。鑒于開放Root授權后會降低手機系統安全性,手機生產廠商反對Root授權。安全應用廠商以漏洞利用方式獲取Root授權,但漏洞生命周期有限,使手機獲取Root授權難度加大。多數Android惡意應用在免Root授權情況下仍可正常運行,如廣告推廣、短信推送、隱私竊取[4],但在相同條件下,Android安全應用不能達到有效的手機防護效果[5]。
一些研究者對Android系統的安全防護做出如下嘗試。Sanz等[6]和Felt等[7]以Android應用的權限聲明為依據,判斷軟件是否存在惡意行為,這種方式僅從聲明某項敏感權限的角度出發,對軟件是否存在惡意行為做出判斷,存在不準確性的缺點。Androguard[8]作為流行的Android應用安全分析工具,對Android相似性應用采用歸一化壓 縮 距 離 ( NCD,Normalized compression distance)[9]方法,結合函數熵等方法,形式化描述函數特征,僅通過比較應用的相似性,不能從應用自身行為出發做出有效判斷。語義分析和特征碼分析法[10]從被動防御角度出發,判斷軟件是否存在惡意行為。在代碼的語義分析方面,對于PC端應用的語義檢測,已經做了一些理論研究[11,12],有利于從該角度出發進行病毒變種檢測分析;在特征碼分析方面,移動端的防護研究在實踐方面取得了一定的進展,Desnos[13]從應用程序的敏感代碼特征出發在相似性上做出比較,是一種被動防御的手段,存在軟件防護滯后性的缺點。
本文利用反射機制和面向切面編程(AOP,aspect oriented programming)原理,基于安卓運行時(ART,Android runtime),將Java層定義的方法修改為Native層定義的方法,使被修改后的方法調用由Java層轉為Native層,在Native層改變原有程序代碼的執行邏輯,可以在免Root授權情況下動態劫持和判斷程序敏感行為。

圖1 Android系統架構
2.1主動防御角度的安全應用隱患分析
從主動防御角度出發,普通手機安全應用防護隱患主要存在以下兩個層面。
1)基于Linux內核層的安全防護。以進程注入方式Hook系統關鍵函數調用,需要Root授權,因此會降低系統安全性,如惡意程序在手機Root授權后可以靜默安裝其他程序[14]。
2)基于應用層的安全防護。通過Android系統頂層框架的應用程序編程接口(API,application programming interface),為開發者提供的封裝類庫在功能上已經被事先定義。如觸發短信發送到短信接收前,該時間段內未提供可操作的API來檢測短信的狀態。
2.2被動防御角度的安全應用隱患分析
當一種木馬或病毒開始在網絡中傳播被發現后,第三方安全廠商(如360、騰訊等)會對帶有該木馬或病毒的惡意軟件進行行為分析,找出惡意軟件行為特征碼,形成自己的軟件安全病毒庫。手機安全防護應用根據病毒庫進行特征碼匹配,判斷軟件是否存在安全隱患。被動防御的缺點是只有當用戶的利益受到損失后,才能發現惡意軟件的危害,在安全應用防護方面存在滯后性,防御效率較低[15]。
2.3手機生產廠商和第三方安全廠商的配合問題
隨著手機隱患受到大家的廣泛關注,手機生產廠商開始陸續定制自己的安全防護功能,該功能是一種ROM內置的防護措施[16],可以深入系統底層對手機系統進行防護,不需要取得Root授權,能夠對手機的敏感行為進行攔截,但手機生產廠商并沒有第三方安全廠商在安全防護方面的技術優勢。同時,手機生產廠商沒有為第三方安全廠商提供深入底層的防護接口。兩方廠商配合不當,最終導致用戶的手機防護效果不能最大化。
3.1改進原理介紹
Java VM在虛擬棧上運行,執行.class文件,Dalvik VM在寄存器上運行,執行.class文件經dex工具處理后的.dex文件。基于ART運行時,調用libdvm.so中的方法,將Dalvik VM原有的執行流程和處理方法進行修改,初始化原Dalvik VM的同時,執行自定義方法,將Java層方法修改為Native層方法,為應用層調用Native層方法提供自定義API支持,Java VM、Dalvik VM和ART運行時三者關系如圖2所示。
在應用層調用JNI的Native方法,如果該方法沒有被顯示聲明,程序會從lib庫中自動加載.so文件,在該文件中找到并注冊JNI的Native方法。基于ART運行時,改變原有對象方法在Dalvik虛擬機的定義,并為應用層提供修改后的API,通過JNI回調應用層的統一處理方法。在應用層,主要應用Invoke反射機制,基于AOP原理在API統一處理方法中調用并重寫before、after函數,形成加固模塊,Dalvik VM的啟動時序如圖3所示。

圖2 Java VM、Dalvik VM和ARTVM的關系

圖3 Dalvik VM啟動時序
解壓待加固的應用程序安裝包,其主要組成如表1所示。

表1 APK解壓包主要文件組成
在清單文件中修改普通應用程序的Application入口為加固程序入口,在Application中全局初始化應用加固模型,添加所有其他類和權限聲明,合并資源文件,將APK重打包并重簽名,生成新的加固安裝包,應用加固模型如圖4所示。
3.2改進模型實現
1)加固應用執行流程
在用戶啟動加固應用時,Zygote進程以Root身份創建并fork自身,然后加載Android運行時環境(虛擬機、類庫、動態庫),切換為應用相應的用戶身份,加載應用包并運行應用。安裝加固程序包,程序加載加固模塊,預定義Hook請求,加載并初始化系統服務,當程序向系統服務請求預定義的關鍵函數時,加固模塊攔截該請求并進行敏感行為審核。只有審核通過后,才能繼續請求調用系統服務,返回處理結果;否則,屏蔽該請求,執行加固過程如圖5所示。加固模塊執行在應用相應的用戶身份下,在Android運行時層調用libdvm.so庫中的方法反射得到Native層的方法,沒有在內核層Hook系統的函數調用或者注入服務進程,也沒有在Native層執行需要Root授權的操作,在攔截函數調用時可以免Root授權。
2)Java層調用Native層方法
通過查找待Hook類的方法定義的類名、方法名、參數信息,依次調用Class.forName()、Class.getDeclaredMethod()、 Field.getIField()、Constructor.getParameterTypes()方法,反射得到待Hook類的對象、方法、函數偏移量和待Hook方法的參數信息。Java層加載.so文件,將待Hook類的對象、方法、函數偏移量和Hook方法的參數信息作為參數,傳入 Native層的自定義hookMethodNative()方法。Java層調用Native層方法的執行流程如圖6所示。

圖4 應用加固模型

圖5 加固應用執行流程

圖6 Java層調用Native層方法
3)Native層Hook Java層方法
在 Native層調用 initNative(),初始化Native層信息,JNI注冊Java中的待Hook類和方法。
static int register_com_protectdemo_Bridge (JNIEnv* env) { return env->RegisterNatives (javaClass,javaMethods,NELEM(javaMethods));}
調用libdvm.so庫中的dvmDecodeIndirectRef()方法來獲得要注冊JNI方法的類對象,調用dvmSlotToMethod()方法,根據函數的偏移量從ClassLoader中獲取函數指針,獲得待Hook的方法并保存被Hook的方法信息。在ART將方法標記置為 ACC_NATIVE方法,讓方法屬性nativeFunc指向本地的methodCallbackHandler。將Java層代碼的待Hook方法聲明為Native方法后,執行Java層代碼的方法會從Native層查找方法定義,而非在Java層執行代碼,從而在Native層實現改變代碼的執行邏輯。被Hook方法修改的關鍵代碼如下。


此時,待Hook方法已經被成功Hook,代碼的執行邏輯轉為methodCallbackHandler調用本地的 nativeCallbackHandler()方 法 , 本 地 的nativeCallbackHandler()方法調用dvmCallMethod()方法,執行nativeCallbackHandler()方法,該方法回調Java端的handleHookedMethod()方法,其關鍵代碼如下。
dvmCallMethod(self, nativeCallbackHandler, NULL,&result,originalReflected,(int)original, additionalInfo,thisObject,argsArray);
bridgeClass = env->FindClass("com/ protectDemo/android/Bridge");
nativeCallbackHandler= (Method*)env-> GetStaticMethodID(bridgeClass,"handleHookedMeth od",
"(Ljava/lang/reflect/Member;ILjava/lang/Object;Lja va/lang/Object;[Ljava/lang/Object;)Ljava/lang/Obje ct;");
Native層Hook Java層方法執行流程如圖7所示。
4)Java層實現AOP Proxy機制
Java端的 handleHookedMethod()方法通過AOP Proxy機制,實現before()和after()方法,通過在before()和after()中修改被Hook方法的執行邏輯來添加自定義的方法,實現對Hook方法的敏感行為攔截,執行流程如圖8所示。
Android實驗機未進行Root授權,分別安裝主流手機安全應用軟件和卸載主流手機安全應用軟件,對未經允許自動發送短信程序做如下實驗。
1)將安全應用軟件金山、獵豹、360、百度、騰訊推出的主流手機安全衛士安裝至手機,安裝用戶未經允許發送短信的程序,點擊短信發送按鈕,沒有收到安全應用軟件的攔截提示,短信發送成功。如果手機安全應用開啟全面防護,要求用戶Root授權,加固應用執行流程界面如圖9所示。

圖7 Native層Hook Java層方法

圖8 Java層AOP Proxy機制

圖9 加固應用執行流程界面
2)卸載手機安全應用軟件,安裝用戶未經允許發送短信的程序,程序加固后提供關閉短信攔截和開啟短信攔截功能,短信發送行為檢測程序示意如圖10所示。

圖10 短信發送行為檢測程序示意
3)使用關閉短信攔截功能,點擊短信發送按鈕,短信發送成功,關閉短信發送行為檢測功能如圖11所示。
4)卸載手機安全應用軟件,安裝用戶未經允許發送短信的程序,開啟短信攔截功能,從嘗試發送短信到接收方未收到短信時間段內,短信發送過程被中斷并提醒用戶,開啟短信發送行為檢測功能如圖12所示。
對于上述自動發送短信程序實驗可做如下分析。

圖11 關閉短信發送行為檢測功能
1)手機安全應用在免Root情況下沒有檢測到短信發送的敏感行為并通知用戶。如果手機安裝帶有惡意軟件的程序,比如:自動發送短信的惡意程序,用戶手機會在不知不覺中發送短信,導致利益受損。另一方面,隨著第三方Android系統的定制,手機Root授權的難度增加,如小米手機根據手機安全應提供的Root步驟獲取權限失敗。
2)經過本文的加固方案后,在免Root情況下,可以檢測到手機軟件的敏感行為并通知用戶,避免了Root授權后手機安全風險的增加,同時彌補了普通手機安全應用攔截敏感行為效果不理想的局限性。

圖12 開啟短信發送行為檢測功能
相對于普通手機安全應用,本文方法有以下優點:
1)不需要手機Root授權即可運行,進而提高手機安全性;
2)主動發現并提醒手機使用者惡意應用存在的敏感行為;
3)避免手機安全應用在沒有Root授權下防護功能受限的不足。
因此,相對于普通手機安全應用獲取Root授權后手機安全性降低,未取得Root授權時安全防護功能存在局限性的特點,本文方法能夠實現對手機應用敏感操作的行為監控,對于Android手機安全應用提高免Root主防能力有現實意義。
[1]騰訊移動安全實驗室2015年第三季度手機安全報告[EB/OL].(2015-11-03).http://m.qq.com/security_lab/news_detail_335.html.Mobile security report of Tencent mobile security laboratory in 2015,third quarter[EB/OL].(2015-11-03).http://m.qq.com/security_ lab/news_detail_335.html.
[2]李挺,董航,袁春陽,等.基于Dalvik指令的Android惡意代碼特征描述及驗證[J].計算機研究與發展,2014,51(7):1458-1466.LI T,DONG H,YUAN C Y,et al.Description of Android malware feature based on Dalvik instructions[J].Journal of Computer Research and Development,2014,51(7):1458-1466.
[3]李志,單洪,馬春來,等.基于攻防圖的網絡主動防御策略選取研究[J].計算機應用研究,2015,32(12).LI Z,SHAN H,MA C L,et al.Network active defense strategy selection based on attack-defense graph[J].Application Research of Computers,2015,32(12).
[4]李淑民.Android手機隱私泄露研究[J].軟件,2015(2):69-72.LI S M.Research on privacy leakage of Android smart phones[J].Computer Engineering&Software,2015(2):69-72.
[5]吳茂林.微信紅包折射手機安全防護軟肋[J].通信世界, 2015(6):17.WU M L.We Chat ked envelope reflects a soft soft spot of mobile security protection[J].Communications World,2015(6):17.
[6]SANZ B,SANTOS I,LAORDEN C,et al.PUMA:permission usage to detect malware in Android[C]//The 5th International Conference on Computational Intelligence in Security for Information Systems(CISIS’02).Berlin:Springer,c2103:289-298.
[7]FELT A P,CHIN E,HANNA S,et al.Android permissions demystified[C]//The 18th ACM Conference on Computer and Communications Security,New York.c2011:627-638.
[8]DESNOS A.Reverse engineering,malware and goodware analysis of Android applications…and more(ninja!)[CP/OL].(2013-03-26).https://github.com/androguard/androguard.
[9]CILIBRASI R,VITANYI P M B.Clustering by compression[J].IEEE Transactions on Information Theory,2005,51(4):1523-1545.
[10]南秦博,慕德俊,侯艷艷.Android系統惡意程序檢測技術研究[J].現代電子技術,2015(12):47-50.NAN Q B,MU D J,HOU Y Y.Research of malicious program detection technology for Android system[J].Modern Electronics Technique,2015(12):47-50.
[11]CHRISTODORESCU M,JHA S,SESHIA S A,etal.Semantics-aware malware detection[C]//The 2005 IEEE Symposium on Security and Privacy(Oakland’05).c2005:32-46.
[12]王蕊,馮登國,楊軼,等.基于語義的惡意代碼行為特征提取及檢測方法[J].軟件學報,2012,23(2):378-393.WANG R,FENG D G,YANG Y,et al.Semantics-based malware behavior signature extraction and detection method[J].Journal of Software,2012,23(2):378-393.
[13]DESNOS A.Android: static analysis using similarity distance[C]//The 45th Hawaii International Conference on System Sciences(HICSS),c2012:5394-5403.
[14]楊超,劉文慶,張偉,等.基于利用方式的Android Root漏洞分析[J].計算機科學,2014,41(S1):343-346.YANG C,LIU W Q,ZHANG W,et al.Utilization pattern based Android Root vulnerability analysis[J].Computer Science,2014, 41(S1):343-346.
[15]盧文杰.網絡安全主動防御技術[J].網絡安全技術與應用, 2015(4):148.LU W J.Network security active defense technology[J].Network Security Technology&Application,2015(4):148.
[16]孫曉奇.面向多國發布的手機軟件定制系統的設計與實現[D].北京:中國科學院大學,2014.SUN X Q.Design and implementation of software custom ization for global released mobile phone[D].Beijing:University of ChineseAcademy of Sciences,2014.
Research based on the method of Android system active defense without Root permission
LIU Jing-qiang,LI Bin,CHEN Li-zhang,CHEN Bin
(College of Computer Science and Technology,Harbin Institute of Technology,(Weihai),Weihai 264209,China)
In order to solve the problem that the system security is reduced through getting Root permission and that the security of Android smartphone is not effective without Root permission,the working principle of ART,the Java reflection mechanism and AOP principle were studied.The new mechanism was designed and implemented to avoid the security problem caused by the traditional protection application of Hooking system function in the kernel layer and the limitations with calling API in the application layer ineffectively.The interception of sensitive behavior and the protection of smartphone were both achieved.
Android system,active defense without Root,AOP,Hook,behavior interception,Dalvik
TP309
A
10.11959/j.issn.2096-109x.2016.00013
2015-10-10;
2015-12-30。通信作者:李斌,libin@hit.edu.cn

劉井強(1991-),男,山東青州人,哈爾濱工業大學(威海)碩士生,主要研究方向為網絡安全和移動安全。

李斌(1962-),男,黑龍江慶安人,哈爾濱工業大學(威海)教授,主要研究方向為計算機網絡安全。

陳立章(1980-),男,湖南邵東人,哈爾濱工業大學(威海)高級工程師,主要研究方向為網絡安全與內容安全、網絡管理等。

陳彬(1968-),男,吉林省吉林市人,博士,哈爾濱工業大學(威海)計算機科學與技術學院副院長、副教授,主要研究方向為人工智能、機器學習。