【Android源码 栏目提醒】:网学会员为需要Android源码 的朋友们搜集整理了基于Android系统的恶意程序原理分析 - 期刊论文相关资料,希望对各位网友有所帮助!
2012年第10期 技 术 研 究 doi : 10.3969/j.issn.1671-1122.2012.10.017 基于
Android 系统的恶意程序原理分析 王玮 (中国石化胜利油田物探研究院,山东东营 257100) 摘 要 :随着
Android 系统市场占有率的不断扩大,
Android 系统恶意软件造成的危害也越来越大, 加之各种 App Market 良莠不齐,
Android 系统安全问题日益突出。
虽然
Android 系统具有几种安全机制, 但其并不足以抵御当下的一些攻击。
文章以四类恶意程序为实例,阐述了
Android 安全机制的漏洞以及 恶意程序攻击方式,然后通过实例来实现恶意程序的攻击,最后总结各个攻击方式的不足和优点,为恶 意程序的防治工作做了铺垫。
关键词 :
Android 安全机制 恶意程序 中图分类号 :TP393.08 文献标识码 :A 文章编号 :1671-1122(2012)10-0071-06 The System based on the
Android Principle Analysis of Malicious Program WANG Wei Geophysical Research Institute SINOPEC ShengLi Oileld Dongying ShanDong 102600 China Abstract: With the increase of
Android’s market share the harm caused by
Android malware is also growing. Combined with the lack of quality assurance in
Android App Markets
Android security problem have become increasingly prominent.
Android has several security mechanisms but they are not sufcient to resist the attacks of malicious programs. This paper took four types of malicious programs as example described the vulnerabilities of
Android security mechanism and the attacks of malware and then implemented those malware nally summarizes the shortcomings and advantages of the attacks to prepare for the prevention of malicious programs. Key words:
android security mechanism malicious program0 引言 随着移动互联网的发展,即时消息、L B S、移动导航定位等多种服务从各个层次为人类生活、工作和学习提供了便利。
自And roid 系统以开源身份出现后,它的市场占有率越来越高,截止 2011 年第一季度,其占有率已超过塞班系统,跃居全球第一 1。
各种立足于
Android 开发的移动互联网公司如雨后春笋一样,不断涌现出来,在 2011 年甚至呈爆炸性增长。
由于
Android 系统是一个开放的系统,任何软件不需要官方认证就可以在设备上运行,加之国内外各种 App Market 良莠不齐,
Android 系统的安全问题日益突出。
Websense 发表的最新研究结果 2 指出,
Android 系统相比其它系统会有更多的安全问题。
与 iOS 和 WP 等系统相比,
Android 系统接触非官方市场 Apps 的机会更多,而这些 Apps 很容易被恶意软件开发者或黑客等利用,而用户在安装后并没有察觉,直至问题发生才知道。
此外,报告也指出
Android 用户本身在使用移动设备的方式上也较为混乱,并且不关注自己的安全状况,例如 A n d r oid 用户在手机上搜索暴力内容的可能性要远高于其它平台 3-9。
相对于 P C 上的恶意程序,移动设备的恶意程序有如下特殊之处。
1)用户遭受损失大。
移动设备和人们生活的契合度越来越高,甚至[网学网用户上传]已成为一个人的一个代名词。
移动设备中保存着大量个人的私有数据,囊括生活、经济等重要数据,也包括联系人、短消息等大量社会交往信息,一旦这些数据遭到窃取或是伪造,用户将蒙受巨大的损失。
2)恶意代码活动率高。
手机作为现代人们生活的必须品,大部分时间保持运行状态,甚至 24 小时全天候待机,这就为恶意程序提供了良好的运行环境,可以随时更新或是危害用户数据。
3)用户整体安全意识差。
根据 D C CI 手机安全软件市场调研报告显示,有将近三成移动互联网用户遭遇过手机安全威胁,五成以上用户担心手机安全威胁,但仍有超过 30 用户认为手机安全威胁并不重要,可见,用户手机安全意识亟待提高。
综上所述,有必要对
Android 恶意程序进行分析,并在一定程度上使用户熟悉恶意软件的攻击方式,以此保证用户信息安全。
收稿时间 : 2012-09-07 作者简介 : 王玮(1975-),男,山东,工程师,主要研究方向 :软件开发。
71技 术 研 究 2012年第10期 1
Android 系统安全机制简介 值得注意的是,一个应用程序可以自由的通过 J N I 使用 C/C 编写的 A R M 本地代码,如果 A nd roid 的 Linu x 内核有 A n d r oid 是一个主要针对个人移动设备的操作系统,因为 漏洞的话,恶意程序开发者便可以由此攻击内核,进而提升应 涉及到用户隐私,在设计之初,就在 Linux 安全机制的基础上, 用程序的权限。
即使在这种情况下,权限机制还是不会被绕过 加入了一些新的安全模型,其安全体系结构的中心思想是应用 的,应用运行时,还是会被系统检查是否在 AndroidMenifest. 程序默认不执行对其他应用程序、操作系统或者用户有害的 xml 文件中明确了相关权限。
操作。
下面简单介绍一下
Android 系统的三项主要安全机制。
1.3 签名认证机制 1.1 基于沙箱的安全机制 在
Android 系统中,所有安装到系统的应用程序都有一个 A n d r oid 是一个多进程的操作系统,它使用沙箱技术来 数字证书,该数字证书的私钥则保存在程序开发者的手中,并 实现程序之间或是数据之间的隔离和保护,实现应用程序被 不需要权威的数字证书签名机构认证,它只是用来进行应用 允许或拒绝访问设备资源。
为此,
Android 使用一些 Linux 实 程序包自我认证和实现对数据完整性及传送数据行为不可否 用工具(比如进程级别的安全性、与应用程序相关的用户和 认性的保护。
在
Android 上,该数字证书主要用于标识应用程 组 I D 和权限),来实现应用程序被允许执行的操作。
每一个 序的开发者,在用户和应用程序之间,或者应用程序之间建立 应用程序或者服务都运行在它自己的进程上。
在默认情况下, 信任关系。
A nd roid 上的每个应用程序运行在唯一的 UID 上,从而防止了 所有的应用程序都必须有数字证书,A n d r oid 系统不会 应用程序访问某些容易导致安全问题的系统资源。
应用程序 安装运行任何一款未经数字签名的 A P K 程序,无论是在模拟 的 U I D 是在程序被安装时由 D a lv i k 虚拟机提供的,运行时, (A 器上还是在实际的物理设备上。
A n d r oid 的开发工具 D T 插 每个程序相当于运行在各自独立的用户(在不同的进程)上, 件和 A nt)都可以协助开发者给 A PK 程序签名。
使用 eclipse 从而实现了程序之间的隔离。
在编写程序时,程序会自动获得一个调试模式的签名,当然 在某些情况下,某些程序需要共享一些数据甚至进程, e clip s e 也向开发者提供图形环境的签名设置,在命令运行模 例如很多系统软件,都运行在同一个进程中 ;还存在另外的一 式下,通常使用 Keytool 和 Jarsigner 给程序签名。
种情况,例如一个厂家对 A nd roid 系统进行了二次开发,将另 2 IE 浏览器中安全机制的突破方式 一家公司的一个应用引入系统,但在对方不提供
源码的情况 下,可以用相同的签名来实现。
Android 对这些软件处理过程为 : 下面分别介绍几种恶意程序的实现方法。
在安装或运行一个应用时,系统会验证该程序的 sharedUserId 2.1 基于
Android内核的恶意程序 和签名,如果 sharedUserId 和签名与系统中两个已存在的应用
Android 系统的底层是一个 Linux 2.6 的内核,它作为一 相同,Dalvik 会认为它是由同一个开发者提供,便会为它们提 个硬件抽象层为上一层提供内存管理、进程管理等服务。
对 供同一个 UID 这样两个程序之间的数据可以互相访问,共享 于一些数据的读取,如读取短信或是联系人信息,都要用到 了一个 Linux 进程和 Dalvik 虚拟机。
Linux 层的一些系统调用,如 system_read 之类的函数。
因此, 如果挟持了 Li n u x 内核的一个系统调用,那么就相当于挟制了 1.2 基于权限的安全机制 在沙箱的基础上,系统通过权限机制来限制进程的一些 整个
Android 系统。
行为,例如一个应用程序如果要获取某些数据或进行某些操 编写一个重定向系统调用的可加载模块,需先获得系统 作,必须要在程序 AndroidManifest.xml 文件中指出该操作所 调用表 sys_call_table 在内核中的地址。
值得注意的是,自 需要的权限,这些权限很容易在系统中读出来,用户可以方便 sys_call_table 并不是一个extern的变量, Linux 2.5上市以后, 地看到某个程序的权限。
而
Android 内核是基于 Linux 2.6,所以不能直接使用 extern 权限机制旨在允许或限制程序访问受限的(通常是容易 但是, void sys_call_table来获取系统调用表。
在源代码中, 引发安全问题的)A PI 和资源,默认情况下,A n d r oid 没有授 sys_call_table 的地址是固定的,在源代码的根目录下,可以找 予应用程序任何权限。
这一定程度上保证了
Android 系统的安 到 System.map 文件,在这个文件中可以找到 sys_call_table 的 全,当应用程序访问某些数据或是与某些模块交互时,系统 地址。
会检查该应用程序所具有的权限,这些权限开发者必须定义 在本文的示例中,sys_call_table 的地址是 c0022ac4。
值得 在 AndroidMenifest.xml 里。
应用安装时, 系统会向用户展示该 注意的是,每个版本的值都不同,所以在编写可加载模块之前, 应用的权限,由用户来判断是否合法,然后决定是否安装该 首先搞清楚目标 A n d roid 系统用的是哪款内核,然后根据具体 软件。
用户也可以在 A nd roid 系统的设置选项里查看已安装的 情况编写,例如来电时,使用 AT CL C C 命令调用来电显示界 程序的权限。
系统有时候也会给出动态的分配权限,但有一 面,使用了sys_read 函数,对于某些使用来电触发的恶意程序, 个先决条件,就是该应用程序的签名与系统镜像的签名相同。
就可以针对重定向 sys_ read 系统调用来编写一个恶意的可加装 72 2012年第10期 技 术 研 究模块。
下面介绍一个简单实例,这个实例监控所有来电,当来 开始的时候,配置上是内核支持动态加载模块。
因编译 Lin u x电号码为 999 时,自动替换成 110,如图 1 所示。
源码有大量实例教程,这里不再敷述。
编译完成后,会生成 这就是
Android 的内核了 使用模拟器加载, 一个 zImage的文件, , 然后在
Android 系统设置里面就可以看到它的改变,图 2 是本 文使用的
Android 模拟器的改变图例。
图 2 重新编译内核效果 如上所述,使用 A n d r oid 内核来实现恶意程序是可行的, 图 1 内核恶意程序运行实例 在内核层面实现恶意程序,具有影响面广,无论用户层使用那 实现这个实例时,首先定义 sys_call_table 变量。
这里还 些应用程序,都得与内核有关联 ;而且内核层的恶意程序隐定义了一个函数指针变量 orig_read,这个变量是用来保存最开 蔽性高,因为
Android 的分层阻止了用户直接与
Android 下的始的 sys_read 的地址,方便在卸载模块时恢复到最初的状况, Li n u x 层交互。
但这种恶意代码的缺陷也是比较明显的,主要如以下代码所示 : 体现在以下三点 : void sys_call_table void 0xc0022ac4 asmlinkage int orig_read unsigned int fd char __user buf size_t count 1)很难获取 sys_call_table 的地址。
虽然 Google 开放了
Android 内核
源码,但是目前市面上的
Android 手机的操作系 之后便可以编写一个钩子程序,这个钩子程序很简单, 统都是手机厂商经过二次开发的,为了适应其硬件,肯定对如以下代码所示,就是在检测到执行 C L C C 命令时,替换其中 内核做了更改,而这样的
源码是很难获得的。
的号码即可 : asmlinkage int hack_read unsigned int fd char __user buf size_t count 2)用户没有 r o ot 权限。
目前,各厂商为了安全考虑,很 int ret 0 Char find NULL 多
Android 手机的系统都是用户没有 root 权限。
即使现在市面 ret orig_readfd buf count 上出现很多所谓的“破解”软件,但能真正实施破解的软件则 iffind strstrbuf quotCLCCquot NULL 很少,所以“加载内核模块”无从谈起。
iffind strstrbuf i quot999quot NULL memcpyfind quot110quot 3 3)内核不支持动态加载模块。
市场上也有许多第三方 rom 的制造者,这些 rom 都是有 root 权限的,但他们都是在从 return ret 手机厂商的系统中提取内核文件(不是代码),然后再重新编 译内核层上面的代码,从而具有了 root 权限。
所以内核的编译 钩子程序完成之后,在 module_init 的函数中,将系统的 选项几乎不可能被更改,也不能使其支持可加载模块。
然后将 hack_readsys_read函数地址保存到 orig_read 变量中, 综上所述,基于内核的恶意程序虽然很好,但移植性过差,的地址填到原本sys_read函数在sys_call_table中的位置即可。
只能配合 A nd roid 内核的一些漏洞进行攻击,意义不大。
这样 需要注意的是,在使用 i n s m o d 加载内核模块时,会出现如下情况 : 的攻击,只要慎重地使用第三方 r o m 和及时更新系统,基本 insmod hello.ko 上就能预防。
insmod: init_module hello.ko failed Operation not permitted 2.2 基于
Android逆向的恶意程序 这是因为没有管理员权限,当我们取得管理员权限时, 也称反求工程 逆向工程, 。
逆向工 (Reverse engineering)继续加载 : 程的基本原理是根据已有的结果,例如已发布的软件,通过 insmod hello.ko insmod: init_module hello.ko failed Function not implemented 分析来获得具体的实现的方法。
在软件安全方向,通常使用 在编写基于内核的恶意程序时,最大的问题就是目前几 逆向工程来分析恶意代码和系统漏洞,另一方面,也可以使用乎所有的内核在编译时都被设成了不能使用可加载模块。
这 逆向工程来对程序进行反编译,然后在程序里插入恶意代码。
是
Android 系统为安全做的一个设计。
为了实验,我们在这里 本节主要是讲述如何使用逆向功能来实现一些对 A nd roid 系统可以重新编译一个内核。
Android 的内核
源码可以在 Google 官 的恶意攻击。
方的代码网上下载,相关版本用在
Android 2.2 的模拟器上比 这里主要目的是使用 A PKTo ol 来反编译一个软件,然后在较好,对
Android 2.3 的模拟器支持不怎么好,典型的就是不 .
上一篇:
[Android项目视频教程]软件管理器的开发_日志
下一篇:
7*30m公路预应力混凝土连续梁桥上部结构设计