应用软件rasp程序更新方法、服务器、电子设备及存储介质
技术领域
1.本发明涉及应用安全技术领域,尤其涉及一种应用软件rasp程序的更新方法、服务器、电子设备及存储介质。
背景技术:2.当前,大部分集成现有rasp(runtime application self-protection)的应用软件,在需要进行rasp升级或bug修复更新时,需要重启应用软件(application,有时中文也称应用程序);以应用openrasp插件的产品为例,当需要对其进行升级时,需要在下次重启应用软件时对rasp程序引擎进行手动升级,导致应用软件可能出现短暂的业务停止。
技术实现要素:3.有鉴于此,本发明实施例提供一种应用软件内部rasp程序的更新方法、客户端、电子设备及存储介质,无需重启应用软件即可完成内部rasp程序的升级、修复等业务更新,从而可避免出现rasp程序更新导致的应用软件业务停止的问题。
4.为达到上述发明目的,采用如下技术方案:
5.第一方面,本发明实施例提供一种应用软件rasp程序的更新方法,所述方法包括步骤:接收服务器管控端下发的rasp程序更新指令;所述更新指令中携带有服务器管控端上维护的最新版本rasp程序引擎属性信息及获取地址;根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行的rasp程序;若是,则从所述获取地址获取最新版本rasp程序引擎包;移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源;将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中。
6.结合第一方面,在第一方面的第一种实施方式中,所述引擎属性信息包含:引擎版本号;所述根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行rasp程序,包括:将所述最新版本rasp程序引擎版本号与当前运行的rasp程序引擎版本号进行比对;若最新版本rasp程序引擎版本号大于当前运行的rasp程序引擎版本号,则确定更新当前运行的rasp程序。
7.结合第一方面或第一方面的第一种实施方式,在第一方面的第二种实施方式中,所述引擎属性信息包含:引擎版本号及引擎包信息摘要值;
8.所述根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行rasp程序,包括:将所述最新版本rasp程序引擎版本号与当前运行的rasp程序引擎版本号进行比对,以及将所述最新版本rasp程序引擎包信息摘要值与当前运行的rasp程序引擎包信息摘要值进行比对;若最新版本rasp程序引擎版本号大于当前运行的rasp程序引擎版本号,且所述最新版本rasp程序引擎包信息摘要值与当前运行的rasp程序引擎包信息摘要值一致,则确定更新当前运行的rasp程序。
9.结合第一方面,第一方面的第一种或第二种实施方式,在第一方面的第三种实施
方式中,所述在从所述获取地址获取最新版本rasp程序引擎包之后,所述方法还包括:判断获取的最新版本rasp程序引擎包是否完整;若完整,则根据当前获取的最新版本rasp程序引擎包进行更新。
10.结合第一方面,第一方面的第一种、第二种或第三种实施方式,在第一方面的第四种实施方式中,所述移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源,包括:移除rasp程序宿主运行环境中先前为当前运行的rasp程序注册的自定义类转换器;所述rasp程序宿主运行环境为所述应用软件的虚拟执行环境;遍历rasp程序运行环境中先前将当前运行的rasp程序插入到应用软件的方法中加载的插桩类,将得到的所有加载的插桩类回滚至原始类;释放当前运行的rasp程序关联的资源;所述关联的资源包含:插桩点管理器、类加载器及占用应用软件的内存空间。
11.结合第一方面,第一方面的第一种、第二种、第三或第四种实施方式,在第一方面的第五种实施方式中,所述将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中,包括:获取所述最新版本rasp程序引擎包的属性信息;所述属性信息包含:引擎包包名及启动类;根据所述引擎包包名及启动类,获取顶层父类加载器和/或,获取当前应用软件的系统类加载器;对所述顶层父类加载器和/或系统类加载器进行标识,并调用所述顶层父类加载器和/或系统类加载器加载用于创建所述最新版本rasp程序的引擎类;通过所述引擎类创建最新版本rasp程序。
12.结合第一方面,第一方面的第一至第五种任一实施方式,在第一方面的第六种实施方式中,所述将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中,还包括:在通过所述引擎类创建最新版本rasp程序之后,启动所述最新版本rasp程序;获取rasp程序宿主运行环境中所有被加载的类,判定所述被加载的类是否为待插桩的类;若是,则在对应的类中插入所述最新版本rasp程序。
13.结合第一方面,第一方面的第一至第六种任一实施方式,在第一方面的第七种实施方式中,所述最新版本rasp程序中包含攻击检测算法,所述攻击检测算法用于检测进入应用软件处理进程的用户请求是否为网络安全攻击。
14.第二方面,本发明实施例还提供一种服务器,包括主机,所述主机上安装有应用软件,所述应用软件中嵌入有rasp程序,所述rasp程序伴随所述应用软件运行过程中,用于执行第一方面任一所述的应用软件rasp程序的更新方法,以自动升级更新。
15.第三方面,本发明实施例提供一种电子设备,所述电子设备,包括:一个或者多个处理器;存储器;所述存储器中存储有一个或者多个可执行程序,所述一个或者多个处理器读取存储器中存储的可执行程序代码,来运行与可执行程序代码对应的程序,以用于执行第一方面任一所述的应用软件rasp程序的更新方法。
16.第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面任一所述的应用软件rasp程序的更新方法。
17.本发明实施例提供的应用软件rasp程序的更新方法、服务器、电子设备及存储介质,包括步骤:接收服务器管控端下发的rasp程序更新指令;根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行的rasp程序;若是,则从所述获取地址获取最新版本rasp程序引擎包;移除所述应用软件内当前运行的
rasp程序,释放当前运行的rasp程序关联的资源;将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中。通过上述方法步骤,在接收服务器管控端下发的rasp程序更新指令之后,可以自动判断是否需要更新,并在判断需要更新,获取到最新版本rasp程序引擎包之后,通过移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源,可以将应用软件恢复到部署rasp之前的状态,因此,无需重启应用软件即可进行二次安装更新,将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中,自动实现应用软件内rasp程序的业务更新,从而可避免出现rasp程序更新导致的应用软件业务停止的问题。
附图说明
18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
19.图1为本发明应用软件rasp程序的更新方法一实施例的流程示意图;
20.图2为本发明应用软件rasp程序的更新方法另一实施例的流程示意图;
21.图3为本发明应用软件rasp程序的更新方法又一实施例的流程示意图;
22.图4为本发明应用软件rasp程序的更新方法又一实施例的流程示意图;
23.图5为本发明应用软件rasp程序的更新方法又一实施例的流程示意图;
24.图6为本发明提供的服务器一实施例架构示意框图;
25.图7为本发明电子设备的一个实施例结构示意图。
具体实施方式
26.下面结合附图对本发明实施例进行详细描述。
27.应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
28.本发明实施例提供的应用软件rasp程序的更新方法,可应用于服务器中,例如,文件服务器,数据库服务器,应用程序服务器,web服务器等。
29.需要说明的是,该方法可以以软件的形式固化于某一制造的产品中,当用户在使用该产品时,可以再现本技术的方法流程。
30.图1为本发明应用软件rasp程序的更新方法一实施例的流程示意图;参看图1所示,所述应用软件rasp程序的更新方法可以包括:
31.步骤110、接收服务器管控端下发的rasp程序更新指令;所述更新指令中携带有服务器管控端上维护的最新版本rasp程序引擎属性信息及获取地址。
32.rasp全称是runtime application self-protect,即应用运行时自我保护程序,其部署于应用软件中,用于对应用软件的攻击进行防护。
33.所述服务器管控端可以为:服务器管控平台,例如,云控服务器管理平台,所述服务器管控平台是一套控制服务器工作运行、处理硬件、操作系统及应用软件等不同层级的
软件管理及升级和系统的资源管理、性能维护和监控配置的程序。it管理员可以观察远程系统硬件配置的细节,并监控关键部件如处理器、硬盘驱动器、内存的使用情况和性能表现。通过可选择的附加产品扩展服务器管理、部署和软件分发功能。
34.所述服务器管控端上维护有rasp程序的基本信息,例如,rasp程序的引擎属性信息,及引擎包或者引擎包的获取地址。
35.所述rasp程序俗称rasp探针(rasp agent)。
36.rasp探针(rasp agent)与服务器管控端建立心跳连接,定期发送及接收服务器管控端下发的心跳包;
37.当服务器管控端维护了最新版本的rasp程序时,将最新版本的rasp程序更新指令在下发心跳包时,一起发送给;例如,在心跳包中增加upgrade字段,其中可以包含:rasp探针(rasp程序)id、引擎包属性信息,包含配置的时间、md5、名称、版本、宿主主机名等。
38.在步骤110之前,由维护人员在云控服务器管理平台进行引擎上传及维护:
39.当需要增加新的插桩点或增减修改rasp程序中检测算法时,维护人员将开发的最新版本的rasp程序引擎包上传至云控服务器管理平台;检测当前上传的rasp程序引擎包的文件哈希md5值不是已经上传过;若没有上传过,则.将该引擎包存储到云控服务器管理平台中;通过jarsigner-verify命令,校验上传的引擎包是否完整,或者,校验引擎包是否为官方打包的,而不是非信任的第三方修改的;若完整或是官方打包的,则为可信引擎包;读取引擎包的manifest元数据,包含:引擎版本,引擎包名、启动类、打包方式、打包时间、git版本控制相关数据,git版本控制相关数据例如,分支hash、commit、最后一次提交者名称和邮箱等、打包方式与jdk版本等;将最新版本的rasp程序引擎上述属性信息同引擎md5一并存入数据库,准备下发至服务器。
40.120、根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行的rasp程序。
41.根据前面最新版本rasp程序引擎维护实例可知,在一些实施例中,所述引擎属性信息可以包含:引擎版本号。
42.参看图2所示,所述根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行rasp程序(步骤120),包括:
43.121、将所述最新版本rasp程序引擎版本号与当前运行的rasp程序引擎版本号进行比对;
44.122、若最新版本rasp程序引擎版本号大于当前运行的rasp程序引擎版本号,则确定更新当前运行的rasp程序。
45.在又一些实施例中,所述引擎属性信息还包含:引擎包信息摘要值(message-digest value),例如md5(message-digest algorithm 5)值。
46.参看图3所示,所述根据所述最新版本rasp程序引擎属性信息与当前运行的rasp程序引擎属性信息判断是否更新当前运行rasp程序(步骤120),包括:
47.121
′
、将所述最新版本rasp程序引擎版本号与当前运行的rasp程序引擎版本号进行比对,以及将所述最新版本rasp程序引擎包信息摘要值与当前运行的rasp程序引擎包信息摘要值进行比对;
48.122
′
、若最新版本rasp程序引擎版本号大于当前运行的rasp程序引擎版本号,且
所述最新版本rasp程序引擎包信息摘要值与当前运行的rasp程序引擎包信息摘要值一致,则确定更新当前运行的rasp程序。
49.130、若是,则从所述获取地址获取最新版本rasp程序引擎包。
50.参看图4所示,作为一可选实施例,在从所述获取地址获取最新版本rasp程序引擎包之后,所述方法还包括:步骤135、判断获取的最新版本rasp程序引擎包是否完整;步骤136、若完整,则根据当前获取的最新版本rasp程序引擎包进行更新。
51.在一些实施例中,所述引擎属性信息包含:引擎包信息摘要值及对应的第一信息摘要算法;所述判断获取的最新版本rasp程序引擎包是否完整,包括:
52.读取所述最新版本rasp程序引擎包内容,根据所述第一信息摘要算法计算对应的信息摘要值;判断计算得到的所述信息摘要值与所述更新指令中携带的引擎包信息摘要值是否一致;若一致,则确定当前获取的最新版本rasp程序引擎包完整。
53.140、移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源。
54.请参看图5所示,所述移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源(步骤140),包括:
55.141、移除rasp程序宿主运行环境中先前为当前运行的rasp程序注册的自定义类转换器(transformer);所述rasp程序宿主运行环境为所述应用软件的虚拟执行环境。
56.具体可以使用instrumentation技术的removetransformer方法,移除之前注册的自定义transformer。
57.在java技术中,使用instrumentation,开发者可以构建一个独立于应用程序的代理程序(agent),用来监测和协助运行在jvm(java virtual machine)上的程序,甚至能够替换和修改某些类的定义。
58.可以理解的是,一旦一个transformer被注册到instrumentation中,每当一个类被定义(classloader.defineclass)或被重新定义(instrumentation.redefineclasses)时,它都会被调用,因此,为了实现rasp程序的更新,需要先移除之前注册的自定义transformer,以便释放该资源,为新的rasp程序重新注册相应的自定义transformer。
59.142、遍历rasp程序运行环境中先前将当前运行的rasp程序插入到应用软件的方法中加载的插桩(hook)类,将得到的所有加载的插桩类回滚至原始类。
60.本实施例中,通过遍历所有的被hook类,可以使用instrumentation技术的retransformclasses,回滚为原始类。
61.143、释放当前运行的rasp程序关联的资源;所述关联的资源包含:插桩点管理器、类加载器及占用应用软件的内存空间。
62.通过上述方法步骤,对原rasp程序引擎的资源进行释放,如hook点管理器、用于加载的classloader(类加载器)、占用应用软件的内存空间等,恢复到未部署rasp程序之前的原始状态,可以在不重启应用软件的情况下,实现rasp程序引擎热更新,从而可以避免因重启导致应用软件业务暂停的问题。
63.150、将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中。
64.在java编程语言中,类(class)是java编程语言中面向对象(oop)的工具,是创建同类对象的蓝图或模板。在java编程语言中,一个程序中可以有多个类,一个类中可以有多
个方法(有时也称为函数),方法(method)定义一个类的对象可以执行的动作;但是,只有一个类需要main方法,其中,main方法是应用程序的入口点,根据本发明的技术构思可知,所述rasp程序可以插入应用软件的任意类的任意方法中。
65.在一些实施例中,所述将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中(步骤150),包括:获取所述最新版本rasp程序引擎包的属性信息;所述属性信息包含:引擎包包名及启动类。
66.还可以包括:前文列举的引擎版本,打包方式、打包时间、git版本控制相关数据、jdk版本等。
67.本实施例中,可以在加载引擎包(引擎文件)之后,读取引擎文件中的元数据(manifest),获取引擎的包名、启动类等基本属性信息。
68.根据所述引擎包包名及启动类,获取顶层父类加载器和/或,获取当前应用软件的系统类加载器。
69.根据jvm双亲委派的特性可知,本实施例中,通过获取顶层父类加载器和/或,获取当前应用软件的系统类加载器(systemclassloader),可以为类的加载提供更广泛的兼容性。
70.对所述顶层父类加载器和/或系统类加载器进行标识,并调用所述顶层父类加载器和/或系统类加载器加载用于创建所述最新版本rasp程序的引擎类;通过所述引擎类创建最新版本rasp程序。
71.通过使用上述类加载器或其包装的自定义加载器,如:urlclassloader),加载引擎,可以在类提供的蓝图或模板中创建最新版本rasp引擎实例。
72.进一步地,所述将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中(步骤150),还包括:在通过所述引擎类创建最新版本rasp程序之后,启动所述最新版本rasp程序;
73.启动过程中,先初始化引擎,包括版本信息、日志及引擎包中的检测算法的初始化,并通过instrumentation技术的addtransformer方法,初始化类字节码的转换器。
74.获取rasp程序宿主运行环境中所有被加载的类,判定所述被加载的类是否为待插桩的类;若是,则在对应的类中插入所述最新版本rasp程序。
75.所述rasp程序宿主运行环境为应用软件的虚拟执行环境,例如jvm(java virtual machine);通过instrumentation技术(插桩技术框架)的getallloadedclasses方法,获取当前jvm中所有被加载的类。
76.本实施例中,可以通过遍历算法遍历jvm中所有被加载的类,当判定为是需要被插桩(hook)的类,调用instrumentation技术的retransform方法,在对应的类中插入所述最新版本rasp程序,由于jvm是应用软件的虚拟执行环境,因此,在jvm中相应的类中插入所述最新版本rasp程序,即实质是将所述最新版本rasp程序插入至应用软件的类中。
77.在一些实施例中,所述最新版本rasp程序中包含攻击检测算法,所述攻击检测算法用于检测进入应用软件处理进程的用户请求是否为网络安全攻击。
78.本实施例中,可以将包含安全检测算法代码的rasp程序插入至关键方法的入口处、出口处插入,例如main函数,以实现对应用软件的实时自我防护,提高应用软件及宿主服务器的运行安全性。
79.本发明实施例提供的应用软件rasp程序的更新方法,通过上述方法步骤110至150,在接收服务器管控端下发的rasp程序更新指令之后,可以自动判断是否需要更新,并在判断需要更新,获取到最新版本rasp程序引擎包之后,通过移除所述应用软件内当前运行的rasp程序,释放当前运行的rasp程序关联的资源,可以将应用软件恢复到部署rasp之前的状态,因此,无需重启应用软件即可进行二次安装更新,将所述最新版本rasp程序引擎包插入所述应用软件的类的方法中,自动实现应用软件内rasp程序的业务热更新,从而可避免出现rasp程序更新导致的应用软件业务停止的问题。
80.实施例二
81.图6为本发明服务器一实施例架构示意框图,请参看图6所示,包括主机,所述主机上安装有应用软件,所述应用软件中嵌入有rasp程序,所述rasp程序伴随所述应用软件运行过程中,可用于执行实施例一任一所述的应用软件rasp程序的更新方法,以自动升级更新。
82.本实施例的服务器可以用于执行图1所示方法实施例的技术方案,本实施例的服务器,其实现原理和技术效果与实施例一类似,此处不再多赘述,可相互参看。
83.实施例三
84.本发明还实施例提供了一种电子设备,包括一个或者多个处理器;存储器;所述存储器中存储有一个或者多个可执行程序,所述一个或者多个处理器读取存储器中存储的可执行程序代码,来运行与可执行程序代码对应的程序,以用于执行实施例一任一所述的方法。
85.图7为本发明电子设备一个实施例的结构示意图,其可以实现本发明实施例一任一所述的方法,如图7所示,作为一可选实施例,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述是实施例一任一所述的应用软件rasp程序的更新方法。
86.处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明应用软件rasp程序的更新方法实施例一的描述,在此不再赘述。
87.该电子设备以多种形式存在,包括但不限于:(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放模块(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。(5)其他具有数据交互功能的电子设备。
88.本发明还实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述实施例一任一所述的应用软件rasp程序的更新方法。
89.综上,根据上述各实施例描述可知,本实施例公开的应用软件rasp程序的更新方法,可以在不重启应用软件的情况下,将rasp探针程序注入到应用软件内部,实现原有rasp探针程序的热升级更新,从而可避免出现rasp程序更新导致的应用软件业务停止的问题。
90.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
91.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
92.为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
93.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质还可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
94.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。