首页 资讯 招标 项目 展会 更多

位置:首页 > 新闻频道 > 技术动态


一种安卓平台下提权攻击检测系统的设计与实现

2016-04-26 10:32:56 安装信息网

相关链接: 中国安全网 中国质量网 中国论文网 中国资讯网

 张涛,裴蓓,文伟平,陈钟

 (1北京大学信息科学技术学院,北京100871;2.信息网络安全公安部重点实验室,上海201204;3北京大学软件与微电子学院,北京102600)

 摘要:随着安卓系统的盛行,其安全性问题也逐渐成为人们关注的焦点。在安卓系统中进行敏感操作必须向系统申请相应的权限。虽然安卓系统中已经设计了与权限控制相关的系统模块,但是攻击者仍然可以借助系统漏洞或第三方程序漏洞进行提权攻击,进而非法使用一些超越其申请权限的功能。此种攻击不但对系统安全威胁较大,还具有一定的隐蔽性。文章通过对以往研究进行分析和创新,提出了一种新型的基于控制流检测和安卓敏感权限词典匹配的轻量级提权攻击检测方法,并在此基础上完成了自动化程度高、检测效率高的检测软件的设计与实现。

0引言

 安卓系统是一款基于Linux内核并开放源代码的移动平台操作系统。基于Linux内核使得安卓系统能够长期不断电运行,十分稳定;而开放源代码使得任何公司和个人都可以通过修改其源代码进行定制,从而使得安卓系统能够适应不同的硬件平台。自从安卓初创团队于2005年被Coogle收购以来,安卓系统借助Google强大的科研、资本和运营能力,逐步侵占其他移动平台操作系统市场占有率,成为近几年市场占有率第一的移动平台操作系统。大量开发者选择在该平台上进行移动软件开发,使得安卓系统成为全球应用最多的移动平台。

 但是,由于安卓系统的开放性以及开发者水平良莠不齐,使得安卓系统存在许多安全问题和漏洞。安卓系统的安全问题和漏洞主要涉及通信系统、应用软件、隐私信息与设备安全四个方面。通信系统方面的安全风险包括攻击者在用户不知情的情况下拨打电话或挂断电话、发送垃圾短信等。应用软件方面则主要涉及恶意软件发起的攻击。隐私信息方面则多指用户隐私信息及敏感信息的泄露。设备安全方面则主要多指手机被盗而遭遇的信息泄露以及因此带来的经济损失。

1提权攻击概念及模型

1.1提权攻击概念

 在所有针对安卓系统的攻击方式中,提权攻击是一种危害性较大的攻击方式。传统意义上,提权攻击指的是低授权、受限制的用户或者程序通过非法手段提升自身权限以实施控制计算机或者其他超出自身权限的行为。攻击者一旦攻击成功,系统原有的安全设置将无法保护用户的隐私和安全,给用户带来严重威胁。

 安卓系统中的提权攻击有着普通提权攻击没有的特点。安卓系统中的提权攻击是指本来低权限或者不具备权限的恶意程序通过其他具有权限的第三方应用程序的漏洞而行使了第三方应用程序的功能。这种基于安卓系统的攻击行为由DAVI等人第一次提出,他们在对安卓系统中的提权攻击做了如下定义:拥有较低(较少)权限的应用程序访问拥有较高(较多)权限的应用程序组件(活动、服务、内容提供器和广播接收器等)而不受到任何限制的攻击行为称为安卓系统中的提权攻击。这种攻击具有很强的隐蔽性,且攻击者常常并不破坏用户设备,仅仅盗取用户信息,因此很难被用户察觉。此外,这种攻击行为的前提是用户系统中存在着拥有较高权限,但同时也有漏洞的第三方软件,具有一定的限制性,因此也一直未受到人们的关注。随着智能手机用户的增加以及人们对移动设备依赖性的增强,越来越多的手机中保存着用户越来越多的个人信息,如银行账户信息、个人身份信息等,这大大增加了安卓系统提权攻击的危害。

 2009年,ENCK等人首次系统介绍了安卓安全机制,公布了一款名为Kirin的应用安装工具,并第一次采用静态检测组合策略,即在安装应用的时候就对其申请的所有权限进行审核,如果违背了配置策略,就拒绝对其进行安装。虽然该工具有效阻止了申请敏感权限的程序的安装,但是其误报率较高,原因在于仅依据已知危险软件的权限申请组合并不能够判断出申请同样权限的其他应用也为危险软件。

 在此之后,FELTl等人开发出Stowaway。它的原理是通过反编译安卓应用程序代码,检测其调用的系统API,并与manifest.xml文件中声明使用的权限进行比较,查看应用程序是否为危险程序。该工具误报率同样较高,因为开发人员对系统API所需要的权限了解不足,常常申请超出必要的权限,因此在配置文件中申请过高权限也不能完全证明其为恶意程序。

 随后,对提权攻击的研究扩展到多个应用之间的串谋攻击,而不仅仅局限于对单个应用的研究。

 FELT等人提出IPC Inspection,其基本方法是当应用程序接收其他应用程序的消息时,它必须减小自己使用的权限集合,删去其他应用程序没有的权限,以防提权攻击。

 DIETZ等人在IPC Inspection的基础上提出Qurie。Qurie是安卓安全机制的一个扩展,它提供了一个轻量级的来源系统以防止所谓的混淆代理人攻击。其基本思路与IPC Inspection类似,不同点在于,当收到低权限的应用程序的消息后,Qurie会让开发者自己来决定如何处理。由于开发者可能并不具有软件安全的相关知识,因而无法对复杂情况做出正确的判断。

 在国内,于达首次提出监视代码函数里的参数列表,以查看其是否涉及敏感信息,并以此将代码函数分成权限泄露函数和隐私泄露函数两种。除了监视泄露函数中的参数列表,于达还将Intent劫持予以考虑,但其并未就如何构建控制流图进行详细的说明。

1.2安卓系统下的提权攻击模型

 DAVI等人在2011年首次提出安卓系统中的提权攻击时给出了如图l所示的提权攻击模型。

 图1显示,3个应用程序分别运行在3个安卓系统提供的Dalvik虚拟机上。正常情况下,它们只能分别访问应用自身内部的信息、图片等资源,不可以访问其他应用程序的资源。但是当有合理的需求需要访问其他应用程序的资源时,就需要应用程序之间的合作。图1中,应用程序1启用不需要任何权限,自身也不拥有任何权限;应用程序2启用不需要任何权限,自身拥有权限P1;应用程序3的组件l启用需要权限P1,组件2启用需要权限P2。应用程序1虽然不能直接访问应用程序3的组件1,但是可以访问应用程序2的组件1。应用程序2的组件1拥有访问应用程序3的组件1的权限,那么以应用程序2作为跳板,应用程序1就可以访问应用程序3的组件1,从而执行自身权限范围之外的功能,也就完成了一次提权攻击。

 图1中应用程序2是具有漏洞的应用程序,起到了跳板的作用,对应用程序l的提权攻击负有责任。如果应用程序2强制要求调用它的内部组件时都必须拥有权限Pl,就可以完全阻止这种攻击的发生。开发人员可以在Manifest.xml中直接静态声明需要的权限P1或者在代码里使用checkPermission()等API函数来动态审查权限。但是大多数开发者并不是信息安全专家,甚至对于信息安全一无所知,他们没有意识到或者不在乎这种攻击的发生,因为即使存在这些漏洞,对于应用程序本身的运行没有任何影响。但是这种攻击可能给用户带来巨大的安全风险,攻击者可以通过这种攻击方式获得用户的隐私信息、银行账户信息,或者进行连接互联网、发送恶意短信、拨打恶意电话等一系列恶意操作。

 提权攻击主要包括操作型攻击(如打电话、发短信等)以及数据型攻击(获取敏感数据)两种。

 1)操作型攻击

 攻击源发出指令最终导致某种越权操作。这类攻击不需要返回数据给攻击源,所以难以追踪。操作型攻击模型如图2所示。

 2)数据型攻击

 攻击源发出指令后,从敏感数据库中获取敏感信息并返回,或者将敏感信息传回指定泄露点。这类攻击必须返回敏感数据,所以容易跟踪与监控。数据型攻击模型如图3所示。

2检测系统总体设计

 图4为本文提权攻击检测系统的基本工作原理图。由图4可知,该系统主要包括两大核心模块:申请权限分析模块和应用程序控制流图构建模块”。

 1)申请权限分析模块

 Manifest.xml是整个应用程序的配置文件,应用程序使用的所有权限、用户自定义的权限以及各个组件需要被哪些权限保护等都需要在该文件中进行声明。因此,针对Manifest.xml文件进行分析是整个检测系统最基础的部分。完成此分析后,我们将得到一个完整的权限申请列表,并由此映射得到所能使用的函数列表,从而确定不能访问的系统函数。申请权限分析模块就是针对Manifest.xml文件进行分析。

 2)应用程序控制流图构建模块

 如图4所示,从提交待检测APK到APK文件反编译再到调用的系统函数分析主要是基于Smali文件解析来实现的。

 针对应用程序的APK文件进行反编泽将得到Smali文件,该文件中保存着应用程序反编译后得到的代码。分析该文件可以得到应用程序使用的函数,调用的系统函数、参数等信息,并以此得到系统函数调用列表与调用顺序,也就是控制流图。

2.1 Manifest.xml文件解析

 1) Manifest.xml文件结构

 Manifest.xml配置文件是每个安卓程序必需的文件。它位于整个安卓应用开发工程项目的根目录,包含了安卓应用程序的每一个组件(活动、服务、内容提供器和广播接收器等),并使用Intent过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。

 图5为Manifest.xml文件的粗略结构。

其中涉及权限的标签分别有:

  (1) <uses-permission>。在安卓系统的安全模型中,应用程序在默认情况下不可以执行任何对其他应用程序、系统或者用户有负面影响的操作。如果应用程序需要执行某个操作,就要声明使用这个操作对应的权限,使用该标签可以完成对权限的声明。

 (2) <permission>。应用程序也可以自定义属于自己的permlssion或属于开发者的用同一个证书签名的permission。定义一个permlssion就是在Manifest.xml文件中添加一个<permission>标签。

 (3)<android:permission>。如果要将一个应用程序或者组件设置为权限保护的,也就是说只有具备要求的权限时才能访问该程序或组件,则需要设置这个标签。

  (4)<android:exported>。如果要将一个组件设置为私有的,即无论何种权限都不许访问此组件,则需要设置此标签。当<android:exported>为false时,组件是私有的。

 (5)<intent-filter>。一个应用程序的3个核心组件(活动、服务和广播接收器)都是通过Intent消息来激活的。<intent-filter>标签的主要作用就是区分Intent消息中,哪些隐式Intent消息可以接受响应,哪些将被拒绝接受响应。需要注意的是,<intent-filter>对显式Intent消息起不到任何区别和过滤作用,所以该标签也不能完全保证组件的安全。

 2) Manifest.xml分析过程

 系统主要通过分析Manifest.xml文件对APK使用的权限做一个初步判断,并根据所声明的权限输出危险控件列表和声明的可使用权限列表两个列表,用来交叉比对出敏感权限和安全权限。分析Manifest.xml文件所使用的决策树如图6所示。

2.2 Smali文件解析

 对于一个未加密的APK,有两种方式将其转换为可读代码:一种是通过APK反编译工具Apktool将其转换为Smali代码;另一种是将APK文件解压缩,使用Java反编译工具JD-GUI打开其中的classes.dex文件,将其反编译成Java代码。

 这里做了一个假设:假设原始APK总是不透明的,即假设不知道APK内部处理和操作流程。但是,无论使用怎样的操作流程,如果APK希望采取某些行为(这里特指恶意行为),那么它不可避免地需要调用系统中的函数,否则仅在APK内部操作是无法对系统造成实质上的破坏的。将APK所调用的所有非该APK中的函数(也就是系统中的函数)看作是该APK与系统的“接口”,如果能够掌握该APK所有“接口”的合集,那么我们就可以预测该APK在系统中的最大接触范围,从而对其破坏性活动进行预测。因此,重点应放在如何从APK中提取出这些“接口”,而不是放在APK之间函数的相互调用。

 本文使用Samli文件进行解析,从中获取以下信息:

 1)该Smali代码对应类的名称。

 2)该类所包含的所有函数。

 3)该类所调用的所有系统函数。

 类名位于Smali文件第1行,并以.class开头。对于任何一个单独的Smali文件,其所代表的类是唯一确定的。在得到类后,通过分析类中的各个方法(函数),可以得到类中所有调用系统函数的语句。系统函数的调用语句均以invoke开头,所调用的函数以虚函数表中的序号标示。

3检测系统的实现

3.1系统概述

  本系统是一款基于安卓系统的针对提权攻击的静态检测工具,主要分为服务器端和客户端两部分,其总体框架如图7所示。

 1)服务器端

 服务器端在系统中起数据存储、更新和查询的作用。服务器端运营于新浪云计算平台SAE上,负责为客户端提供所需的数据,并根据客户端返回的结果更新数据。服务器端运行和维护了两张关于安卓系统权限函数的数据库表map_lib和permlssion_map。map_lib包含90848条数据,主要包括每一个函数的下一步映射函数,如果映射函数为权限敏感函数,则还要包括其涉及的全部敏感感染路径。permlssion_map为权限映射表,主要负责将每一个通过查找敏感权限词典得到的敏感权限项映射成为相应的权限操作函数,涉及到757条数据。

 对于map_lib的维护,客户端首先会询问服务器端某个函数是否为安全函数,即查看map_lib的相应father_id对应的danger字段数据是false(安全)、true(敏感)还是null(未曾进行映射运算)。如果返回前两种结果,那么客户端可以立刻得到函数状态;如果返回null,客户端需要计算该函数的映射范围,并将结果返回服务器端,更新danger字段和path字段(由于我们只关心敏感函数路径,且一般函数的映射范围都非常巨大,为减轻数据库压力,我们只关心danger字段为true的path字段的值)。

 对于permlssion_map的维护,客户端首先将所有757个敏感函数id(即permission_map的id字段)存储到内存中,供映射计算使用。在分析Manifest.xml时,将所有permlssion权限映射成函数id并返回给客户端。在权限映射这一步中,会有一个permlssion对应多个函数id的情况,这里我们将所有的id都返回给客户端。

  2)客户端

  客户端可以运行在Windows vista/7/8系统上,主要有两个功能模块:Manifest.xml文件分析模块和Smali文件解析模块。Smali文件解析模块负责从输入的Smali文件夹中区分出Smali文件与Manifest.xml文件;通过分析Smali文件得到函数调用列表,将调用的函数与服务器端进行数据交互,区分出安全函数与敏感函数,如果为敏感函数,则向服务器端查询其敏感感染路径;分析Manifest.xml文件得到安卓应用申请的权限,如果未在Manifest.xml中显式地声明申请此权限,但在Smali文件中却调用了涉及该权限的函数,那么系统将认为遭到了提权攻击,提出警告。

 客户端分析流程如图8所示。

3.2详细设计

 1) Manifest.xml解析

 系统对Manifest.xml进行分析并将读取的数据存储到以下数据结构中:

 MainfestHead主要用于存储Manifest.xml的基础信息,UsesPermission用于存储用户申请的权限列表。

  2)函数映射计算函数映射计算十分困难,函数量大,调用关系复杂,通

过建立包含多级缓存的机器学习方法可以大大降低计算时间。一般认为,一个函数只需要遍历一次即可确定其是否安全。通过机器学习,能够避免函数的重复遍历,从而加决函数映射的计算速度。测试表明,一般APP分析时间约为3分钟。

4检测系统的测试

 运用本文检测系统对Google Play平台中的1179个应用程序进行了检测,并抽样进行了手工分析,以此测试提权攻击检测系统的实际运行效果,重点测试运行效率和误报率。

4.1误报率

 经过系统检测,有613个应用程序在Manifest.xml文件分析过程中被检测出含有漏洞,申请了敏感权限。系统对这些应用程序做了更进一步的检测,最终有123个应用程序被检测出含有过多的权限,这些权限可以被攻击者利用发动提权攻击。从123个报警的应用程序中随机选取20个应用程序进行人工分析,主要是对报警的路径进行分析,以验证系统检测的准确性。结果在这20个报警的应用程序中,9个真正存在提权攻击漏洞,具有安全威胁,其他

11个应用程序都是系统误报。

 表l给出了3种检测工具的实验结果对比。从表1可以看出,本文检测方法( CoChec:ker)的误报率相较于其他两种主流检测软件有了一定的提升,处于中等水平。

 通过分析得出,造成系统误报的主要原因包含以下几点:

 1) -些安卓系统的API函数的敏感性不能被唯一确定。例如,函数print()被认为是一个可能泄露用户隐私数据的函数,但它大多数情况下还是进行正常显示,只有极少数情况下被攻击者利用。

 2)安卓敏感权限词典是查询安卓官方文档得到,在它的基础上又映射得到敏感函数列表。由于工作量的关系,第1版的敏感权限只有403个,其中也有一定的提升空间。

4.2效率

 本文系统在36秒内完成了4M大小的应用程序的分析,读取536个类13249个函数,包含3583个调用函数,其中有1096个函数在敏感权限词典中需要进行分析,所有函数在58秒内完成分析。在分析的1096个函数中,共有1078个安全函数,18个敏感函数,并得出泄露路径。

 测试结果表明,本文系统的检测效率较高,能够在可以容忍的时间范围内完成对较大程序的检测。

5结束语

 本文首先对安卓系统的整体架构以及安全机制进行了详细分析,通过对安卓系统各组件的安全机制及其局限性进行阐述,引出安卓系统存在的诸多安全漏洞及安全风险。

 结合大量调研和相关实践工作,文章提出了一种新型的基于控制流检测与安卓敏感权限词典匹配的轻量级提权攻击检测方法,首次给出详尽的控制流图构建方法,并在此基础上实现了一款自动化程度较高、检测效率高的检测软件。

最后,通过对1179个安卓应用检测结果进行分析进而验证该软件设计指标的合规性。实验证明,该提权攻击检测系统无论在降低误报率上还是自动化程度上,较传统的安卓应用提权攻击检测工具都有一定的提升。本文仍有进一步的工作要做:应用程序控制流图的构造准确性及敏感权限函数的范围还可以继续提升,从而进一步提升该提权攻击检测系统的命中率。

关键字:

上一篇:一七矿用灭火系统——煤矿火灾防治创新系统

下一篇:一种基于相似度计算的无线传感器网络入侵检测方法

行业资讯月点击排行

展会信息月点击排行

招商信息月点击排行

首页 资讯 招标 项目 展会
关于我们 | 广告服务 | 友情连接 | 联系我们
触屏版 电脑版
安装信息网 www.36qyk.cn.