一种检测Android权限提升攻击的应用程序重写方法和系统的制作方法

文档序号:6551772阅读:217来源:国知局
一种检测Android权限提升攻击的应用程序重写方法和系统的制作方法
【专利摘要】本发明公开了一种用于检测Android权限提升攻击的应用程序重写方法,包括:将用户上传的Android应用程序进行反编译,以生成中间文件和应用程序配置文件,对生成的中间文件插入调用链构建代码,以使应用程序在运行时自动地构建调用链,对生成的中间文件插入调用链获取代码,以使应用程序在运行时自动地获取调用程序发送的调用链,对生成的中间文件插入检测代码,以使应用程序访问系统敏感资源时自动地判断是否存在权限提升攻击,对修改完的中间文件以及应用程序配置文件重新打包成新的应用程序,对生成的应用程序进行签名,以使该应用程序能够被安装到移动设备中。本发明能够有效地避免对Android系统源码的修改,从而能够更容易地被普通用户所采用。
【专利说明】-种检测Android权限提升攻击的应用程序重写方法和系 统

【技术领域】
[0001] 本发明属于计算机安全和移动安全领域,更具体地,涉及一种检测Android权限 提升攻击的应用程序重写方法和系统。

【背景技术】
[0002] 近年来,智能终端在全球范围内广泛普及,尤其是以Google的Android系统和 Apple的iOS系统为代表的智能终端。据Gartner公司报告,2012年第一季度Android和 iOS系统手机占全球智能手机总市场的79%,其中Android系统手机占56%。由于Android 市场占有率高、系统开放源码等特性,本专利针对目前较流行的Android系统移动终端。随 着Android智能终端的流行,针对Android系统的恶意代码也日益增多,据最新卡巴斯基公 司报告,2012年第二季度超过14, 900个新增的恶意代码样本被添加到卡巴斯基的数据库 中,这些恶意代码主要是吸费程序和远程控制的木马。此外,虽然目前Android系统的安全 机制(主要包含虚拟机隔离和基于权限的访问控制策略)能够尽可能地保证应用程序间的 隔离性,然而最近的研究表明,Android系统中间层存在权限提升攻击(主要是权限重授权 攻击),该攻击能够在未经用户许可的情况下获得特权权限从而绕过Android系统的安全 机制。
[0003] 由于Android权限系统无法抵御权限提升攻击,因此用户需要采取必要的安全 措施检测和阻止该攻击。目前,针对Android中间层的权限提升攻击,已经存在一些解 决方案来检测这种攻击,其中IPC Inspection、Quire和XmanDroid是3种主要的方法, 这些方法要么通过减少接收程序的权限,要么通过构造组件间通信(Inter-component communication,简称ICC)调用图来防止或检测该攻击。然而,目前这些方案均需要修 改Android系统源码,由于Android碎片化问题严重,这导致作者需要提供多种修改后的 Android系统版本,从而增加开发者工作量。此外,用户需要刷机才能使用以上检测方法,但 是目前刷机操作对于普通用户来说存在很大的难度,因此这会影响这些检测方法地普及。
[0004] 因此,如何在保障安全性和易部署性的基础上设计一个权限提升攻击检测系统是 必要的。从安全性角度出发,该检测系统能够有效地检测Android中间层权限攻击。从易 部署性角度出发,该检测系统需要尽可能地对用户和开发者透明,从而更容易地普及到普 通用户中。


【发明内容】

[0005] 针对现有技术的以上缺陷或改进需求,本发明提供了一种检测Android权限提升 攻击的应用程序重写方法和系统,其目的在于,针对现有Android生态系统的特点,解决现 有检测方法存在的部署困难的技术问题。
[0006] 为实现上述目的,按照本发明的一个方面,提供了一种用于检测Android权限提 升攻击的应用程序重写方法,包括以下步骤:
[0007] (1)将用户上传的Android应用程序进行反编译,以生成中间文件和应用程序配 置文件;
[0008] (2)对步骤(1)生成的中间文件插入调用链构建代码,以使应用程序在运行时自 动地构建调用链;
[0009] (3)对步骤(1)生成的中间文件插入调用链获取代码,以使应用程序在运行时自 动地获取调用程序发送的调用链;
[0010] (4)对步骤(1)生成的中间文件插入检测代码,以使应用程序访问系统敏感资源 时自动地判断是否存在权限提升攻击;
[0011] (5)对步骤(2)、步骤(3)和步骤(4)修改完的中间文件以及应用程序配置文件重 新打包成新的应用程序;
[0012] (6)对步骤(5)生成的应用程序进行签名,以使该应用程序能够被安装到移动设 备中。
[0013] 优选地,步骤(1)是采用反编译工具apktool,其将APK反编译成smali格式的中 间文件以及AndroidManifest. xml应用程序配置文件,其中应用程序配置文件定义了应用 程序各个组件的信息,组件包括行为、服务、广播接收机和内容提供商。
[0014] 优选地,步骤(2)包括以下子步骤:
[0015] (2-1)自动生成调用链构建代码,该代码用于应用程序运行时产生调用链并传递 调用链到被调用程序;;
[0016] (2-2)从Android源码或者开发者文档中获得Android框架层定义的所有ICC的 API信息;
[0017] (2-3)根据步骤(2-2)获得的ICC应用程序编程接口信息查找中间文件中所有ICC API调用位置;
[0018] (2-4)根据所有ICC API调用位置在中间文件中调用ICC位置前插入(2-1)生成 的调用链构建代码。
[0019] 优选地,步骤(3)包括以下子步骤:
[0020] (3-1)自动生成调用链获取代码,该代码用于应用程序组件启动时获取调用链并 验证调用链的完整性;
[0021] (3-2)解析应用程序配置文件,以获得中间文件的各个组件的文件路径;
[0022] (3-3)根据步骤(3-2)获得的文件路径在中间文件的组件入口处插入(3-1)生成 的调用链获取代码。
[0023] 优选地,步骤(4)包括以下子步骤:
[0024] (4-1)自动生成攻击检测代码,该代码用于检测调用链上所有程序是否含有权限。
[0025] (4-2)在Android系统中构建权限表,其包括所有特权API以及相应的权限信息;
[0026] (4-3)根据(4-2)的权限表查找中间文件,以获得应用程序中所有调用特权API的 位置;
[0027] (4-4)根据应用程序中所有调用特权API的位置在中间文件中调用特权API位置 前插入(4-1)生成的攻击检测代码。
[0028] 按照本发明的另一方面,提供了一种用于检测Android权限提升攻击的应用程序 重写系统,包括:
[0029] 第一模块,用于将用户上传的Android应用程序进行反编译,以生成中间文件和 应用程序配置文件;
[0030] 第二模块,用于对第一模块生成的中间文件插入调用链构建代码,以使应用程序 在运打时自动地构建调用链;
[0031] 第三模块,用于对第一模块生成的中间文件插入调用链获取代码,以使应用程序 在运行时自动地获取调用程序发送的调用链;
[0032] 第四模块,用于对第一模块生成的中间文件插入检测代码,以使应用程序访问系 统敏感资源时自动地判断是否存在权限提升攻击;
[0033] 第五模块,用于对第一模块、第二模块、以及第三模块修改完的中间文件以及应用 程序配置文件重新打包成新的应用程序;
[0034] 第六模块,用于对第五模块生成的应用程序进行签名,以使该应用程序能够被安 装到移动设备中。
[0035] 优选地,第二模块包括:
[0036] 第二十一模块,用于自动生成调用链构建代码,该代码用于应用程序运行时产生 调用链并传递调用链到被调用程序;
[0037] 第二十二模块,用于从Android源码或者开发者文档中获得Android框架层定义 的ICC的API信息;
[0038] 第二十三模块,用于根据第二十二模块获得的ICC应用程序编程接口信息查找中 间文件中所有ICC API调用位置;
[0039] 第二十四模块,用于根据所有ICC API调用位置在中间文件中调用ICC位置前插 入第二十一模块生成的调用链构建代码。
[0040] 优选地,第三模块包括:
[0041] 第三十一模块,用于自动生成调用链获取代码,该代码用于应用程序组件启动时 获取调用链并验证调用链的完整性;
[0042] 第三十二模块,用于解析应用程序配置文件,以获得中间文件的各个组件的文件 路径;
[0043] 第三十三模块,用于根据第三十二模块获得的文件路径在中间文件的组件入口处 插入第三十一模块生成的调用链获取代码。
[0044] 优选地,第四模块包括:
[0045] 第四十一模块,用于自动生成攻击检测代码,该代码用于检测调用链上所有程序 是否含有权限;
[0046] 第四十二模块,用于在Android系统中构建权限表,其包括所有特权API以及相应 的权限信息;
[0047] 第四十三模块,用于根据第四十二模块的权限表查找中间文件,以获得应用程序 中所有调用特权API的位置;
[0048] 第四十四模块,用于根据应用程序中所有调用特权API的位置在中间文件中调用 特权API位置前插入第四十一模块生成的攻击检测代码。
[0049] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有 益效果:
[0050] (1)攻击检测的有效性强:由于采用了步骤(2)、⑶和(4),本发明能够建立程序 间通信的调用链,并在访问特权API时利用调用链检测权限提升攻击,从而能够有效地阻 止该攻击对终端的威胁。
[0051] (2)检测系统的部署性容易:由于采用了步骤(1)、(5)和(6),本发明能够无需 修改Android系统源码,用户只需上传 Android应用程序到服务端(或者采用云服务方 式),服务端利用重写系统自动地生成一个安全性加强的新应用程序,用户从服务器下载 新的应用程序安装到Android终端;此外,当Android发布新版本系统时,不需要重新修改 Android源码,只需要更新本发明的重写方法即可。

【专利附图】

【附图说明】
[0052] 图1是本发明检测Android权限提升攻击的应用程序重写方法的流程图。
[0053] 图2是本发明方法中步骤⑵的细化流程图。
[0054] 图3是本发明方法中步骤(3)的细化流程图。
[0055] 图4是本发明方法中步骤(4)的细化流程图。

【具体实施方式】
[0056] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要 彼此之间未构成冲突就可以相互组合。
[0057] 本发明的总体思路在于:通过应用市场对应用程序反编译和分析,在应用程序中 插入调用链构建代码、调用链检测代码,从而在应用程序运行过程中有效地跟踪程序间通 信以及应用程序对敏感资源的访问。
[0058] 本发明包括移动终端(或者用户)上传应用程序到重写系统,重写系统将应用程 序重写后生成新的应用程序,移动终端安装新的应用程序。此外,移动终端包含一个安全服 务程序,该程序为应用程序运行时提供安全服务。
[0059] 如图1所示,本发明用于检测Android权限提升攻击的应用程序重写方法包括以 下步骤:
[0060] (1)将用户上传的Android应用程序进行反编译,以生成中间文件和应用程序配 置文件;具体而言,本步骤是采用反编译工具apktool,该工具将Android应用程序包文 件(Android application package file,简称APK)反编译成smali格式的中间文件以及 AndroidManifest. xml应用程序配置文件,其中应用程序配置文件定义了应用程序各个组 件的信息,组件包括行为(activity)、服务(service)、广播接收机(broadcast receiver) 和内容提供商(content provider)。
[0061] 本步骤的优点在于,可以不依赖应用程序源代码检测权限提升攻击,从而确保本 方法对应用程序开发者的透明性。
[0062] (2)对步骤(1)生成的中间文件插入调用链构建代码,以使应用程序在运行时自 动地构建调用链;
[0063] 本步骤的优点在于,避免修改Android源码来构建调用链,从而确保本发明更容 易地郃署。
[0064] (3)对步骤⑴生成的中间文件插入调用链获取代码,以使应用程序在运行时自 动地获取调用程序发送的调用链;
[0065] 本步骤的优点在于,确保调用链在应用程序间的传递,从而确保本发明检测的准 确性。
[0066] (4)对步骤(1)生成的中间文件插入检测代码,以使应用程序访问系统敏感资源 时自动地判断是否存在权限提升攻击;
[0067] 本步骤的优点在于,攻击检测的完整覆盖,确保每次访问系统资源时均不存在权 限提升攻击。
[0068] (5)对步骤(2)、步骤(3)和步骤(4)修改完的中间文件以及应用程序配置文件重 新打包成新的应用程序;
[0069] (6)对步骤(5)生成的应用程序进行签名,以使该应用程序能够被安装到移动设 备中。
[0070] 如图2所示,步骤⑵包括以下子步骤:
[0071] (2-1)自动生成调用链构建代码,该代码用于应用程序运行时产生调用链并传 递调用链到被调用程序;具体而言,调用链包含完成一个任务所经过的所有应用程序信息 (包括PID、WD等)以及这些信息的哈希值;
[0072] (2-2)从Android源码或者开发者文档中获得Android框架层定义的所有组件 间通信(Inter-component communication,简称 ICC)的应用程序编程接口(Application Programming Interface,简称 API)信息;
[0073] (2-3)根据步骤(2-2)获得的ICC应用程序编程接口信息查找中间文件中所有ICC API调用位置;
[0074] (2-4)根据所有ICC API调用位置在中间文件中调用ICC位置前插入(2-1)生成 的调用链构建代码。
[0075] 如图3所示,步骤(3)包括以下子步骤:
[0076] (3-1)自动生成调用链获取代码,该代码用于应用程序组件启动时获取调用链并 验证调用链的完整性;
[0077] (3-2)解析应用程序配置文件,以获得中间文件的各个组件的文件路径;由于 Android系统允许动态注册广播接收机组件,因此需要查找动态注册广播接收机组件的中 间文件以及其路径;
[0078] (3-3)根据步骤(3-2)获得的文件路径在中间文件的组件入口处插入(3-1)生成 的调用链获取代码。
[0079] 如图4所示,步骤⑷包括以下子步骤:
[0080] (4-1)自动生成攻击检测代码,该代码用于检测调用链上所有程序是否含有权限。
[0081] (4-2)在Android系统中构建权限表,其包括所有特权API以及相应的权限信息; 具体而言,Android系统中提供了许多API给应用程序访问系统资源,这些API均由权限进 行保护,因此在Android系统中构建了一个开源的权限表;
[0082] (4-3)根据(4-2)的权限表查找中间文件,以获得应用程序中所有调用特权API的 位置;
[0083] (4-4)根据应用程序中所有调用特权API的位置在中间文件中调用特权API位置 前插入(4-1)生成的攻击检测代码。
[0084] 本发明用于检测Android权限提升攻击的应用程序重写系统包括:
[0085] 第一模块,用于将用户上传的Android应用程序进行反编译,以生成中间文件和 应用程序配置文件;具体而言,是采用反编译工具apktool,该工具将Android应用程序包 文件(Android application package file,简称APK)反编译成smali格式的中间文件以及 AndroidManifest. xml应用程序配置文件,其中应用程序配置文件定义了应用程序各个组 件的信息,组件包括行为(activity)、服务(service)、广播接收机(broadcast receiver) 和内容提供商(content provider)。
[0086] 第二模块,用于对第一模块生成的中间文件插入调用链构建代码,以使应用程序 在运打时自动地构建调用链;
[0087] 第三模块,用于对第一模块生成的中间文件插入调用链获取代码,以使应用程序 在运行时自动地获取调用程序发送的调用链;
[0088] 第四模块,用于对第一模块生成的中间文件插入检测代码,以使应用程序访问系 统敏感资源时自动地判断是否存在权限提升攻击;
[0089] 第五模块,用于对第一模块、第二模块、以及第三模块修改完的中间文件以及应用 程序配置文件重新打包成新的应用程序;
[0090] 第六模块,用于对第五模块生成的应用程序进行签名,以使该应用程序能够被安 装到移动设备中。
[0091] 其中,第二模块包括:
[0092] 第二十一模块,用于自动生成调用链构建代码,该代码用于应用程序运行时产生 调用链并传递调用链到被调用程序;具体而言,调用链包含完成一个任务所经过的所有应 用程序信息(包括PID、WD等)以及这些信息的哈希值;
[0093] 第二十二模块,用于从Android源码或者开发者文档中获得Android框架层定 义的所有组件间通信(Inter-component communication,简称ICC)的应用程序编程接口 (Application Programming Interface,简称 API)信息;
[0094] 第二十三模块,用于根据第二十二模块获得的ICC应用程序编程接口信息查找中 间文件中所有ICC API调用位置;
[0095] 第二十四模块,用于根据所有ICC API调用位置在中间文件中调用ICC位置前插 入第二十一模块生成的调用链构建代码。
[0096] 第三模块包括以下子步骤:
[0097] 第三十一模块,用于自动生成调用链获取代码,该代码用于应用程序组件启动时 获取调用链并验证调用链的完整性;
[0098] 第三十二模块,用于解析应用程序配置文件,以获得中间文件的各个组件的文件 路径;由于Android系统允许动态注册广播接收机组件,因此需要查找动态注册广播接收 机组件的中间文件以及其路径;
[0099] 第三十三模块,用于根据第三十二模块获得的文件路径在中间文件的组件入口处 插入第三十一模块生成的调用链获取代码。
[0100] 第四模块包括:
[0101] 第四十一模块,用于自动生成攻击检测代码,该代码用于检测调用链上所有程序 是否含有权限;
[0102] 第四十二模块,用于在Android系统中构建权限表,其包括所有特权API以及相应 的权限信息;具体而言,Android系统中提供了许多API给应用程序访问系统资源,这些API 均由权限进行保护,因此在Android系统中构建了一个开源的权限表;
[0103] 第四十三模块,用于根据第四十二模块的权限表查找中间文件,以获得应用程序 中所有调用特权API的位置;
[0104] 第四十四模块,用于根据应用程序中所有调用特权API的位置在中间文件中调用 特权API位置前插入第四十一模块生成的攻击检测代码。
[0105] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以 限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含 在本发明的保护范围之内。
【权利要求】
1. 一种用于检测Android权限提升攻击的应用程序重写方法,其特征在于,包括以下 步骤: (1) 将用户上传的Android应用程序进行反编译,以生成中间文件和应用程序配置文 件; (2) 对步骤(1)生成的中间文件插入调用链构建代码,以使应用程序在运行时自动地 构建调用链; (3) 对步骤(1)生成的中间文件插入调用链获取代码,以使应用程序在运行时自动地 获取调用程序发送的调用链; (4) 对步骤(1)生成的中间文件插入检测代码,以使应用程序访问系统敏感资源时自 动地判断是否存在权限提升攻击; (5) 对步骤(2)、步骤(3)和步骤(4)修改完的中间文件以及应用程序配置文件重新打 包成新的应用程序; (6) 对步骤(5)生成的应用程序进行签名,以使该应用程序能够被安装到移动设备中。
2. 根据权利要求1所述的应用程序重写方法,其特征在于,步骤(1)是采用反编译工具 apktool,其将APK反编译成smali格式的中间文件以及AndroidManifest. xml应用程序配 置文件,其中应用程序配置文件定义了应用程序各个组件的信息,组件包括行为、服务、广 播接收机和内容提供商。
3. 根据权利要求1所述的应用程序重写方法,其特征在于,步骤(2)包括以下子步骤: (2-1)自动生成调用链构建代码,该代码用于应用程序运行时产生调用链并传递调用 链到被调用程序;; (2-2)从Android源码或者开发者文档中获得Android框架层定义的所有ICC的API 信息; (2-3)根据步骤(2-2)获得的ICC应用程序编程接口信息查找中间文件中所有ICC API 调用位置; (2-4)根据所有ICC API调用位置在中间文件中调用ICC位置前插入(2-1)生成的调 用链构建代码。
4. 根据权利要求1所述的应用程序重写方法,其特征在于,步骤(3)包括以下子步骤: (3-1)自动生成调用链获取代码,该代码用于应用程序组件启动时获取调用链并验证 调用链的完整性; (3-2)解析应用程序配置文件,以获得中间文件的各个组件的文件路径; (3-3)根据步骤(3-2)获得的文件路径在中间文件的组件入口处插入(3-1)生成的调 用链获取代码。
5. 根据权利要求1所述的应用程序重写方法,其特征在于,步骤(4)包括以下子步骤: (4-1)自动生成攻击检测代码,该代码用于检测调用链上所有程序是否含有权限。 (4-2)在Android系统中构建权限表,其包括所有特权API以及相应的权限信息; (4-3)根据(4-2)的权限表查找中间文件,以获得应用程序中所有调用特权API的位 置; (4-4)根据应用程序中所有调用特权API的位置在中间文件中调用特权API位置前插 入(4-1)生成的攻击检测代码。
6. -种用于检测Android权限提升攻击的应用程序重写系统,其特征在于,包括: 第一模块,用于将用户上传的Android应用程序进行反编译,以生成中间文件和应用 程序配置文件; 第二模块,用于对第一模块生成的中间文件插入调用链构建代码,以使应用程序在运 行时自动地构建调用链; 第三模块,用于对第一模块生成的中间文件插入调用链获取代码,以使应用程序在运 行时自动地获取调用程序发送的调用链; 第四模块,用于对第一模块生成的中间文件插入检测代码,以使应用程序访问系统敏 感资源时自动地判断是否存在权限提升攻击; 第五模块,用于对第一模块、第二模块、以及第三模块修改完的中间文件以及应用程序 配置文件重新打包成新的应用程序; 第六模块,用于对第五模块生成的应用程序进行签名,以使该应用程序能够被安装到 移动设备中。
7. 根据权利要求6所述的应用程序重写系统,其特征在于,第二模块包括: 第二十一模块,用于自动生成调用链构建代码,该代码用于应用程序运行时产生调用 链并传递调用链到被调用程序; 第二十二模块,用于从Android源码或者开发者文档中获得Android框架层定义的ICC 的API信息; 第二十三模块,用于根据第二十二模块获得的ICC应用程序编程接口信息查找中间文 件中所有ICC API调用位置; 第二十四模块,用于根据所有ICC API调用位置在中间文件中调用ICC位置前插入第 二十一模块生成的调用链构建代码。
8. 根据权利要求6所述的应用程序重写系统,其特征在于,第三模块包括: 第三十一模块,用于自动生成调用链获取代码,该代码用于应用程序组件启动时获取 调用链并验证调用链的完整性; 第三十二模块,用于解析应用程序配置文件,以获得中间文件的各个组件的文件路 径; 第三十三模块,用于根据第三十二模块获得的文件路径在中间文件的组件入口处插入 第三十一模块生成的调用链获取代码。
9. 根据权利要求6所述的应用程序重写系统,其特征在于,第四模块包括: 第四十一模块,用于自动生成攻击检测代码,该代码用于检测调用链上所有程序是否 含有权限; 第四十二模块,用于在Android系统中构建权限表,其包括所有特权API以及相应的权 限信息; 第四十三模块,用于根据第四十二模块的权限表查找中间文件,以获得应用程序中所 有调用特权API的位置; 第四十四模块,用于根据应用程序中所有调用特权API的位置在中间文件中调用特权 API位置前插入第四十一模块生成的攻击检测代码。
【文档编号】G06F21/56GK104102880SQ201410307721
【公开日】2014年10月15日 申请日期:2014年6月30日 优先权日:2014年6月30日
【发明者】金海 , 邹德清, 王代斌, 徐鹏, 羌卫中, 陈刚 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1