一种系统接口调用的检测方法及装置
文献发布时间:2023-06-19 10:24:22
技术领域
本文件涉及互联网技术领域,尤其涉及一种系统接口调用的检测方法及装置。
背景技术
目前,随着互联网时代的到来,互联网在人们日常的学习、工作和生活中得到广泛的应用。人们日常的各种事务都可以通过互联网来处理和呈现。同时,随着移动互联网的快速发展,各互联网服务提供方通过开发各自的应用程序为用户提供相应的业务服务,用户可以根据各自的实际需求在智能手机中安装相应的应用程序,例如,游戏应用、视频应用、聊天应用、购物应用、支付应用等等。
然而,用户终端上安装的应用程序具有调用系统接口来获取所需的信息的需求,但是,可能存在私自调用操作系统的私有接口,来窃取用户隐私信息的情况,这样势必将导致用户隐私信息被泄露或滥用,为了保护用户隐私信息的安全性,操作系统将对应用程序采取相应的管控措施,甚至会对存在私有接口调用的应用程序进行下架处理。
发明内容
本说明书一个或多个实施例的目的是提供一种系统接口调用的检测方法。该系统接口调用的检测方法包括:
获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的。获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称。基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例的目的是提供一种系统接口调用的检测装置。该系统接口调用的检测装置包括:
调用信息获取模块,其获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的。声明信息获取模块,其获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称。检测结果生成模块,其基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例的目的是提供一种系统接口调用的检测设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器。
所述计算机可执行指令在被执行时使所述处理器获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的。获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称。基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例的目的是提供一种存储介质,用于存储计算机可执行指令。所述可执行指令在被处理器执行时获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的。获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称。基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一个或多个实施例提供的系统接口调用的检测方法的第一种流程示意图;
图2为本说明书一个或多个实施例提供的系统接口调用的检测方法的第二种流程示意图;
图3为本说明书一个或多个实施例提供的系统接口调用的检测方法的第三种流程示意图;
图4为本说明书一个或多个实施例提供的系统接口调用的检测方法的第四种流程示意图;
图5为本说明书一个或多个实施例提供的系统接口调用的检测方法的实现原理示意图;
图6为本说明书一个或多个实施例提供的系统接口调用的检测装置的模块组成示意图;
图7为本说明书一个或多个实施例提供的系统接口调用的检测设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一个或多个一部分实施例,而不是全部的实施例。基于本说明书一个或多个中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。
需要说明的是,在不冲突的情况下,本说明书中的一个或多个实施例以及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本说明书一个或多个实施例。
本说明书一个或多个实施例提供了一种系统接口调用的检测方法及装置,通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
图1为本说明书一个或多个实施例提供的系统接口调用的检测方法的第一种流程示意图,图1中的方法能够由客户端执行,也可以由服务端执行,还可以由客户端和服务端配合执行,如图1所示,该方法至少包括以下步骤:
S102,获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息是目标应用处于运行状态时基于业务功能模块的接口调用请求所生成的;
其中,上述目标应用为待检测的应用程序APP,上述业务功能模块可以是目标应用中实现特定业务功能的内部功能模块、或者集成的第三方软件开发工具包SDK中的三方功能模块,上述系统接口包括:运行目标应用的客户端的操作系统的公开系统接口或者未公开系统接口(即私有接口);
其中,针对系统接口调用的检测的应用场景,可以是客户端检测目标应用是否存在针对操作系统的私有接口进行调用的情况,也可以是目标应用检测其集成的第三方SDK是否存在针对操作系统的私有接口进行调用的情况,即目标应用在运行过程中进行风险接口调用自检;
具体的,针对检测目标应用中所集成的第三方SDK是否存在针对操作系统的私有接口进行调用的情况,预先在目标应用的应用安装包中写入用于执行系统接口调用的检测代码,这样在目标应用处于运行状态时,目标应用自动运行该系统接口调用的检测代码,以检测当前从目标应用发出的接口调用请求是否为第三方SDK针对操作系统的私有接口的调用请求,以便目标应用及时对第三方SDK针对操作系统的私有接口的调用请求进行拦截处理,从而避免目标应用因第三方SDK针对操作系统的私有接口的调用行为而被操作系统自动限制安装或从应用商城下架的情况。
S104,获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,该接口声明信息用于表征目标应用声明的可调用接口的函数名称;
具体的,在获取到目标应用的应用安装包且目标应用安装至客户端之前,通过对该应用安装包进行解析,获取目标应用所声明的可调用接口函数名称,该可调用函数接口名称包括:实现接口函数名称和引入接口函数名称。
S106,基于获取到的接口调用信息和接口声明信息,生成上述接口调用请求的风险检测结果。
其中,上述风险检测结果包括:待调用接口为目标应用所声明的接口、或者待调用接口为操作系统的私有接口、或者待调用接口为操作系统的私有接口且调用来源于第三方SDK中至少一项;该风险检测结果还可以包括:接口调用请求的调用来源信息;其中,若风险检测结果为待调用接口为操作系统的私有接口,则确定接口调用请求为风险调用请求,或者,若风险检测结果为待调用接口为操作系统的私有接口且调用来源于第三方SDK,则确定接口调用请求为风险调用请求;当接口调用请求为风险调用请求,则需要按照预设管控方式对接口调用请求进行管控,其中,预设管控方式与风险检测结果相对应,具体的,针对不同的风险检测结果,可以采用不同的管控方式对接口调用请求进行管控。
具体的,考虑到目标应用采用反射调用的方式通过系统反射函数调用操作系统的私有接口,因此,由预设代理函数截获通过系统反射函数针对系统接口的接口调用请求,预设代理函数基于该接口调用请求生成相应的接口调用信息,再基于该接口调用信息和预先确定的接口声明信息,对接口调用请求进行风险识别。
本说明书一个或多个实施例中,通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
其中,上述接口调用信息包括:待调用接口的函数名称;对应的,考虑到第三方SDK集成到目标应用的过程中,通常是使用二进制集成的方式提供给集成方,因此,目标应用的开发人员并不了解第三方SDK的代码实现,可能存在第三方SDK对用户终端的操作系统的私有接口的私自调用问题,这样存在通过对私有接口的调用来获取用户隐私信息的可能,进而导致目标应用被操作系统自动限制或下架的可能,基于此,在针对接口调用请求进行风险调用检测时,不仅检测是否存在对操作系统的私有接口的调用,还检测针对私有接口的调用是否来源于第三方SDK,以便有针对性地对异常第三方SDK进行管控,确保目标应用的正常运行,具体的,如图2所示,上述S106,基于获取到的接口调用信息和接口声明信息,生成上述接口调用请求的风险检测结果,具体包括:
S1062,基于上述接口调用信息中的待调用接口的函数名称和上述接口声明信息中的可调用接口的函数名称,生成调用接口类型检测结果;
其中,上述调用接口类型检测结果用于表征接口调用请求所针对的待调用接口是否为运行目标应用的操作系统的私有接口,上述待调用接口的函数名称可以包括通过代理函数捕获到的待调用接口函数的类名和方法名。
S1064,若上述待调用接口为操作系统的私有接口,则基于获取到的接口调用信息,生成调用来源检测结果;
其中,上述调用来源检测结果用于表征接口调用请求是否来源于集成到目标应用的第三方SDK,即确定针对操作系统的私有接口的调用请求是否来自目标应用中集成的第三方SDK的业务功能模块,而不是目标应用自身的业务功能模块;
对应的,若上述待调用接口不为操作系统的私有接口,则确定接口调用请求不为风险调用请求,此时,需要正常响应该接口调用请求,即向业务功能模块返回待调用接口对应的函数指针。
S1066,基于上述调用接口类型检测结果和上述调用来源检测结果,生成上述接口调用请求的风险检测结果。
其中,上述风险检测结果可以包括:用于表征接口调用请求是否为风险调用请求的检测结果,还可以包括待调用接口的标识信息、调用来源信息、调用时间戳信息中至少一项;
具体的,若待调用接口为操作系统的私有接口,可以直接将接口调用请求确定为风险调用请求,并按照第一管控方式对该接口调用请求进行管控;也可以继续基于上述接口调用信息,生成调用来源检测结果,即确定接口调用请求的来源,若待调用接口为操作系统的私有接口且接口调用请求来源于第三方SDK,将接口调用请求确定为风险调用请求,按照第二管控方式对该接口调用请求进行管控;对应的,若待调用接口为操作系统的私有接口且接口调用请求的调用来源不为第三方SDK,也将接口调用请求确定为风险调用请求,按照第三管控方式对该接口调用请求进行管控,其中,该第一管控方式、第二管控方式、第三管控方式各不相同,可以根据实际应用场景对各预设管控方式进行设置。
进一步的,在针对当前监听到的接口调用请求确定出相应的风险检测结果后,基于该风险检测结果确定当前监听到的接口调用请求是否为风险调用请求,进而对接口调用请求进行拦截处理或正常响应处理,基于此,在上述S106,基于获取到的接口调用信息和接口声明信息,生成上述接口调用请求的风险检测结果之后,还包括:
基于上述风险检测结果,判断上述接口调用请求是否为风险调用请求;
若是,则向上述业务功能模块返回预设反馈信息,以拦截该业务功能模块调用上述接口调用请求所针对的待调用接口;
其中,上述预设反馈信息可以是预设空值或者预设其他字符串,这样业务功能模块无法基于该预设反馈信息从待调用接口处获取相应的用户隐私信息,从而实现对风险调用请求进行拦截的目的。
若否,则向上述业务功能模块返回上述待调用接口对应的函数指针,以允许上述业务功能模块基于该函数指针调用上述接口调用请求所针对的待调用接口;
其中,在确定接口调用请求不为风险调用请求,则需要按照常规调用请求响应方式向业务功能模块返回待调用接口的函数指针,这样业务功能模块能够基于该函数指针从待调用接口处获取相应的信息,进而基于该信息为用户提供相应的业务功能。
具体的,针对通过代理函数截获目标应用中的业务功能模块向系统反射函数发出的接口调用请求的情况,由代理函数基于截获的接口调用请求,确定与该接口调用请求对应的接口调用信息,其中,该接口调用信息包括:待调用接口的函数名称、调用堆栈信息和调用环境信息中至少一项;
在基于该接口调用信息和预先确定的接口声明信息生成接口调用请求的风险检测结果之后,若确定接口调用请求为风险调用请求,则直接由代理函数向相应的业务功能模块返回预设反馈信息,或者,由代理函数将预设反馈信息发送至系统反射函数,再由系统反射函数向相应的业务功能模块返回预设反馈信息;
对应的,若确定接口调用请求不为风险调用请求,则由代理函数触发系统反射函数向待调用接口获取该待调用接口的函数指针,即代理函数将代码执行权返回给系统反射函数,由系统反射函数获取待调用接口的函数指针,系统反射函数将该函数指针返回给代理函数,由代理函数向相应的业务功能模块返回该函数指针,或者,直接由系统反射函数向相应的业务功能模块返回该函数指针。
其中,由客户端在目标应用处于运行状态时针对接口调用信息的确定过程,如图3所示,上述S102,获取目标应用中的业务功能模块针对系统接口的接口调用信息,具体包括:
S1022,监听目标应用中的业务功能模块针对系统反射函数的接口调用请求;其中,该接口调用请求携带有待调用接口的函数名称;
其中,为了实现某些特务功能,通过相应的业务功能模块调用系统反射函数,以触发系统反射函数从待调用接口处获取相应的函数指针并返回给业务功能模块,以使业务功能模块基于该函数指针获取相应的信息,例如,业务功能模块对应的业务功能为获取客户端的mac地址,则待调用接口的函数名称为用于获取mac地址的接口名称。
S1024,利用面向切面的编程方式将上述接口调用请求路由至预设代理函数;
其中,上述预设代理函数即为目标应用中的函数实现,通过切面手段将针对系统反射函数的调用逻辑调用到另外一个函数(即预设代理函数),作为监听针对系统反射函数的调用逻辑的函数载体;在具体实施时,可以通过函数替换的方式对系统反射函数(NSClassFromString,NSSelectorFromString,@performSelector:,@selector(privateApiName))的调用转接到预设代理函数;其中,该函数替换的方式可以通过method_exchangeImplementations或者fishhook进行实现;具体的,由于在业务功能模块调用系统反射函数的过程中,系统反射函数已被替换为预设代理函数,该预设代理函数能够记录接口调用请求携带有待调用接口的函数名称,即通过切面能力实现了反射调用函数信息的获取能力,再结合目标应用所声明的可调用接口的函数名称,对目标应用中的三方库针对系统私有接口的调用行为进行实时检测,进而动态地对风险调用请求进行拦截、阻断。
S1026,通过预设代理函数获取与上述接口调用请求对应的调用链路信息;其中,该调用链路信息包括:调用堆栈信息和/或调用环境信息;
S1028,基于上述待调用接口的函数名称和调用链路信息,生成目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息至少包括:待调用接口的函数名称和调用链路信息,该待调用接口的函数名称用于确定当前待检测的接口调用请求的调用接口类型,该调用链路信息用于确定当前待检测的接口调用请求的调用来源信息。
其中,在获取到目标应用的应用安装包且目标应用安装至客户端之前,针对目标应用的接口声明信息的确定过程,在上述S104,获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息之前,还包括:
S108,获取目标应用的应用安装包;
S110,从获取到的应用安装包中提取用于控制目标应用的全局配置的二进制文件;具体的,从获取到的应用安装包中提取Info.plist,基于该Info.plist确定用于控制目标应用的全局配置的二进制文件的名称;
S112,基于提取出的二进制文件中的实现函数区段对应的实现接口函数名称和引入函数区段对应的引入接口函数名称,确定针对目标应用所声明的接口声明信息;其中,该实现函数区段和引入函数区段可以包括:__objc_classlist、__objc_classname、__objc_methname。
在具体实施时,可以从应用安装包中提取Info.plist,再通过Info.plist的Executable file字段,获取所需的二进制文件的名称,再采用开源工具classdump快速获取该二进制文件所声明的函数名称。
其中,基于目标应用的应用安装包确定目标应用的接口声明信息的过程,可以由客户端执行,也可以由服务端执行;对应的,将目标应用处于运行状态时获取的待调用接口的函数名称与预先确定的接口声明信息中的可调用接口的函数名称进行比对的过程,可以由客户端执行,也可以由服务端执行;
具体的,针对由客户端执行将待调用接口的函数名称与可调用接口的函数名称进行比对,以及由服务端确定目标应用的接口声明信息的情况,服务端在确定出目标应用的接口声明信息后,将该接口声明信息发送至客户端,客户端将该接口声明信息存储在客户端本地,这样后续在客户端对接口调用请求进行管控的过程中,直接从本地获取目标应用的接口声明信息即可。
对应的,针对由客户端执行将待调用接口的函数名称与可调用接口的函数名称进行比对,以及由客户端确定目标应用的接口声明信息的情况,客户端在接收到目标应用的应用安装包后,基于该应用安装包确定目标应用的接口声明信息,客户端将该接口声明信息存储在客户端本地,这样后续在客户端对接口调用请求进行管控的过程中,也可以直接从本地获取目标应用的接口声明信息即可。
对应的,针对由服务端执行将待调用接口的函数名称与可调用接口的函数名称进行比对,以及由服务端确定目标应用的接口声明信息的情况,服务端在获取到目标应用的应用安装包后,基于该应用安装包确定并存储目标应用的接口声明信息;服务端在接收到客户端发送的针对当前待检测的接口调用请求所确定的接口调用信息后,将接口调用信息与目标应用的接口声明信息进行比对,得到相应的接口比对结果,并将该接口比对结果发送至客户端,以使该客户端基于该接口比对结果生成接口调用请求的风险检测结果;或者,服务端基于该接口比对结果生成接口调用请求的风险检测结果,并将该风险检测结果发送至客户端。
需要说明的是,针对接口调用请求的风险检测过程所涉及的实现步骤由客户端或服务端执行得到的可变形方式均在本说明书一个或多个实施例的保护范围内,在此不再赘述。
具体的,为了提高操作系统的私有接口调用的管控精准度、管控针对性,在将接口调用请求由系统反射函数路由到预设代理函数后,该预设代理函数不仅从接口调用请求中解析得到待调用接口的函数名称,还从相应的系统接口获取与当前检测的接口调用请求对应的接口调用链路信息,将待调用接口的函数名称和该接口调用链路信息确定为接口调用信息,基于此,上述接口调用信息还包括:接口调用链路信息,该接口调用链路信息用于确定接口调用请求的调用来源信息;
对应的,如图4所示,上述S1064,若上述待调用接口为操作系统的私有接口,则基于获取到的接口调用信息,生成调用来源检测结果,具体包括:
S10642,若上述待调用接口为操作系统的私有接口,则基于获取到的接口调用信息中的接口调用链路信息,确定上述业务功能模块的功能模块标识信息;
S10644,基于确定出的功能模块标识信息,判断上述业务功能模块是否属于集成到目标应用的第三方SDK;
若判断结果为是,则S10646,生成用于表征接口调用请求来源于集成到目标应用的第三方SDK的调用来源检测结果;
若判断结果为否,则S10648,生成用于表征接口调用请求的调用来源不为目标应用的第三方SDK的调用来源检测结果。
具体的,针对业务功能模块的功能模块标识信息的确定过程,可以同时引入调用堆栈信息和调用环境信息,一方面,可以提高功能模块标识信息的确定准确度,另一方面,还可以避免因基于调用堆栈信息或者调用环境信息确定出的标识信息存在错误,而导致无法正确生成调用来源检测结果的情况,基于此,上述接口调用链路信息包括:调用堆栈信息和调用环境信息;
对应的,上述S10642,基于获取到的接口调用信息中的接口调用链路信息,确定上述业务功能模块的功能模块标识信息,包括:
基于上述调用堆栈信息,确定初始发出上述接口调用请求的第一调用来源标识;具体的,由于目标应用对某一接口进行调用时,函数逐层向下调用,当调用到当前层时形成相应的调用堆栈信息,进而通过对调用堆栈信息进行解析,能够确定接口调用请求的最顶层调用来源。
基于上述调用环境信息,确定上述目标应用所处的业务页面对应的第二调用来源标识;具体的,考虑到调用链路信息属于技术层面的函数调用序列,无法确定出目标应用当前所在的操作页面,因此,可以同时引入调用堆栈信息和调用环境信息,基于函数调用序列确定第一调用来源标识,以及基于目标应用当前所在的操作页面确定第二调用来源标识,进而确定业务功能模块的功能模块标识信息;
基于上述第一调用来源标识和上述第二调用来源标识,确定上述业务功能模块的功能模块标识信息;
具体的,上述第一调用来源标识包括基于函数调用序列确定出的初始调用序列;上述第二调用来源标识包括于目标应用当前所在的操作页面的页面标识,将与基于调用堆栈信息确定的初始调用序列和当前所在的操作页面对应的业务功能模块的标识信息,确定为上述业务功能模块的功能模块标识信息。
进一步的,为了提高系统接口调用的检测效率,在每次确定接口调用请求为风险调用请求后,确定并存储与该风险调用请求对应的接口调用拦截规则,因此,可以基于在先识别出的风险接口调用请求对应的接口调用信息生成相应的接口调用拦截规则,这样在监听到待检测的接口调用请求后,先将该接口调用请求对应的接口调用信息与预先存储的接口调用拦截规则进行匹配,从而实现针对接口调用请求进行初步筛选,若初步筛选结果表明接口调用请求不为风险调用请求,再基于接口调用信息和接口声明信息对该接口调用请求进行二次风险识别,若初步筛选接口表明接口调用请求为风险调用请求,则直接对该接口调用请求进行风险管控,基于此,在上述S10646,生成用于表征接口调用请求来源于集成到目标应用的第三方SDK的调用来源检测结果之后,还包括:
基于上述待调用接口的函数名称和上述接口调用链路信息,生成接口调用拦截规则;
将上述接口调用拦截规则添加至针对目标应用所建立的调用拦截规则集合;具体的,将该调用拦截规则集合作为目标应用的下一次接口调用请求进行风险检测的初步筛选依据。
其中,上述接口调用拦截规则的生成过程可以由客户端执行,也可以由服务端执行,针对由服务端执行的情况,需要服务端将该接口调用拦截规则下发至客户端,以使客户端将该接口调用拦截规则添加至针对目标应用所建立的调用拦截规则集合;针对由客户端执行的情况,客户端直接将该接口调用拦截规则添加至针对目标应用所建立的调用拦截规则集合,以便针对下一次监听到的接口调用请求进行初步风险识别。
其中,针对每次确定接口调用请求为风险调用请求后,确定并存储与该风险调用请求对应的接口调用拦截规则的情况,在监听到待检测的接口调用请求后,先将该接口调用请求对应的接口调用信息与预先存储的接口调用拦截规则进行匹配,从而实现针对接口调用请求进行初步筛选,具体的,上述S1062,基于上述接口调用信息中的待调用接口的函数名称和上述接口声明信息中的可调用接口的函数名称,生成调用接口类型检测结果,具体包括:
步骤一,将获取到的接口调用信息与目标应用对应的调用拦截规则集合中的接口调用拦截规则进行匹配,得到相应的拦截规则匹配结果;
步骤二,若上述拦截规则匹配结果为不存在与接口调用信息匹配的接口调用拦截规则,则将待调用接口的函数名称与可调用接口的函数名称进行比对,得到相应的函数名称比对结果;
步骤三,根据上述函数名称比对结果,生成调用接口类型检测结果;具体的,若可调用接口的函数名称包括:符号A和符号B,若待调用接口的函数名称为符号A或符号B,则确定接口调用请求所针对的待调用接口不为运行目标应用的操作系统的私有接口,即安全的接口调用;若待调用接口的函数名称为符号C,则确定接口调用请求所针对的待调用接口为运行目标应用的操作系统的私有接口,即不安全的接口调用;
具体的,针对调用拦截规则集合不存在与当前待检测的接口调用请求相匹配的接口调用拦截规则的情况,需要继续将待调用接口的函数名称与可调用接口的函数名称进行比对,进一步确定该接口调用请求是否为风险调用请求,即继续对该接口调用请求进行调用接口类型和调用接口来源识别。
具体的,针对调用接口类型检测结果的确定过程,上述步骤三,根据上述函数名称比对结果,生成调用接口类型检测结果,具体包括:
若上述函数名称比对结果为待调用接口的函数名称不属于可调用接口的函数名称,则生成用于表征接口调用请求所针对的待调用接口为运行目标应用的操作系统的私有接口的调用接口类型检测结果;
若上述函数名称比对结果为待调用接口的函数名称属于可调用接口的函数名称,则生成用于表征接口调用请求所针对的待调用接口不为运行目标应用的操作系统的私有接口的调用接口类型检测结果。
进一步的,针对调用拦截规则集合存在与当前待检测的接口调用请求相匹配的接口调用拦截规则的情况,可以直接生成表征接口调用请求确定为风险调用请求的风险检测结果,进而对接口调用请求进行拦截管控,具体的,在步骤一,将获取到的接口调用信息与目标应用对应的调用拦截规则集合中的接口调用拦截规则进行匹配,得到相应的拦截规则匹配结果之后,还包括:
若上述拦截规则匹配结果为存在与接口调用信息匹配的接口调用拦截规则,则确定上述接口调用请求为风险调用请求。
具体的,若接口调用信息与在先存储的调用拦截规则集合中的任一原始的接口调用拦截规则或者组合得到的接口调用拦截规则相匹配,则确定监听到的接口调用请求为风险调用请求;
对应的,若接口调用信息与在先存储的调用拦截规则集合中的任一原始的接口调用拦截规则和组合得到的接口调用拦截规则均不匹配,则确定监听到的接口调用请求不为风险调用请求。
在具体实施时,针对接口调用信息包括待调用接口的函数名称和调用链路信息,接口调用拦截规则包括风险调用请求所针对的私有接口的函数名称和针对该风险调用请求对应的风险调用链路信息的情况,若待调用接口的函数名称与私有接口的函数名称相同,且待检测的接口调用请求对应的调用链路信息与风险调用链路信息相同,则确定拦截规则匹配结果为存在与接口调用信息匹配的接口调用拦截规则。对应的,上述组合得到的接口调用拦截规则可以是将第一拦截规则中的私有接口的函数名称与第二拦截规则中的风险调用链路信息组合得到的接口调用拦截规则,其中,第一拦截规则和第二拦截规则是目标应用对应的调用拦截规则集合中的不同的接口调用拦截规则。
在一个具体实施例中,如图5所示,上述系统接口调用的检测方法的具体过程为:
监听目标应用中的业务功能模块针对系统反射函数的接口调用请求;其中,该接口调用请求携带有待调用接口的函数名称;其中,该业务功能模块可以是业务功能模块1至业务功能模块n中任一个,待调用接口可以是系统接口1至系统接口m中任一个,系统接口1至m任一个可以是系统公开接口,也可以是系统私有接口;
利用面向切面的编程方式将上述接口调用请求路由至预设代理函数;
通过预设代理函数获取与上述接口调用请求对应的调用链路信息;其中,该调用链路信息包括:调用堆栈信息和/或调用环境信息;
将待调用接口的函数名称和调用链路信息与目标应用对应的调用拦截规则集合中的接口调用拦截规则进行匹配;
若确定存在与上述接口调用请求匹配的接口调用拦截规则,则确定该接口调用请求为风险调用请求,并通过预设代理函数向业务功能模块返回表征空值的字符串;
若确定不存在与上述接口调用请求匹配的接口调用拦截规则,则将待调用接口的函数名称与预先确定的可调用接口的函数名称进行比对;
若确定待调用接口的函数名称不属于可调用接口的函数名称,即待调用接口为系统私有接口,则基于上述调用链路信息确定上述接口调用请求是否来源于集成到目标应用的第三方SDK,若调用来源为第三方SDK,则确定该接口调用请求为风险调用请求,并通过预设代理函数向业务功能模块返回表征空值的字符串;对应的,若调用来源不为第三方SDK,则通过预设代理函数向业务功能模块返回表征空值的字符串或者异常调用提示信息;
若确定待调用接口的函数名称属于可调用接口的函数名称,即待调用接口不为系统私有接口,则由预设代理函数调用系统反射函数获取待调用接口的函数指针,并通过预设反射函数或代理函数向业务功能模块返回该函数指针,以使业务功能模块基于该函数指针获取所需的信息。
本说明书一个或多个实施例中的系统接口调用的检测方法,获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息是目标应用处于运行状态时基于业务功能模块的接口调用请求所生成的;以及获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,该接口声明信息用于表征目标应用声明的可调用接口的函数名称;基于获取到的接口调用信息和接口声明信息,生成针对系统接口的接口调用请求的风险检测结果。通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
对应上述图1至图5描述的系统接口调用的检测方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种系统接口调用的检测装置,图6为本说明书一个或多个实施例提供的系统接口调用的检测装置的模块组成示意图,该装置用于执行图1至图5描述的系统接口调用的检测方法,如图6所示,该装置包括:
调用信息获取模块602,其获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的;
声明信息获取模块604,其获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称;
检测结果生成模块606,其基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例中的系统接口调用的检测装置,获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息是目标应用处于运行状态时基于业务功能模块的接口调用请求所生成的;以及获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,该接口声明信息用于表征目标应用声明的可调用接口的函数名称;基于获取到的接口调用信息和接口声明信息,生成针对系统接口的接口调用请求的风险检测结果。通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
需要说明的是,本说明书中关于系统接口调用的检测装置的实施例与本说明书中关于系统接口调用的检测方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的系统接口调用的检测方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种系统接口调用的检测设备,该设备用于执行上述的系统接口调用的检测方法,如图7所示。
系统接口调用的检测设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器701和存储器702,存储器702中可以存储有一个或一个以上存储应用程序或数据。其中,存储器702可以是短暂存储或持久存储。存储在存储器702的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对系统接口调用的检测设备中的一系列计算机可执行指令。更进一步地,处理器701可以设置为与存储器702通信,在系统接口调用的检测设备上执行存储器702中的一系列计算机可执行指令。系统接口调用的检测设备还可以包括一个或一个以上电源703,一个或一个以上有线或无线网络接口704,一个或一个以上输入输出接口705,一个或一个以上键盘706等。
在一个具体的实施例中,系统接口调用的检测设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对系统接口调用的检测设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的;
获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称;
基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例中的系统接口调用的检测设备,获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息是目标应用处于运行状态时基于业务功能模块的接口调用请求所生成的;以及获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,该接口声明信息用于表征目标应用声明的可调用接口的函数名称;基于获取到的接口调用信息和接口声明信息,生成针对系统接口的接口调用请求的风险检测结果。通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
需要说明的是,本说明书中关于系统接口调用的检测设备的实施例与本说明书中关于系统接口调用的检测方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的系统接口调用的检测方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种存储介质,用于存储计算机可执行指令,一种具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,所述接口调用信息是所述目标应用处于运行状态时基于所述业务功能模块的接口调用请求所生成的;
获取基于所述目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,所述接口声明信息用于表征所述目标应用声明的可调用接口的函数名称;
基于所述接口调用信息和所述接口声明信息,生成所述接口调用请求的风险检测结果。
本说明书一个或多个实施例中的存储介质存储的计算机可执行指令在被处理器执行时,获取目标应用中的业务功能模块针对系统接口的接口调用信息;其中,该接口调用信息是目标应用处于运行状态时基于业务功能模块的接口调用请求所生成的;以及获取基于目标应用的应用安装包中的二进制文件所确定的接口声明信息;其中,该接口声明信息用于表征目标应用声明的可调用接口的函数名称;基于获取到的接口调用信息和接口声明信息,生成针对系统接口的接口调用请求的风险检测结果。通过在目标应用运行过程中实时获取针对系统接口的接口调用信息,以及借助基于目标应用的应用安装包中的二进制文件所确定的接口声明信息,对目标应用中的业务功能模块的接口调用请求进行风险调用检测,从而实现及时对存在风险的接口调用请求进行拦截处理,提高目标应用的接口调用安全性,避免对操作系统的系统接口进行私自调用来获取用户隐私数据,进而提高用户隐私数据的安全性。
需要说明的是,本说明书中关于存储介质的实施例与本说明书中关于系统接口调用的检测方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的系统接口调用的检测方法的实施,重复之处不再赘述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个是参照根据本说明书一个或多个实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书一个或多个的实施例而已,并不用于限制本说明书一个或多个。对于本领域技术人员来说,本说明书一个或多个可以有各种更改和变化。凡在本说明书一个或多个的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个的权利要求范围之内。
- 一种系统接口调用的检测方法及装置
- 一种混合云的接口调用方法、装置及系统