• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于安卓系統(tǒng)應(yīng)用程序安全視角對拓展框架進行測試和分析

      2017-01-24 07:52任小波張長勝
      價值工程 2017年1期

      任小波 張長勝

      摘要: 本文為探討安卓系統(tǒng)醫(yī)用程序的安全性能,對不同方式的拓展框架進行了對比和分析,研究結(jié)果顯示I-ARM-Droid框架的優(yōu)越性能。本文展示了此框架下安卓應(yīng)用程序的部分代碼和Dalvik bytecode;對深入了解I-ARM-Droid框架,并在重寫安卓應(yīng)用程序相關(guān)工具中發(fā)揮作用具體應(yīng)用價值。

      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.

      關(guān)鍵詞: 安卓應(yīng)用程序;安全測試;拓展框架

      Key words: Android application;security testing;development framework

      中圖分類號:[TN915.09] 文獻標識碼:A 文章編號:1006-4311(2017)01-0162-03

      0 引言

      安卓程序的應(yīng)用市場隨著移動互聯(lián)網(wǎng)時代的發(fā)展經(jīng)歷著日新月異的改變。目前,就安卓系統(tǒng)來講,其中正在使用的應(yīng)用程序多達百萬種,因此,對于安卓系統(tǒng)來講,如何進行安全防控和安全測試就顯得尤為重要[1]。正因為這樣,諸多帶病毒的相應(yīng)軟件從安卓漏洞當(dāng)中出發(fā),使得眾多用戶自身的隱私遭受到了損害。研究者針對安卓手機用戶的安全問題進行了諸多研究,開發(fā)多種形式的拓展框架 (Framework Extension)為其中重要程度很高的方式,在這當(dāng)中,I-ARM-Droid(In-App Reference Monitors for Android Applications)框架承擔(dān)著重寫重任[2],其突出的優(yōu)點便在于用戶不必更改安卓系統(tǒng)的中間件和Linux內(nèi)核,只需要關(guān)心應(yīng)用APP就可以對自身電腦進行安全防范。之所以使用框架,目的是最大程度上以自定義的方式消除當(dāng)下安卓系統(tǒng)當(dāng)中的相應(yīng)安全隱患。

      1 拓展框架的安全防控原理

      拓展框架通過確定目標方法的應(yīng)用程序建立引用監(jiān)聽,如此目的有二:其一,用戶自主性較強,可自主就Java源代碼進行編寫,之后進行編譯,得到Dalvikbytecode攔截目標;除此之外,對于用戶來講,原有apk(安卓應(yīng)用程序)若以反轉(zhuǎn)編譯方式得到Dalvikbytecode并進行修改,使用期調(diào)用用戶編寫的API,將修改的Dalvikbytecode和用戶創(chuàng)建的Dalvikbytecode集成一體,用戶簽名創(chuàng)建驗證修改的apk。需要注意的是,在安卓系統(tǒng)中通常用證書的形式驗證程序開發(fā)者,因此,在這個過程中拓展框架成為關(guān)鍵一點,用戶不必更改安卓系統(tǒng)的中間件和Linux內(nèi)核,只需要關(guān)心應(yīng)用APP就可以添加安全控制措施。并且,通過測試證明修改后的部件運行性能沒有收到絲毫影響。

      1.1 確定目標方法

      拓展框架進行采用的時候,第一,用戶應(yīng)了解相應(yīng)的目標方法,同時在此基礎(chǔ)上要滿足用戶的個性化需求。以框架為例,框架示意圖如圖1所示,Dalvikbytecode當(dāng)中,標識方面應(yīng)以全名進行認可,詳細來看,即所有方法在全名當(dāng)中都含有多個方面,比如返回類型(returning types)、包名(package name)、和類名(class name)[3]。這種方法在用戶需要攔截兩個同名目標方法時不會混淆,盡快兩個方法的名相同,但是可以明顯看出它們在不同的包內(nèi)。

      1.2 創(chuàng)建Stub/Wedge Java API

      當(dāng)?shù)玫较鄳?yīng)的目標方法后,對于用戶來講,即可在此基礎(chǔ)上進行自定義,所以,就自定義狀況進行闡述時,需要分析Stub和Wedge這兩個重要的概念。

      在Dalvikbytecode中有靜態(tài)方法(Static method),構(gòu)造方法(Constructor),實例方法(Instance method)三種主要類型可供調(diào)用,在I-ARM-Droid框架中,用戶可以通過靜態(tài)方法添加用戶的自定義行為,因此,這種方法被稱為Stub方法。具體而言,靜態(tài)方法是在其方法聲明時添加Static標示符,而Java支持靜態(tài)方法和靜態(tài)變量,所以靜態(tài)方法在被調(diào)用時需要與其類名一同,并不需要提前創(chuàng)建這個類的實例。舉例來說,I-ARM-Droid框架當(dāng)中應(yīng)就“java. lang. Math. Sqrt”方法進行攔截,用戶方式,則可以同樣的返回種類與名字進行設(shè)計,也就是 “pkgprefix. java. lang. Math. sqrt”。然而就實例和靜態(tài)兩種方式來講,其是完全不同的,實例方法便不需要標識符,在被調(diào)用時,用戶只有就實例類型進行創(chuàng)設(shè)才可使用相應(yīng)的方式。舉例如下:

      ClassA classA=new ClassA();

      classA. instanceMethodName()。

      圖2當(dāng)中展現(xiàn)的為被攔截實例方式。

      “android. app. Activity. setContentView(int)”。

      如圖2,其展示的即是用戶將I-ARM-Droid框架當(dāng)作基礎(chǔ)進行攔截的相應(yīng)“android. app. Activity. setContentView(int)”。在這當(dāng)中,用戶有對返回種類與名字進行相應(yīng)的創(chuàng)設(shè),差別及是新方式當(dāng)中的參數(shù)共有2個,其一即是被攔截方面的相應(yīng)實例。和上述方式存在差別的是,所謂構(gòu)造方式,屬于Java創(chuàng)建類當(dāng)中的一種實例,特征即是定義和方法存在相似性,區(qū)別即是類名和構(gòu)造方式間是相應(yīng)的,其中沒有返回類型。ClassA classA=new ClassA(args)。圖3中便是攔截的構(gòu)造方法。

      觀察 I-ARM-Droid框架能夠發(fā)現(xiàn),所謂Wedge方法,即是用戶就目標方法進行攔截的相應(yīng)方式,舉例來講,若用戶想就“android. app. Activity. setContenView”進行攔截的話,首先應(yīng)建立的是Wedge類“pkgprefix. wedge. android. app. Activity”。其中,能夠就setContentView進行整體囊括。對于用戶來講,需要做的即是將全部承襲 “android.app.Activity”均改為繼承“pkgprefix.wedge.android.app.Activity” 類。圖4即為攔截的“android.app.activity” 類。在圖4中,相應(yīng)的用戶攔截方式是對為“android. app. Activity. setContent View”進行的相應(yīng)調(diào)用,其中Weage整體名稱是“pkgprefix. wedge. android. app. Activity. setContentView”。在此基礎(chǔ)上,即可在更改MainActivity的前提下得到Wedge Activity。

      1.3 更改原始安卓apk

      將Wedge與Stub當(dāng)作基礎(chǔ)攔截目標的方式,用戶方面,即可在對原有的安卓系統(tǒng)應(yīng)用程序當(dāng)中的相應(yīng)目標方式進行引用,在此基礎(chǔ)上,重寫名稱的調(diào)用情況,通常來講,用戶能得到apk文件,在這時候,apktool會因為反編譯的方式得到Dalvikbytecode。命令操作即是“apktool d APPNAME. Apk DESTINATION FOLDER NAME” 。下述內(nèi)容是詳細對Dalvikbyte code攔截方式的闡述。①以Dalvik bytecode方式為基礎(chǔ),對靜態(tài)方式進行更改;②以Dalvik bytecode為基礎(chǔ),更改其中的實例方式;③在Dalvik bytecode中修改構(gòu)造類型;④在Dalvik bytecode中修改 Wedge 方法。

      1.4 新的未簽名的apk文件由Dalvik bytecode編譯

      用戶方面,若之前的Dalvik bytecode進行了相應(yīng)的更改,同時劃分成兩類Dalvik bytecode。則用戶的做法即是最大程度上將其進行合成,而apktool工具即能創(chuàng)設(shè)相應(yīng)的apk文件,一旦命令成功執(zhí)行之后,新的apk文件便創(chuàng)建在apktool\simpleApp\dist上。

      1.5 簽名測試安卓應(yīng)用程序

      若安卓系統(tǒng)當(dāng)中有沒有簽名的相應(yīng)apk,則用戶的證書即會驗證直白,所以此基礎(chǔ)上可以signapk.Jar為基礎(chǔ),獲取apk文件。概況而言,Stub和Wedge兩種方式攔截了要傳遞給目標方法的參數(shù),適宜I-ARM-Droid用戶充分利用現(xiàn)有信息監(jiān)聽并制定相應(yīng)的安全策略。

      2 基于安卓程序安全視角的I-ARM-Droid拓展框架分析

      在不同的包中創(chuàng)建Stub和Wedge方法,并不能用行內(nèi)添加自定義代替[4]。這是因為,將其放在不同的包中,能夠極大有利于開發(fā)者減少代碼量,并且新的方法只需要進行單次添加。換句話說,這樣可以減少代碼冗余,并且管理代碼十分方便。同時,本文選擇用Dalvik bytecode代替javabytecode植入也頗有深意,這是因為諸如dex2jar等類似的相應(yīng)編譯工具,均是可通過Dalvik bytecode進行轉(zhuǎn)碼的,之后得到Java字節(jié)碼,卻無法保證可以把javabytecode更改為Dalvikbytecode并保證其安全性能。

      2.1 拓展框架的局限之處

      以Stub與Wedge方式當(dāng)作基礎(chǔ)進行創(chuàng)設(shè),最關(guān)鍵的即是相應(yīng)的開發(fā)人員在安卓應(yīng)用程序開放上擁有經(jīng)驗,就算是I-ARM-Droid可維持安卓系統(tǒng)當(dāng)中的相應(yīng)中間件層,然而開發(fā)者方面,仍舊不能很好的就不一樣的目標方法的安全敏感性進行明確,因此開發(fā)者便無從判定,需要向擁有豐富開發(fā)經(jīng)驗的大公司求助[5]。很顯然,這對安卓應(yīng)用程序開發(fā)而言是一筆不菲的開支,同是,當(dāng)開發(fā)者不能維持源代碼準確性時,即會得到全部危險目標方法,特別應(yīng)注意的為, Stub與Wedge兩種方式均需要開發(fā)者就原有的相應(yīng)程序代表展開變化,舉例來講,采取Wedge方法時,開發(fā)者方面,應(yīng)就原有的子類進行變化,承襲其中含有Wedge方式的相應(yīng)類,若類在安全測試上沒有通過,那么程序的正常性就會受到威脅。

      2.2 拓展框架的優(yōu)越性能

      比較而言,I-ARM-Droid的框架是安卓全擴展形式的“便攜式”體現(xiàn),這是因為此框架存于應(yīng)用層當(dāng)中,優(yōu)勢即是和中間件與Linux內(nèi)核方面的距離較遠。若框架在進行修改的時候關(guān)系到此兩方面的話,那么安卓系統(tǒng)的平臺代碼全部都得更換。在此狀況下,這種更換要比單純的對應(yīng)用程序代碼進行更改的步驟與內(nèi)容更為繁雜,然而,即使是整體進行修改,同樣應(yīng)獲取root權(quán)限[6],而這即會在很大程度上讓安卓系統(tǒng)平臺在安全方面受到威脅。所以, I-ARM-Droid優(yōu)勢是較高的,對其來講,需要做的即是對應(yīng)用層進行部分的更改。另外,在注入了stub和wedge API后,對安卓應(yīng)用程序性能上的影響微乎其微。

      以最大程度上展現(xiàn)驗證性能為目的,本篇在進行試驗的時候,采用的為Stub方法,對象即是“java.lang.StringBuilderappend(String str)” 調(diào)用過程,首先創(chuàng)建了靜態(tài)方法,如圖5所示。在此案例中,本文完成相應(yīng)的調(diào)用目標方式是“java. lang. StringBuilder. append(String str)”10 000次。原有調(diào)用的相應(yīng)時間是68μs,納入Stub后,調(diào)用時間增加到了75μs。這在一定程度上表明幾乎每一次的相應(yīng)調(diào)用時間會維持在0.0007μs左右。如圖6所示,Logcat所展示出的是納入stub方法之前與之后,在調(diào)用時間方面的狀況(“pkgprefix. java. lang. StringBuider. append(java. lang. StringBuilder sb, String str” )。概而言之,重要性是I-ARM-Droid框架的重要特點,無論是哪種目標方式,其源頭都是Android SDK,或是Java SDK。除此之外,所有安卓應(yīng)用程序當(dāng)中,對象用戶均可以用相同的方法攔截目標方法,保證安卓應(yīng)用平臺的安全性和兼容性。

      3 結(jié)論

      本文通以I-ARM-Droid拓展框架展示了部分代碼和工具,并通過安卓應(yīng)用程序改進測試。本文研究在對目標進行明確時,挑選的是難度較低的方式,就Stub與Wedge兩種方式進行了創(chuàng)設(shè),同時展出了Dalvik bytecode反編譯(改正后)的相應(yīng)方式。就本篇來講,談到的2類方式都可以對參數(shù)進行攔截,所以用戶即具有較大的便利性,可以相對明確的方式就目標方法展開監(jiān)控。

      參考文獻:

      [1]夏宏利.云應(yīng)用安全測試技術(shù)探索[J].計算機與網(wǎng)絡(luò),2014(23).

      [2]張超永,鄧迎君,李松合,李國杰.對搭建企業(yè)源代碼安全測試云平臺的研究[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.

      五家渠市| 简阳市| 武清区| 长泰县| 岱山县| 孝义市| 天峻县| 林州市| 文水县| 天柱县| 阿巴嘎旗| 防城港市| 海兴县| 宣汉县| 九台市| 隆德县| 长丰县| 新巴尔虎左旗| 洛浦县| 康定县| 高安市| 蒲江县| 裕民县| 和龙市| 襄樊市| 喜德县| 保山市| 昔阳县| 侯马市| 定南县| 桂阳县| 九龙城区| 普兰店市| 望江县| 长泰县| 三门峡市| 邵阳县| 肇州县| 新郑市| 黄陵县| 元江|