任小波 張長勝



摘要: 本文為探討安卓系統醫用程序的安全性能,對不同方式的拓展框架進行了對比和分析,研究結果顯示I-ARM-Droid框架的優越性能。本文展示了此框架下安卓應用程序的部分代碼和Dalvik bytecode;對深入了解I-ARM-Droid框架,并在重寫安卓應用程序相關工具中發揮作用具體應用價值。
Abstract: This paper makes a comparative analysis of the safety performance of the medical program of Android system, and analyzes the development framework of different ways. The results show that the I-ARM-Droid framework is superior to the performance of the system. This article shows some of the code and bytecode Dalvik of Android application under this framework; to understand the I-ARM-Droid framework, and to rewrite the application of Android application related tools to play a role in specific applications.
關鍵詞: 安卓應用程序;安全測試;拓展框架
Key words: Android application;security testing;development framework
中圖分類號:[TN915.09] 文獻標識碼:A 文章編號:1006-4311(2017)01-0162-03
0 引言
安卓程序的應用市場隨著移動互聯網時代的發展經歷著日新月異的改變。目前,就安卓系統來講,其中正在使用的應用程序多達百萬種,因此,對于安卓系統來講,如何進行安全防控和安全測試就顯得尤為重要[1]。正因為這樣,諸多帶病毒的相應軟件從安卓漏洞當中出發,使得眾多用戶自身的隱私遭受到了損害。研究者針對安卓手機用戶的安全問題進行了諸多研究,開發多種形式的拓展框架 (Framework Extension)為其中重要程度很高的方式,在這當中,I-ARM-Droid(In-App Reference Monitors for Android Applications)框架承擔著重寫重任[2],其突出的優點便在于用戶不必更改安卓系統的中間件和Linux內核,只需要關心應用APP就可以對自身電腦進行安全防范。之所以使用框架,目的是最大程度上以自定義的方式消除當下安卓系統當中的相應安全隱患。
1 拓展框架的安全防控原理
拓展框架通過確定目標方法的應用程序建立引用監聽,如此目的有二:其一,用戶自主性較強,可自主就Java源代碼進行編寫,之后進行編譯,得到Dalvikbytecode攔截目標;除此之外,對于用戶來講,原有apk(安卓應用程序)若以反轉編譯方式得到Dalvikbytecode并進行修改,使用期調用用戶編寫的API,將修改的Dalvikbytecode和用戶創建的Dalvikbytecode集成一體,用戶簽名創建驗證修改的apk。需要注意的是,在安卓系統中通常用證書的形式驗證程序開發者,因此,在這個過程中拓展框架成為關鍵一點,用戶不必更改安卓系統的中間件和Linux內核,只需要關心應用APP就可以添加安全控制措施。并且,通過測試證明修改后的部件運行性能沒有收到絲毫影響。
1.1 確定目標方法
拓展框架進行采用的時候,第一,用戶應了解相應的目標方法,同時在此基礎上要滿足用戶的個性化需求。以框架為例,框架示意圖如圖1所示,Dalvikbytecode當中,標識方面應以全名進行認可,詳細來看,即所有方法在全名當中都含有多個方面,比如返回類型(returning types)、包名(package name)、和類名(class name)[3]。這種方法在用戶需要攔截兩個同名目標方法時不會混淆,盡快兩個方法的名相同,但是可以明顯看出它們在不同的包內。
1.2 創建Stub/Wedge Java API
當得到相應的目標方法后,對于用戶來講,即可在此基礎上進行自定義,所以,就自定義狀況進行闡述時,需要分析Stub和Wedge這兩個重要的概念。
在Dalvikbytecode中有靜態方法(Static method),構造方法(Constructor),實例方法(Instance method)三種主要類型可供調用,在I-ARM-Droid框架中,用戶可以通過靜態方法添加用戶的自定義行為,因此,這種方法被稱為Stub方法。具體而言,靜態方法是在其方法聲明時添加Static標示符,而Java支持靜態方法和靜態變量,所以靜態方法在被調用時需要與其類名一同,并不需要提前創建這個類的實例。舉例來說,I-ARM-Droid框架當中應就“java. lang. Math. Sqrt”方法進行攔截,用戶方式,則可以同樣的返回種類與名字進行設計,也就是 “pkgprefix. java. lang. Math. sqrt”。然而就實例和靜態兩種方式來講,其是完全不同的,實例方法便不需要標識符,在被調用時,用戶只有就實例類型進行創設才可使用相應的方式。舉例如下:
ClassA classA=new ClassA();
classA. instanceMethodName()。
圖2當中展現的為被攔截實例方式。
“android. app. Activity. setContentView(int)”。
如圖2,其展示的即是用戶將I-ARM-Droid框架當作基礎進行攔截的相應“android. app. Activity. setContentView(int)”。在這當中,用戶有對返回種類與名字進行相應的創設,差別及是新方式當中的參數共有2個,其一即是被攔截方面的相應實例。和上述方式存在差別的是,所謂構造方式,屬于Java創建類當中的一種實例,特征即是定義和方法存在相似性,區別即是類名和構造方式間是相應的,其中沒有返回類型。ClassA classA=new ClassA(args)。圖3中便是攔截的構造方法。
觀察 I-ARM-Droid框架能夠發現,所謂Wedge方法,即是用戶就目標方法進行攔截的相應方式,舉例來講,若用戶想就“android. app. Activity. setContenView”進行攔截的話,首先應建立的是Wedge類“pkgprefix. wedge. android. app. Activity”。其中,能夠就setContentView進行整體囊括。對于用戶來講,需要做的即是將全部承襲 “android.app.Activity”均改為繼承“pkgprefix.wedge.android.app.Activity” 類。圖4即為攔截的“android.app.activity” 類。在圖4中,相應的用戶攔截方式是對為“android. app. Activity. setContent View”進行的相應調用,其中Weage整體名稱是“pkgprefix. wedge. android. app. Activity. setContentView”。在此基礎上,即可在更改MainActivity的前提下得到Wedge Activity。
1.3 更改原始安卓apk
將Wedge與Stub當作基礎攔截目標的方式,用戶方面,即可在對原有的安卓系統應用程序當中的相應目標方式進行引用,在此基礎上,重寫名稱的調用情況,通常來講,用戶能得到apk文件,在這時候,apktool會因為反編譯的方式得到Dalvikbytecode。命令操作即是“apktool d APPNAME. Apk DESTINATION FOLDER NAME” 。下述內容是詳細對Dalvikbyte code攔截方式的闡述。①以Dalvik bytecode方式為基礎,對靜態方式進行更改;②以Dalvik bytecode為基礎,更改其中的實例方式;③在Dalvik bytecode中修改構造類型;④在Dalvik bytecode中修改 Wedge 方法。
1.4 新的未簽名的apk文件由Dalvik bytecode編譯
用戶方面,若之前的Dalvik bytecode進行了相應的更改,同時劃分成兩類Dalvik bytecode。則用戶的做法即是最大程度上將其進行合成,而apktool工具即能創設相應的apk文件,一旦命令成功執行之后,新的apk文件便創建在apktool\simpleApp\dist上。
1.5 簽名測試安卓應用程序
若安卓系統當中有沒有簽名的相應apk,則用戶的證書即會驗證直白,所以此基礎上可以signapk.Jar為基礎,獲取apk文件。概況而言,Stub和Wedge兩種方式攔截了要傳遞給目標方法的參數,適宜I-ARM-Droid用戶充分利用現有信息監聽并制定相應的安全策略。
2 基于安卓程序安全視角的I-ARM-Droid拓展框架分析
在不同的包中創建Stub和Wedge方法,并不能用行內添加自定義代替[4]。這是因為,將其放在不同的包中,能夠極大有利于開發者減少代碼量,并且新的方法只需要進行單次添加。換句話說,這樣可以減少代碼冗余,并且管理代碼十分方便。同時,本文選擇用Dalvik bytecode代替javabytecode植入也頗有深意,這是因為諸如dex2jar等類似的相應編譯工具,均是可通過Dalvik bytecode進行轉碼的,之后得到Java字節碼,卻無法保證可以把javabytecode更改為Dalvikbytecode并保證其安全性能。
2.1 拓展框架的局限之處
以Stub與Wedge方式當作基礎進行創設,最關鍵的即是相應的開發人員在安卓應用程序開放上擁有經驗,就算是I-ARM-Droid可維持安卓系統當中的相應中間件層,然而開發者方面,仍舊不能很好的就不一樣的目標方法的安全敏感性進行明確,因此開發者便無從判定,需要向擁有豐富開發經驗的大公司求助[5]。很顯然,這對安卓應用程序開發而言是一筆不菲的開支,同是,當開發者不能維持源代碼準確性時,即會得到全部危險目標方法,特別應注意的為, Stub與Wedge兩種方式均需要開發者就原有的相應程序代表展開變化,舉例來講,采取Wedge方法時,開發者方面,應就原有的子類進行變化,承襲其中含有Wedge方式的相應類,若類在安全測試上沒有通過,那么程序的正常性就會受到威脅。
2.2 拓展框架的優越性能
比較而言,I-ARM-Droid的框架是安卓全擴展形式的“便攜式”體現,這是因為此框架存于應用層當中,優勢即是和中間件與Linux內核方面的距離較遠。若框架在進行修改的時候關系到此兩方面的話,那么安卓系統的平臺代碼全部都得更換。在此狀況下,這種更換要比單純的對應用程序代碼進行更改的步驟與內容更為繁雜,然而,即使是整體進行修改,同樣應獲取root權限[6],而這即會在很大程度上讓安卓系統平臺在安全方面受到威脅。所以, I-ARM-Droid優勢是較高的,對其來講,需要做的即是對應用層進行部分的更改。另外,在注入了stub和wedge API后,對安卓應用程序性能上的影響微乎其微。
以最大程度上展現驗證性能為目的,本篇在進行試驗的時候,采用的為Stub方法,對象即是“java.lang.StringBuilderappend(String str)” 調用過程,首先創建了靜態方法,如圖5所示。在此案例中,本文完成相應的調用目標方式是“java. lang. StringBuilder. append(String str)”10 000次。原有調用的相應時間是68μs,納入Stub后,調用時間增加到了75μs。這在一定程度上表明幾乎每一次的相應調用時間會維持在0.0007μs左右。如圖6所示,Logcat所展示出的是納入stub方法之前與之后,在調用時間方面的狀況(“pkgprefix. java. lang. StringBuider. append(java. lang. StringBuilder sb, String str” )。概而言之,重要性是I-ARM-Droid框架的重要特點,無論是哪種目標方式,其源頭都是Android SDK,或是Java SDK。除此之外,所有安卓應用程序當中,對象用戶均可以用相同的方法攔截目標方法,保證安卓應用平臺的安全性和兼容性。
3 結論
本文通以I-ARM-Droid拓展框架展示了部分代碼和工具,并通過安卓應用程序改進測試。本文研究在對目標進行明確時,挑選的是難度較低的方式,就Stub與Wedge兩種方式進行了創設,同時展出了Dalvik bytecode反編譯(改正后)的相應方式。就本篇來講,談到的2類方式都可以對參數進行攔截,所以用戶即具有較大的便利性,可以相對明確的方式就目標方法展開監控。
參考文獻:
[1]夏宏利.云應用安全測試技術探索[J].計算機與網絡,2014(23).
[2]張超永,鄧迎君,李松合,李國杰.對搭建企業源代碼安全測試云平臺的研究[J].電腦編程技巧與維護,2016(09).
[3]Davis B,Sanders B,Khodaverdia A,et al. I-ARM-Droid:A rewriting framework for in - app reference monitors for android
applications[C]/ /In IEEE Mobile Security Technologies(MoST),San Francisco,CA,2012.
[4]Hornyack P,Han S,Jung J,et al.These aren t the droids you re looking for:retrofitting android to protect data from imperious applications[C] / /Proceedings of the 18th ACM conference on Computer and communications security.ACM,2011.
[5]Stavrou,Angelos,Ryan Johnson,et al. Programming on Android:Best Practices for Security and Reliability[C]/ /Software Security and Reliability (SERE). I E 7th International Conference,2013:1-2.
[6]Rhee,Keunwoo,Hawon Kim.Security Test Methodology for an Agent of a Mobile Device Management System[J].International Journal of Security & Its Applications,2012,6:2.