异常行为检测方法及装置
技术领域
本发明涉及互联网技术领域,具体涉及一种异常行为检测方法及装置。
背景技术
随着移动应用APP的迅速发展,在开发APP时集成第三方SDK(SoftwareDevelopment Kit,软件开发工具包)来增强应用功能已成为趋势。但是,有些第三方SDK往往会超范围采集用户的个人信息,并在开发人员和用户都不知情的情况下,将个人信息传输至第三方服务器,导致用户信息面临被泄露的风险。
而目前还没有专门针对第三方SDK过度收集用户信息行为的检测方案。
发明内容
本发明的目的是针对上述现有技术的不足提出的一种异常行为检测方法及装置,该目的是通过以下技术方案实现的。
本发明的第一方面提出了一种异常行为检测方法,所述方法包括:
基于预设特征库确定与待测应用中集成的SDK相关的采集函数;所述预设特征库包括SDK名、采集函数及流量特征信息的对应关系;
在待测应用运行过程中,获取待测应用中正在运行的SDK正在调用的函数列表;
若所述函数列表中存在与正在运行的SDK相关的采集函数,则在待测应用中获取该采集函数采集的第一参数集;
获取待测应用发出的网络流量,将所述网络流量与正在运行的SDK对应的流量特征信息进行匹配;
若匹配成功,则从所述网络流量中获取待传输的第二参数集;
若所述第一参数集与所述第二参数集中存在相同参数且该相同参数不属于待测应用实现正常业务功能需采集的参数,则确定该正在运行的SDK存在过度收集用户信息的异常行为。
本发明的第二方面提出了一种异常行为检测装置,所述装置包括:
静态分析模块,用于基于预设特征库确定与待测应用中集成的SDK相关的采集函数;所述预设特征库包括SDK名、采集函数及流量特征信息的对应关系;
动态检测模块,用于在待测应用运行过程中,获取待测应用中正在运行的SDK正在调用的函数列表;若所述函数列表中存在与正在运行的SDK相关的采集函数,则在待测应用中获取该采集函数采集的第一参数集;
流量检测模块,用于获取待测应用发出的网络流量,将所述网络流量与正在运行的SDK对应的流量特征信息进行匹配;若匹配成功,则从所述网络流量中获取待传输的第二参数集;
行为确定模块,用于在所述第一参数集与所述第二参数集中存在相同参数且该相同参数不属于待测应用实现正常业务功能需采集的参数时,确定该正在运行的SDK存在过度收集用户信息的异常行为。
在本申请实施例中,在基于预设特征库分析得到与待测应用中集成的SDK相关的采集函数之后,在待测应用运行过程中,通过对正在运行的SDK正在调用的采集函数进行实时的采集行为检测,并实时监测待测应用向第三方服务器发出的网络流量,进而通过将采集行为的采集内容、向第三方服务器传输的以及待测应用实现正常业务功能需采集的参数进行结合对比,以实现SDK是否存在过度收集用户信息异常行为的判断。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1A为本发明根据一示例性实施例示出的一种异常行为检测方法的实施例流程图;
图1B为本发明根据图1A所示实施例示出的一种APP声明权限信息示意图;
图1C为本发明根据图1A所示实施例示出的一种SDK包含的API类示意图;
图1D为本发明根据图1A所示实施例示出的一种APP应用界面示意图;
图1E为图1D所示的APP应用采集的用户信息示意图;
图1F为本发明根据图1A所示实施例示出的一种第二参数集示意图;
图2为本申请根据一示例性实施例示出的一种电子设备的硬件结构图;
图3为本发明根据一示例性实施例示出的一种异常行为检测装置的实施例流程图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
第三方SDK是指由第三方公司开发的具有特定功能的软件开发工具包,包括实现特定功能的源码、资源文件等,App开发人员将第三方SDK集成到其App应用中,只需要通过调用接口的方式便可实现具体的功能,如数据统计、定位、支付等。
而目前还没有专门针对第三方SDK过度收集用户信息行为的检测方案。
基于此,本发明提出一种针对第三方SDK过度收集用户信息的异常行为检测方案,本发明所指的收集指的是本地采集和远程传输。下面以具体实施例对本发明提出的异常行为检测方案进行详细阐述。
图1A为本发明根据一示例性实施例示出的一种异常行为检测方法的实施例流程图,所述异常行为检测方法可以应用在电子设备(如终端、Pad等设备)上,待测应用可以安装运行在电子设备上,也可以安装运行在模拟器或测试设备上,且电子设备可以与模拟器或测试设备通信。
如图1A所示,所述异常行为检测方法包括如下步骤:
步骤101:基于预设特征库确定与待测应用中集成的SDK相关的采集函数。
在执行步骤101之前,可以根据实践经验收集市场上已有的第三方SDK的权限特征、API(Application Programming Interface,应用程序编程接口)类名、所使用的用于采集用户信息的采集函数以及与SDK相关的流量特征信息,以建立SDK的特征库,并将建立的特征库预先设置到电子设备中。
由此可见,电子设备中预设的特征库除了包括SDK名、采集函数及流量特征信息之外,还可以包括SDK的权限特征、API类名、等信息。如表1所示,为一种示例性的特征库。
表1
由于步骤101的过程只是用于获取与待测应用中集成的SDK相关的信息,因此步骤101的过程属于静态分析阶段,不需要运行待测应用。
在一实施例中,可以先提取待测应用中集成的SDK以及声明的权限信息,然后从预设特征库中提取所述SDK对应的权限特征和采集函数,并针对每个权限信息,将该权限信息与所述SDK对应的权限特征进行匹配,若匹配成功,则将与匹配成功的权限信息对应的采集函数确定为与待测应用中集成的SDK相关的采集函数。
在一个例子中,针对提取待测应用中集成的SDK以及声明的权限信息的过程,可以通过从待测应用的安装文件中提取配置文件和代码文件,并从所述配置文件中获取待测应用中声明的权限信息,同时从所述代码文件中获取该安装文件包含的所有类名,并针对每个类名,将该类名与预设特征库中的SDK名进行匹配,若匹配成功,则将与该类名匹配成功的SDK名确定为待测应用中集成的SDK。
其中,可以通过使用ApkTool工具对待测应用的安装文件进行代码反编译获取配置文件(如AndroidManifest.xml文件)和代码文件(如Smali文件)。
示例性的,声明的权限信息可以包括打电话权限、读地图权限、读设备信息、位置信息、短信息、应用列表等。
下面以AndroidManifest.xml文件为例,介绍待测应用声明的权限信息的获取过程:
通过读取AndroidManifest.xml文件中"uses-permission"标签的内容,以获得声明的权限信息,如图1B所示的"uses-permission"标签即为声明的权限信息,读取指令如下所示:
permissionList=document.getElementsByTagName("uses-permission");
其中,permissionList中存储即为声明的权限信息。
基于上述表1所示,假设待测应用中集成的SDK有amap,且待测应用声明的权限信息有ACCESS_FINE_LOCATION(读取地理位置权限),由于待测应用声明的权限信息与表1中amap的权限特征匹配,因此,可以将与匹配成功的权限信息ACCESS_FINE_LOCATION对应的采集函数“com.amap.api.location.AMapLocation.a”确定为与待测应用中集成的SDK:amap相关的采集函数。
步骤102:在待测应用运行过程中,获取待测应用中正在运行的SDK正在调用的函数列表。
步骤103:若所述函数列表中存在与正在运行的SDK相关的采集函数,则在待测应用中获取该采集函数采集的第一参数集。
针对步骤102和步骤103的过程,为了检测待测应用运行过程中的采集行为,需要在待测应用运行过程中对SDK采集用户信息的采集函数进行实时检测,因此步骤102属于动态检测阶段。
在步骤102中,可以通过检测待测应用正在调用的类列表以及正在运行的SDK包含的API类,并针对每个API类,若所述类列表中有该API类,则将该API类确定为正在运行的SDK正在调用的API类,然后从待测应用中获取正在调用的API类包含的函数列表,并作为正在运行的SDK正在调用的函数列表。
其中,可以使用动态二进制插桩技术,通过Frida工具将预设的检测代码注入正在运行的待测应用中,以通过检测代码获取待测应用正在调用的类列表、正在运行的SDK包含的API类以及API类包含的函数列表。
下面以正在运行的SDK为amap为例,对步骤102和步骤103的过程进行介绍:
1)通过调用检测代码中的Java.enumerateLoadedClasses代码,检测待测应用中正在调用的类列表className,Java.enumerateLoadedClasses代码示例如下:
2)通过调用检测代码中的Java.enumerateLoadedClasses代码获取正在运行的amap包含的API类sdkClass,如图1C所示,为amap包含的API类。Java.enumerateLoadedClasses代码示例如下:
3)针对步骤2)中获取的每个API类,若步骤1)中获取的类列表中有该API类,表示待测应用中正在调用该API类,则通过检测代码获取该正在调用的API类包含的函数列表sdkMethod,代码示例如下:
var a=Java.use("com.amap.api.location.AMapLocation");
var sdkMethod=a.class.getDeclaredMethods();
console.log(sdkMethod);
4)若函数列表sdkMethod的子项为正在运行的SDK中的采集函数,则在待测应用中获取该子项采集的第一参数集,以采集函数com.amap.api.location.AMapLocation.a为例,第一参数集的获取代码示例如下:
var my_class1=Java.use("com.amap.api.location.AMapLocation");
my_class1.a.implementation=function(x){
var loc=this.a(x);
console.log(loc);
}
return loc;
}
在一实施例中,针对步骤102和步骤103,可以将第一参数集中包含的每一参数类型与预设隐私信息库中的隐私信息类型进行匹配,若匹配成功,表示该正在运行的SDK存在过度采集用户信息的行为,则将第一参数集所属的SDK名、API类名、采集函数以及第一参数集、采集时间作为一条采集行为检测结果并存储,以作为证据供用户查看。
在一示例性场景中,如图1D所示,为一种APP应用界面,在应用界面上并没有与读取定位相关的业务功能,但是该APP在后台正在实时采集用户的地址位置信息,如图1E所示,正在采集用户当前所处的经纬度位置,并且其采集时间“15:08:04”与图1D中APP应用界面中右上角显示的时间点一致。
步骤104:获取待测应用发出的网络流量,将所述网络流量与正在运行的SDK对应的流量特征信息进行匹配。
步骤105:若匹配成功,则从所述网络流量中获取待传输的第二参数集。
针对步骤104和步骤105的过程,由于是基于待测应用发出的网络流程进行的分析,因此属于流量检测阶段。
在一实施例中,针对获取待测应用发出的网络流量的过程,可以采用基于代理的流量分析技术,在电子设备中通过配置代理模块对待测应用发出的网络流量进行嗅探和分析。
示例性的,代理模块工具可以是Burpsuite、Xposed+JustTrustme等。
在步骤104中,流量特征信息可以包括SDK的域名,从而可以通过将网络流量中的域名与预设特征库中的域名进行匹配,若匹配成功,表示该网络流量为发送至第三方服务器的流量,需要对该网络流量传输的参数进行分析。
本领域技术人员可以理解的是,流量特征信息还可以包括URL(UniformResourceLocation,统一资源定位符)关键路径,通过将网络流量中的URL路径与预设特征库中的URL关键路径进行匹配,若匹配成功,表示该网络流量为发送至第三方服务器的流量,需要对该网络流量传输的参数进行分析。
以SDK名为btrace.qq为例,该SDK向第三方服务器发出的网络流量1的URL路径为:http://btrace.qq.com/kvcollect,假设特征库中记录该SDK的SDK域名为:btrace.qq.com,URL关键路径为:/kvcollect,则可以与网络流量1匹配成功,进而从网络流量1中获取待传输的第二参数集,由图1F所示,第二参数集包括设备厂商和型号、操作系统类型和版本、网络连接方式。
在一实施例中,针对步骤104和步骤105,可以将第二参数集中包含的每一参数类型与预设隐私信息库中的隐私信息类型进行匹配,若匹配成功,表示该正在运行的SDK存在向第三方服务器传输用户信息的行为,则将第二参数集所属的SDK名、域名、URL关键路径、以及第二参数集、传输时间作为一条传输行为检测结果并存储,以作为证据供用户查看。
步骤106:若所述第一参数集与所述第二参数集中存在相同参数且该相同参数不属于待测应用实现正常业务功能需采集的参数,则确定该正在运行的SDK存在过度收集用户信息的异常行为。
在一实施例中,为了避免待测应用在不同时刻发生采集行为与传输行为,可以通过将采集行为检测结果和传输行为检测结果以SDK名作为关键字段进行合并,然后在合并后的检测结果中获取第一参数集和第二参数集,若第一参数集与第二参数集中存在相同参数且该相同参数不属于待测应用实现正常业务功能需采集的参数,则确定该正在运行的SDK存在过度采集用户信息的异常行为。
在本申请实施例中,在基于预设特征库分析得到与待测应用中集成的SDK相关的采集函数之后,在待测应用运行过程中,通过对正在运行的SDK正在调用的采集函数进行实时的采集行为检测,并实时监测待测应用向第三方服务器发出的网络流量,进而通过将采集行为的采集内容、向第三方服务器传输的以及待测应用实现正常业务功能需采集的参数进行结合对比,以实现SDK是否存在过度收集用户信息异常行为的判断。
图2为本申请根据一示例性实施例示出的一种电子设备的硬件结构图,该电子设备包括:通信接口201、处理器202、机器可读存储介质203和总线204;其中,通信接口201、处理器202和机器可读存储介质203通过总线204完成相互间的通信。处理器202通过读取并执行机器可读存储介质203中与异常行为检测方法的控制逻辑对应的机器可执行指令,可执行上文描述的异常行为检测方法,该方法的具体内容参见上述实施例,此处不再累述。
本申请中提到的机器可读存储介质203可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质203可以是RAM(Random Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
与前述异常行为检测方法的实施例相对应,本发明还提供了异常行为检测装置的实施例。
图3为本发明根据一示例性实施例示出的一种异常行为检测装置的实施例流程图,所述异常行为检测装置可以应用在电子设备上,待测应用可以安装运行在电子设备上,也可以安装运行在模拟器或测试设备上,且电子设备可以与模拟器或测试设备通信。
如图3所示,所述异常行为检测装置包括:
静态分析模块310,用于基于预设特征库确定与待测应用中集成的SDK相关的采集函数;所述预设特征库包括SDK名、采集函数及流量特征信息的对应关系;
动态检测模块320,用于在待测应用运行过程中,获取待测应用中正在运行的SDK正在调用的函数列表;若所述函数列表中存在与正在运行的SDK相关的采集函数,则在待测应用中获取该采集函数采集的第一参数集;
流量检测模块330,用于获取待测应用发出的网络流量,将所述网络流量与正在运行的SDK对应的流量特征信息进行匹配;若匹配成功,则从所述网络流量中获取待传输的第二参数集;
行为确定模块340,用于在所述第一参数集与所述第二参数集中存在相同参数且该相同参数不属于待测应用实现正常业务功能需采集的参数时,确定该正在运行的SDK存在过度收集用户信息的异常行为。
在一可选实现方式中,所述预设特征库还包括权限特征,所述静态分析模块310,具体用于提取待测应用中集成的SDK以及声明的权限信息;从预设特征库中提取所述SDK对应的权限特征和采集函数名;针对每个权限信息,将该权限信息与所述SDK对应的权限特征进行匹配;若匹配成功,则将与匹配成功的权限信息对应的采集函数确定为与待测应用中集成的SDK相关的采集函数。
在一可选实现方式中,所述静态分析模块310,具体用于在提取待测应用中集成的SDK以及声明的权限信息过程中,从待测应用的安装文件中提取配置文件和代码文件;从所述配置文件中获取待测应用中声明的权限信息;从所述代码文件中获取该安装文件包含的所有类名,并针对每个类名,将该类名与预设特征库中的SDK名进行匹配;若匹配成功,则将与该类名匹配成功的SDK名确定为待测应用中集成的SDK。
在一可选实现方式中,所述动态检测模块320,具体用于在获取待测应用中正在运行的SDK正在调用的函数列表过程中,检测待测应用正在调用的类列表以及正在运行的SDK包含的API类;针对每个API类,若所述类列表中有该API类,则将该API类确定为正在运行的SDK正在调用的API类;从待测应用中获取正在调用的API类包含的函数列表,并作为正在运行的SDK正在调用的函数列表。
在一可选实现方式中,所述流量特征信息包括SDK的域名,所述流量检测模块330,具体用于在将所述网络流量与正在运行的SDK对应的流量特征信息进行匹配过程中,将所述网络流量中的域名与预设特征库中的域名进行匹配。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。