当前位置: 首页 > 专利查询>复旦大学专利>正文

安卓系统中不安全敏感输入验证识别方法技术方案

技术编号:20273336 阅读:51 留言:0更新日期:2019-02-02 03:57
本发明专利技术属于程序安全分析漏洞挖掘技术领域,具体为一种安卓系统中不安全敏感输入验证识别方法。本发明专利技术方法包括:输入验证识别,首先提取程序代码中的中断分支,经过对代码结构特征进行分析,找出包含中断指令的独立程序分支,来判断当前程序执行是否包含校验输入的意图;敏感输入验证识别,采用自然语言处理对大量输入参数进行基于语义的聚类,再通过指定少量已知敏感参数,采用机器学习来推测其他的未知敏感参数;最后,漏洞识别,通过检查这些包含敏感参数的输入验证是否满足安全规则来判断其是否为不安全的输入验证。通过对这类输入验证进行识别,能够确定由其构成的系统级安全漏洞,对加强移动系统安全、防范系统级别攻击具有重要意义。

【技术实现步骤摘要】
安卓系统中不安全敏感输入验证识别方法
本专利技术属于程序安全分析和漏洞挖掘
,具体涉及自然语言处理、机器学习技术和静态信息流分析技术,尤其涉及识别安卓系统中不安全的输入验证识别方法。
技术介绍
超过60%的移动设备正在使用安卓系统,其中运行着大量与我们日常生活相关的应用程序。为了实现各种功能,应用程序可以读取和操作安卓系统资源,例如GPS设备和屏幕显示,并执行敏感操作,例如发送和删除SMS消息。在安卓系统中,这些资源和敏感操作由100多个系统服务管理。显然,这些服务中的访问控制在整个系统的安全性中起着重要作用。在本专利技术中,我们对系统服务中的一组特殊的关键安全校验进行了实证研究,我们将其定义为敏感的输入验证。与系统中包含的351个权限相比,安卓系统至少包含700多个不同的敏感输入验证。它们被大量用于各种目的,例如通过限制设备名来阻止普通应用访问敏感的系统级设备。本专利技术与传统的输入验证研究不同。传统的输入验证研究侧重于一组狭窄且定义明确的敏感输入,例如,可能导致SQL注入攻击的Web输入,以及传递给Linux内核的可能引起内存泄露攻击的用户空间指针。而安卓系统由其独特性导致我们并不知道哪些输入应该被验证。因此,本专利技术更关注于在另一方面,即既不知道哪些输入应该被验证,又不知道这些输入需要在哪里被验证。具体而言,这是由以下安卓特性所决定的:(1)非结构化。与依赖于系统定义接口的安卓权限检查不同,例如Context.checkCallingOrSelfPermission()和Binder.getCallingUid(),系统服务中的敏感输入验证很难识别。实际上,一个系统服务中公开方法的任何输入都有可能导致敏感的输入验证(涉及参数检查的一个条件语句)。(2)定义不明确。与由安卓权限模型中已被详细文档说明的权限认证不同,没有任何公开可用的来源去定义应该如何在安卓系统服务中执行敏感的输入验证。因此,尚不清楚输入是否需要经过验证以及是否正确完成。(3)碎片化。敏感输入验证分散在大量Java类中。例如,在安卓7.0中,我们的评估显示它们广泛分散在173个不同的Java类中,而安卓权限保障集中在6个类中。此外,即使在相同的服务方法中,敏感的输入验证通常分散在各种执行路径中,从而以细粒度的方式限制系统操作。因此,尽管安卓系统服务中敏感输入验证是十分重要的,但是因它的不充分设计和实现导致安全人员忽略了它们的安全性。首先,系统开发者混淆了其系统安全模型。安卓系统服务会错误的信任来自于普通应用的输入,甚至有时把输入验证放在了应用程序(AndroidSDK)进程中。其次,系统开发者在定制安卓系统时也会忽略输入验证的问题。但是,在这些背景下,安卓系统中尚未有方法来自动识别敏感的输入验证以及由其构成的安全漏洞。
技术实现思路
本专利技术的目的是提供一种全新的基于代码层结构及语义解析驱动的不安全敏感输入验证识别方法,适用于大规模自动化地从安卓系统的代码当中识别其所包含的不安全敏感输入验证。本专利技术提供的不安全敏感输入验证识别方法,用于识别在验证输入时所依赖的不安全数据源,包括三个部分:基于代码结构分析的输入验证识别、基于自然语言处理和机器学习的敏感输入验证识别以及基于安全规则的漏洞识别。(一)基于代码结构分析的输入验证识别,首先提取程序代码中的中断分支,例如抛出异常等。经过对代码结构特征进行分析,找出包含中断指令的独立程序分支,来判断当前程序执行是否包含校验输入的意图。(二)基于自然语言处理和机器学习的敏感输入验证识别,采用自然语言处理对大量输入参数进行基于语义的聚类,使同义参数聚合在一起;再通过指定少量已知敏感参数,采用机器学习来推测其他的未知敏感参数。(三)基于安全规则的漏洞识别,通过检查这些包含敏感参数的输入验证是否满足安全规则来判断其是否为不安全的输入验证。本专利技术最终设计架构如图1所示,以下将详细介绍本专利技术的三个部分:(一)基于代码结构分析的输入验证识别由于输入验证是本专利技术的核心问题,我们需要一种方法能在安卓系统中自动识别和研究输入验证。这问题非常富有挑战性,因为它们既不是通过预定义的系统接口执行的,也不是通过固定API(如权限检查)来识别的。所以本专利技术利用输入验证中的固有代码结构特征来进行识别。具体而言,输入验证的第一个要求是输入必须通过数据流传递到比较语句,并与一些预先定义好的值或从其他API动态获得的结果进行比较。然后,基于比较的结果采取不同的操作。但是,与一般程序分支语句不同,输入验证不仅需要将输入与其他数据进行比较,还会在验证失败时立即中断程序执行。例如,在验证失败时通过抛出SecurityException异常来中断执行使程序立即退出。因此,本专利技术需要了解在验证失败时通常会采取哪种终止操作。在分析了安卓系统中的一些实际输入验证后,本专利技术总结了以下四种中断操作:(1)抛出异常。标示应用程序输入违反输入验证的直接方式就是抛出异常,例如SecurityException和IllegalArgumentException。(2)返回常量。系统服务使用一些预定义的常量来显示调用者在输入验证中失败,然后作为返回值在中断分支中返回。(3)记录日志并返回。记录日志信息对于监视系统的运行非常有用。在中断分支中,他们通常会记录有关非法输入的一些信息,然后返回。(4)回收资源并返回。在某些情况下,系统服务需要先回收分配的资源,然后再直接返回。借助这四种中断操作的识别,本专利技术识别输入验证的方法为:首先,在系统服务中确定所有可以接受应用输入的程序分支语句;然后,通过代码结构分析来判断这些分支语句是否包含一个中断分支;次外,有些分支语句依据不同的输入会产生大量的程序分支,这些分支一般用于处理不同的输入情况,其目的不在于校验输入,所以应该从识别结果中删除。(二)基于自然语言处理和机器学习的敏感输入验证识别目前,没有一种有效的方法可以从所有输入验证中区分出敏感的输入验证。比较精确而完整的做法是通过理解输入参数在系统服务中的处理逻辑以及对应的操作类型。但是,这种分析方法需要大量的先验知识来描述系统中哪些操作是敏感的。而这种知识通常是很难获得的。因此本专利技术采取另一种截然不同的方法。通过利用机器学习,我们可以将一组较少的已知敏感输入验证标记为起始样本,并利用关联规则挖掘技术(AssociationRuleMining)让机器学习自动学习其余部分。在标示敏感输入时,传统做法为利用变量名本身的语义信息来标注。例如,利用敏感变量“packageName”来表示调用者的身份。然而,安卓系统管理着大量的系统资源,并使用多种变量名称来表示不同的部分。如果没有完全理解整个安卓系统的话,很难来确认他们的敏感性。因此,本专利技术通过指定少数初始已知敏感输入验证,再使用关联规则挖掘技术来自动发现其他可能敏感的输入验证。选择此方法的原因是基于敏感输入验证之间的关联性,敏感的输入验证通常通过位于相同的服务方法中。以“packageName”和“uid”为例,安卓系统经常一起使用它们来验证应用程序的身份。因此,它们的敏感性可能正相关。详细方法介绍如下:对输入验证进行预分组。关联规则挖掘中的一个重要要求是需要观察任何给定变量的足够样本/出现次数。但是,如果我们对每个唯一变量名都分本文档来自技高网
...

【技术保护点】
1.一种安卓系统中不安全敏感输入验证识别方法,其特征在于,识别在验证输入时所依赖的不安全数据源,具体步骤为:(一)基于代码结构分析的输入验证识别,首先提取程序代码中的中断分支,经过对代码结构特征进行分析,找出包含中断指令的独立程序分支,来判断当前程序执行是否包含校验输入的意图;(二)基于自然语言处理和机器学习的敏感输入验证识别,采用自然语言处理对大量输入参数进行基于语义的聚类,使同义参数聚合在一起;再通过指定少量已知敏感参数,采用机器学习来推测其他的未知敏感参数;最后,(三)基于安全规则的漏洞识别,通过检查这些包含敏感参数的输入验证是否满足安全规则来判断其是否为不安全的输入验证。

【技术特征摘要】
1.一种安卓系统中不安全敏感输入验证识别方法,其特征在于,识别在验证输入时所依赖的不安全数据源,具体步骤为:(一)基于代码结构分析的输入验证识别,首先提取程序代码中的中断分支,经过对代码结构特征进行分析,找出包含中断指令的独立程序分支,来判断当前程序执行是否包含校验输入的意图;(二)基于自然语言处理和机器学习的敏感输入验证识别,采用自然语言处理对大量输入参数进行基于语义的聚类,使同义参数聚合在一起;再通过指定少量已知敏感参数,采用机器学习来推测其他的未知敏感参数;最后,(三)基于安全规则的漏洞识别,通过检查这些包含敏感参数的输入验证是否满足安全规则来判断其是否为不安全的输入验证。2.根据权利要求1所述的安卓系统中不安全敏感输入验证识别方法,其特征在于,所述基于代码结构分析的输入验证识别:首先总结以下四种中断操作:(1)抛出异常,即标示应用程序输入违反输入验证的直接方式就是抛出异常;(2)返回常量,系统服务使用一些预定义的常量来显示调用者在输入验证中失败,然后作为返回值在中断分支中返回;(3)记录日志并返回,记录日志信息,在中断分支中,记录有关非法输入的一些信息,然后返回;(4)回收资源并返回,在某些情况下,系统服务需要先回收分配的资源,然后再直接返回;借助这四种中断操作的识别,输入验证识别的流程为:首先,在系统服务中确定所有可以接受应用输入的程序分支语句;然后,通过代码结构分析来判断这些分支语句是否包含一个中断分支;此外,对于有些分支语句依据不同的输入会产生大量的程序分支,从识别结果中删除。3.根据权利要求2所述的安卓系统中不安全敏感输入验证识别方法,其特征在于,所述基于自然语言处理和机器学习的敏感输入验证识别:通过利用机器学习,将一组较少的已知敏感输入验证标记为起始样本,并利用关联规则挖掘技术让机器学习自动学习其余部分;在标示敏感输入时,通过指定少数初始已知敏感输入验证,再使用关联规则挖掘技术来自动发现其他可能敏感的输入验证;具体做法为...

【专利技术属性】
技术研发人员:杨珉杨哲慜张磊何郁郁张振宇洪庚张源
申请(专利权)人:复旦大学
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1