基于动态类调用序列的可信度判断方法及装置与流程

文档序号:32052919发布日期:2022-11-04 19:15阅读:38来源:国知局
基于动态类调用序列的可信度判断方法及装置与流程

1.本发明涉及java服务器安全技术领域,尤其涉及一种基于动态类调用序列的可信度判断方法及装置。


背景技术:

2.在java程序运行过程中,会产生很多class类对象,根据class文件是否在java虚拟机(javavirtualmachine,简称jvm)运行前就存在,可以分为静态类和动态类。很多java攻击使用的恶意类都是攻击者自己精心构造的,是jvm运行后才加载的,属于动态类。通常对于恶意的动态类可以通过设置监控点,进行黑规则匹配,在执行命令时对命中黑规则的攻击行为进行告警。然而基于黑规则匹配只能够针对已知的漏洞进行防护,并且是在触发恶意命令执行的时候才进行判断,监控点设置量大会对系统的性能造成影响。其中,黑规则是指已经被发现的、具有危害性的、可以被利用发起攻击的规则。漏洞是基于规则产生的,通过分析已知漏洞的原理,把产生已知漏洞的原理规则认为是危险的、不可信任的黑规则。在现有的防护中只要触发了黑规则,就会被认为正在利用这些已知漏洞发起攻击。


技术实现要素:

3.针对现有技术中的问题,本发明实施例提供一种基于动态类调用序列的可信度判断方法及装置。
4.具体地,本发明实施例提供了以下技术方案:
5.第一方面,本发明实施例提供了一种基于动态类调用序列的可信度判断方法,应用于基于java语言开发的业务系统,包括:
6.响应于java虚拟机加载目标类,判断所述目标类是否为动态类;
7.若所述目标类为动态类,判断所述动态类对应的堆栈信息中所述目标类的调用序列是否包含在动态类调用序列白名单中;
8.若所述动态类对应的堆栈信息中所述目标类的调用序列未包含在动态类调用序列白名单中,则确定所述目标类不可信,拦截所述目标类的加载,并生成告警信息。
9.进一步地,所述响应于java虚拟机加载目标类,判断所述目标类是否为动态类之前,还包括:
10.对所述业务系统的源代码进行模拟执行,触发各种动态类生成;
11.获取每一个动态类生成时在相应堆栈信息中产生的调用序列,生成所述动态类调用序列白名单,每个所述动态类对应一条堆栈信息。
12.进一步地,每条所述堆栈信息中包含多个类方法,所述获取每一个动态类生成时在相应堆栈信息中产生的调用序列,生成所述动态类调用序列白名单,包括:
13.从对应堆栈信息的末尾开始向上逐个分析每一个类方法;
14.将满足动态类调用序列封闭原则的一组类方法,确定为一个动态类生成时产生的调用序列;
15.对所确定的动态类生成时产生的调用序列进行记录,得到所述动态类调用序列白名单。
16.进一步地,所述动态类调用序列封闭原则为:属于一类框架、与业务无关、模板化、内容固定、不受参数和调用类方法的对象影响。
17.进一步地,所述响应于java虚拟机加载目标类,判断所述目标类是否为动态类,包括:
18.响应于java虚拟机加载目标类,判断所述目标类的名称是否为所述业务系统的源代码中类的名称;
19.若所述目标类的名称为所述业务系统的源代码中类的名称,则确定所述目标类为静态类;
20.若所述目标类的名称不为所述业务系统的源代码中类的名称,则确定所述目标类为动态类。
21.进一步地,所述响应于java虚拟机加载目标类,判断所述目标类是否为动态类之前,还包括:
22.对所述业务系统的源代码进行扫描,记录所述业务系统的源代码中类的名称。
23.进一步地,所述若所述目标类为动态类,判断堆栈信息中所述目标类的调用序列是否包含在动态类调用序列白名单中之后,还包括:
24.若所述动态类对应的堆栈信息中所述目标类的调用序列包含在动态类调用序列白名单中,则确定所述目标类可信,执行所述目标类的加载。
25.第二方面,本发明实施例还提供了一种基于动态类调用序列的可信度判断装置,应用于基于java语言开发的业务系统,包括:
26.动态类判断模块,用于响应于java虚拟机加载目标类,判断所述目标类是否为动态类;
27.可信度判断模块,用于若所述目标类为动态类,判断所述动态类对应的堆栈信息中所述目标类的调用序列是否包含在动态类调用序列白名单中;
28.拦截告警模块,用于若所述动态类对应的堆栈信息中所述目标类的调用序列未包含在动态类调用序列白名单中,则确定所述目标类不可信,拦截所述目标类的加载,并生成告警信息。
29.第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述基于动态类调用序列的可信度判断方法的步骤。
30.第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述基于动态类调用序列的可信度判断方法的步骤。
31.第五方面,本发明实施例还提供了一种计算机程序产品,其上存储有可执行指令,该指令被处理器执行时使处理器实现第一方面所述基于动态类调用序列的可信度判断方法的步骤。
32.本发明实施例提供的基于动态类调用序列的可信度判断方法及装置,应用于基于java语言开发的业务系统,通过响应于java虚拟机加载目标类,判断目标类是否为动态类,
若目标类为动态类,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中,若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则确定目标类不可信,拦截目标类的加载,并生成告警信息;利用在java虚拟机加载动态类时,根据动态类调用序列白名单,判断所加载的动态类在堆栈信息中产生的调用序列是否为可信的调用序列,在所加载的动态类在堆栈信息中产生的调用序列为不可信的调用序列时,对动态类的加载实施拦截和告警,可以防止攻击者通过构造恶意的动态类来实施攻击,达到安全防护的目的,由于对恶意的动态类的拦截是在虚拟机加载时进行,可以阻止恶意的动态类进入虚拟机中触发恶意命令的执行,由于是根据动态类调用序列白名单对动态类的调用序列进行判断,可以起到对未知漏洞防护的作用,可以有效应对java脚本攻击。
附图说明
33.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1是本发明实施例提供的基于动态类调用序列的可信度判断方法的流程示意图;
35.图2是本发明实施例提供的生成动态类调用序列白名单的流程示意图;
36.图3是本发明实施例提供的另一基于动态类调用序列的可信度判断方法的流程示意图;
37.图4是本发明提供的基于字节码分析执行权限的方法一应用场景的流程示意图;
38.图5是本发明实施例提供的基于动态类调用序列的可信度判断装置的结构示意图;
39.图6为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
40.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
41.下面将结合图1-图4描述本发明实施例提供的基于动态类调用序列的可信度判断方法。
42.请参阅图1,图1是本发明实施例提供的基于动态类调用序列的可信度判断方法的流程示意图,图1所示的基于动态类调用序列的可信度判断方法可以应用于基于java语言开发的业务系统,可以由基于动态类调用序列的可信度判断装置执行,基于动态类调用序列的可信度判断装置可以设置于业务系统的服务器,本发明实施例对业务系统的类型和服务器的类型不作限定,例如,业务系统可以为金融业务系统等,服务器可以为包含独立主机的物理服务器、主机集群承载的虚拟服务器、云服务器等。如图1所示,该基于动态类调用序
列的可信度判断方法至少包括:
43.101,响应于java虚拟机加载目标类,判断目标类是否为动态类。
44.在本发明实施例中,静态类是指在java虚拟机运行前就存在的,能够在操作系统的存储内存中找到后缀名为.class的文件的类,动态类是指在java虚拟机运行过程中生成的,java虚拟机不运行就不会生成的,一般存在于操作系统的运行内存中,不落地形成class文件的类。在业务系统的服务器通过java虚拟机加载目标类时,可以首先判断所加载的目标类是否为动态类,例如,可以根据业务系统的源代码,判断所加载的目标类是否为动态类,若目标类的名称在业务系统的源代码中,则可以确定目标类为静态类,若目标类的名称不在业务系统的源代码中,则可以确定目标类为动态类。
45.本发明实施例对响应于java虚拟机加载目标类,判断目标类是否为动态类的实现方法不作限定,例如,在响应于java虚拟机加载目标类时,可以通过hook函数获取目标类的名称,根据预先记录的业务系统的源代码中类的名称来判断目标类是否为动态类。
46.102,若目标类为动态类,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中。
47.在本发明实施例中,由于每个动态类生成时会产生一条堆栈信息,在这条堆栈信息中包含动态类的多个类方法,可以将由动态类的多个类方法组成的,对动态类运行过程信息的记录,称为动态类的调用序列。因此在判定目标类为动态类之后,可以进一步获取堆栈信息,根据动态类调用序列白名单,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中。其中,动态类调用序列白名单是由对应的业务系统的动态类生成时产生的可信的调用序列组成,每一个业务系统具有自身的动态类调用序列白名单。
48.例如,名称为com.jvm.work.agentaop.jdkproxy的动态类生成时,在堆栈信息中产生的调用序列为:
49.java.lang.reflect.proxy.newproxyinstance-》
50.java.lang.reflect.proxy.getproxyclass0-》
51.java.lang.reflect.weakcache.get-》
52.java.lang.reflect.weakcache$factory.get-》
53.java.lang.reflect.proxy$proxyclassfactory.apply-》
54.java.lang.reflect.proxy$proxyclassfactory.apply-》
55.java.lang.reflect.proxy.access$300-》
56.java.lang.reflect.proxy.defineclass0-》
57.其中,newproxyinstance、getproxyclass0、weakcache.get、
……
、defineclass0为类方法的名称。
58.103,若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则确定目标类不可信,拦截目标类的加载,并生成告警信息。
59.在本发明实施例中,在根据目标类为动态类,进一步判定动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,可以确定目标类的调用序列不可信,表明目标类为恶意类,可以进一步对目标类的加载进行拦截,以阻止目标类进入java虚拟机中执行,并生成告警信息。
60.本发明实施例提供的基于动态类调用序列的可信度判断方法,应用于基于java语言开发的业务系统,通过响应于java虚拟机加载目标类,判断目标类是否为动态类,若目标类为动态类,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中,若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则确定目标类不可信,拦截目标类的加载,并生成告警信息;利用在java虚拟机加载动态类时,根据动态类调用序列白名单,判断所加载的动态类在堆栈信息中产生的调用序列是否为可信的调用序列,在所加载的动态类在堆栈信息中产生的调用序列为不可信的调用序列时,对动态类的加载实施拦截和告警,可以防止攻击者通过构造恶意的动态类来实施攻击,达到安全防护的目的,由于对恶意的动态类的拦截是在虚拟机加载时进行,可以阻止恶意的动态类进入虚拟机中触发恶意命令的执行,由于是根据动态类调用序列白名单对动态类的调用序列进行判断,可以起到对未知漏洞防护的作用,可以有效应对java脚本攻击。
61.请参阅图2,图2是本发明实施例提供的生成动态类调用序列白名单的流程示意图,如图2所示,响应于java虚拟机加载目标类,判断目标类是否为动态类之前,至少还包括:
62.201,对业务系统的源代码进行模拟执行,触发各种动态类生成。
63.在本发明实施例中,业务系统的源代码可以包括java语言的软件开发工具包(java development kit,简称jdk)和业务工程源代码,业务工程源代码可以是基于常用的第三方框架,例如,tomcat、spring、springboot、weblogic等,为了特定的需求开发的源代码。可以利用asm、javassist等工具对业务系统源代码进行模拟执行,使业务工程源代码基于jdk运行,触发各种动态类生成,例如,基于spring aop、hibernate和cglib等的动态代理类。
64.202,获取每一个动态类生成时在相应堆栈信息中产生的调用序列,生成动态类调用序列白名单,每个动态类对应一条堆栈信息。
65.在本发明实施例中,在对业务系统的源代码进行模拟执行时,可以获取每个动态类生成时产生的一条堆栈信息,每条堆栈信息对应一个动态类产生的可信的调用序列,根据所获得的可信的调用序列构建业务系统的动态类调用序列白名单。在一些可选的例子中,由于每条堆栈信息中包含多个类方法,因此可以从对应堆栈信息的末尾开始向上逐个分析每一个类方法,将满足动态类调用序列封闭原则的一组类方法,确定为一个动态类生成时产生的调用序列,然后对所确定的动态类生成时产生的调用序列进行记录,得到动态类调用序列白名单。可选地,动态类调用序列封闭原则为:属于一类框架、与业务无关、模板化、内容固定、不受参数和调用类方法的对象两个外部因素影响。在一些可选的例子中,可以将每一个动态类产生的可信的调用序列写入指定的文件,将这个文件作为动态类调用序列白名单。
66.例如,堆栈信息为:
67.com.jvm.work.agentaop.jdkproxy.getproxyinstance-》
68.java.lang.reflect.proxy.newproxyinstance-》
69.java.lang.reflect.proxy.getproxyclass0-》
70.java.lang.reflect.weakcache.get-》
71.java.lang.reflect.weakcache$factory.get-》
72.java.lang.reflect.proxy$proxyclassfactory.apply-》
73.java.lang.reflect.proxy$proxyclassfactory.apply-》
74.java.lang.reflect.proxy.access$300-》
75.java.lang.reflect.proxy.defineclass0-》
76.sun.instrument.instrumentationimpl.transform-》
77.sun.instrument.transformermanager.transform-》
78.com.jvm.work.agent.mymonitortransformer.transform-》
79.java.lang.thread.getstacktrace-》
……
80.从堆栈信息的末尾开始向上逐个分析每一个类方法,从类方法java.lang.reflect.proxy.defineclass0开始向上追溯,看类方法的参数和调用类方法的对象,以及代码的具体实现内容,发现proxy这个框架生成的动态类都是由类方法java.lang.reflect.proxy.newproxyinstance开始,并且生成的动态类的内容是固定的、模板化的、不受参数和调用类方法的对象两个外部因素影响,那么由这些类方法构成的这个流程就满足动态类调用序列封闭原则,可以认为是可信的调用序列,记录到白名单中。其中从堆栈信息中获取的可信的调用序列为:
81.java.lang.reflect.proxy.newproxyinstance-》
82.java.lang.reflect.proxy.getproxyclass0-》
83.java.lang.reflect.weakcache.get-》
84.java.lang.reflect.weakcache$factory.get-》
85.java.lang.reflect.proxy$proxyclassfactory.apply-》
86.java.lang.reflect.proxy$proxyclassfactory.apply-》
87.java.lang.reflect.proxy.access$300-》
88.java.lang.reflect.proxy.defineclass0-》。
89.本实施例通过对业务系统的源代码进行模拟执行,触发各种动态类生成,通过获取每一个动态类生成时在堆栈信息中产生的可信的调用序列,生成动态类调用序列白名单,可以使所生成的动态类调用序列白名单中包含业务系统中所有动态类生成时产生的可信的调用序列,可以为根据动态类调用序列白名单对java虚拟机加载的目标类的可信性判断提供依据。
90.请参阅图3,图3是本发明实施例提供的另一基于动态类调用序列的可信度判断的流程示意图,如图3所示,该基于字节码分析执行权限的方法至少包括:
91.301,响应于java虚拟机加载目标类,判断目标类的名称是否为业务系统的源代码中类的名称。
92.若目标类的名称为业务系统的源代码中类的名称,则确定目标类为静态类;若目标类的名称不为业务系统的源代码中类的名称,则执行302。
93.302,确定目标类为动态,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中。
94.在一些可选的例子中,当java虚拟机加载某一个目标类时,java虚拟机可以通过回调通知到hook函数,由hook函数获取所加载的目标类的名称,根据业务系统的源代码中类的名称,判断目标类的名称是否为业务系统的源代码中类的名称,若目标类的名称不为
业务系统的源代码中类的名称,则表明目标类的名称不在业务系统的源代码中,可以确定目标类为动态类,并且可以进一步判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中,若目标类的名称为业务系统的源代码中类的名称,则表明目标类的名称在业务系统的源代码中,可以确定目标类为静态类。可选地,在确定目标类为静态类之后,可以表明目标类为安全类,返回java虚拟机执行目标类的加载,或者也可以通过其他对静态类可信性的判断方法,进一步判断目标类的可信性,本发明实施例对此不作限定。
95.在一些可选的例子中,在响应于java虚拟机加载目标类,判断目标类的名称是否为业务系统的源代码中类的名称之前,可以通过对业务系统的源代码进行扫描,记录业务系统的源代码中类的名称,为根据业务系统的源代码中类的名称,判断目标类是否为动态类提供依据。
96.若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则执行303;若动态类对应的堆栈信息中目标类的调用序列包含在动态类调用序列白名单中,则执行304。
97.303,确定目标类不可信,拦截目标类的加载,并生成告警信息。
98.304,确定目标类可信,执行目标类的加载。
99.在一些可选的例子中,在hook函数进一步判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中之后,若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则表明目标类的调用序列不可信,目标类为恶意类,可以对目标类的加载进行拦截,以阻止目标类进入java虚拟机中执行,并生成告警信息,若动态类对应的堆栈信息中目标类的调用序列包含在动态类调用序列白名单中,则表明目标类的调用序列可信,目标类为安全类,可以返回java虚拟机执行目标类的加载,目标类进入java虚拟机中执行。
100.本实施例在java虚拟机加载目标类时,根据业务系统的源代码中类的名称,对目标类是否为动态类进行判断,在确定目标类为动态类后,再根据动态类调用序列白名单,对动态类的调用序列是否为可信的调用序列进行判断,可以准确区分出动态类和静态类,从而可以针对动态类根据堆栈信息中的调用序列进行可信性判断,可以简化保证对类的可信性判断的准确性。
101.请参阅图4,图4是本发明实施例提供的基于动态类调用序列的可信度判断方法的一应用场景的示意图,如图4所示,该基于动态类调用序列的可信度判断方法至少包括:
102.1、对jdk和业务工程源代码进行采集和分析,触发各种动态类生成,例如,基于spring aop、hibernate和cglib等的动态代理类。
103.2、获取动态类产生时的堆栈信息,每个动态类对应一条堆栈信息,一条堆栈信息包括多个类方法,由动态类的多个类方法组成的,对动态类运行过程信息的记录,可以被称为动态类产生的可信的调用序列。
104.从堆栈信息的末尾开始向上逐个分析每一个类方法,直到确认一组类方法,满足动态类调用序列封闭原则,那么将这组类方法法作为一个动态类产生的可信的调用序列。
105.动态类调用序列封闭原则:属于一类框架、与业务无关、模板化、内容固定、不受参数和调用类方法的对象两个外部因素影响。
106.3、将每一个动态类产生的可信的调用序列写入指定的文件,将这个文件作为动态类调用序列白名单。
107.4、在jvm加载类的时候,先确认类是动态类,再判断堆栈信息中动态类的调用序列是否包含在动态类调用序列白名单中,如果包含在动态类调用序列白名单中,则说明该动态类是可信的,如果没有包含在动态类调用序列白名单中,则说明该动态类是不可信的,是恶意类,对其加载进行拦截,不让它加载到jvm中,并生成告警信息。
108.下面对本发明提供的基于动态类调用序列的可信度判断装置进行描述,下文描述的基于动态类调用序列的可信度判断装置与上文描述的基于动态类调用序列的可信度判断方法可相互对应参照。
109.请参阅图5,图5是本发明实施例提供的基于动态类调用序列的可信度判断装置的结构示意图,图5所示的基于动态类调用序列的可信度判断装置可以应用于基于java语言开发的业务系统,可用来执行图1的基于动态类调用序列的可信度判断方法,基于动态类调用序列的可信度判断装置可以设置于业务系统的服务器,本发明实施例对业务系统的类型和服务器的类型不作限定,例如,业务系统可以为金融业务系统等,服务器可以为包含独立主机的物理服务器、主机集群承载的虚拟服务器、云服务器等。如图5所示,该基于动态类调用序列的可信度判断装置至少包括:
110.动态类判断模块510,用于响应于java虚拟机加载目标类,判断目标类是否为动态类。
111.可信度判断模块520,用于若目标类为动态类,判断动态类对应的堆栈信息中目标类的调用序列是否包含在动态类调用序列白名单中。
112.拦截告警模块530,用于若动态类对应的堆栈信息中目标类的调用序列未包含在动态类调用序列白名单中,则确定目标类不可信,拦截目标类的加载,并生成告警信息。
113.可选地,该基于动态类调用序列的可信度判断装置还包括:
114.模拟执行模块,用于对业务系统的源代码进行模拟执行,触发各种动态类生成。
115.白名单生成模块,用于获取每一个动态类生成时在相应堆栈信息中产生的调用序列,生成动态类调用序列白名单,每个动态类对应一条堆栈信息。
116.可选地,每条堆栈信息中包含多个类方法,白名单生成模块包括:
117.类方法分析单元,用于从对应堆栈信息的末尾开始向上逐个分析每一个类方法。
118.调用序列确定单元,用于将满足动态类调用序列封闭原则的一组类方法,确定为一个动态类生成时产生的调用序列。
119.白名单生成单元,用于对所确定的动态类生成时产生的调用序列进行记录,得到动态类调用序列白名单。
120.可选地,动态类调用序列封闭原则为:属于一类框架、与业务无关、模板化、内容固定、不受参数和调用类方法的对象影响。
121.可选地,动态类判断模块510用于:
122.响应于java虚拟机加载目标类,判断目标类的名称是否为业务系统的源代码中类的名称;
123.若目标类的名称为业务系统的源代码中类的名称,则确定目标类为静态类;
124.若目标类的名称不为业务系统的源代码中类的名称,则确定目标类为动态类。
125.可选地,该基于动态类调用序列的可信度判断装置还包括:
126.源代码扫描模块,用于对业务系统的源代码进行扫描,记录业务系统的源代码中类的名称。
127.可选地,该基于动态类调用序列的可信度判断装置还包括:
128.加载执行模块,用于若动态类对应的堆栈信息中目标类的调用序列包含在动态类调用序列白名单中,则确定目标类可信,执行目标类的加载。
129.图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(communications interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行如下方法:响应于java虚拟机加载目标类,判断所述目标类是否为动态类;若所述目标类为动态类,判断所述动态类对应的堆栈信息中所述目标类的调用序列是否包含在动态类调用序列白名单中;若所述动态类对应的堆栈信息中所述目标类的调用序列未包含在动态类调用序列白名单中,则确定所述目标类不可信,拦截所述目标类的加载,并生成告警信息。
130.此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
131.另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:响应于java虚拟机加载目标类,判断所述目标类是否为动态类;若所述目标类为动态类,判断所述动态类对应的堆栈信息中所述目标类的调用序列是否包含在动态类调用序列白名单中;若所述动态类对应的堆栈信息中所述目标类的调用序列未包含在动态类调用序列白名单中,则确定所述目标类不可信,拦截所述目标类的加载,并生成告警信息。
132.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
133.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
134.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1