用于应用程序的安全检测方法、装置、电子设备和介质与流程
未命名
07-23
阅读:70
评论:0

1.本发明涉及信息安全技术领域和软件测试技术领域,更具体地涉及一种用于应用程序的安全检测方法、装置、电子设备和介质。
背景技术:
2.目前对于应用程序采集用户信息的行为,主要使用白盒代码审计、动态沙盒检测等方式进行检测。
3.在白盒代码审计方式中,检查代码逻辑是否包含异常收集信息上传、检查应用程序是否存在过度申请不必要的权限(例如,通讯类应用申请相册权限)。
4.在动态沙盒检测方式中,将待检测应用程序放入沙盒中运行,看运行过程中是否存在上传敏感信息到后台服务器的情况。
5.然而,这两类方法对于应用程序异常收集用户敏感信息上传的行为,检测效果均较为有限,对于白盒代码审计方式,一方面目前客户端加固技术已经较为完善,获取源码相对困难,另一方面,目前应用程序功能越来越繁杂,如果仅通过权限申请来判断是否存在异常收集敏感信息的行为,会存在大量误报。对于动态沙盒检测方式,异常应用程序已经有了大量对抗手段,例如对沙盒环境进行检测,发现在沙盒环境运行时隐藏其异常行为、对上传敏感信息进行高强度加密、只有触发特定功能才会进行信息异常收集等。
6.以上情况导致了目前业界对于应用程序异常收集个人信息并上传的行为检测能力存在不足。
技术实现要素:
7.鉴于上述问题,根据本发明的第一方面,本发明的实施例提供了一种用于应用程序的安全检测方法,所述方法包括:获取待检测的应用程序中用于组装网络报文的第一函数;通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息;遍历所述第一函数的调用链,以获取位于用户界面层的第二函数;通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较所述目标参数信息和所述页面元素信息;以及响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。
8.根据一些示例性的实施例,所述获取待检测的应用程序中用于组装网络报文的第一函数包括:响应于检索到与预设应用程序开发框架对应的特征,确定所述应用程序的开发框架;
根据确定出的所述开发框架,确定所述开发框架下用于组装网络报文的第一函数的名称;以及根据所述开发框架下用于组装网络报文的第一函数的名称,获取用于组装网络报文的第一函数。
9.根据一些示例性的实施例,所述获取待检测的应用程序中用于组装网络报文的第一函数包括:在内存中跟踪搜索用户前端输入的数据;以及响应于所述数据作为预设函数的参数进行组包,将该预设函数确定为用于组装网络报文的第一函数。
10.根据一些示例性的实施例,所述通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息,具体包括:当所述第一函数发生调用时,通过插桩代码对所述第一函数的每一个输入参数根据敏感信息规则进行检查;以及响应于所述第一函数的至少一个输入参数涉及敏感信息,将涉及该敏感信息的至少一个输入参数的相关信息确定为所述目标参数信息。
11.根据一些示例性的实施例,在所述遍历所述第一函数的调用链之前,所述方法还包括:通过对系统的类加载器进行插桩,对所述应用程序的所有运行函数进行插桩;获取和记录被插桩的所有运行函数的调用信息,以形成调用日志,其中,所述调用日志包括所有运行函数发生调用时的调用时间和调用来源;以及根据所述调用日志,获取与所述第一函数相关的调用链。
12.根据一些示例性的实施例,所述通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息,具体包括:获取运行所述第二函数的前端页面和所述前端页面中的活动名;通过插桩代码,获取与所述活动名对应的所有视窗对象;以及根据所述视窗对象,获取与该第二函数对应的应用程序前端页面上的页面元素信息。
13.根据一些示例性的实施例,所述目标参数信息包括敏感信息的类型;所述响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险,具体包括:响应于所述目标参数信息中涉及的敏感信息的类型未存在于所述页面元素信息中,判定所述应用程序存在异常收集敏感信息的安全风险。
14.根据本发明的第二方面,还提供一种用于应用程序的安全检测装置,所述装置包括:第一函数获取模块,用于获取待检测的应用程序中用于组装网络报文的第一函数;目标参数信息获取模块,用于通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息;第二函数获取模块,用于遍历所述第一函数的调用链,以获取位于用户界面层的
第二函数;页面元素信息获取模块,用于通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较模块,用于比较所述目标参数信息和所述页面元素信息;以及判定模块,用于响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。
15.根据本发明的第三方面,提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上所述的方法。
16.根据本发明的第四方面,提供一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。
17.根据本发明的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的方法。
18.上述一个或多个实施例具有如下优点或有益效果:通过插桩技术和调用链分析,在提高检测方法可操作性的情况下,能够有效降低误报率,从而实现了应用程序安全风险的有效检测。
附图说明
19.通过以下参照附图对本发明实施例的描述,本发明的上述内容以及其他目的、特征和优点将更为清楚,在附图中:图1示意性示出了根据本发明实施例的安全检测方法、装置、设备、介质的应用场景图。
20.图2示意性示出了根据本发明实施例的安全检测方法的流程图。
21.图3是根据本发明的一些示例性实施例的方法中获取待检测的应用程序中用于组装网络报文的函数的流程图。
22.图4是根据本发明的另一些示例性实施例的方法中获取待检测的应用程序中用于组装网络报文的函数的流程图。
23.图5是根据本发明的一些示例性实施例的方法中获取所述第一函数发生调用时该第一函数获取的目标参数信息的流程图。
24.图6是根据本发明的一些示例性实施例的方法中获取函数调用链的流程图。
25.图7示意性示出了类加载器。
26.图8示意性示出了与所述第一函数相关的调用链。
27.图9是根据本发明的一些示例性实施例的方法中获取页面元素信息的流程图。
28.图10a示意性示出了根据本发明实施例的安全检测装置的结构框图。
29.图10b示意性示出了根据本发明实施例的安全检测装置的各个模块分布的泳道图。
30.图11示意性示出了根据本发明的一些示例性实施例的第一函数获取模块的结构框图。
31.图12示意性示出了根据本发明的另一些示例性实施例的第一函数获取模块的结
构框图。
32.图13示意性示出了根据本发明的一些示例性实施例的目标参数信息获取模块的结构框图。
33.图14示意性示出了根据本发明的一些示例性实施例的调用链获取模块的结构框图。
34.图15示意性示出了根据本发明的一些示例性实施例的页面元素信息获取模块的结构框图。
35.图16示意性示出了根据本发明实施例的适于实现安全检测方法的电子设备的方框图。
具体实施方式
36.以下,将参照附图来描述本发明的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本发明实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
37.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本发明。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
38.在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
39.在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。
40.在本发明的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
41.首先,对本文中记载的技术术语作如下解释和说明。
42.插桩技术:在保证原有程序逻辑完整性的基础上,在程序中插入探针(例如,在特定的位置插入代码段),通过探针采集代码中的信息(例如,方法本身、方法参数值、返回值等),从而收集程序运行时的动态上下文信息。
43.敏感信息,又称敏感个人信息、个人信息,是指一旦泄露或者异常使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害的个人信息,包括生物识别、特定身份、医疗健康、金融账户等信息。
44.在软件测试领域,黑盒、白盒、灰盒和沙盒测试方法是常用的测试方法。在黑盒测试方法中,执行该测试的测试人员可以不了解正在测试的软件的内部结构和源代码,不需要具备对编程语言的深入了解或出色的编码技能来执行测试。在黑盒测试方法中,目标不是深入研究代码,遍历软件内部,而是与用户界面进行交互,测试其功能,并确保系统的每
个输入和输出均符合标准。因此,黑盒测试也可以称为功能测试或基于规范的测试。白盒测试方法的目标是对软件的内部结构及其背后的逻辑进行分析。因此,白盒测试有时称为结构测试或逻辑驱动测试。在白盒测试方法中,要求测试人员具有较强的编程能力,对正在测试的软件有全面了解,并且可以访问所有源代码和体系结构文档。灰盒测试方法将重点放在测试软件的所有层上,而不管其复杂性如何,从而增加了测试技术的覆盖范围。黑盒测试人员确保界面和功能一切正常,白盒测试人员深入研究代码内部结构并修复软件的源代码,而灰盒测试则同时以非介入方式同时处理这两种情况方式。灰盒测试是基于程序运行时的外部表现又结合程序内部逻辑结构来设计测试用例,执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。沙盒测试也叫沙箱测试,在计算机领域指一种虚拟技术,且多用于计算机安全技术。其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。当某个程序试图发挥作用时,安全软件可以先让它在沙盒中运行,如果含有异常行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。沙盒环境又称测试环境和开发环境,是提供给开发者开发和测试用的环境。在该环境中应用功能没有任何限制。
45.目前对于应用程序采集用户信息的行为,主要使用白盒代码审计、动态沙盒检测等方式进行。在白盒代码审计方式中,检查代码逻辑是否包含异常收集信息上传、检查应用程序是否存在过度申请不必要的权限(例如,通讯类应用申请相册权限)。在动态沙盒检测方式中,将待检测应用程序放入沙盒中运行,看运行过程中是否存在上传敏感信息到后台服务器的情况。然而,这两类方法对于应用程序异常收集用户敏感信息上传的行为,检测效果均较为有限,对于白盒代码审计方式,一方面目前客户端加固技术已经较为完善,获取源码相对困难,另一方面,目前应用程序功能越来越繁杂,如果仅通过权限申请来判断是否存在异常收集敏感信息的行为,会存在大量误报。对于动态沙盒检测方式,异常应用程序已经有了大量对抗手段,例如对沙盒环境进行检测,发现在沙盒环境运行时隐藏其异常行为、对上传敏感信息进行高强度加密、只有触发特定功能才会进行信息异常收集等。以上情况导致了目前业界对于应用程序异常收集个人信息并上传的行为检测能力存在不足。
46.基于此,本发明的实施例提供一种用于应用程序的安全检测方法,所述方法包括:获取待检测的应用程序中用于组装网络报文的第一函数;通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息;遍历所述第一函数的调用链,以获取位于用户界面层的第二函数;通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较所述目标参数信息和所述页面元素信息;以及响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。在根据本发明实施例的方法中,通过插桩技术和调用链分析,在提高检测方法可操作性的情况下,能够有效降低误报率,从而实现了应用程序安全风险的有效检测。
47.需要说明的是,本发明实施例提供的安全检测方法和装置可用于信息安全技术领域和软件测试技术领域。
48.图1示意性示出了根据本发明实施例的安全检测方法、装置、设备、介质的应用场景图。
49.如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
50.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
51.终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
52.服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
53.需要说明的是,本发明实施例所提供的安全检测方法可以由终端设备101、102、103或服务器105执行。相应地,本发明实施例所提供的安全检测装置一般可以设置于终端设备101、102、103或服务器105中。本发明实施例所提供的安全检测方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本发明实施例所提供的安全检测装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
54.应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
55.以下将基于图1描述的场景,通过图2~图9对本发明的实施例提供的安全检测方法进行详细描述。
56.图2示意性示出了根据本发明实施例的安全检测方法的流程图。
57.如图2所示,根据该实施例的安全检测方法200可以包括操作s210~操作s260。
58.在操作s210,获取待检测的应用程序中用于组装网络报文的第一函数。
59.在诸如客户端应用程序、web应用程序等应用程序(英文缩写为app)中,客户端(即前端)与服务器端(即后端)可以通过网络报文进行数据通信,例如,即在app客户端中,将服务器端需要从客户端获取的参数进行组装,调用网络请求方法向服务器端发送。所述第一函数可以是组装和/或发送所述参数的函数。
60.在一些示例性的实施例中,所述待检测的应用程序采用主流的开发框架开发。在这些主流的开发框架中,用于组装网络报文的第一函数均有固定的函数名。例如,在某mpass移动开发框架中,负责网络报文参数的是rpc类中的adapterjson方法。
61.图3是根据本发明的一些示例性实施例的方法中获取待检测的应用程序中用于组装网络报文的函数的流程图。在该实施例中,操作s210可以包括子操作s310~子操作s330。
62.在子操作s310,响应于检索到与预设应用程序开发框架对应的特征,确定所述应用程序的开发框架。
63.例如,所述预设应用程序开发框架可以是主流的开发框架中的至少一种。可以通过app运行时在app代码段、数据段和存储空间中搜索开发框架的独有特征,例如,某mpass移动开发框架中加密密钥存储为一张名为yw_1222.jpg的图片,响应于检索到该独有特征,可以确定所述应用程序采用的开发框架。
64.在子操作s320,根据确定出的所述开发框架,确定所述开发框架下用于组装网络报文的第一函数的名称。
65.在子操作s330,根据所述开发框架下用于组装网络报文的第一函数的名称,获取用于组装网络报文的第一函数。
66.例如,在确定所述应用程序的开发框架为某mpass移动开发框架后,可以确定该开发框架下用于组装网络报文的第一函数的名称是rpc类中的adapterjson方法。
67.在该实施例中,通过判断应用程序的开发框架,按照对应开发框架直接返回对应的函数名,从而可以获取用于组装网络报文的第一函数。在该实施例中,通过应用程序的开发框架快速地确定用于组装网络报文的第一函数,可以减小计算量,且提高计算效率。
68.在另一些示例性的实施例中,所述待检测的应用程序未使用主流的开发框架开发或利用自编代码实现了组装发送网络报文的方法。
69.图4是根据本发明的另一些示例性实施例的方法中获取待检测的应用程序中用于组装网络报文的函数的流程图。在该实施例中,操作s210可以包括子操作s410~子操作s420。
70.在子操作s410,在内存中跟踪搜索用户前端输入的数据。
71.在子操作s420,响应于所述数据作为预设函数的参数进行组包,将该预设函数确定为用于组装网络报文的第一函数。
72.在该实施例中,对于app开发者未使用主流开发框架或利用自编代码实现了组装发送网络报文方法的情况,可以通过在内存中跟踪搜索用户前端输入的数据最终出现在哪些函数的参数中进行判断,例如,用户前端输入了手机号码,用于传送到后端,则该明文手机号码最终会作为组装网络报文的函数的参数进行组包,从而获取该函数名和对应的函数。
73.在该实施例中,通过动态跟踪用户前端输入参数,可以获取对应的函数名,从而可以获取用于组装网络报文的第一函数。在该实施例中,在应用程序未采用主流开发框架开发的情况下,可以通过动态跟踪参数的方式确定用于组装网络报文的第一函数,有利于扩展根据本公开实施例的安全检测方法的应用场景。
74.返回参照图2,在操作s220,通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息。
75.图5是根据本发明的一些示例性实施例的方法中获取所述第一函数发生调用时该第一函数获取的目标参数信息的流程图。在该实施例中,操作s220可以包括子操作s510~子操作s520。
76.在子操作s510,当所述第一函数发生调用时,通过插桩代码对所述第一函数的每一个输入参数根据敏感信息规则进行检查。
77.在该实施例中,敏感信息规则可以理解为用于检查所述参数中是否包括敏感信息的规则。例如,所述敏感信息可以包括个人手机号、身份证号、客户端浏览记录等信息。
78.在该实施例中,对所述第一函数进行插桩,这样,当所述第一函数发生调用时,说明发起一次网络传输,插桩至所述第一函数中的插桩代码可以获取所述第一函数的每一个输入参数,然后,对于每一个输入参数,可以检查其是否涉及敏感信息。
79.在子操作s520,响应于所述第一函数的至少一个输入参数涉及敏感信息,将涉及该敏感信息的至少一个输入参数的相关信息确定为所述目标参数信息。
80.在该实施例中,如果上述的检查结果表明:所述第一函数的至少一个输入参数涉
及敏感信息,例如,所述第一函数的至少一个输入参数涉及个人手机号、身份证号、客户端浏览记录等信息,那么,可以将涉及该敏感信息的至少一个输入参数的相关信息确定为所述目标参数信息。
81.在该实施例中,通过插桩技术获取与第一函数的输入参数相关的目标参数信息,可以在不侵入源代码的情况下实现目标参数信息的获取。
82.在一些示例性的实施例中,所述目标参数信息可以包括敏感信息的类型,即,可以记录至少一个输入参数涉及的敏感信息的类型。
83.返回参照图2,在操作s230,遍历所述第一函数的调用链,以获取位于用户界面层的第二函数。
84.在本发明的实施例中,在所述遍历所述第一函数的调用链之前,所述方法还可以包括获取与所述第一函数相关的调用链。
85.图6是根据本发明的一些示例性实施例的方法中获取函数调用链的流程图。在该实施例中,所述获取与所述第一函数相关的调用链可以包括操作s610~操作s630。
86.在操作s610,通过对系统的类加载器进行插桩,对所述应用程序的所有运行函数进行插桩。
87.以java编程语言为例,java类加载器是应用程序和java虚拟机之间的桥梁。图7示意性示出了类加载器。
88.如图7所示,源文件:.java是java的源文件后缀,用于存放程序员编写的功能代码,它只是一个文本文件,不能被java虚拟机识别,但是java语言有其自身的语法规范要求,不符合规范的java程序会在编译器的编译期间报错。
89.java字节码文件(.class):可以由java文件通过 javac这个命令编译生成,本质上是一种二进制文件,这个文件可以由java虚拟机加载(类加载),然后进java解释执行,这也就是运行程序。通过java字节码文件,可以实现多语言支持性。java虚拟机本身只识别.class文件,所以任何语言(python、go等编程语言)只要有合适的解释器解释为.class文件,就可以在java虚拟机上执行。
90.java虚拟机:java virtual machine(缩写为jvm),仅识别.class文件,可以把.class文件加载到内存中,生成对应的java对象。还有内存管理、程序优化、锁管理等功能。所有的java程序最终都运行在java虚拟机上。
91.在本发明的一些示例性实施例中,借助于编程语言的类记载机制,可以对系统的类加载器进行插桩,从而实现对待检测的应用程序的所有运行函数进行插桩。
92.在操作s620,获取和记录被插桩的所有运行函数的调用信息,以形成调用日志,其中,所述调用日志包括所有运行函数发生调用时的调用时间和调用来源。
93.在本发明的一些示例性实施例中,通过对系统的类加载器进行插桩,从而实现对待检测的应用程序的所有运行函数进行插桩,这样,当应用程序的每一个函数产生调用时,都可以在调用日志中记录该次调用的调用信息,例如,所述调用信息可以包括调用时间、调用来源等。
94.在操作s630,根据所述调用日志,获取与所述第一函数相关的调用链。
95.所述调用日志记录有应用程序的所有运行函数的调用信息,这样,当第一函数发生调用时,可以在调用日志中检索与所述第一函数相关的各个调用信息,从而获取与所述
第一函数相关的调用链。
96.在该实施例中,通过对系统的类加载器进行插桩,实现对所述应用程序的所有运行函数进行插桩,从而能够方便地获取目标函数的调用链。
97.图8示意性示出了与所述第一函数相关的调用链。如图8所示,根据所述调用日志,可以获取与所述第一函数相关的调用链如下:第二函数调用第三函数,第三函数调用第四函数,第四函数调用第五函数,第五函数调用所述第一函数。示例性地,所述第二函数可以是位于用户界面层(即ui层)的函数。也就是说,所述调用链可以递归溯源到用户界面层。
98.返回参照图2,在操作s240,通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息。
99.图9是根据本发明的一些示例性实施例的方法中获取页面元素信息的流程图。在该实施例中,所述操作s240可以包括子操作s910~子操作s930。
100.在子操作s910,获取运行所述第二函数的前端页面和所述前端页面中的活动名。
101.在子操作s920,通过插桩代码,获取与所述活动名对应的所有视窗对象。
102.在子操作s930,根据所述视窗对象,获取与该第二函数对应的应用程序前端页面上的页面元素信息。
103.下面,以安卓系统下的应用程序为例,结合图9对操作s240进行更详细的说明。
104.如上所述,所述调用链可以递归溯源到用户界面层,即,可以递归溯源到用户界面层的函数,即,可以定位到请求来源的前端页面,例如,可以定位到应用程序的某一活动(即activity)中的某一按钮事件(即button事件),并且,可以定位到该前端页面中该活动的活动名(即activityname)。通过获取的前端页面和活动名,通过插桩,例如,可以通过插桩代码反射getallchildview等方法获取所有视窗对象(即view对象),进而获取该前端页面上的元素信息,包括edittext、textview等元素信息。
105.在该实施例中,通过插桩技术获取与第二函数相关的页面元素信息,可以在不侵入源代码的情况下实现页面元素信息的获取。
106.也就是说,在该操作s240中,可以获取该应用程序在前端页面需要用户输入的个人信息。所述需要用户输入的个人信息可以理解为明示给用户需要收集的个人信息。应该理解,这些个人信息的获取需要用户的明确同意,且符合相关法律法规的规定。
107.返回参照图2,在操作s250,比较所述目标参数信息和所述页面元素信息。
108.在操作s260,响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。
109.在本发明的一些示例性实施例中,所述目标参数信息包括敏感信息的类型。
110.相应地,操作s260可以具体包括:响应于所述目标参数信息中涉及的敏感信息的类型未存在于所述页面元素信息中,判定所述应用程序存在异常收集敏感信息的安全风险。
111.在该实施例中,通过比较所述目标参数信息中涉及的敏感信息的类型是否存在于所述页面元素信息中,来判断所述应用程序是否存在异常收集敏感信息的安全风险。即,比较的是敏感信息的类型,不需要比较敏感信息的完整信息,这样,可以降低计算量,有利于提高判断的效率。
112.在本发明的实施例中,当所述第一函数的输入参数涉及到敏感信息时,会将该输
入参数涉及的敏感信息与前端页面中用户输入的页面元素进行比较,例如,如果该输入参数涉及的敏感信息与前端页面中用户输入的页面元素同步存在,则认为该敏感信息的收集是应用程序的功能需求,是经过用户同意的正常行为;如果该输入参数涉及的敏感信息与前端页面中用户输入的页面元素不是同步存在的,则认为可能存在应用程序异常收集或获取敏感信息的情况,可以记录下该输入参数及ui页面信息,报告相关问题。
113.图10a示意性示出了根据本发明实施例的安全检测装置的结构框图。
114.如图10a所示,根据该实施例的安全检测装置1000包括第一函数获取模块1010、目标参数信息获取模块1020、第二函数获取模块1030、页面元素信息获取模块1040、比较模块1050和判定模块1060。
115.第一函数获取模块1010用于获取待检测的应用程序中用于组装网络报文的第一函数。在一实施例中,第一函数获取模块1010可以用于执行前文描述的操作s210及其子操作,在此不再赘述。
116.目标参数信息获取模块1020用于通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息。在一实施例中,目标参数信息获取模块1020可以用于执行前文描述的操作s220及其子操作,在此不再赘述。
117.第二函数获取模块1030用于遍历所述第一函数的调用链,以获取位于用户界面层的第二函数。在一实施例中,第二函数获取模块1030可以用于执行前文描述的操作s230及其子操作,在此不再赘述。
118.页面元素信息获取模块1040用于通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息。在一实施例中,页面元素信息获取模块1040可以用于执行前文描述的操作s240及其子操作,在此不再赘述。
119.比较模块1050用于比较所述目标参数信息和所述页面元素信息。在一实施例中,比较模块1050可以用于执行前文描述的操作s250及其子操作,在此不再赘述。
120.判定模块1060用于响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。在一实施例中,判定模块1060可以用于执行前文描述的操作s260及其子操作,在此不再赘述。
121.图11示意性示出了根据本发明的一些示例性实施例的第一函数获取模块的结构框图。
122.如图11所示,在一些示例性的实施例中,第一函数获取模块1010可以包括开发框架确定子模块1011、第一函数名称确定子模块1012和第一函数获取子模块1013。
123.开发框架确定子模块1011用于响应于检索到与预设应用程序开发框架对应的特征,确定所述应用程序的开发框架。
124.第一函数名称确定子模块1012用于根据确定出的所述开发框架,确定所述开发框架下用于组装网络报文的第一函数的名称。
125.第一函数获取子模块1013用于根据所述开发框架下用于组装网络报文的第一函数的名称,获取用于组装网络报文的第一函数。
126.图12示意性示出了根据本发明的另一些示例性实施例的第一函数获取模块的结构框图。
127.如图12所示,第一函数获取模块1010可以包括数据跟踪子模块1014和第一函数确
定子模块1015。
128.数据跟踪子模块1014用于在内存中跟踪搜索用户前端输入的数据。
129.第一函数确定子模块1015用于响应于所述数据作为预设函数的参数进行组包,将该预设函数确定为用于组装网络报文的第一函数。
130.图13示意性示出了根据本发明的一些示例性实施例的目标参数信息获取模块的结构框图。
131.如图13所示,在一些示例性的实施例中,目标参数信息获取模块1020可以包括输入参数检查子模块1021和目标参数信息获取子模块1022。
132.输入参数检查子模块1021用于:当所述第一函数发生调用时,通过插桩代码对所述第一函数的每一个输入参数根据敏感信息规则进行检查。
133.目标参数信息获取子模块1022用于:响应于所述第一函数的至少一个输入参数涉及敏感信息,将涉及该敏感信息的至少一个输入参数的相关信息确定为所述目标参数信息。
134.根据该实施例的安全检测装置1000还可以包括调用链获取模块1070。
135.图14示意性示出了根据本发明的一些示例性实施例的调用链获取模块的结构框图。
136.如图14所示,在一些示例性的实施例中,调用链获取模块1070可以包括系统插桩子模块1071、调用日志形成子模块1072和调用链获取子模块1073。
137.系统插桩子模块1071用于通过对系统的类加载器进行插桩,对所述应用程序的所有运行函数进行插桩。
138.调用日志形成子模块1072用于获取和记录被插桩的所有运行函数的调用信息,以形成调用日志,其中,所述调用日志包括所有运行函数发生调用时的调用时间和调用来源。
139.调用链获取子模块1073用于根据所述调用日志,获取与所述第一函数相关的调用链。
140.图15示意性示出了根据本发明的一些示例性实施例的页面元素信息获取模块的结构框图。
141.如图15所示,在一些示例性的实施例中,页面元素信息获取模块1040可以包括活动名获取子模块1041、视窗对象获取子模块1042和页面元素信息获取子模块1043。
142.活动名获取子模块1041用于获取运行所述第二函数的前端页面和所述前端页面中的活动名。
143.视窗对象获取子模块1042用于通过插桩代码,获取与所述活动名对应的所有视窗对象。
144.页面元素信息获取子模块1043用于根据所述视窗对象,获取与该第二函数对应的应用程序前端页面上的页面元素信息。
145.在本发明实施例提供的安全检测装置中,所述目标参数信息包括敏感信息的类型。所述响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险,可以具体包括:响应于所述目标参数信息中涉及的敏感信息的类型未存在于所述页面元素信息中,判定所述应用程序存在异常收集敏感信息的安全风险。
146.图10b示意性示出了根据本发明实施例的安全检测装置的各个模块分布的泳道
图。
147.结合参照图10a、图10b和图14,参数发现系统可以包括第一函数获取模块1010和目标参数信息获取模块1020,参数处理系统可以包括调用链获取模块1070、第二函数获取模块1030和页面元素信息获取模块1040,检测系统可以包括比较模块1050和判定模块1060。
148.第一函数获取模块1010用于获取到待检测的应用程序中组装网络报文的函数,即第一函数。
149.目标参数信息获取模块1020从第一函数获取模块1010获取到网络请求函数名,在应用程序真实运行过程中,对该函数进行插桩,此处插桩的逻辑是:每当该函数发生一次调用时,即说明发起一次网络传输,插桩代码对函数的每一个输入参数根据敏感信息规则(例如个人手机号、身份证号、客户端浏览记录等特征规则)进行检查,发现命中相关敏感信息的参数,记录下该参数涉及的敏感信息类型(例如个人手机号、身份证号、客户端浏览记录等),并发送至比较模块1050。
150.调用链获取模块1070通过在待检测的应用程序启动时,通过对系统的类加载器进行插桩,从而对应用程序的所有运行函数插桩,实现对所有函数的追踪及调用信息记录,此处插装的逻辑是:获取各个函数调用关系,进行记录,即应用程序的每一个函数被调用,都在调用日志中记录该次调用的调用时间、调用来源等调用信息。
151.第二函数获取模块1030对第一函数产生调用时进行调用链分析,通过调用链分析递归溯源到ui层的函数(即第二函数)。
152.页面元素信息获取模块1040可以定位到请求来源的前端页面,例如,可以定位到应用程序的某一活动(即activity)中的某一按钮事件(即button事件),并且,可以定位到该前端页面中该活动的活动名(即activityname)。通过获取的前端页面和活动名,通过插桩,例如,可以通过插桩代码反射getallchildview等方法获取所有视窗对象(即view对象),进而获取该前端页面上的元素信息,包括edittext、textview等元素信息。
153.所述检测系统可以用于:当所述第一函数的输入参数涉及到敏感信息时,会将该输入参数涉及的敏感信息与前端页面中用户输入的页面元素进行比较,例如,如果该输入参数涉及的敏感信息与前端页面中用户输入的页面元素同步存在,则认为该敏感信息的收集是应用程序的功能需求,是经过用户同意的正常行为;如果该输入参数涉及的敏感信息与前端页面中用户输入的页面元素不是同步存在的,则认为可能存在应用程序异常收集或获取敏感信息的情况,可以记录下该输入参数及ui页面信息,报告相关问题。
154.在本发明的实施例提供的安全检测方法和安全检测装置中,通过插桩技术和调用链分析,在提高检测方法可操作性的情况下,能够有效降低误报率,从而实现了应用程序安全风险的有效检测。
155.需要说明的是,本发明的实施例提供的安全检测方法和安全检测装置还具有如下效果和优点中的至少一个:(1)本发明的实施例提供的安全检测方法和安全检测装置基于黑盒动态分析,不需要获取源代码,可操作性更高:目前对于异常行为的检测并非强制,在第三方合作中,合作方不一定能够配合提供相关app源代码,一般仅能提供编译完成、进行加固后的app安装包,因此本发明的实施例提供的安全检测方法和安全检测装置比白盒代码审计具有更强的
可操作性。
156.(2)本发明的实施例提供的安全检测方法和安全检测装置能够有效针对目前黑产的沙盒对抗,本发明的实施例提供的安全检测方法和安全检测装置的运行基于真机环境,检测可与app功能测试同步进行,由真人进行点击触发。并且,由于在底层插桩,绕过了app所有的应用层和网络层加密,能够有效检测app异常上传用户个人信息的行为。
157.(3)本发明的实施例提供的安全检测方法和安全检测装置能够有效降低传统检测的误报率。对于发现的敏感信息传输,追踪到前端发送请求的页面,根据相关规则判断前端是否明确存在业务需求,与白盒代码审计针对客户端申请权限进行判断相比,减少了误报情况。
158.图16示意性示出了根据本发明实施例的适于实现安全检测方法的电子设备的方框图。
159.如图16所示,根据本发明实施例的电子设备1600包括处理器1601,其可以根据存储在只读存储器(rom)1602中的程序或者从存储部分1608加载到随机访问存储器(ram)1603中的程序而执行各种适当的动作和处理。处理器1601例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic))等等。处理器1601还可以包括用于缓存用途的板载存储器。处理器1601可以包括用于执行根据本发明实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
160.在ram 1603中,存储有电子设备1600操作所需的各种程序和数据。处理器 1601、rom 1602以及ram 1603通过总线1604彼此相连。处理器1601通过执行rom 1602和/或ram 1603中的程序来执行根据本发明实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom 1602和ram 1603以外的一个或多个存储器中。处理器1601也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本发明实施例的方法流程的各种操作。
161.根据本发明的实施例,电子设备1600还可以包括输入/输出(i/o)接口1605,输入/输出(i/o)接口1605也连接至总线1604。电子设备1600还可以包括连接至i/o接口1605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1607;包括硬盘等的存储部分1608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至i/o接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入存储部分1608。
162.本发明还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本发明实施例的方法。
163.根据本发明的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或
者与其结合使用。例如,根据本发明的实施例,计算机可读存储介质可以包括上文描述的rom 1602和/或ram 1603和/或rom 1602和ram 1603以外的一个或多个存储器。
164.本发明的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本发明实施例所提供的方法。
165.在该计算机程序被处理器1601执行时执行本发明实施例的系统/装置中限定的上述功能。根据本发明的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
166.在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1609被下载和安装,和/或从可拆卸介质1611被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
167.在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被处理器1601执行时,执行本发明实施例的系统中限定的上述功能。根据本发明的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
168.根据本发明的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如java,c++,python,“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
169.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
170.以上对本发明的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本发明的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。不脱离本发明的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本发明的范围之内。
技术特征:
1.一种用于应用程序的安全检测方法,其特征在于,所述方法包括:获取待检测的应用程序中用于组装网络报文的第一函数;通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息;遍历所述第一函数的调用链,以获取位于用户界面层的第二函数;通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较所述目标参数信息和所述页面元素信息;以及响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。2.根据权利要求1所述的方法,其特征在于,所述获取待检测的应用程序中用于组装网络报文的第一函数包括:响应于检索到与预设应用程序开发框架对应的特征,确定所述应用程序的开发框架;根据确定出的所述开发框架,确定所述开发框架下用于组装网络报文的第一函数的名称;以及根据所述开发框架下用于组装网络报文的第一函数的名称,获取用于组装网络报文的第一函数。3.根据权利要求1所述的方法,其特征在于,所述获取待检测的应用程序中用于组装网络报文的第一函数包括:在内存中跟踪搜索用户前端输入的数据;以及响应于所述数据作为预设函数的参数进行组包,将该预设函数确定为用于组装网络报文的第一函数。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息,具体包括:当所述第一函数发生调用时,通过插桩代码对所述第一函数的每一个输入参数根据敏感信息规则进行检查;以及响应于所述第一函数的至少一个输入参数涉及敏感信息,将涉及该敏感信息的至少一个输入参数的相关信息确定为所述目标参数信息。5.根据权利要求4所述的方法,其特征在于,在所述遍历所述第一函数的调用链之前,所述方法还包括:通过对系统的类加载器进行插桩,对所述应用程序的所有运行函数进行插桩;获取和记录被插桩的所有运行函数的调用信息,以形成调用日志,其中,所述调用日志包括所有运行函数发生调用时的调用时间和调用来源;以及根据所述调用日志,获取与所述第一函数相关的调用链。6.根据权利要求1-3和5中任一项所述的方法,其特征在于,所述通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息,具体包括:获取运行所述第二函数的前端页面和所述前端页面中的活动名;通过插桩代码,获取与所述活动名对应的所有视窗对象;以及根据所述视窗对象,获取与该第二函数对应的应用程序前端页面上的页面元素信息。
7.根据权利要求4所述的方法,其特征在于,所述目标参数信息包括敏感信息的类型;所述响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险,具体包括:响应于所述目标参数信息中涉及的敏感信息的类型未存在于所述页面元素信息中,判定所述应用程序存在异常收集敏感信息的安全风险。8.一种用于应用程序的安全检测装置,其特征在于,所述装置包括:第一函数获取模块,用于获取待检测的应用程序中用于组装网络报文的第一函数;目标参数信息获取模块,用于通过对所述第一函数进行插桩,获取所述第一函数发生调用时该第一函数获取的目标参数信息;第二函数获取模块,用于遍历所述第一函数的调用链,以获取位于用户界面层的第二函数;页面元素信息获取模块,用于通过对所述第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较模块,用于比较所述目标参数信息和所述页面元素信息;以及判定模块,用于响应于所述目标参数信息未与所述页面元素信息对应,判定所述应用程序存在安全风险。9.一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~7中任一项所述的方法。10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~7中任一项所述的方法。11.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~7中任一项所述的方法。
技术总结
提供了一种用于应用程序的安全检测方法、装置、电子设备和介质,可以应用于信息安全和软件测试技术领域。所述方法包括:获取待检测的应用程序中用于组装网络报文的第一函数;通过对第一函数进行插桩,获取第一函数发生调用时该第一函数获取的目标参数信息;遍历第一函数的调用链,以获取位于用户界面层的第二函数;通过对第二函数进行插桩,获取与该第二函数对应的应用程序前端页面上的页面元素信息;比较目标参数信息和页面元素信息;以及响应于目标参数信息未与页面元素信息对应,判定应用程序存在安全风险。通过插桩技术和调用链分析,在提高检测方法可操作性的情况下,能够有效降低误报率,从而实现了应用程序安全风险的有效检测。有效检测。有效检测。
技术研发人员:牟天宇 程佩哲 谭桂涛 李沅坷
受保护的技术使用者:中国工商银行股份有限公司
技术研发日:2023.06.15
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种便携移动式水泵装置的制作方法 下一篇:一种三电平变换器及其控制方法与流程