一种Java内存Webshell的检测方法及装置

文档序号:195758 发布日期:2021-11-02 浏览:26次 >En<

阅读说明:本技术 一种Java内存Webshell的检测方法及装置 (Detection method and device for Webshell of Java memory ) 是由 刘奇旭 王晓蕾 赵子豪 张方娇 刘井强 曹雅琴 于 2021-06-15 设计创作,主要内容包括:本发明提出了一种Java内存Webshell的检测方法及装置,包括:在Java Web服务中分别植入敏感方法调用监控点与底层敏感行为监控点;根据敏感调用方法监控点收集的敏感方法调用信息,获取危险类,并对所述危险类进行判定,获取敏感方法调用检测结果;根据底层敏感行为监控点收集的底层敏感行为监控信息及所述用户请求相应的危险类,获取底层敏感行为检测结果;结合敏感方法调用检测结果与底层敏感行为检测结果,得到Webshell检测结果。本发明对用户请求实时监测,能够及时发现并拦截Java内存Webshell,从根源上进行防御,几乎不存在误报,同时能够适用于多种Web应用场景,并且不会对正常业务造成影响。(The invention provides a detection method and a detection device for a Java memory Webshell, which comprise the following steps: respectively implanting a sensitive method calling monitoring point and a bottom layer sensitive behavior monitoring point in Java Web service; acquiring a danger class according to sensitive method calling information collected by a sensitive calling method monitoring point, judging the danger class, and acquiring a sensitive method calling detection result; acquiring a bottom layer sensitive behavior detection result according to bottom layer sensitive behavior monitoring information collected by a bottom layer sensitive behavior monitoring point and the corresponding danger class requested by the user; and calling the detection result and the bottom-layer sensitive behavior detection result by combining the sensitive method to obtain a Webshell detection result. The method monitors the user request in real time, can discover and intercept the Java memory Webshell in time, defends from the source, hardly has false alarm, can be suitable for various Web application scenes, and cannot influence normal services.)

一种Java内存Webshell的检测方法及装置

技术领域

本发明涉及计算机网络安全领域,具体设计一种Java内存Webshell的检测方法及装置。

背景技术

随着互联网的蓬勃发展,攻防实战演练范围的增加,防守方的防护手段逐渐完善,以文件形式落地的Webshell的攻击难度逐渐增加。近两年的攻防训练中,攻击方采用更加高明的攻击手段,如基于内存的攻击方式,其中Java内存Webshell尤为突出,传统的防护方式在面对这些手段时显得捉襟见肘。

Java内存Webshell的危害不亚于Webshell,通过Webshell维持权限,持续性的攻击会对用户的资产造成巨大损失。攻击者会在JVM内存中留下一段可执行代码,通过浏览器或者客户端软件远程访问页面得到命令执行环境,进一步可以在Web服务器进行文件操作、数据库操作、执行任意程序命令等,达到控制服务器的目的。

与传统文件形式的Webshell最大的区别在于内存型的Webshell没有磁盘文件,将可执行代码留存在内存当中。目前的Webshell检测方法大多依赖文件,对文件的内容进行规则匹配或特征提取,通过机器学习、深度学习等等方法来识别Webshell,显然通过检测服务器上所有文件来识别Webshell的检测方法不能应用于Java内存Webshell。通常,内存Webshell的检测方法是在攻击发生之后,通过检测JVM加载的Class文件,以发现Java内存Webshell的存在,但是这种检测方法存在滞后性。另一种是基于RASP动态检测技术的安全防护产品,例如百度的openRASP,对Java内存Webshell检测的针对性不强,能对部分的Java内存Webshell进行拦截但是不能确定为此种攻击。因此当前对Java内存Webshell缺乏系统性的检测方法,检测方法针对性差并且存在滞后性。

发明内容

针对上述问题,本发明提出一种Java内存Webshell的检测方法及装置,通过动态检测方法及时发现并且拦截注入Java内存Webshell的行为。

为达到上述目的,本发明采取的具体技术方案是:

一种Java内存Webshell的检测方法,其步骤包括:

1)在JavaWeb服务中分别植入敏感方法调用监控点与底层敏感行为监控点;

2)当任一用户请求触发敏感方法调用监控点,则根据敏感调用方法监控点收集的敏感方法调用信息,获取危险类,并对所述危险类进行判定,获取敏感方法调用检测结果;当任一用户请求触发底层敏感行为监控点,则根据底层敏感行为监控点收集的底层敏感行为监控信息及所述用户请求相应的危险类,获取底层敏感行为检测结果;

3)结合敏感方法调用检测结果与底层敏感行为检测结果,得到Webshell检测结果。

进一步地,通过以下步骤植入敏感方法调用监控点与底层敏感行为监控点:

1)基于JVM-Sandbox开发Agent程序;

2)在JavaWeb服务运行期间,加载Agent程序到JavaWeb服务中,以植入敏感方法调用监控点与底层敏感行为监控点。

进一步地,敏感方法包括:注册Web服务器组件的方法、调用defineClass函数的方法和调用java.lang.ApplicationShutdownHooks类的方法。

进一步地,Web服务器组件包括:Java Web容器的Filter组件、Listener组件、Servlet组件、Controller组件及Valve组件和Spring框架中的Interceptor组件及Controller组件。

进一步地,底层敏感行为包括:命令执行、文件操作和创建连接。

进一步地,通过以下步骤得到危险类:

1)根据敏感方法调用信息,获得注册的Java组件类与调用敏感方法的类;

2)利用一危险类白名单,过滤注册的Java组件类与调用敏感方法的类中的系统类和自定义类,得到危险类。

进一步地,通过以下步骤获取敏感方法调用检测结果:

1)获取训练数据集中各训练数据的.class文件,使用Java命令将各.class文件转化为Java汇编码,并提取各Java汇编码的TF-IDF特征,建立词汇表模型;

2)对词汇表模型中的各特征向量进行机器学习训练,构建分类模型;

3)导出危险类的.class文件,提取对应的Java汇编码;

4)利用词汇表模型,提取危险类对应的特征向量,并将危险类对应的特征向量输入分类模型,得到敏感方法调用检测结果。

进一步地,所述机器学习方法包括:XGBoost算法。

进一步地,敏感方法调用信息与底层敏感行为监控信息分别包括:方法参数和调用栈信息。

进一步地,在获取底层敏感行为检测结果之前,通过DoubleArray Trie算法,将底层敏感行为监控信息中的方法参数与放行参数白名单进行比对,以排除可信赖的操作。

进一步地,将底层敏感行为监控信息中的调用栈信息与危险类进行对比,查看底层敏感行为是否由危险类进行调用,获取底层敏感行为检测结果:

进一步地,底层敏感行为检测结果包括:Java内存Webshell或其他高危敏感行为。

进一步地,在JavaWeb服务中还植入一请求对象监控点。

进一步地,触发请求对象监控点时,收集的请求内容信息包括:解析完HTTP请求的Request对象内容涵盖URL、原始IP地址、参数、上传数据、cookie、时间戳、UserAgent和请求方法。

进一步地,通过以下策略对Webshell检测结果为Java内存Webshell或其他高危行为进行处理:

1)通过RASP技术Hook服务器的Http ServletRespond函数,返回一个自定义的错误页面,以拦截底层敏感行为检测结果中的Java内存Webshell或其他高危敏感行为的请求;

2)将请求内容监控信息、敏感方法调用信息、底层敏感行为监控信息及底层敏感行为检测结果作为安全事件,并使用SimpleEmail发送邮件到管理员邮箱。

一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述所述的方法。

一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机以执行上述所述的方法。

本发明的有益效果如下:

目前Java内存Webshell检测方法针对性差,并且检测存在滞后性,缺乏一个系统的检测方法。本发明针对这些问题,提出了一种基于RASP技术的动态检测方法,对用户请求进行实时监测,监测点根据Java内存Webshell动态行为特征设计,能够及时并且有效地检测出在服务器中注入Java内存Webshell的行为,弥补了目前检测方法的滞后性和针对性差的缺点,还具有低侵入性,不会对正常业务产生影响。

附图说明

图1是本发明方案的系统结构示意图。

图2是机器学习算法模型的训练和检测流程图。

图3是判定模块处理的流程图。

图4是告警模块处理的流程图。

图中100、200、300、400、500、310、320、330、340、350、410、420、510、520:步骤。

具体实施方式

为使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的目的、特征和优点能够更加明显易懂,下面结合附图和事例对本发明中技术核心作进一步的详细说明。

本实施例提供一种Java内存Webshell的检测方法,如图1所示流程图,具体包括以下步骤:

步骤100:基于RASP技术在需要监测的Java Web服务中植入Hook点,Hook点包含Request对象、敏感方法、底层敏感行为。构建完成RASP监测模块,包含请求内容监控、敏感方法调用监控、底层敏感行为监控这三类监控点,构建完成此模块才能对用户请求进行监控。这里是基于JVM-Sandbox进行开发的Agent程序,在服务运行期间加载Agent程序到服务,构建完成RASP监测模块。JVM-Sandbox相对于其他JavaAgent做到比较好的类隔离机制,减少对于线上应用的入侵。

在一实施例中,根据Java内存Webshell的动态行为特征,选取的Hook点具体包含:请求Request对象为解析完HTTP请求的Request对象;敏感方法包含注册JavaWeb服务器各类组件的方法,其中注册组件包括JavaWeb容器的Filter、Listener、Servlet、Valve,Spring框架中的Interceptor、Controller,以及defineClass函数和java.lang.ApplicationShutdownHooks类;底层敏感行为包含命令执行、文件操作、创建连接。

在一实施例中,基于RASP技术将所有的Hook点植入到Java Web服务器,通过注入跟踪代码动态地检测目标应用程序的类,实现对应用数据进行过滤。RASP技术实现上采用Java Instrument和ASM。Java Instrumentation用于构建独立于JavaWeb服务器的Agent程序,这里支持在程序启动时使用启动参数“-javaagent”添加代理,以及在程序运行期间通过Attach API动态加载代理;ASM实现字节码增强,在需要检测的方法前后注入检测代码。

步骤200:用户发起Web请求,进入RASP监测模块,收集请求触发Hook点的信息。首先获取解析完HTTP请求的Request对象,得到请求的内容;如果调用敏感方法,触发敏感方法的Hook点,模块会收集Hook点的参数信息和调用栈信息,由此可以获得注册的Java组件类和调用敏感方法的类;如果执行敏感操作,触发底层敏感行为的Hook点,模块会收集Hook点的参数以及调用栈信息,用于后续的检测判定。

在一实施例中,Request对象Hook点收集的信息包含:解析完HTTP请求的Request对象内容涵盖URL、原始IP地址、参数、上传数据、cookie、时间戳、UserAgent、请求的方法,该部分信息主要用于对判定结果为Java内存Webshel补充信息,可用于安全人员对攻击进行分析和溯源;敏感方法Hook点和底层敏感行为Hook点收集的信息是方法参数和详细的调用栈信息,这两部分收集的信息用于Java内存Webshell的判定以及后续攻击的分析和定位。

步骤300:机器学习检测模块对收集来自敏感方法的Hook点的信息进行处理和检测分类。机器学习检测模块首先对收集的信息使用白名单过滤系统类和自定义类,未被过滤的类被认为危险类。使用机器学习算法对危险类进行检测,导出危险类的class文件,通过处理文件、提取特征、检测分类,判定是否属于Java内存Webshell。

在一实施例中,敏感方法Hook点的参数信息可以得到需要注册的组件类名,调用堆栈信息可以得到调用defineClass函数和java.lang.ApplicationShutdownHook的类。首先对这些类进行白名单过滤,白名单由系统类和用户自定义的类构成,例如,Tomcat中默认的Filter类“org.apache.tomcat.websocket.server.WsFilter”,采用DoubleArray Trie算法进行匹配过滤。将未被过滤的类判定为危险类。

步骤400:判定模块能够对底层敏感行为的Hook点的参数和调用栈信息进行处理。首先对参数进行白名单匹配,过滤可信赖的操作,然后使用Java内存Webshell检测算法对其进行检测识别,得到Java内存Webshell判定结果。

步骤500:告警模块对结果为Java内存Webshell或其他高危行为进行拦截和报警。对请求进行拦截,并返回一个自定义拦截页面。将RASP监测模块收集的所有信息与判定结果作为邮件内容发送到管理员邮箱报警,并记录到日志,信息主要用于安全人员后续分析,对其进行威胁定位和溯源。

图2所示为是机器学习算法模型的训练和检测流程图,具体流程如下:

步骤310:在机器学习检测算法中,数据集具体包含:JSPWebshell文件、Java内存Webshell文件、Tomcat源码的.class文件、JSP文件。首先对数据集进行数据预处理,将数据集中JSP语言的文件使用Tomcat中的“org.apache.jasper.JspC”编译生成.class文件,Java语言直接编译生成class文件,再使用Java命令提取数据集的Java汇编码。由于Java代码可以利用各种绕过混淆技术来改变自身的静态特征,因此直接提取Java汇编码的特征,能够提高准确率。

步骤320:对训练数据提取TF-IDF特征,并以此建立词汇表模型。Java汇编码的加权词频特征,可以有效区分正常的样本和恶意样本的。提取处理之后的训练数据的TF-IDF特征,进行向量化处理,并建立词汇表模型。

步骤330:在XGBoost算法训练过程中,采用GridSearchCV对模型进行参数调整,调整的参数主要是学习率和训练深度,得到分类效果最好的参数和结果,当学习率为0.2、训练深度为7时分类效果最好,保存最优参数的XGBoost算法模型。

步骤340:对于危险类,从JVM内存中导出危险类的class文件,同样使用Java命令提取文件的Java汇编码,用于后续特征提取。

步骤350:根据训练数据建立好的词汇表模型,计算测试样本的TF-IDF值,从而提取出测试样本相应的TF-IDF特征,并且使用保存的模型对其进行分类,得到危险类的检测结果。

图3所示为判定模块处理的流程图,具体流程如下:

步骤410:对底层敏感行为的Hook点收集的方法的参数使用白名单进行过滤,目的是排除可信赖的操作,避免引起误报。白名单是自定义的放行参数,白名单中的放行参数可以是命令执行中运行执行的命令、文件操作中常用的文件等。使用Double Array Trie算法进行匹配过滤。

步骤420:Java内存Webshell检测算法输入的参数包括危险类和底层敏感行为的调用栈信息,通过回溯调用栈信息与危险类进行对比,查看底层敏感行为是否由危险类进行调用,如果底层敏感行为来自危险类,判定结果为高度疑似Java内存Webshell,否则判断为其他利用方式的高危敏感行为。

图4所示为告警模块处理的流程图。具体流程如下:

步骤510:对判定结果为Java内存Webshell等高危行为的请求进行拦截,通过RASP技术Hook服务器的Http ServletRespond函数,返回一个自定义的错误页面。

步骤520:将RASP监测模块收集的信息和判定结果存储,并作为安全事件使用SimpleEmail发送邮件到管理员邮箱以告警。存储的Request对象的请求内容可以用于攻击溯源,存储的信息可以用于漏洞的定位、分析和修补漏洞。

实验数据

将本发明与两种不同的检测工具进行对比,实验环境和选取的工具如表1所示,其中,Copagent是目前大部分安全研究者用来检测Java内存Webshell的工具,OpenRASP是百度开源的产品,同样采用RASP技术,并且具有防御Webshell功能。

表1实验环境和工具

测试集为Github上收集的Java内存Webshell样本和项目,涵盖Filter、Listener、Servlet、Controller、Interceptor、Valve类型共19个,目前可获取的Java内存Webshell的样本较少,但已经涵盖了构建Java内存Webshell的核心方法,不同之处在于恶意代码的构建方式,这部分代码构建类似于文件形式的Webshell,因此对这些测试集进行检测结果具有可参考性。实验结果对比了检测方法、运行方式、检测率、识别率,检测率指在结果中检测出该Java内存Webshell,识别率为判定为Java内存Webshell,结果如表2所示。

表2检测方法对比结果

综合来看,都能对Java内存Webshell进行检测,但是OpenRASP只能在Java内存Webshell利用反序列化漏洞注入,或者执行命令等敏感操作时检测得到,并且不能识别为Java内存Webshell,原因在于OpenRASP可识别的漏洞类型未覆盖Java内存Webshell攻击,并且OpenRASP对Webshell行为进行防御是通过单一层次规则匹配识别,更易被攻击者绕过。Copagent缺点更加明显,只能对加载到JVM内存中的字节码文件进行扫描检测,不能做到实时防护,对检测还存在明显误报。而本发明通过关联分析敏感函数和敏感行为的调用,可以做到从根本上对Java内存Webshell进行防御,除了支持Premain之外,还可以通过Agentmain方式运行,即可以在运行期间挂载代理程序。从原理上来看,本发明基于JVM-sandbox开发,类隔离优于OpenRASP,对业务影响更小。综上,本发明的进步性在于弥补了实时监测Java内存Webshell的工具的空缺。

最后所应说明的是,以上实施案例仅用以说明本发明的技术方案而非限制,尽管使用事例对本发明进行了详细说明,本领域的技术人员应当理解,可对本发明的技术方案进行修改或者等价替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:多媒体播放方法、云服务器、系统及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类