版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android应用的恶意代码注入摘要:本文分析了Android应用文件和Android系统广播机制的特点,介绍了一种基于SDK的Android应用恶意代码注入的方法,并且用该方法测试了30款Android应用,通过实验说明了Android应用软件缺少防止恶意注入的安全机制。关键词:信息安全;代码注入;恶意软件;Android。MaliciousCodeInjectionforAndroidApplications【Abstract】ThispaperanalyzesthevulnerabilityoftheapkfileformatandthebroadcastfunctionalityofAndroidOS,introducesamaliciouscodeinjectingmethodbasedonAndroidSDK,andteststhirtyapplicationswiththismethodtodemonstratethattheAndroidapplicationlacksprotectionagainstmaliciouscodeinjection.【Keywords】InformationSecurity;CodeInjection;Malware;Android.
引言2011年3月,黑客通过将名为“DroidDream”的恶意代码注入到多款应用中并上传到Android市场,最终导致超过一万用户下载并安装使用了带有恶意代码的软件。尽管Google通过远程方式清除了这些终端上的应用,并将超过50款带有“DroidDream”的应用下架,但是从此之后“DroidDream”的各类变体不断出现,严重威胁着Android生态体系。这类应用的特点是:将已注入恶意代码的应用伪装成正常应用,应用安装后,恶意代码通过一定条件触发执行,完成进一步的恶意行为[1]。由于对Android平台发布的时间较短,黑客能够利用的漏洞有限,所以通过注入恶意代码并伪装成正常应用进行发布和传播仍是他们使用的主要方式。网秦发布的2012年第二季度Android手机安全报告显示,约有八成的恶意样本是将恶意代码注入到系统应用、游戏或桌面壁纸等应用中的。由此可见,对Android应用恶意代码注入方式的研究对现阶段Android平台的安全防护具有重要的意义。Android恶意代码注入的原理Android程序能够被恶意注入,根本上是Android应用文件的自身特点和系统的某些功能能够被攻击者利用,以下将就这两方面详述。Android应用APK文件的特性在Android系统中,所有的应用格式都被加以后缀名apk,其实质上是zip格式的文件,用户用pc上的解压缩软件打开apk文件就可以看到它的结构,不过其中各类文件都是经过编译的,直接打开无法浏览其内容。但是通过互联网可以轻易地获得Android平台各类逆向工具来反编译apk,进而得到apk中包含的以dex为后缀的源程序字节码文件,程序所需的各类资源文件,签名文件,以及关键的程序描述文件AndroidManifest.xml[2]。AndroidManifest.xml文件的重要作用AndroidManifest.xml文件存在于每一个apk中,描述了Android系统运行该应用所必须的全局配置信息。在这些信息中,对代码注入最有价值的有三处:第一,程序使用的各类组件的声明,包括Activity,BroadcastReceiver和Service等;第二,程序的入口点,一般是包含"ent.action.MAIN"的Activity;第三,程序使用受保护API或订阅特定广播消息时所需权限的声明。通过分析AndroidManifest.xml文件提供的这些信息,可以获得代码注入的两种思路:替换原程序的入口点或者使用BroadcastReceiver使恶意代码在接收到特定消息的时候触发,并开启其他Service或Activity执行恶意行为,而这两种选择都只要在AndroidManifest.xml中修改或添加相应组件,并声明所需权限即可。事实上,替换原程序入口点正是恶意代码“DroidDream”所采用的注入手段[1],本文不再赘述;而另一种设想的可行性,还需要Android系统广播机制的支持。Android系统的广播机制Android系统的广播机制,从抽象层面可描述为软件设计模式中的“观察者模式”,也可以理解为分布式模型中的“消息发布者-订阅者”模型[3],如图1所示:图1Android系统的广播机制其中广播消息发布者包括系统本身和应用程序,广播消息的订阅者则是各类应用软件,而广播消息则对应于Android系统的ent中封装了动作信息和其他数据信息,动作信息包括当前已完成的动作或者下一步将要执行的动作。由Android系统广播的intent一般封装当前已完成的动作[3],如“ACTION_BOOT_COMPLETED”;由应用程序广播的intent一般包含下一步将要执行的动作,如“ACTION_CALL”。订阅广播的应用需要注册BroadcastReceiver和其中的IntentFilter组件,IntentFilter对广播消息进行筛选,只有满足条件的intent才会被应用接收。BroadcastReceiver的注册方式有动态和静态两种,动态注册的BroadcastReceiver由ActivityManagerService直接管理,ActivityManagerService接收到对应的intent就直接发送到订阅的应用;静态注册有关信息则由PackageManager维护,在需要时查询并向ActivityManagerService提供订阅者信息,然后再由其发布。静态注册和动态注册最重要的区别是:在Android3.1的版本之前,静态注册的BroadcastReceiver即使在程序处于未运行状态时,仍然可以接收广播;而动态注册则只有程序启动并运行完注册相关的代码之后才能接收广播,并且程序退出之后,动态注册的BroadcastReceiver也将被解除注册,不能再接收广播。当订阅者完成BroadcastReceiver的注册之后,如果接收到符合条件的intent,就会执行相应的回调函数[4]。除上述特点之外,Android系统广播通路的开放性很高,广播的生产者可以产生系统全局的广播,广播的订阅者只需要从中选择自身关注的消息,而广播生产者和订阅者之间没有依存关系,它们完全不知道对方的存在。这种机制从一定程度上为系统的实现和应用的开发提供了较高的扩展性和灵活性[5],但是如果从攻击者的角度分析,由生产者发布的广播,尤其是系统广播,由于其面向全局,并且广播产生的时机稳定,无疑成为了恶意代码触发条件的很好选择。虽然Android系统要求特定的广播订阅需要一定权限,但是这些权限的声明完全由订阅者声明,攻击者只要在AndroidManifest.xml中注册组件的同时声明相应的权限即可,并且订阅的有优先级也可以由订阅者制定[6],这就为恶意攻击提供了更大的操作空间。通过上述分析可知,如果恶意代码通过广播消息驱动的模式设计,并以静态注册的方式在AndroidManifest.xml中声明相应组件、订阅的广播和权限,那么在接收到订阅的广播之后,恶意代码就会被触发开始执行恶意行为,这在理论上是可行的。其行为模式如图2所示:图2恶意代码的行为模式恶意代码注入的危害在恶意代码被触发之后,可以启动其他恶意组件,例如:攻击者可以设计启动一个Activity欺骗用户,诱使用户输入隐私信息;或者启动Service是恶意程序长时间在系统驻留,进行持续的监听和破坏行为。“DroidDream”恶意程序就是启动Service之后,利用系统漏洞提升自身权限并进行进一步的破坏[1]。Android恶意代码注入的实现恶意代码的注入点通过原理部分的分析,可以得到恶意代码组件和权限声明的注入点就是AndroidManifest.xml文件,然而恶意代码实现的源代码部分也需要一个注入点,这就需要结合Android逆向技术来进一步分析。在目前Android平台的开源逆向工具中,有一部分工具,例如apktool,可以将apk中dex格式的程序源代码部分反编译成为类汇编的smali代码,用户可直接修改smali代码以及apk的其他内容,包括资源文件和AndroidManifest.xml,然后经过重新打包签名的apk可以继续安装使用[2],国内很多程序汉化工作就是以类似的方式进行。分析上述的逆向手段,可以得出源代码的注入点就是smali代码。只要将应用文件和恶意代码文件分别逆向得到各自的smali代码和AndroidManifest.xml,在应用的smali代码中加入恶意代码的部分,同时修改AndroidManifest.xml中的对应条目就完成了恶意代码的注入。恶意代码注入的过程将上述的思想整理、细化,就可以得到完整的恶意代码注入过程,如图3所示:图3恶意代码的注入过程针对上述过程,本文使用Android2.3系统和AndroidSDK,举例说明一个简单的恶意代码的设计和注入方式,而对于其中的逆向,重新打包和签名的步骤,由于已有大量相关书籍文献,本文不再详述。恶意代码的编写根据前文描述设计思路,恶意代码由订阅系统广播的BroadcastReceiver组件Service组件构成,BroadcastReceiver收到系统广播之后启动Service。因此,恶意代码应包含两个类,InjectingReceiver和InjectingService,其中使用BroadcastReceiver组件的InjectingReceiver类主体代码如下:publicvoidonReceive(Contextcontext,Intentintent){ IntentmIntent=newIntent(context,InjectingService.class); context.startService(mIntent); }在本例中,InjectingReceiver订阅了"ent.action.BOOT_COMPLETED"这个系统广播,因此在收到此广播之后onReceive回调函数将会执行,启动InjectingService。恶意代码的注入的实现本例以一个简单的应用targetApp作为目标注入代码,这个应用只包含一个入口Activity,其AndroidManifest.xml主体部分如下:<application><activityandroid:name="com.targetApp.TargetAppActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application>在注入恶意代码之后,AndroidManifest.xml主体部分将变为:<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/><application><activityandroid:name="com.targetApp.TargetAppActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity> <receiverandroid:name="com.maliciousApp.InjectingReceiver"><intent-filter><actionandroid:name="ent.action.BOOT_COMPLETED"/><categoryandroid:name="ent.category.DEFAULT"/></intent-filter></receiver><serviceandroid:name="com.maliciousApp.InjectingService"android:enabled="true"/></application>最后将反编译过的恶意代码按照AndroidManifest.xml中声明的路径加入到反编译后的目标应用代码中,就完成了代码注入的工作。将targetApp重新打包、签名、安装,重新启动手机,可以发现InjectingService已经开始运行了,如图4所示:图4恶意代码注入的运行结果从图4中可以看到InjectingService使用的是targetApp的进程。这是由于Android系统是以应用为基本单位分配进程空间,从注入后的AndroidManifest.xml文件中可以发现InjectingService被注入到了targetApp的应用空间中,所以InjectingService也一定是运行在targetApp的进程中,即使将InjectingService声明为远程服务,它的远程服务进程也依赖于targetApp的进程。因此,图所示的结果是符合预期的,至此代码注入已经完成。Android恶意代码注入的实验和结果分析根据上一节叙述的代码注入流程,进一步进行实验。应用样本软件来自AndroidPlay,包括非安全防护类的系统软件和应用软件两类,共30款。实验用恶意代码依然沿用上述设计,包括InjectingReceiver和InjectingService,但是InjectingReceiver增加了监听系统电量变化和连接、断开电源的系统广播。根据Google提供的2012年10月最新的市场占有率,选取前四位的Android系统版本作为实验测试环境,分别为Android2.3,Android4.0和Android2.2以及Android2.1及之前的版本。实验设备分别为HTCG7,HTCG8,摩托罗拉ME525,三星P6200。实验结果如表1所示:表1Android应用恶意代码注入实验结果测试系统测试设备应用数量成功注入恶意代码运行情况实验说明Android2.3G71212InjectingService能够触发执行,当手机作为存储设备与PC连接后或外存卡被卸载后,服务会被终止应用安装到外存Android4.0P620088代码只有在用户运行应用并且没有强制退出时能被触发运行,如果应用被强制退出,InjectingService也终止应用安装到系统内存Android2.2ME52566InjectingService能够触发执行,当手机作为存储设备与PC连接后或外存卡被卸载后,服务会被终止应用安装到外存Android2.1G844InjectingService被正常触发运行应用安装到系统内存从实验结果可以看出,随着Android的不断升级,部分新的系统约束和新增的功能确实会削减注入的恶意代码对系统和用户的威胁。表2中列举了两点对恶意代码注入有较大影响的升级变化:表2Android系统的部分升级及其对恶意代码注入的影响起始版本系统变化对恶意代码注入的影响Android2.2应用可以安装在外存卡上,但是将收不到系统的“启动完成”广播,并且当移动设备作为存储设备与PC连接时或外存卡被卸载时,运行于外存卡上的应用将被终止[7]。被注入的应用如果被安装在外存卡上,恶意代码将有可能失效或者被中断运行。Android3.1应用程序增加了“停止态”。首次安装未被执行和被强制终止的程序都处于“停止态”,此期间它们无法接收订阅的广播。直到程序被用户执行,“停止态”结束,应用恢复对订阅广播的接收[7]。被注入的恶意代码将无法脱离用户自动触发,并且即使被触发,也有可能被中断运行。从试验的结果分析,表2中描述的两点变化减少了恶意代码的触发条件,增加其持续运行的难度,同时使用户更多的介入系统和应用的管理授权。然而,从实验中恶意代码成功注入的应用数量来看,Android的不断升级,还是没有办法改变Android的应用程序本身缺乏保护机制的局面,特别是程序中基于SDK开发的部分。即使开发者对源程序进行混淆,应用依然可以被轻易地逆向编译和修改,由于应用的入口点、使用的组件和权限声明都集中在SDK开发的部分,而且Android应用的签名机制也不能禁止这些被修改过的程序继续被安装使用,因此Android恶意注入的技术要求和成本都是较低的,而这也是Android应用恶意注入不断出现的重要原因。
结论本文分析了Android系统的相关原理,结合实例介绍了基于SDK的Android应用恶意代码注入的方法,并用该方法作为实验手段,对一些Android应用进行了恶意代码注入的测试,实验说明:Google对Android系统的不断升级在一定程度上完善了系统广播机制的安全性,提高了系统的防止恶意代码自动触发的能力,但是Android应用中,基于SDK开发的程序部分仍然缺少防止恶意注入的保护机制,这个问题是目前Android应用恶意代码注入不断出现的重要原因。
[参考文献][1]LookoutMobileSecurity.CompleteDroidDream-lookoutMobileSecurityTechnicalTearDown[OL].[2011].http://[2]NOLANG.DecompilingAndroid[M].NewYork.Apress2012[3]杨丰盛.Anroid技术内幕:系统卷[M].北京.机械工业出版社.2011[4]CHINE,FELTAP,GREENWORDK,etal.AnalyzingInter-ApplicationCommunicationinAndroid[A].Proceedingsofthe9thAnnualSymposiumonNetworkandDistributedSystemSecurity.MobiSys2011[C].2011[5]邓平凡.深入理解Android:卷I[M].北京.机械工业出版社.2011[6]ENCKW,OCTEAUD,MCDANIELP,etal.AStudyofAndroidApplicationSecurity[A].Proceedingsofthe20thUSENIXSecuritySymposium.USENIXSecurity’11[C].2011[7]GoogleInc.AndroidPlatformOverview[OL].[2012]./source/overview.html外研版五年级英语下册Module10Unit1Whereareyougoing?X县东关小学教学目标:根据学生的整体认识水平和教材特点,我确立本课时的教学目标为:(1)知识目标:能听,读单词list、airport、shoe、ticket、passport。(2)能力目标:能口头运用Whereareyougoing?Whatareyougoingtotake?Whenareyougoingtotheairport?Who’sgoingtotheairportwithyou?谈论旅行前的准备。(3)情感目标:激发学生学习英语的兴趣,使学生树立学习英语的自信心;培养学生的合作交流能力。3.教学重点与难点:重点:能听说认读本课所学的有关单词;灵活运用句型。难点:学会运用句型“Whereareyougoing?Whatareyougoingtotake?Whenareyougoingtotheairport?Who’sgoingtotheairportwithyou?”谈论旅行前的准备。【学法指导】
通过大明和奶奶的对话来掌握带有疑问词“who,
where,
what,
when”的句子和一般将来的用法。【自学导航】
【基础知识】词汇及句型
重要单词:
1.list
清单
2.airport机场3.shoe鞋
4.
tiket票5.passport护照2.重点短语:
1.为......做准备
________________2.
在纽约_____________3.制作清单
____________
4.
去机场________________2.重点句子:(自己翻译,并勾画每个句子中的考点):
Unit1
Everyone
will
study
at
home.1.
Are
you
ready
for
your
trip
tomorrow?.2.
Where
are
you
going
?
3.
What
are
you
going
to
take?
4.
When
are
you
going
to
go
to
the
airport?5.Who’sgoingtogototheairport?【教学设计】预热活动:让学生演唱五年级上册模块三的歌曲《Wheredidyougo?》,引出疑问词where,what,who.为今天的课文学习做铺垫。Freetalk:(1)Whereareyougoingthisweekend?⑵Whatareyougoingtotake?⑶Whenareyougoingthere?⑷Who’sgoingwithyou?2.课文学习T:Damingisgoingtotravel.Let’shavealookwhatheisgoingtodo.学生听第一遍录音,找出不认识的单词.整体感知课文大意。Listentothetapeandunderlinethenewwords.学生听完第一遍录音,有一个“火眼金睛
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 债劝转让合同模板
- 小学保安合同模板
- 雇佣合伙合同模板
- 磨床维修合同模板
- 建设民房合同模板
- 路灯定价合同模板
- 非还建住房合同模板
- 开水果超市合同模板
- 衣服加工配送合同模板
- 广告物料订购合同模板
- 第三单元《小数除法》(单元测试)-2024-2025学年五年级上册数学
- 期中练习(试题)-2024-2025学年人教PEP版英语六年级上册
- 2024-2025学年五年级科学上册第二单元《地球表面的变化》测试卷(教科版)
- 污泥(废水)运输服务方案(技术方案)
- 2025年高考作文专练(25道真题+审题立意+范文)- 2025年高考语文作文备考总复习
- 2024年新人教版七年级上册数学教学课件 第三章 代数式 数学活动
- 20世纪外国文学史课件:“垮掉的一代”
- 2024年事业单位招聘考试公共基础知识试题及答案(共200题)
- 北师大版小学数学五年级上册4.2 认识底和高(教案)
- 2024年婴幼儿发展引导员(中级)职业技能鉴定考试题库(含答案)
- 2024年浙江杭州江干区投资项目审批代办服务中心招考3人高频考题难、易错点模拟试题(共500题)附带答案详解
评论
0/150
提交评论