关于安卓系统的漏洞和现代开发技巧的研究分析外文翻译资料

 2022-11-28 15:18:13

英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料


关于安卓系统的漏洞和现代开发技巧的研究分析

Himanshu Shewale1,Sameer Patil2,Vaibhav Deshmukh3 and Pragya Singh4

印度阿拉巴哈信息技术研究所MS(网络法规和信息安全)部门

E-mail:1ims2012014@iiita.ac.in,2ims2012012@iiita.ac.in,3ims2012047@iiita.ac.in,4pragyabhardwaj@iiita.ac.in

摘要

安卓是一种基于Linux内核的操作系统。它是在智能手机和手提设备上使用最广泛最受欢迎的一种操作系统。但是它的可编程和开放特性成为了让攻击者利用的因素。安卓平台允许开发者自主访问和修改源代码。但同时也造成了安全隐患。普通用户很有可能不小心下载并安装软件黑客编写的恶意程序。这篇文章主要讲述和分析目前安卓平台存在的漏洞。首先,我们要了解安卓的架构,分析存在的威胁因素和安全隐患。然后利用各种不同的程序开发技巧来降低已知的漏洞风险。详细的分析报告有助于我们识别现存的漏洞缺憾并且提供策略性指导方向使安卓操作系统更加安全有效。

关键词:

安卓,漏洞,开发,恶意程序,Linux核心

  1. 简介

安卓是一款发展迅速,在手机设备上下载量极大的手机应用平台。基于Linux内核技术,安卓操作系统能十分开放和灵活的运行于各种拥有不同硬件配置的手机设备上。[6]这一点使安卓系统赢得了广大用户的欢迎和认可。

安卓平台为程序开发者提供了极大的便利,让他们能够开发出迎合用户不断增长的需求的应用程序。安卓平台包括应用程序,中间程序和操作系统三个部分[7]。开发者可以试用包含了许多工具和接口的AndroidSDK,并通过程序设计语言比如JAVA来开发应用程序。安卓为开发者提供了一个可以出售和发布应用程序的市场环境。

尽管安卓系统的开放性为用户和开发者提供了极大的便利,但同时这也让攻击者和黑客们有机可乘[1]。安卓系统能够运行在不同设备不同版本这一特性为它带来了很多安全隐患。并不是所有的设备都支持和更新到最新版本,因为程序自定义过程是由各自不同产商完成的。这样会导致使用旧版的用户将面临新版本带来的安全隐患而无法受到任何保护[2]。

安卓市场缺乏对开发者用于出售和发布的应用的严格审查机制[1]。安卓市场上应用程序的发布不用接受任何第三方的审查。那么当这样的应用程序运用在设备上,一些公司或个人的数据将很容易被窃取。智能手机是可以存储一些像位置定位,通讯录,邮件,呼叫记录,照片,短信或者其他任何类型文件等重要信息[2]。恶意程序可以访问存储在设备上的用户私人信息。一个恶意程序甚至可以获取Root权限并且阻碍设备上的正常功能[3]。

2.安卓平台架构

安卓平台最初是由Android Inc创建的,后来被Google买入,更名为安卓开放源项目(Android Open Source Project)。这款软件可以从中心库获取并在许可证方面进行修改调整。安卓平台是基于Linux内核的,然后进行调整以满足一些特殊需求,比如功能管理,内存管理和运行时间环境。并且,因为安卓的设计初衷是为了运行于智能手机,所以它在Linux的基础上做了很多改变和更新以便支持不同的设备[2]。另外安卓还附加了一些控制内存和处理器的子系统,针对内存设计的文件库管理系统,进程管理系统和设备管理系统。

安卓软件框架结构还可以细分为五个层次:Linux内核层及下层工具,系统运行库,安卓执行时间,应用程序框架及应用程序。每一层都为它的上一层提供不同的服务。

2.1 Linux内核

Linux内核层是基础层,相当于系统中介于硬件层和其他软件层之间的抽象层。安卓操作系统就是由Google公司在Linux核心层基础上调整后创建于Linux核心层之上的一层结构[7]。Linux内核包含大量的设备驱动阵列,提供了许多和外部软件的接口。该内核提供了基础的系统功能,比如内存管理,进程管理,安全机制,设备管理,网络群组等等[7]。

2.2 运行库

在Linux内核层之上是一组安卓本地C/C 类库。这组库是专门为特定硬件设备配置的。比如,多媒体库中的各种类型的图像,视频,音频的录制和回放。还有一些重要的核心库包括Surface Manager,SQLite,WebKit和OpenGL。

2.3安卓运行时

安卓运行时包含一组核心的Java类库。应用程序开发者可使用Java编程语言进行开发,其中包含虚拟机和核心Java类库。

图1.安卓框架结构

  • 虚拟机:虚拟机就像是一台自身拥有操作系统的独立设备。多台虚拟机实例可以同时执行,提供事务隔离,安全机制,内存管理以及线程管理[7]。每一个应用程序都是作为一个进程运行在一台虚拟机上,而其他的应用程序则不会依赖于此虚拟机,在遇到程序碰撞的情况下,运行在同一设备上的各应用程序之间就不会相互影响[2]。这些功能在安卓中被称为sandbox(沙盒效应)。
  • 核心Java类库:在Java SE 库中定义的大部分功能,包括一些像字符串操作,网络和文件操作的任务都是有这些类库提供的。

2.4 应用程序框架

应用程序框架管理手机的一些功能,例如,资源管理,语音呼叫管理等。上层应用程序层与应用程序框架层相互作用相互联系。应用程序框架中一些重要的部分有活动管理,内容提供,通讯录管理,定位管理以及资源管理[7]。

2.5 应用程序

应用程序层是安卓架构的最顶层。一般的用户主要就是与这一层进行交互来执行基础的功能,例如打电话,访问网页浏览器等。安卓ADK 工具包会将应用程序代码和相关数据或源文件编译到安卓包中,形成后缀名为.apk的文件[1]。一个apk文件的内容总会包含一个可以下载到安卓设备的应用程序。一个安卓平台会包含一些默认的预装程序,比如浏览器,拨号器,主页,连接管理等。开发者可以根据用户需求自主创新的创建新的应用程序。

3.安卓系统漏洞

我们根据安卓架构不同层次可能造成的隐患因素对安卓系统现有的漏洞进行分类。种类有:Linux内核层,运行库层,应用程序框架层,应用程序层和外部驱动程序。这样区分的目的在于识别实施安卓系统时漏洞所在的区域。取30个样本进行CVSS得分测试,分数在2.6到10分之间,调查显示应用程序框架层存在最大的漏洞。

3.1 应用程序框架层

应用程序框架层的漏洞可能造成拒绝服务,权限扩大,代码执行以及未经身份验证的访问等问题。例如,现有一个恶意APP能够回避预设的访问限制并且移除通过用户来激活的设备锁。同样的,蓝牙服务可能威胁到用户之间联络交往的敏感数据。一段以往的开发程序会帮助APP回避多个权限约束,然后方便攻击者在没有得到请求许可的情况下访问相机和话筒。目前发现的其他漏洞还有CVE-2011-3975,CVE-2011-0680,CVE-2011-4804,CVE-2009-2999,

CVE-2009-2656,CVE-2009-1754。

3.2 应用程序层

应用程序层的漏洞最有可能出现在浏览器,因为通过浏览器的访问攻击者可以执行任意代码,然后不通过身份验证即可访问到受保护的资源。另外一种漏洞存在于网络相册管理软件,当用户从客户端登录,用户名和密码则会输入到透明文本框进行身份认证[8]。因此,任何人只要能探测到这些身份验证信息就可以访问个人相册。这项可利用漏洞程序在CVSS评分中可获得最高分10分,因为它足以完全威胁到中央情报局的参数。安卓浏览器上的漏洞使得黑客可以进行中间攻击,而且可以监视用户在浏览器上的一切活动。对HTTPS session cookies的修改不会受到限制,用户能够向session中注入任意的cookies。应用程序层的安全漏洞还包括CVE-2012-6301,CVE-2012-3979,CVE-2011-2357,CVE-2011-2344,

CVE-2008-7298。

3.3 外部驱动

执行像Qualcomn和PowerVR这样的外部驱动程序所存在的缺陷也会造成安全漏洞。一些专门针对本地kgcl函数调用的命令行参数可能在高通图形化内核驱动程序中造成拒绝服务攻击,这将为攻击者在内核环境中执行任意代码带来便利。在此情况下,使用一个应用程序,攻击者就可以从用户空间间接引用若干不受信任的指针,然后在没有验证的情况下执行更多其他的计算。Levitator程序主要目标是PowerVR 的图形化驱动,它可以通过改善内核内存扩大权限[22]。在这一种类的下其他可能漏洞有CVE-2013-3666,CVE-2012-4222,CVE-2012-4221,CVE-2012-4220,CVE-2011-1352,CVE-2011-1350。

图2 每一层存在漏洞汇总表

3.4 运行库层

运行库层存在的漏洞CVSS得分很高,表明它造成的影响是巨大的。例如,ZergRush利用程序发现于2011年运行DOS系统时,而且其程序代码还出现在了[18]。ZergRush程序会形成堆栈缓存溢出,然后伴随代码执行,然后将命令行参数的错误序号传送给特定的API。GingerBreak CVE-2011-1823也经常使用于一些熟知的恶意程序当中,来获取设备的Root权限。它利用了卷管理守护进程无条件信任来自PF_NETLINK信息的特点,然后绕过已标记的与反向指标相符的整型以便获取Root权限[11]。目前最新的CVE-2013-4787允许任何人修改开发者签名的APK文件,并在不修改签名的情况下上载恶意内容。这个漏洞,就是我们熟知的“Master Key”漏洞,使攻击者能够在受害者的设备上执行任意代码。这一种类的漏洞还包括:CVE-2011-0419,CVE-2010-1807,CVE-2009-3698。

3.5 Linux内核层

正如我们所知,安卓内核源自于Linux内核本身,但选择安全可靠的内核的重要性却总是被忽略。zygote套接口包含的不恰当的权限设置使得任何应用程序都可以不进行身份验证就发送叉形指令请求的序号。这种情况会导致正常合理进程中的叉形请求产生拒绝服务攻击。743C团队的Sebastian Krahmer的KillingInTheNameOf开发程序主要针对内存分配共享的漏洞,允许用户重映射读写权限初始化的共享内存区[11]。这一漏洞也同样在psneuter程序中得到印证。

  1. 保证安卓系统安全降低漏洞风险的程序开发技巧

保证安卓系统安全性的主要目的是保护用户数据,系统资源,应用程序独立性。因此,安卓系统会根据每一补丁和每一版本的发布及时地更新安全控制机制。最早的安卓版本拥有很少甚至是没有能够抵御高级攻击的安全性能,因为安卓系统还处在发展期,而且使用安卓设备的用户极少。

4.1 安卓cupcake

安卓1.5 cupcake拥有Propolice和safe_iop两大安全机制来抵御缓存溢出[9]。ProPolice是用来防止堆栈缓存溢出的而safe_iop是用来停止整型溢出的。但是这两项机制对目前仍然存在的ASLR不起作用。

4.2 安卓GINGERBREAD

在安卓Gingerbread 2.3中,硬件会被强制停止执行。所以,尽管一些应用程序可以执行缓存溢出,或者将漏洞利用代码注入堆栈,因为有了这层保护恶意程序还是无法执行。当用户输入被应用程序识别为一组允许代码执行,读取堆栈的特殊字符串,或是在运行程序时产生切分错误,Gingerbread特为此添加了对格式化字符串的保护。除此之外,mmapPmin_adddr可以用来检查间接引用内核空间漏洞的空指针。它可以保护系统免受由于触发空指针而产生碰撞造成的影响。

4.3 安卓ICE CREAM SANDWICH

安卓ICE CREAM SANDWICH 4.0是能够实施ASLR的最初版本。ASLR(地址空间布局随机化)使得每次为进程/模块分配内存时,堆栈内存地址随机化。但是第一次实施结果并没有达到预期的效果,因为无法对内存链接进行随机化。因此利用ROP进行攻击仍是可行的。

4.4 安卓JELLY BEANS

随着Jelly Beans 4.1中一些更强大的降低漏洞风险程序技术的应用实施,对漏洞的捕捉任务也更为艰巨。独立位置的可执行(Position Independent Executables)提供了一种支持二进制与PIE标记结合,

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[29481],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。