一种app隐私数据收集的第三方服务器识别方法与流程

文档序号:24413381发布日期:2021-03-26 20:13阅读:310来源:国知局
一种app隐私数据收集的第三方服务器识别方法与流程

1.本发明涉及android操作系统安全技术领域,尤其涉及一种移动应用隐私数据收集的第三方服务器识别方法、电子设备及存储介质,属于智能移动终端安全领域。


背景技术:

2.在移动网络时代,智能移动终端,例如:手机,由于其便携性、成本低等优点日益成为用户进行各类网络活动的主要终端形态。相比传统移动终端,智能移动终端拥有更高性能的处理器、更大的存储空间、更高的移动网络数据传输能力以及开放的第三方移动终端操作系统,因此借助智能移动终端可以开展大量业务应用,处理更多的个人隐私数据。随着应用软件技术的快速发展,人们的手机上往往安装了大量的应用程序(app),通过app人们可以进行各种各样的业务操作,同时在app上人们也输入了大量的个人隐私信息,这些个人隐私信息有被滥用的风险。这一风险逐步被社会广泛认识和关注。政府监管部门出台多个文件推进app隐私信息收集安全监管,开展app违法违规隐私信息收集的专项治理活动。
3.在国标《信息安全技术个人信息安全规范》(gb/t35273

2020)中新增了关于“第三方接入管理”的详细规定。第三方接入,主要是指在互联网产品或服务的过程中,接入了第三方的产品或服务。一旦这些第三方接入的产品或服务在没有经过用户同意的情况下,收集了各类与用户密切相关的敏感的隐私信息(例如银行账号,生物特征信息等),并传输到第三方服务器,甚至境外服务器,将会引发极大的个人隐私数据风险,严重的可能会危害国家安全。
4.因此从保护隐私数据安全的角度出发,往往需要检测app与互联网发生通信时所连接的诸多服务器,哪些服务器是可信任的app的后端服务器,哪些是可疑的第三方服务器(如app嵌入组件或sdk等所连接的服务器)。在发现app在收集个人隐私信息时,就需要明确个人隐私信息是发往app的后端服务器,还是不可信的第三方服务器。特别需要识别出收集个人隐私信息的第三方服务器。这一检测技术有助于确定违法违规隐私信息收集的责任主体。
5.为了识别app收集个人隐私信息的后端服务器和第三方服务器,通常采用wireshark等抓包工具进行抓包,再通过人工分析的方式来进行。这种方式很难实现自动化,无法满足大规模检测的需求。
6.现有的技术方案:现有技术中,用于识别app收集个人隐私信息的后端服务器和第三方服务器方法,一般是通过使用网络抓包工具,或者使用深度包检测(dpi)技术,识别app与互联网通信时的各种流量,进而抓出通信的ip、url,通过人工分析的方式判断哪些ip、url是app的业务后端服务器,哪些ip、url是第三方服务器。
7.现有技术的缺点:1)利用网络抓包工具进行抓包分析,通过抓取网络中有指定特征的流量包,对流量包进行协议分析,找出数据包的目的地址,进行分析判断。这样检测,虽然操作简单,但缺点是需要做人工分析判断,难以实现自动化。2)深度包检测(dpi)技术,需要专业的dpi设备并联或串联到系统中,将流量重复复制给dpi设备中进行分析。dpi设备是
针对整个网络流程进行分析,而不是针对具体某个app做分析。另外,设备部署成本高,设备的迭代升级困难。
8.有鉴于此,如何自动识别app与互联网通信时的各种数据流量;以及如何识别哪些数据是发给app业务后台服务器(可信服务器)、哪些是发第三方服务器(不可信服务器),都是本领域技术人员所急需解决的技术问题。


技术实现要素:

9.为了解决上述问题,本发明提供一种移动应用隐私数据收集的第三方服务器识别方法、电子设备及存储介质。通过使用本发明的上述识别方法、电子设备及存储介质,能够自动识别app与互联网通信时的各种数据流量;以及识别哪些数据是发给app业务后台服务器(可信服务器)、哪些是发第三方服务器(不可信服务器)。其优点是不需要做人工分析判断,能够实现自动化。
10.本发明提供一种移动应用隐私数据收集的第三方服务器识别方法,用于android移动终端,该方法包括如下步骤:s1.获取android移动终端中与目标服务器进行通信的所有app的进程信息;s2.拦截所述app的所述进程与所述目标服务器之间的通信过程所调用的函数,输出目标服务器地址[b]和所述通信过程所调用的堆栈信息,其中,所述堆栈信息包括多个android包名;s3.对输出的所述堆栈信息进行过滤,提取经过滤的堆栈信息中的最后一个android包名,并保留该android包名的前三个字段,记为栈底包名[a];s4.判断数据库中是否存在所述栈底包名[a]与所述目标服务器地址[b]之间的对应关系;如果不存在,将该对应关系存储到数据库中,并将该对应关系的计数值[c]设置为1;否则,将该对应关系的计数值[c]增加1;s5.对于所述app的所述进程与所述目标服务器地址[b]之间的每一通信过程,依次执行步骤s2至s4,直至符合预定的条件时退出;s6.对数据库中每一对应关系的计数值[c]进行阈值判断,以确定所述目标服务器地址[b]对应于第三方服务器,还是对应于所述app的自有服务器。
[0011]
可选地,所述步骤s1中:通过检测模块对android系统中的zygote进程进行控制以执行所述获取操作;其中,所述目标服务器地址[b]至少包括url地址和/或ip地址。
[0012]
可选地,所述步骤s1中:在所述android移动终端中通过adb命令安装所述app,并利用第三方框架对所述app进行模拟点击,以触发所述app的所述进程与所述目标服务器之间的通信过程;其中,所述第三方框架包括monkeyrunner框架。
[0013]
可选地,所述步骤s2中:检测模块调用hook模块拦截系统中所述通信过程所调用的函数。
[0014]
可选地,所述步骤s3中,所述对输出的堆栈信息进行过滤包括:将所述堆栈信息中以“java”、“android”、“com.java”、以及“com.android”开头的android包信息剔除。
[0015]
可选地,所述步骤s6中:对所述计数值[c]做取对数转换处理,将得到的对数值ln([c])与预设阈值x进行比较;当满足ln([c])≥预设阈值x时,确定所述目标服务器地址[b]对应于第三方服务器;否则,确定所述目标服务器地址[b]对应于所述app的自有服务器。
[0016]
可选地,所述预设阈值x可以根据所检测到的app数量、检测场景、误报率、和/或漏报率进行设置和调整。
[0017]
可选地,所述android移动终端包括:智能手机、平板电脑、笔记本电脑、可穿戴智能设备、智能家电、车载智能终端、电纸书、pda中的一种或多种。
[0018]
本发明还提供一种用于移动应用隐私数据收集的第三方服务器识别的电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现上述方法的步骤。
[0019]
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述方法的步骤。
[0020]
本发明技术方案带来的有益效果:本发明提供了一种移动应用隐私数据收集的第三方服务器识别方法、电子设备及存储介质。本发明的技术方案可自动识别app与不可信的第三方的服务器通信,方便确认隐私信息收集责任主体,可用于自动化app合规性检测,以及隐私信息保护的安全检测,特别是对境外服务器收集个人隐私信息的自动化识别检测。
[0021]
附图说明
[0022]
图1为本发明的一种移动应用隐私数据收集的第三方服务器识别方法的流程图。
[0023]
具体实施方式
[0024]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,可以理解的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0025]
缩略语和关键术语定义:
·
挂钩(hook):是一系列技术,这些技术通过截获在软件组件之间传递的函数调用、消息或事件来更改或增强操作系统、应用程序或其他软件组件的行为。
[0026]
·
移动应用(app):是设计为在诸如移动电话、平板电脑或穿戴设备之类的移动设备上运行的计算机程序或软件应用程序。
[0027]
·
软件开发工具包(sdk):是指辅助开发某一类软件的相关文档、范例代码、接口组件、打包工具等的集合。
[0028]
·
深度包检测(dpi):是一种可详细检查通过计算机网络发送数据的技术。
[0029]
本发明提供一种移动应用隐私数据收集的第三方服务器识别方法、电子设备及存储介质。本发明的技术方案基于挂钩(hook)技术,跟踪代码与通信数据的对应关系,通过统计学方法判断app是否与第三方服务器通信,可用于自动化的app合规性检测,隐私信息保护的安全检测,通过本检测识别方法可对隐私信息收集的责任主体进行判断。具体实施例如下:实施例一:
在本发明的该实施例中,所述移动应用隐私数据收集的第三方服务器识别方法,包括如下步骤:步骤a1:在手机系统中安装检测模块,替换android系统的app_process应用来控制zygote进程,进而控制手机上所有的app进程,实现在被测试app启动前引入自身的代码,完成测试手机的环境准备。
[0030]
检测模块通过挂钩(hook)技术,拦截系统中与通信相关的函数,包括第三方库(如okhttp)的函数,输出hook到的目标服务器url参数,以及通信函数的堆栈信息。
[0031]
步骤a2:在手机上通过adb命令安装应用,并利用monkeyrunner等第三方框架对app进行模拟点击,触发app与服务器通信,通信发生时,输出通信调用过程的堆栈信息,分析堆栈信息剔除以“java”、或者“android”为开头的信息,取栈底最后一行的包名,并保留前三个字段,定位具体调用通信的代码段,记录为【a】。
[0032]
举例来说:首先,输出的所述通信调用过程的堆栈信息内容如下:java.lang.exception
ꢀꢀꢀ
at com.android.okhttp.internal.hhttpurlconnectionimpl.getinputstream(native method)
ꢀꢀꢀ
at com.android.okhttp.internal.hdelegatinghttpsurlconnection.getinputstream(delegatinghttpsurlconnection.java:210)
ꢀꢀꢀ
at com.android.okhttp.internal.hhttpsurlconnectionimpl.getinputstream(httpsurlconnectionimpl.java)
ꢀꢀꢀ
at com.android.okhttp.internal.hhttpsurlconnectionimpl.getinputstream(native method)
ꢀꢀꢀ
at com.crashsdk.a.c.a(proguard:33)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:55)
ꢀꢀꢀ
at com.crashsdk.a.h.d(proguard:12)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:18)
ꢀꢀꢀ
at com.crashsdk.a.e.a(proguard:5)
ꢀꢀꢀ
at com.crashsdk.b.a(proguard:84)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:25)
ꢀꢀꢀ
at com.crashsdk.a.h.a(proguard:49)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:5)
ꢀꢀꢀ
at com.crashsdk.a.f.a(proguard:23)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:11)
ꢀꢀꢀ
at android.os.handler.handlecallback(handler.java:751)
ꢀꢀꢀ
at android.os.handler.dispatchmessage(handler.java:95)
ꢀꢀꢀ
at android.os.looper.loop(looper.java:154)
ꢀꢀꢀ
at android.os.handlerthread.run(handlerthread.java:61)进一步地,从上述堆栈信息中剔除以“java”、以及“android”为开头的信息,经过滤得到:
java.lang.exception
ꢀꢀꢀ
at com.crashsdk.a.c.a(proguard:33)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:55)
ꢀꢀꢀ
at com.crashsdk.a.h.d(proguard:12)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:18)
ꢀꢀꢀ
at com.crashsdk.a.e.a(proguard:5)
ꢀꢀꢀ
at com.crashsdk.b.a(proguard:84)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:25)
ꢀꢀꢀ
at com.crashsdk.a.h.a(proguard:49)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:5)
ꢀꢀꢀ
at com.crashsdk.a.f.a(proguard:23)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:11)最后,取栈底最后一行的包名,将其保留前三个字段。例如在该实施例中为:“com.crashsdk.a”。步骤a3:将检测模块hook到的目标服务器的具体url参数或者ip,记录为【b】,将【a】

【b】的对应关系存储到数据库中。
[0033]
步骤a4:如果数据库中已经有【a】

【b】的对应关系,则进行计数增1,也就是记录历史上遇到了多少次,我们将这个次数记录为【c】。如下表1所示:表1pkgnameurlcount【a】【b】【c】(例如,5)步骤a5:在历史数据库记录【a】

【b】的对应关系数量越多,通信是发往第三方服务器的概率越大。分析如下:【a】有两种可能:app自有pkgname包名(代码)、第三方sdk的pkgname包名(代码),【b】有两种可能:app自有服务器,第三方sdk的服务器,因此两者的对应关系的组合排列有以下四种情况:
·
情况1:app自有代码与app自有服务器通信;
·
情况2:app自有代码与第三方sdk的服务器通信;
·
情况3:第三方sdk的代码与app自有服务器通信;
·
情况4:第三方sdk的代码与第三方sdk的服务器通信。
[0034]
对于情况1,因为app自有代码独特性强(不同app的代码不同),app自有服务器独特性强(不同app的服务器不同),因此两者配对的历史积累数量较少。
[0035]
对于情况2,因为app自有代码独特性强(不同app的代码不同),第三方sdk的服务器特征性弱(不同app可能集成相同的sdk,相同sdk的后台服务器地址一致),由于app数量远远大于sdk数量,因此两者配对的历史积累数量较少。
[0036]
对于情况3,因为第三方sdk代码独特性弱(不同app可能集成相同的sdk),app自有服务器特征性强(不同app的服务器不同),由于app数量远远大于sdk数量,因此两者配对的历史积累数量较少。
[0037]
对于情况4,因为第三方sdk代码独特性弱(不同app可能集成相同的sdk),第三方sdk的服务器特征性弱(不同app可能集成相同的sdk,相同sdk的后台服务器地址一致),因
此两者配对的历史积累数量较多。
[0038]
因此,基于app数量远远大于sdk数量这一客观现实,当【c】大于某一数值时,说明相同的(代码

服务器)关系出现次数超过阈值,可以认为这段代码是第三方sdk的代码,服务器是第三方sdk的服务器,通信是发往第三方服务器的。
[0039]
根据统计学规律,为消除统计数据的方差影响,将【c】做取对数转换处理,【c】对数值大于某一阈值x(如:ln(【c】)=x)时,我们即认为通信是发往第三方服务器的。其中阈值x,可根据检测的app数量、检测场景、误报和漏报率要求等因素,进行设置和调整。
[0040]
如图1所示,本发明的该实施例提供一种移动应用隐私数据收集的第三方服务器识别方法,用于android移动终端,该方法包括如下步骤:s1.获取android移动终端中与目标服务器进行通信的所有app的进程信息;s2.拦截所述app的所述进程与所述目标服务器之间的通信过程所调用的函数,输出目标服务器地址[b]和所述通信过程所调用的堆栈信息,其中,所述堆栈信息包括多个android包名;s3.对输出的所述堆栈信息进行过滤,提取经过滤的堆栈信息中的最后一个android包名,并保留该android包名的前三个字段,记为栈底包名[a];s4.判断数据库中是否存在所述栈底包名[a]与所述目标服务器地址[b]之间的对应关系;如果不存在,将该对应关系存储到数据库中,并将该对应关系的计数值[c]设置为1;否则,将该对应关系的计数值[c]增加1;s5.对于所述app的所述进程与所述目标服务器地址[b]之间的每一通信过程,依次执行步骤s2至s4,直至符合预定的条件时退出;s6.对数据库中每一对应关系的计数值[c]进行阈值判断,以确定所述目标服务器地址[b]对应于第三方服务器,还是对应于所述app的自有服务器。
[0041]
可选地,所述android移动终端包括:智能手机、平板电脑、笔记本电脑、可穿戴智能设备、智能家电、车载智能终端、电纸书、pda中的一种或多种。
[0042]
在本发明的该实施例中,同时提供一种用于移动应用隐私数据收集的第三方服务器识别的电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现上述移动应用隐私数据收集的第三方服务器识别方法的步骤。
[0043]
在本发明的该实施例中,还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述移动应用隐私数据收集的第三方服务器识别方法的步骤。
[0044]
实施例二:在本发明的该实施例中,所述移动应用隐私数据收集的第三方服务器识别方法,包括如下步骤: 步骤b1:将待测试app部署到安装有测试框架的测试手机上,app与“www.crashsdk.cn”域名通信,检测模块通过挂钩(hook)技术,输出某一次通信所调用的堆栈信息,例如:java.lang.exception
ꢀꢀꢀ
atcom.android.okhttp.internal.hhttpurlconnectionimpl.getinputstream
(native method)
ꢀꢀꢀ
at com.android.okhttp.internal.hdelegatinghttpsurlconnection.getinputstream(delegatinghttpsurlconnection.java:210)
ꢀꢀꢀ
at com.android.okhttp.internal.hhttpsurlconnectionimpl.getinputstream(httpsurlconnectionimpl.java)
ꢀꢀꢀ
at com.android.okhttp.internal.hhttpsurlconnectionimpl.getinputstream(native method)
ꢀꢀꢀ
at com.crashsdk.a.c.a(proguard:33)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:55)
ꢀꢀꢀ
at com.crashsdk.a.h.d(proguard:12)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:18)
ꢀꢀꢀ
at com.crashsdk.a.e.a(proguard:5)
ꢀꢀꢀ
at com.crashsdk.b.a(proguard:84)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:25)
ꢀꢀꢀ
at com.crashsdk.a.h.a(proguard:49)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:5)
ꢀꢀꢀ
at com.crashsdk.a.f.a(proguard:23)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:11)
ꢀꢀꢀ
at android.os.handler.handlecallback(handler.java:751)
ꢀꢀꢀ
at android.os.handler.dispatchmessage(handler.java:95)
ꢀꢀꢀ
at android.os.looper.loop(looper.java:154)
ꢀꢀꢀ
at android.os.handlerthread.run(handlerthread.java:61)进一步地,从上述堆栈信息中剔除以“java”、以及“android”为开头的信息,经过滤得到:java.lang.exception
ꢀꢀꢀ
at com.crashsdk.a.c.a(proguard:33)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:55)
ꢀꢀꢀ
at com.crashsdk.a.h.d(proguard:12)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:18)
ꢀꢀꢀ
at com.crashsdk.a.e.a(proguard:5)
ꢀꢀꢀ
at com.crashsdk.b.a(proguard:84)
ꢀꢀꢀ
at com.crashsdk.a.h.b(proguard:25)
ꢀꢀꢀ
at com.crashsdk.a.h.a(proguard:49)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:5)
ꢀꢀꢀ
at com.crashsdk.a.f.a(proguard:23)
ꢀꢀꢀ
at com.crashsdk.a.e.run(proguard:11)最后,取栈底最后一行的包名,将其保留前三个字段。例如在该实施例中为:“com.crashsdk.a”。
[0045]
步骤b2:在数据库中记录“com.crashsdk.a”与“www.crashsdk.cn”的关联关系;
步骤b3:通过对大量app的自动化测试,并将hook到对应关系记录到数据库,包括记录历史统计数据count。如下表2所示:表2pkgnameurlcountcom.crashsdk.awww.crashsdk.cn1000步骤b4:假设本次检测阈值x取x=6.9,当对统计的关联数值(1000)取对数后,其对数值为6.91,大于阈值x=6.9,我们认为“www.crashsdk.cn”是一个第三方服务器,相关app与“www.crashsdk.cn”的通信是发向第三方服务器的,相关的隐私信息收集存在高度安全风险。
[0046]
在本发明的该实施例中,同时提供一种用于移动应用隐私数据收集的第三方服务器识别的电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现上述移动应用隐私数据收集的第三方服务器识别方法的步骤。
[0047]
在本发明的该实施例中,还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述移动应用隐私数据收集的第三方服务器识别方法的步骤。
[0048]
本发明的所述用于移动应用隐私数据收集的第三方服务器识别的电子设备如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0049]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1