基于安卓系统应用程序安全视角对拓展框架进行测试和分析

2017-01-24 07:52任小波张长胜
价值工程 2017年1期

任小波 张长胜

摘要: 本文为探讨安卓系统医用程序的安全性能,对不同方式的拓展框架进行了对比和分析,研究结果显示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.