法律状态公告日
法律状态信息
法律状态
2016-10-05
授权
授权
2014-11-12
实质审查的生效 IPC(主分类):G06F21/56 申请日:20140630
实质审查的生效
2014-10-15
公开
公开
技术领域
本发明属于计算机安全和移动安全领域,更具体地,涉及一种检测 Android权限提升攻击的应用程序重写方法和系统。
背景技术
近年来,智能终端在全球范围内广泛普及,尤其是以Google的Android 系统和Apple的iOS系统为代表的智能终端。据Gartner公司报告,2012 年第一季度Android和iOS系统手机占全球智能手机总市场的79%,其中 Android系统手机占56%。由于Android市场占有率高、系统开放源码等特 性,本专利针对目前较流行的Android系统移动终端。随着Android智能 终端的流行,针对Android系统的恶意代码也日益增多,据最新卡巴斯基 公司报告,2012年第二季度超过14,900个新增的恶意代码样本被添加到卡 巴斯基的数据库中,这些恶意代码主要是吸费程序和远程控制的木马。此 外,虽然目前Android系统的安全机制(主要包含虚拟机隔离和基于权限 的访问控制策略)能够尽可能地保证应用程序间的隔离性,然而最近的研 究表明,Android系统中间层存在权限提升攻击(主要是权限重授权攻击), 该攻击能够在未经用户许可的情况下获得特权权限从而绕过Android系统 的安全机制。
由于Android权限系统无法抵御权限提升攻击,因此用户需要采取必 要的安全措施检测和阻止该攻击。目前,针对Android中间层的权限提升 攻击,已经存在一些解决方案来检测这种攻击,其中IPC Inspection、Quire 和XmanDroid是3种主要的方法,这些方法要么通过减少接收程序的权限, 要么通过构造组件间通信(Inter-component communication,简称ICC) 调用图来防止或检测该攻击。然而,目前这些方案均需要修改Android系 统源码,由于Android碎片化问题严重,这导致作者需要提供多种修改后 的Android系统版本,从而增加开发者工作量。此外,用户需要刷机才能 使用以上检测方法,但是目前刷机操作对于普通用户来说存在很大的难度, 因此这会影响这些检测方法地普及。
因此,如何在保障安全性和易部署性的基础上设计一个权限提升攻击 检测系统是必要的。从安全性角度出发,该检测系统能够有效地检测 Android中间层权限攻击。从易部署性角度出发,该检测系统需要尽可能地 对用户和开发者透明,从而更容易地普及到普通用户中。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种检测Android 权限提升攻击的应用程序重写方法和系统,其目的在于,针对现有Android 生态系统的特点,解决现有检测方法存在的部署困难的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种用于检测 Android权限提升攻击的应用程序重写方法,包括以下步骤:
(1)将用户上传的Android应用程序进行反编译,以生成中间文件和 应用程序配置文件;
(2)对步骤(1)生成的中间文件插入调用链构建代码,以使应用程 序在运行时自动地构建调用链;
(3)对步骤(1)生成的中间文件插入调用链获取代码,以使应用程 序在运行时自动地获取调用程序发送的调用链;
(4)对步骤(1)生成的中间文件插入检测代码,以使应用程序访问 系统敏感资源时自动地判断是否存在权限提升攻击;
(5)对步骤(2)、步骤(3)和步骤(4)修改完的中间文件以及应用 程序配置文件重新打包成新的应用程序;
(6)对步骤(5)生成的应用程序进行签名,以使该应用程序能够被 安装到移动设备中。
优选地,步骤(1)是采用反编译工具apktool,其将APK反编译成smali 格式的中间文件以及AndroidManifest.xml应用程序配置文件,其中应用 程序配置文件定义了应用程序各个组件的信息,组件包括行为、服务、广 播接收机和内容提供商。
优选地,步骤(2)包括以下子步骤:
(2-1)自动生成调用链构建代码,该代码用于应用程序运行时产生调 用链并传递调用链到被调用程序;;
(2-2)从Android源码或者开发者文档中获得Android框架层定义的 所有ICC的API信息;
(2-3)根据步骤(2-2)获得的ICC应用程序编程接口信息查找中间 文件中所有ICC API调用位置;
(2-4)根据所有ICC API调用位置在中间文件中调用ICC位置前插入 (2-1)生成的调用链构建代码。
优选地,步骤(3)包括以下子步骤:
(3-1)自动生成调用链获取代码,该代码用于应用程序组件启动时获 取调用链并验证调用链的完整性;
(3-2)解析应用程序配置文件,以获得中间文件的各个组件的文件路 径;
(3-3)根据步骤(3-2)获得的文件路径在中间文件的组件入口处插 入(3-1)生成的调用链获取代码。
优选地,步骤(4)包括以下子步骤:
(4-1)自动生成攻击检测代码,该代码用于检测调用链上所有程序是 否含有权限。
(4-2)在Android系统中构建权限表,其包括所有特权API以及相应 的权限信息;
(4-3)根据(4-2)的权限表查找中间文件,以获得应用程序中所有 调用特权API的位置;
(4-4)根据应用程序中所有调用特权API的位置在中间文件中调用特 权API位置前插入(4-1)生成的攻击检测代码。
按照本发明的另一方面,提供了一种用于检测Android权限提升攻击 的应用程序重写系统,包括:
第一模块,用于将用户上传的Android应用程序进行反编译,以生成 中间文件和应用程序配置文件;
第二模块,用于对第一模块生成的中间文件插入调用链构建代码,以 使应用程序在运行时自动地构建调用链;
第三模块,用于对第一模块生成的中间文件插入调用链获取代码,以 使应用程序在运行时自动地获取调用程序发送的调用链;
第四模块,用于对第一模块生成的中间文件插入检测代码,以使应用 程序访问系统敏感资源时自动地判断是否存在权限提升攻击;
第五模块,用于对第一模块、第二模块、以及第三模块修改完的中间 文件以及应用程序配置文件重新打包成新的应用程序;
第六模块,用于对第五模块生成的应用程序进行签名,以使该应用程 序能够被安装到移动设备中。
优选地,第二模块包括:
第二十一模块,用于自动生成调用链构建代码,该代码用于应用程序 运行时产生调用链并传递调用链到被调用程序;
第二十二模块,用于从Android源码或者开发者文档中获得Android 框架层定义的ICC的API信息;
第二十三模块,用于根据第二十二模块获得的ICC应用程序编程接口 信息查找中间文件中所有ICC API调用位置;
第二十四模块,用于根据所有ICC API调用位置在中间文件中调用ICC 位置前插入第二十一模块生成的调用链构建代码。
优选地,第三模块包括:
第三十一模块,用于自动生成调用链获取代码,该代码用于应用程序 组件启动时获取调用链并验证调用链的完整性;
第三十二模块,用于解析应用程序配置文件,以获得中间文件的各个 组件的文件路径;
第三十三模块,用于根据第三十二模块获得的文件路径在中间文件的 组件入口处插入第三十一模块生成的调用链获取代码。
优选地,第四模块包括:
第四十一模块,用于自动生成攻击检测代码,该代码用于检测调用链 上所有程序是否含有权限;
第四十二模块,用于在Android系统中构建权限表,其包括所有特权 API以及相应的权限信息;
第四十三模块,用于根据第四十二模块的权限表查找中间文件,以获 得应用程序中所有调用特权API的位置;
第四十四模块,用于根据应用程序中所有调用特权API的位置在中间 文件中调用特权API位置前插入第四十一模块生成的攻击检测代码。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够 取得下列有益效果:
(1)攻击检测的有效性强:由于采用了步骤(2)、(3)和(4),本发 明能够建立程序间通信的调用链,并在访问特权API时利用调用链检测权 限提升攻击,从而能够有效地阻止该攻击对终端的威胁。
(2)检测系统的部署性容易:由于采用了步骤(1)、(5)和(6),本 发明能够无需修改Android系统源码,用户只需上传Android应用程序到 服务端(或者采用云服务方式),服务端利用重写系统自动地生成一个安全 性加强的新应用程序,用户从服务器下载新的应用程序安装到Android终 端;此外,当Android发布新版本系统时,不需要重新修改Android源码, 只需要更新本发明的重写方法即可。
附图说明
图1是本发明检测Android权限提升攻击的应用程序重写方法的流程 图。
图2是本发明方法中步骤(2)的细化流程图。
图3是本发明方法中步骤(3)的细化流程图。
图4是本发明方法中步骤(4)的细化流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图 及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体 实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的 本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可 以相互组合。
本发明的总体思路在于:通过应用市场对应用程序反编译和分析,在 应用程序中插入调用链构建代码、调用链检测代码,从而在应用程序运行 过程中有效地跟踪程序间通信以及应用程序对敏感资源的访问。
本发明包括移动终端(或者用户)上传应用程序到重写系统,重写系 统将应用程序重写后生成新的应用程序,移动终端安装新的应用程序。此 外,移动终端包含一个安全服务程序,该程序为应用程序运行时提供安全 服务。
如图1所示,本发明用于检测Android权限提升攻击的应用程序重写 方法包括以下步骤:
(1)将用户上传的Android应用程序进行反编译,以生成中间文件和 应用程序配置文件;具体而言,本步骤是采用反编译工具apktool,该工具 将Android应用程序包文件(Android application package file,简称 APK)反编译成smali格式的中间文件以及AndroidManifest.xml应用程序 配置文件,其中应用程序配置文件定义了应用程序各个组件的信息,组件 包括行为(activity)、服务(service)、广播接收机(broadcast receiver) 和内容提供商(content provider)。
本步骤的优点在于,可以不依赖应用程序源代码检测权限提升攻击, 从而确保本方法对应用程序开发者的透明性。
(2)对步骤(1)生成的中间文件插入调用链构建代码,以使应用程 序在运行时自动地构建调用链;
本步骤的优点在于,避免修改Android源码来构建调用链,从而确保 本发明更容易地部署。
(3)对步骤(1)生成的中间文件插入调用链获取代码,以使应用程 序在运行时自动地获取调用程序发送的调用链;
本步骤的优点在于,确保调用链在应用程序间的传递,从而确保本发 明检测的准确性。
(4)对步骤(1)生成的中间文件插入检测代码,以使应用程序访问 系统敏感资源时自动地判断是否存在权限提升攻击;
本步骤的优点在于,攻击检测的完整覆盖,确保每次访问系统资源时 均不存在权限提升攻击。
(5)对步骤(2)、步骤(3)和步骤(4)修改完的中间文件以及应用 程序配置文件重新打包成新的应用程序;
(6)对步骤(5)生成的应用程序进行签名,以使该应用程序能够被 安装到移动设备中。
如图2所示,步骤(2)包括以下子步骤:
(2-1)自动生成调用链构建代码,该代码用于应用程序运行时产生调 用链并传递调用链到被调用程序;具体而言,调用链包含完成一个任务所 经过的所有应用程序信息(包括PID、UID等)以及这些信息的哈希值;
(2-2)从Android源码或者开发者文档中获得Android框架层定义的 所有组件间通信(Inter-component communication,简称ICC)的应用程 序编程接口(Application Programming Interface,简称API)信息;
(2-3)根据步骤(2-2)获得的ICC应用程序编程接口信息查找中间 文件中所有ICC API调用位置;
(2-4)根据所有ICC API调用位置在中间文件中调用ICC位置前插入 (2-1)生成的调用链构建代码。
如图3所示,步骤(3)包括以下子步骤:
(3-1)自动生成调用链获取代码,该代码用于应用程序组件启动时获 取调用链并验证调用链的完整性;
(3-2)解析应用程序配置文件,以获得中间文件的各个组件的文件路 径;由于Android系统允许动态注册广播接收机组件,因此需要查找动态 注册广播接收机组件的中间文件以及其路径;
(3-3)根据步骤(3-2)获得的文件路径在中间文件的组件入口处插 入(3-1)生成的调用链获取代码。
如图4所示,步骤(4)包括以下子步骤:
(4-1)自动生成攻击检测代码,该代码用于检测调用链上所有程序是 否含有权限。
(4-2)在Android系统中构建权限表,其包括所有特权API以及相应 的权限信息;具体而言,Android系统中提供了许多API给应用程序访问系 统资源,这些API均由权限进行保护,因此在Android系统中构建了一个 开源的权限表;
(4-3)根据(4-2)的权限表查找中间文件,以获得应用程序中所有 调用特权API的位置;
(4-4)根据应用程序中所有调用特权API的位置在中间文件中调用特 权API位置前插入(4-1)生成的攻击检测代码。
本发明用于检测Android权限提升攻击的应用程序重写系统包括:
第一模块,用于将用户上传的Android应用程序进行反编译,以生成 中间文件和应用程序配置文件;具体而言,是采用反编译工具apktool,该 工具将Android应用程序包文件(Android application package file,简 称APK)反编译成smali格式的中间文件以及AndroidManifest.xml应用程 序配置文件,其中应用程序配置文件定义了应用程序各个组件的信息,组 件包括行为(activity)、服务(service)、广播接收机(broadcast receiver) 和内容提供商(content provider)。
第二模块,用于对第一模块生成的中间文件插入调用链构建代码,以 使应用程序在运行时自动地构建调用链;
第三模块,用于对第一模块生成的中间文件插入调用链获取代码,以 使应用程序在运行时自动地获取调用程序发送的调用链;
第四模块,用于对第一模块生成的中间文件插入检测代码,以使应用 程序访问系统敏感资源时自动地判断是否存在权限提升攻击;
第五模块,用于对第一模块、第二模块、以及第三模块修改完的中间 文件以及应用程序配置文件重新打包成新的应用程序;
第六模块,用于对第五模块生成的应用程序进行签名,以使该应用程 序能够被安装到移动设备中。
其中,第二模块包括:
第二十一模块,用于自动生成调用链构建代码,该代码用于应用程序 运行时产生调用链并传递调用链到被调用程序;具体而言,调用链包含完 成一个任务所经过的所有应用程序信息(包括PID、UID等)以及这些信息 的哈希值;
第二十二模块,用于从Android源码或者开发者文档中获得Android 框架层定义的所有组件间通信(Inter-component communication,简称ICC) 的应用程序编程接口(Application Programming Interface,简称API) 信息;
第二十三模块,用于根据第二十二模块获得的ICC应用程序编程接口 信息查找中间文件中所有ICC API调用位置;
第二十四模块,用于根据所有ICC API调用位置在中间文件中调用ICC 位置前插入第二十一模块生成的调用链构建代码。
第三模块包括以下子步骤:
第三十一模块,用于自动生成调用链获取代码,该代码用于应用程序 组件启动时获取调用链并验证调用链的完整性;
第三十二模块,用于解析应用程序配置文件,以获得中间文件的各个 组件的文件路径;由于Android系统允许动态注册广播接收机组件,因此 需要查找动态注册广播接收机组件的中间文件以及其路径;
第三十三模块,用于根据第三十二模块获得的文件路径在中间文件的 组件入口处插入第三十一模块生成的调用链获取代码。
第四模块包括:
第四十一模块,用于自动生成攻击检测代码,该代码用于检测调用链 上所有程序是否含有权限;
第四十二模块,用于在Android系统中构建权限表,其包括所有特权 API以及相应的权限信息;具体而言,Android系统中提供了许多API给应 用程序访问系统资源,这些API均由权限进行保护,因此在Android系统 中构建了一个开源的权限表;
第四十三模块,用于根据第四十二模块的权限表查找中间文件,以获 得应用程序中所有调用特权API的位置;
第四十四模块,用于根据应用程序中所有调用特权API的位置在中间 文件中调用特权API位置前插入第四十一模块生成的攻击检测代码。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等 同替换和改进等,均应包含在本发明的保护范围之内。
机译: 检测计算机系统上的攻击,特别是病毒类型的攻击,从而使用一种通用方法,该方法能够检测隐藏在数据链中的攻击程序,这些数据链通过可检测的指令加载到内存中
机译: 一种在云计算中检测DOS / DDOS攻击启动应用程序的应用程序配置方法
机译: 检测Web应用程序攻击的方法,该方法可以检测数据库管理系统中可以处理的所有类型的SQL语法