安全测试方法、装置、计算机设备和存储介质转让专利

申请号 : CN202111295280.X

文献号 : CN114039760B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 牟天宇范鑫禹金驰吕博良

申请人 : 中国工商银行股份有限公司

摘要 :

本申请涉及一种安全测试方法、装置、计算机设备和存储介质。该方法涉及信息安全技术领域,该方法包括:根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;在该模拟网络报文传输至该虚拟服务器程序的过程中,拦截该模拟网络报文;对该模拟网络报文进行处理,并基于处理后的模拟网络报文进行安全测试。即本申请实施例中,可以在用户终端本地建立模拟网络环境,能够避免应用程序直接与服务器进行交互使得中间人测试模块无法获取到输入参数导致无法进行安全测试的问题,通过该模拟网络环境生成模拟网络报文,并通过对该模拟网络报文的处理实现对待测试应用程序的安全测试,提高安全测试效率。

权利要求 :

1.一种安全测试方法,其特征在于,应用于用户终端,所述方法包括:根据待测试应用程序的输入参数,生成模拟网络报文,并将所述模拟网络报文传输至用户终端内的虚拟服务器程序;

在所述模拟网络报文传输至所述虚拟服务器程序的过程中,拦截所述模拟网络报文;

对所述模拟网络报文进行处理,并基于处理后的模拟网络报文对所述待测试应用程序进行安全测试;

其中,所述对所述模拟网络报文进行处理,并基于处理后的模拟网络报文对所述待测试应用程序进行安全测试,包括:对所述模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至所述虚拟服务器程序;

接收所述虚拟服务器程序返回的所述修改后的模拟网络报文,并对所述修改后的模拟网络报文进行解析,得到修改后的输入参数;

根据所述修改后的输入参数,生成测试网络报文,并基于所述测试网络报文对所述待测试应用程序进行安全测试。

2.根据权利要求1所述的方法,所述基于所述测试网络报文对所述待测试应用程序进行安全测试,包括:将所述测试网络报文发送至与所述待测试应用程序对应的目标服务器;

接收所述目标服务器响应于所述测试网络报文的测试结果,并根据所述测试结果对所述待测试应用程序进行安全测试。

3.根据权利要求2所述的方法,其特征在于,所述根据所述测试结果对所述待测试应用程序进行安全测试,包括:若所述测试结果为测试失败,则确定所述待测试应用程序安全;

若所述测试结果为测试成功,则确定所述待测试应用程序存在安全漏洞。

4.根据权利要求1所述的方法,其特征在于,所述根据待测试应用程序的输入参数,生成模拟网络报文,包括:跟踪所述待测试应用程序的输入参数;

根据所述输入参数生成所述模拟网络报文。

5.根据权利要求4所述的方法,其特征在于,所述跟踪所述待测试应用程序的输入参数,包括:跟踪所述待测试应用程序的参数调用链,并根据所述参数调用链获取与所述输入参数对应的目标函数的函数名;其中,所述目标函数用于将所述输入参数组装成目标网络报文,并发送至与所述应用程序对应的目标服务器;

根据所述目标函数的函数名获取所述待测试应用程序的输入参数。

6.根据权利要求5所述的方法,其特征在于,所述根据所述目标函数的函数名获取所述待测试应用程序的输入参数,包括:采用HOOK钩子函数对所述目标函数的函数名进行处理,得到所述输入参数。

7.根据权利要求4所述的方法,其特征在于,所述根据所述输入参数生成所述模拟网络报文,包括:对所述输入参数进行序列化处理,得到所述模拟网络报文。

8.一种安全测试装置,其特征在于,应用于用户终端,所述装置包括:生成模块,用于根据待测试应用程序的输入参数,生成模拟网络报文,并将所述模拟网络报文传输至用户终端内的虚拟服务器程序;

拦截模块,用于在所述模拟网络报文传输至所述虚拟服务器程序的过程中,拦截所述模拟网络报文;

测试模块,用于对所述模拟网络报文进行处理,并基于处理后的模拟网络报文对所述待测试应用程序进行安全测试;

其中,所述测试模块包括修改单元、解析单元和测试单元;

所述修改单元,用于对所述模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至所述虚拟服务器程序;

所述解析单元,用于接收所述虚拟服务器程序返回的所述修改后的模拟网络报文,并对所述修改后的模拟网络报文进行解析,得到修改后的输入参数;

所述测试单元,用于根据所述修改后的输入参数,生成测试网络报文,并基于所述测试网络报文对所述待测试应用程序进行安全测试。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。

说明书 :

安全测试方法、装置、计算机设备和存储介质

技术领域

[0001] 本申请涉及信息安全技术领域,特别是涉及一种安全测试方法、装置、计算机设备和存储介质。

背景技术

[0002] 随着智能终端的普及,应用市场涌现出大量的手机软件(application,简称APP)供用户终端下载使用。为了确保用户终端所安装的APP的安全性,在发行APP之前,需要对APP进行安全检测,以识别漏洞。
[0003] 传统技术中,通常通过中间人代理的方式进行安全检测,中间代理人的方式是指通过中间代理人检测工具劫持用户终端的APP流量,并对劫持的APP流量进行分析实现安全检测。
[0004] 然而,随着用户终端的安全对抗能力的不断提升,越来越多的APP采用了针对中间代理人检测工具的安全手段(例如:用户终端通常会直接采用报文加密、安全隧道等方式与服务器进行通信,而不通过中间代理转发流量),导致中间代理人检测工具无法顺利获取用户终端未加密的APP流量,从而无法对用户终端所安装的APP进行安全检测,造成安全检测的效率低。

发明内容

[0005] 基于此,有必要针对上述技术问题,提供一种能够针对中间代理人检测工具进行安全防护的客户端APP进行安全测试,以提高安全检测效率的安全测试方法、装置、计算机设备和存储介质。
[0006] 第一方面,提供了一种安全测试方法,该方法包括:
[0007] 根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;
[0008] 在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文;
[0009] 对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试。
[0010] 在其中一个实施例中,对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试,包括:
[0011] 对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序;
[0012] 接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数;
[0013] 根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试。
[0014] 在其中一个实施例中,基于该测试网络报文对该待测试应用程序进行安全测试,包括:
[0015] 将测试网络报文发送至与待测试应用程序对应的目标服务器;
[0016] 接收目标服务器响应于该测试网络报文的测试结果,并根据该测试结果对待测试应用程序进行安全测试。
[0017] 在其中一个实施例中,根据该测试结果对待测试应用程序进行安全测试,包括:
[0018] 在该测试结果为测试失败的情况下,确定待测试应用程序安全;
[0019] 在该测试结果为测试成功的情况下,确定待测试应用程序存在安全漏洞。
[0020] 在其中一个实施例中,根据待测试应用程序的输入参数,生成模拟网络报文,包括:
[0021] 跟踪待测试应用程序的输入参数;
[0022] 根据输入参数生成模拟网络报文。
[0023] 在其中一个实施例中,跟踪待测试应用程序的输入参数,包括:
[0024] 跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名;其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与待测试应用程序对应的目标服务器;
[0025] 根据目标函数的函数名获取待测试应用程序的输入参数。
[0026] 在其中一个实施例中,根据目标函数的函数名获取待测试应用程序的输入参数,包括:
[0027] 采用HOOK钩子函数对目标函数的函数名进行处理,得到输入参数。
[0028] 在其中一个实施例中,根据输入参数生成模拟网络报文,包括:
[0029] 对输入参数进行序列化处理,得到模拟网络报文。
[0030] 第二方面,提供了一种安全测试装置,该装置包括:
[0031] 生成模块,用于根据待测试应用程序的输入参数,生成模拟网络报文,并将模拟网络报文传输至用户终端内的虚拟服务器程序;
[0032] 拦截模块,用于在模拟网络报文传输至虚拟服务器程序的过程中,拦截模拟网络报文;
[0033] 测试模块,用于对该模拟网络报文进行处理,并基于处理后的模拟网络报文对待测试应用程序进行安全测试。
[0034] 第三方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0035] 根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;
[0036] 在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文;
[0037] 对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试。
[0038] 第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0039] 根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;
[0040] 在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文;
[0041] 对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试。
[0042] 上述安全测试方法、装置、计算机设备和存储介质,根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文,接着,对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试;即本申请中,针对那些采用安全对抗手段导致中间人测试模块无法获取业务参数的应用程序,可以通过在测试该应用程序的用户终端本地建立模拟网络交互环境,并根据待测试应用程序的输入参数生成模拟网络报文,以便在该模拟网络交互环境下,用户终端能够拦截到该模拟网络报文,避免应用程序直接与服务器进行交互使得用户终端无法获取到输入参数导致无法进行安全测试的问题;接着,用户终端对拦截到的模拟网络报文进行处理,以实现安全测试,即通过现有的中间人工具进行安全测试的过程进行安全测试,以为测试者提供与传统业务逻辑安全测试相同的测试过程和测试体验,无需测试者精通各类框架和语言,直接通过现有的中间人工具即可实现对应用程序进行安全测试,大大降低测试者进行安全测试的难度和复杂度,进而还能够提高安全测试效率。

附图说明

[0043] 图1为一个实施例中安全测试方法的应用环境图;
[0044] 图2为一个实施例中安全测试方法的流程示意图;
[0045] 图3为另一个实施例中安全测试方法的流程示意图;
[0046] 图4为另一个实施例中安全测试方法的流程示意图;
[0047] 图5为另一个实施例中安全测试方法的流程示意图;
[0048] 图6为另一个实施例中安全测试方法的流程示意图;
[0049] 图7为一个实施例中安全测试装置的结构框图;
[0050] 图8为一个实施例中计算机设备的内部结构图。

具体实施方式

[0051] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0052] 本申请提供的安全测试方法,可以应用于如图1所示的应用环境中。其中,用户终端10通过网络与服务器20进行通信。其中,用户终端10可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备;该用户终端10中安装有多个待测试应用程序101,在该用户终端10中还设置有虚拟服务器程序,该虚拟服务器程序用于在用户终端10中构建一个模拟网络环境;服务器20可以用独立的服务器或者是多个服务器组成的服务器集群来实现,该服务器可以为该用户终端中安装的应用程序对应的服务器,不同的应用程序对应的服务器可以不同。
[0053] 需要说明的是,本申请中的安全测试方法可以应用于应用程序在发行之前的安全测试阶段,该用户终端可以为测试终端,该测试终端中可以安装有安全测试系统,用于对待发行的应用程序进行安全测试;该安全测试方法也可以应用于应用程序在发行后的实际使用阶段,该用户终端可以为上述终端,该用户终端中可以安装该安全测试系统,用于在应用程序使用过程中对该应用程序进行实时安全测试;本申请实施例对该安全测试方法的应用场景并不做限定。
[0054] 在一个实施例中,如图2所示,提供了一种安全测试方法,以该方法应用于图1中的用户终端为例进行说明,包括以下步骤:
[0055] 步骤201,用户终端根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序。
[0056] 其中,该输入参数可以为应用程序中的业务所涉及到的业务逻辑参数,比如:登录业务中的登录名和登录密码、交易业务中的交易金额、查询业务中的查询内容等业务逻辑参数。
[0057] 用户访问应用程序时,应用程序在获取到某个业务的输入参数时,会将该输入参数组装成网络报文的形式,与该应用程序对应的服务器进行数据交互,以满足用户的不同业务需求。
[0058] 为了确保应用程序的安全性,往往需要对该应用程序进行安全测试,现有技术中通过中间人代理的方式获取应用程序的应用层流量,并对业务逻辑进行分析,修改报文中的业务参数来测试应用程序是否存在安全漏洞;但由于应用程序的安全对抗等级的不断提升,越来越多的应用程序采用针对中间人工具的安全手段,以使中间人工具无法获取到应用程序的业务参数,导致安全测试的效率较低。
[0059] 因此,本申请中通过在用户终端中布设虚拟服务器程序,并建立模拟网络交互过程,以此来获取应用程序中各个业务的输入参数,进而实现对该应用程序的安全测试。
[0060] 可选地,在获取到待测试应用程序的输入参数的情况下,根据该输入参数生成模拟网络报文,并将该模拟网络报文传输至该虚拟服务器程序中。
[0061] 可选地,在待测试应用程序存在相关业务的输入参数的情况下,可以获取该输入参数,并根据该输入参数生成模拟网络报文,接着,可以将该模拟网络报文传输至虚拟服务器程序中;其中,该待测试应用程序可以采用监听的方式获取该应用程序的输入参数,本申请实施例对监听的具体方式并不做限定。另外,用户终端根据输入参数生成模拟网络报文的过程可以采用现有的网络报文生成方式,在此不再赘述。
[0062] 步骤202,在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文。
[0063] 步骤203,对该模拟网络报文进行处理,并基于处理后的模拟网络报文对待测试应用程序进行安全测试。
[0064] 可选地,在用户终端获取到该模拟网络报文之后,可以对该模拟网络报文进行处理,例如:增、删、改、除该模拟网络报文中的相关参数等;并基于处理后的模拟网络报文对该应用程序进行安全测试,可选地,该用户终端可以将处理后的模拟网络报文发送至服务器中,并根据该服务器的响应结果来确定该应用程序是否存在安全漏洞;或者,该用户终端也可以将该处理后的模拟网络报文传输至该应用程序,以通过该应用程序与服务器之间的交互来确定该应用程序是否存在安全漏洞;本申请实施例对基于处理后的模拟网络报文进行安全测试的方式并不做限定。
[0065] 上述安全测试方法中,根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文,接着,对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试;即本申请中,针对那些采用安全对抗手段导致中间人测试模块无法获取业务参数的应用程序,可以通过在测试该应用程序的用户终端本地建立模拟网络交互环境,并根据待测试应用程序的输入参数生成模拟网络报文,以便在该模拟网络交互环境下,用户终端能够拦截到该模拟网络报文,避免应用程序直接与服务器进行交互使得用户终端无法获取到输入参数导致无法进行安全测试的问题;接着,用户终端对拦截到的模拟网络报文进行处理,以实现安全测试,即通过现有的中间人工具进行安全测试的过程进行安全测试,以为测试者提供与传统业务逻辑安全测试相同的测试过程和测试体验,无需测试者精通各类框架和语言,直接通过现有的中间人工具即可实现对应用程序进行安全测试,大大降低测试者进行安全测试的难度和复杂度,进而还能够提高安全测试效率。
[0066] 图3为另一个实施例中安全测试方法的流程示意图。本实施例涉及的是用户终端对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试的一种可选的实现过程;在上述实施例的基础上,上述步骤203包括:
[0067] 步骤301,对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序。
[0068] 可选地,用户终端对该模拟网络报文进行处理时,可以对该模拟网络报文中的输入参数进行修改,可以根据该输入参数的类型,采用预设的参数修改方式,对该输入参数进行修改;例如:可以将该输入参数修改为该应用程序中预先设置的该输入参数的允许范围之外,如:输入参数为交易金额时,可以将该交易金额修改为预设的交易限制金额范围之外;或者,在该输入参数为登录名和登录密码时,可以将该登录名或者登录密码修改为除该输入的登录名和输入的登录密码之外的任一数据;还可以是其他的参数修改方式等,本申请实施例对此并不做限定。
[0069] 用户终端在拦截到该模拟网络报文后,可以对该模拟网络报文进行解析,得到该模拟网络报文中的输入参数,并对该输入参数进行修改;在用户终端对模拟网络报文中的各个输入参数修改完成之后,可以根据修改后的输入参数生成新的模拟网络报文,即修改后的模拟网络报文,并将该修改后的模拟网络报文传输至该虚拟服务器程序。
[0070] 步骤302,接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数。
[0071] 可选地,用户终端在将修改后的模拟网络报文发送至虚拟服务器程序后,该虚拟服务器程序可以将该修改后的模拟网络报文作为响应,直接返回至用户终端;可选地,虚拟服务器程序可以将该修改后的模拟网络报文作为响应返回至用户终端内的中间人测试程序,该虚拟服务器程序可以是一个基于python实现的本地的httpserver,该虚拟服务器程序将获取到的修改后的模拟网络报文的request body作为response body直接返回给中间人测试程序。
[0072] 进一步地,用户终端可以对虚拟服务器程序返回的修改后的模拟网络报文进行解析,以得到修改后的输入参数。
[0073] 步骤303,根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试。
[0074] 可选地,用户终端可以调用该待测试应用程序生成网络报文的生成函数,将修改后的输入参数输入到该生成函数中,得到与该修改后的输入参数对应的测试网络报文,接着,可以基于该测试网络报文进行安全测试;可选地,可以对与该应用程序对应的服务器进行备份,得到备份服务器,该备份服务器用于对该应用程序进行安全测试;用户终端可以将该测试网络报文发送至该备份服务器,并根据该备份服务器返回的响应结果对该待测试应用程序进行安全测试。采用备份服务器对待测试应用程序进行安全测试,能够避免对该待测试应用程序的目标服务器的正常工作造成影响,还可以降低该目标服务器的数据处理压力。
[0075] 本实施例中,用户终端通过对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序;以及接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数;进而根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试;能够提高用户设备基于处理后的模拟网络报文对待测试应用程序进行安全测试的可实施性。
[0076] 图4为另一个实施例中安全测试方法的流程示意图。本实施例涉及的是用户终端基于上述测试网络报文对该待测试应用程序进行安全测试的一种可选的实现过程;在上述实施例的基础上,上述步骤303包括:
[0077] 步骤401,将测试网络报文发送至与待测试应用程序对应的目标服务器。
[0078] 步骤402,接收目标服务器响应于该测试网络报文的测试结果,并根据该测试结果对待测试应用程序进行安全测试。
[0079] 可选地,本申请实施例中,通过用户终端和与该待测试应用程序对应的目标服务器之间的数据交互,来判断该待测试应用程序的安全性;即用户终端将根据修改后的输入参数生成的测试网络报文发送至该目标服务器,并接收来自该目标服务器响应于该测试网络报文的测试结果,该测试结果可以表征该待测试应用程序是否存在安全漏洞;可选地,在该测试结果为测试失败的情况下,也就是说,该目标服务器能够准确判断出修改后的输入参数不满足预设的业务要求,此情况下,可以确定该待测试应用程序是安全的;在该测试结果为测试成功的情况下,也就是说,该目标服务器无法正确判断输入参数的准确性,此情况下,可以确定该待测试应用程序存在安全漏洞,即该待测试应用程序中,与该输入参数对应的目标业务存在安全漏洞。
[0080] 本实施例中,用户终端将测试网络报文发送至与待测试应用程序对应的目标服务器,并接收目标服务器响应于该测试网络报文的测试结果,根据该测试结果对待测试应用程序进行安全测试;也就是说,本实施例中,基于待测试应用程序本身的网络交互环境,根据测试网络报文进行安全测试,能够进一步提高安全测试的效率。
[0081] 图5为另一个实施例中安全测试方法的流程示意图。本实施例涉及的是用户终端根据待测试应用程序的输入参数,生成模拟网络报文的一种可选的实现过程;在上述实施例的基础上,上述步骤201包括:
[0082] 步骤501,跟踪待测试应用程序的输入参数。
[0083] 可选地,用户终端可以跟踪该待测试应用程序中各个业务的输入参数,换句话说,该用户终端可以实时监听该待测试应用程序中各个业务的实时状态,在监听到待测试应用程序存在输入参数时,获取该输入参数。
[0084] 步骤502,根据该输入参数生成模拟网络报文。
[0085] 可选地,用户终端可以调用上述待测试应用程序中用于生成网络报文的生成函数,将该输入参数输入到该生成函数中,生成模拟网络报文;用户终端也可以对该输入参数进行序列化处理,得到该模拟网络报文;可选地,该序列化处理可以是将该输入参数组装成json格式的报文,生成该模拟网络报文,该组装过程可以采用python程序来实现;当然,用户终端还可以采用其他现有的报文生成方式,或者自定义的报文生成方式来根据输入参数生成模拟网络报文;本申请实施例对此并不做限定。
[0086] 本实施例中,用户终端通过跟踪待测试应用程序的输入参数,并在该待测试应用程序存在输入参数的情况下,根据该输入参数生成模拟网络报文;也就是说,本申请实施例中,用户终端通过主动跟踪的方式,能够全面获取该待测试应用程序的所有输入参数,避免对应用程序的某些输入参数的遗漏,进而导致对该待测试应用程序的安全测试不全面的问题,能够提高对待测试应用程序的测试准确性和测试全面性,进而能够提高该待测试应用程序在实际使用过程中的安全性,减少该待测试应用程序的安全漏洞。
[0087] 图6为另一个实施例中安全测试方法的流程示意图。本实施例涉及的是用户终端跟踪待测试应用程序的输入参数的一种可选的实现过程;在上述实施例的基础上,上述步骤501包括:
[0088] 步骤601,跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名。
[0089] 其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与该待测试应用程序对应的目标服务器。
[0090] 可选地,用户终端可以通过动态调试的方式,追踪从用户终端的待测试应用程序中输入的业务逻辑参数(输入参数),形成针对该输入参数的调用链,并分析出该待测试应用程序中用于组装输入参数以形成网络报文的函数调用关系,确定出生成网络报文的目标函数,进而确定出该目标函数对应的函数名。
[0091] 步骤602,根据目标函数的函数名获取应用程序的输入参数。
[0092] 可选地,用户终端可以采用HOOK钩子函数对目标函数的函数名进行处理,得到该待测试应用程序的输入参数;用户终端可以采用现有技术中的其他方式根据函数名确定出输入到该函数名对应的目标函数的输入参数,在此不在赘述。
[0093] 本实施例中,用户终端通过跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名,接着,根据该目标函数的函数名获取应用程序的输入参数;其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与待测试应用程序对应的目标服务器;能够进一步提高输入参数获取的可实施性和可靠性。
[0094] 在本申请的一个可选的实施例中,上述用户终端中还可以安装有安全测试系统,该安全测试系统中可以包括参数发现模块、参数获取模块、参数转发模块、参数发送模块、中间人测试工具模块以及中转服务器模块,其中,中转服务器模块可以为上述虚拟服务器程序,这些模块可以基于python实现,也可以基于java、c、c#、c++等语言实现,本申请实施例对此并不做限定。
[0095] 可选地,上述安全测试方法可以为:参数发现模块可以通过动态调试的方式,追踪从待测试应用程序输入的业务逻辑参数,形成针对该输入参数的调用链,并可以分析出该待测试应用程序中组装网络报文参数的函数调用,确定出函数名,接着,该参数发现模块可以将该函数名发送给参数获取模块;参数获取模块可以根据参数发现模块传递过来的目标函数的函数名,采用HOOK钩子函数获取到该函数名对应的目标函数的输入参数,并将该输入参数传递给参数转发模块;参数转发模块可以利用JavaScript的RPC机制,将获取的输入参数传递给参数发送模块;参数发送模块可以将参数转发模块发送的该待测试应用程序的输入参数组装成json格式的模拟网络报文,并将该模拟网络报文发送至中转服务器模块;中间人测试工具模块截取参数发送模块发送至中转服务器模块的模拟网络报文,并对该模拟网络报文中的输入参数进行修改,得到修改后的模拟网络报文,接着,将该修改后的模拟网络报文传输至中转服务器模块;中转服务器模块在接收到中间人测试工具模块发送的修改后的模拟网络报文之后,将该修改后的模拟网络报文返回至参数发送模块;参数发送模块接收中转服务器模块返回的修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数,接着,将该修改后的输入参数发送至参数转发模块;参数转发模块将接收到的修改后的输入参数传输至参数获取模块,以便该参数获取模块可以将该修改后的输入参数传输至待测试应用程序;待测试应用程序根据修改后的输入参数,生成测试网络报文,并将该测试网络报文发送至与该待测试应用程序对应的目标服务器;待测试应用程序接收该目标服务器响应于该测试网络报文的测试结果,在该测试结果为测试失败的情况下,确定该待测试应用程序安全,在该测试结果为测试成功的情况下,确定该待测试应用程序存在安全漏洞。
[0096] 本实施例中,通过不同的模块之间的交互实现对待测试应用程序的安全测试,能够降低安全测试系统开发的复杂度和安全测试系统中不同模块程序之间的耦合性,降低不同模块之间的依赖性,进而提高该用户终端内安装的安全测试系统的综合性能和不同模块之间的交互性能。
[0097] 应该理解的是,虽然图2‑6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2‑6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0098] 在一个实施例中,如图7所示,提供了一种安全测试装置,包括:生成模块701、拦截模块702和测试模块703,其中:
[0099] 生成模块701,用于根据待测试应用程序的输入参数,生成模拟网络报文,并将模拟网络报文传输至用户终端内的虚拟服务器程序。
[0100] 拦截模块702,用于在模拟网络报文传输至虚拟服务器程序的过程中,拦截模拟网络报文。
[0101] 测试模块703,用于对该模拟网络报文进行处理,并基于处理后的模拟网络报文对待测试应用程序进行安全测试。
[0102] 在其中一个实施例中,上述测试模块703可以包括修改单元、解析单元和测试单元;其中,修改单元,用于对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序;解析单元,用于接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数;测试单元,用于根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试。
[0103] 在其中一个实施例中,上述测试单元,具体用于将测试网络报文发送至与待测试应用程序对应的目标服务器;接收目标服务器响应于该测试网络报文的测试结果,并根据该测试结果对待测试应用程序进行安全测试。
[0104] 在其中一个实施例中,上述测试单元,具体用于在该测试结果为测试失败的情况下,确定待测试应用程序安全;在该测试结果为测试成功的情况下,确定待测试应用程序存在安全漏洞。
[0105] 在其中一个实施例中,上述生成模块701包括跟踪单元和生成单元;其中,跟踪单元,用于跟踪待测试应用程序的输入参数;生成单元,用于根据输入参数生成模拟网络报文。
[0106] 在其中一个实施例中,上述跟踪单元,具体用于跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名;其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与待测试应用程序对应的目标服务器;根据目标函数的函数名获取待测试应用程序的输入参数。
[0107] 在其中一个实施例中,上述跟踪单元,具体用于采用HOOK钩子函数对目标函数的函数名进行处理,得到输入参数。
[0108] 在其中一个实施例中,上述生成单元,具体用于对输入参数进行序列化处理,得到模拟网络报文。
[0109] 关于安全测试装置的具体限定可以参见上文中对于安全测试方法的限定,在此不再赘述。上述安全测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0110] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是用户终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种安全测试方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0111] 本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0112] 在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
[0113] 根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;
[0114] 在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文;
[0115] 对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试。
[0116] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序;接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数;根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试。
[0117] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:将测试网络报文发送至与待测试应用程序对应的目标服务器;接收目标服务器响应于该测试网络报文的测试结果,并根据该测试结果对待测试应用程序进行安全测试。
[0118] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:在该测试结果为测试失败的情况下,确定待测试应用程序安全;在该测试结果为测试成功的情况下,确定待测试应用程序存在安全漏洞。
[0119] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:跟踪待测试应用程序的输入参数;根据输入参数生成模拟网络报文。
[0120] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名;其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与待测试应用程序对应的目标服务器;根据目标函数的函数名获取待测试应用程序的输入参数。
[0121] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:采用HOOK钩子函数对目标函数的函数名进行处理,得到输入参数。
[0122] 在一个实施例中,处理器执行计算机程序时还实现以下步骤:对输入参数进行序列化处理,得到模拟网络报文。
[0123] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0124] 根据待测试应用程序的输入参数,生成模拟网络报文,并将该模拟网络报文传输至用户终端内的虚拟服务器程序;
[0125] 在模拟网络报文传输至虚拟服务器程序的过程中,拦截该模拟网络报文;
[0126] 对该模拟网络报文进行处理,并基于处理后的模拟网络报文对该待测试应用程序进行安全测试。
[0127] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对该模拟网络报文中的输入参数进行修改,并将修改后的模拟网络报文传输至该虚拟服务器程序;接收虚拟服务器程序返回的该修改后的模拟网络报文,并对修改后的模拟网络报文进行解析,得到修改后的输入参数;根据修改后的输入参数,生成测试网络报文,并基于该测试网络报文对该待测试应用程序进行安全测试。
[0128] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将测试网络报文发送至与待测试应用程序对应的目标服务器;接收目标服务器响应于该测试网络报文的测试结果,并根据该测试结果对待测试应用程序进行安全测试。
[0129] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在该测试结果为测试失败的情况下,确定待测试应用程序安全;在该测试结果为测试成功的情况下,确定待测试应用程序存在安全漏洞。
[0130] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:跟踪待测试应用程序的输入参数;根据输入参数生成模拟网络报文。
[0131] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:跟踪待测试应用程序的参数调用链,并根据参数调用链获取与输入参数对应的目标函数的函数名;其中,该目标函数用于将输入参数组装成目标网络报文,并发送至与待测试应用程序对应的目标服务器;根据目标函数的函数名获取待测试应用程序的输入参数。
[0132] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:采用HOOK钩子函数对目标函数的函数名进行处理,得到输入参数。
[0133] 在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对输入参数进行序列化处理,得到模拟网络报文。
[0134] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
[0135] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0136] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。