CN116167048B - 用于EL表达式的Webshell检测方法及装置 - Google Patents

用于EL表达式的Webshell检测方法及装置 Download PDF

Info

Publication number
CN116167048B
CN116167048B CN202310058335.8A CN202310058335A CN116167048B CN 116167048 B CN116167048 B CN 116167048B CN 202310058335 A CN202310058335 A CN 202310058335A CN 116167048 B CN116167048 B CN 116167048B
Authority
CN
China
Prior art keywords
expression
detected
function
function call
sink
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310058335.8A
Other languages
English (en)
Other versions
CN116167048A (zh
Inventor
李扬
肖玉配
朱文雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Changting Future Technology Co ltd
Original Assignee
Beijing Changting Future Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Changting Future Technology Co ltd filed Critical Beijing Changting Future Technology Co ltd
Priority to CN202310058335.8A priority Critical patent/CN116167048B/zh
Publication of CN116167048A publication Critical patent/CN116167048A/zh
Application granted granted Critical
Publication of CN116167048B publication Critical patent/CN116167048B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供了一种用于EL表达式的Webshell检测方法及装置,属于信息安全技术领域,该检测方法包括:解析待处理的Jsp网页,获得抽象语法树;将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell,能够实现对EL表达式全面、准确的检测,且能够降低检测量,提高检测性能。

Description

用于EL表达式的Webshell检测方法及装置
技术领域
本申请各实施例属于信息安全技术领域,尤其涉及一种用于EL表达式的Webshell检测方法及装置。
背景技术
随着Java应用在企业环境中的应用越来越广泛,Jsp Webshell检测引擎的准确性和全面性至关重要。
现有的Jsp Webshell检测引擎只关心Jsp中的Java代码内容,而不关注Jsp包含Java表达式语言(即EL表达式)的情形;Java代码是编译型语言,其代码运行顺序、变量类型在编译时具有严格的检查和校验,所以基于静态分析实现Jsp Webshell检测相对容易实现和得到较好的结果,但是对于代码运行顺序、变量类型等是动态时,容易导致Webshell检测的误报和漏报。
基于此,需要一种新的检测方法。
发明内容
本说明书实施例提供一种用于EL表达式的Webshell检测方法、装置及设备,以解决部分或者全部问题:现有的Webshell检测方法并不关注EL表达式的情形,且对于动态分析,存在误报和漏报。
为解决上述技术问题,本说明书实施例是这样实现的:
本说明书实施例提供一种用于EL表达式的Webshell检测方法,该方法包括:
解析待处理的Jsp网页,获得抽象语法树;
将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
本说明书实施例还提供一种用于EL表达式的Webshell检测装置,该检测装置包括:
解析模块,解析待处理的Jsp网页,获得抽象语法树;
函数调用判断模块,将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
参数判断模块,执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
检测模块,若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
本说明书实施例还提供一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
解析待处理的Jsp网页,获得抽象语法树;
将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:解析待处理的Jsp网页,获得抽象语法树;将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell,能够实现对EL表达式全面、准确的检测,且能够降低检测量,提高检测性能。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分,本领域技术人员应该理解的是,这些附图未必是按比例绘制的,在附图中:
图1为本说明书实施例提供的一种用于EL表达式的Webshell检测方法的示意图;
图2为说明书实施例提供的一种用于EL表达式的Webshell检测方法的流程图;
图3为本说明书实施例提供的一种用于EL表达式的Webshell检测装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
Webshell(Web后台管理脚本)作为黑客惯用的入侵工具,是以php、asp、jsp、perl、cgi等网页文件形式存在的一种命令执行环境。黑客在入侵一个网站服务器后,通常会将Webshell后门文件与网站服务器Web目录下正常网页文件混在一起,通过Web访问Webshell后门进行文件上传下载、访问数据库、系统命令调用等各种高危操作,达到非法控制网站服务器的目的,具备威胁程度高,隐蔽性极强等特点。因此,Webshell的检测具有重要意义。
图1为本说明书实施例提供的一种用于EL表达式的Webshell检测方法的示意图。如图1所示,本说明书实施例提供的用于EL表达式的Webshell检测方法包括:
步骤S101:解析待处理的Jsp网页,获得抽象语法树。
Jsp(Java Server Pages),是一种动态网页开发技术,JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的WEB网页,然后返回给请求者。
Jsp网页就是带有JSP元素的常规Web页面,它由静态内容和动态内容构成。其中,静态内容指HTML元素,动态内容(JSP元素)包括指令元素、脚本元素、动作元素、注释等内容。
解析待处理的Jsp网页,即分析待处理的Jsp网页的代码中的请求包、存在哪些API调用等等。在本说明书实施例中,解析待处理的Jsp网页采用的是抽象语法树。
抽象语法树即Abstract Syntax Tree,简称AST,指的是源代码语法所对应的树状结构。也就是说,对于一种具体编程语言下的源代码,通过构建语法树的形式将源代码中的语句映射到树中的每一个节点上。
获得抽象语法树的过程为:代码=>词法分析=>语法分析=>AST。词法分析用于把字符串形式的代码转换为令牌(tokens)流,具体的,是将对象逐个扫描,获取每一个字母的信息,生成由对象组成的一维数组。语法分析是把一个令牌流转换成AST的形式,即将有关联的对象整合成树形结构的表达形式。这个阶段会使用令牌中的信息把它们转换成一个AST的表述结构,这样更易于后续的操作。
解析待处理的Jsp网页,获得抽象语法树,该抽象语法树是有EL表达式字构建而成的。
步骤S103:将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用。
EL表达式(Expression Language),即表达式语言,其作用是代替Jsp页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)。
如前所述,抽象语法树是有EL表达式构建而成的,在构建抽象语法树的过程中,会对其中的存在函数调用的EL表达式进行标记,按照预设的标记格式确定存在函数调用的EL表达式。在本说明书的一个实施例中,函数调用的预设的标记格式为小括号,若存在小括号,则认为EL表达式存在函数调用。
因此,可以在判断待检测EL表达式时,根据预设的标记格式即可确定待检测EL表达式是否存在函数调用。
函数调用是指使用已经定义好的函数的过程。
在本说明书实施例中,所述将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用,进一步包括:
若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式;
若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源;
若所述条件表达式的条件为污点源,则进行强制执行操作。
在本说明书实施例中,所述若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式,进一步包括:
若所述待检测EL表达式不是条件表达式,则执行所述待检测EL表达式后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式。
条件表达式由条件运算符构成,并常用条件表达式构成一个赋值语句,条件表达式内可以嵌套。在本说明书实施例中,条件表达式是以if开始的EL表达式,也可以是以三元表达式,例如,,由于 1 !=2,所以在我们会执行a=2这个操作,不会执行a=1。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,具体包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,基于所述预设的危险参数确定返回值,将所述返回值作为所述待检测EL表达式的执行结果。
在本说明书实施例中,若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源,进一步包括:
如果所述待检测EL表达式的条件不是污点,则执行所述待检测EL表达式中分支成立部分的EL表达式。
在本说明书实施例中,所述若所述条件表达式的条件为污点源,则进行强制执行操作,具体包括:
若所述条件表达式的条件为污点源,则按照所述条件表达式是污点源及所述条件表达式不是污点源的两个执行分支,完成所述待检测EL表达式的执行,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
步骤S105:执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数。
在本说明书实施例中,所述sink函数为预设的危险操作函数,所述sink函数至少包括:命令执行函数、脚本执行函数、库加载函数、反射执行和类加载函数、任意/危险类实例化函数。sink函数代表直接产生安全敏感操作(即违反数据完整性)或者泄漏隐私数据到外界(即违反数据保密性)的函数。
命令执行函数是指的进行命令执行的函数的参数是用户可控的。脚本执行函数是指作为命令执行的脚本,其中的待执行脚本内容是可控的。库加载函数是指用于加载的库的库名是用户可控的,例如用户可以修改库名。反射执行和类加载函数是指用于反射执行的类是可控的。任意类实例化函数,是指新建的类是用户可控的。危险类实例化函数是是实例化的类名是用户可控的。
在本说明书实施例中,所述执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否含有sink函数,具体地,执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用的函数签名,判断所述待检测EL表达式的函数调用是否含有sink函数。
函数签名定义了函数或方法的输入,函数签名的内容包括:函数的信息,包括函数名、参数类型、所在类的全限定名。因此,基于函数签名中的函数名,即可确定待检测EL表达式的函数调用是否含有sink函数。
在本说明书实施例中,所述基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否含有sink函数,进一步包括:
若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数;
若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数;
若所述待检测EL表达式的函数调用不存在预设的类危险函数,则将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
source函数指的是能够获取用户输入数据的函数,基于source函数能够确定用户输入的数据。例如,param.x即代表可以通过URL等传递的x参数,和Jsp中的request.getParam("x")基本等价。此外,source函数可以获取HTTP头(HTTP Header),请求体(PostBody)等。与前述描述相似,确定所述待检测EL表达式的函数调用是否存在source函数,也是基于待检测EL表达式的函数调用的函数签名确定的,具体地,基于待检测EL表达式的函数调用的函数签名中的函数名,以确定待检测EL表达式的函数调用是否存在source函数。
预设的类危险函数是指不属于Webshell,但是存在一定危险的函数,且该函数可能会影响EL表达式执行的函数。Runtime.exit(0),如果不加处理,会让检测引擎的进程直接退出。Thread.sleep(10000),如果不加处理,会让检测引擎卡住。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数,进一步包括:
若所述待检测EL表达式具有source函数,则直接返回污点源,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
污点源是指代表直接引入不受信任的数据或者机密数据到系统中。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数,进一步包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
由于预设的类危险函数可能会影响EL表达式执行,因此,为了保证EL表达式的正常执行,该预设的类危险函数需要进行模拟执行操作。模拟执行操作是检测引擎伪造一个执行结果,以便EL表达式能够继续往下传递执行,但是实际并不需要执行该伪造的执行结果。因此,模拟执行操作是指基于预设的类危险函数的参数,确定所述预设的类危险函数的模拟执行结果,将所述预设的类危险函数的模拟执行结果作为所述预设的类危险函数的执行结果。该模拟执行操作的优点在于,不真正执行该预设的类危险函数,且能够保证预设的类危险函数所在的EL表达式能够顺利执行。
步骤S107:若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
基于前述步骤,确定具有sink函数的待检测EL表达式后,可以认为该具有sink函数的待检测EL表达式为潜在的Webshell,为了进一步精准确定Webshell,进一步需要确定具有sink函数的待检测EL表达式的参数是否含有污点源,若具有sink函数的待检测EL表达式的参数为污点源,则认为该具有sink函数的待检测EL表达式属于Webshell,即具有sink函数,且sink函数的参数为污点源的EL表达式为WebshELl。
为了进一步理解本说明书实施例提供的Webshell的检测方法,图2为说明书实施例提供的一种用于EL表达式的Webshell检测方法的流程图。如图2所示,Jsp网页经过解析,获得抽象语法树。将抽象语法树中的每条EL表达式作为待检测EL表达式,则检测引擎依次检测每条待检测EL表达式。执行所述待检测EL表达式过程中,如果待检测EL表达式存在函数调用,则判断待检测EL表达式的函数调用是否为sin函数,若为sink函数,则进一步判断sink函数的参数是否为污点源,若sink函数的参数为污点源,则检测出Webshell,若sink函数的参数不是污点源,则将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
若待检测EL表达式的函数调用不是sink函数,则进一步判断待检测EL表达式的函数调用是否是source函数。若待检测EL表达式的函数调用是source函数,则直接返回污点源,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。若待检测EL表达式的函数调用不是source函数,则进一步判断待检测EL表达式的函数调用是否存在预设的类危险函数。若待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作;若待检测EL表达式的函数调用不存在预设的类危险函数,则当前待检测EL表达式执行结束后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
若待检测EL表达式不存在函数调用,则进一步判断待检测EL表达式是否为条件表达式。若待检测EL表达式的为条件表达式,且条件表达式的条件存在污点源,则进行强制执行操作;若待检测EL表达式不是条件表达式,则执行所述待检测EL表达式后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式。
为了进一步理解本说明书实施例提供的Webshell检测方法,下面将结合具体的实施例予以说明。
Jsp经解析后,获得的检测EL表达式包括:
${Runtime.getRuntime().exec(param.cmd)}
${a}
其中,第一个EL表达式${Runtime.getRuntime().exec(param.cmd)}存在函数调用,而第二个EL表达式${a}不存在函数调用,因此,采用本说明书的方案,只需要对第一个EL表达式即:${Runtime.getRuntime().exec(param.cmd)},进行检测。
之后,检测引擎进行沙箱执行,首先执行 Runtime.getRuntime(),其在允许的范围内,执行后得到Runtime实例,然后再执行 Runtime.exec(param.cmd),在执行前的notifyBeforeEvaluation中可以发现exec函数为sink,而param.cmd为污点源,所以这是一个Webshell。
本说明书实施例提供的Webshell检测方法,能够广泛应用于多个服务领域包括金融、互联网、保险、医疗、政务、制造业等。
采用本说明书实施例提供的检测方法,能够实现对EL表达式全面、准确的检测,且能够降低检测量,提高检测性能。
本说明书实施例提供了一种用于EL表达式的Webshell检测方法,基于同样的思路,本说明书实施例提供一种用于EL表达式的Webshell检测装置。图3为本说明书实施例提供的一种用于EL表达式的Webshell检测装置的示意图。如图3所示,本说明书实施例提供的用于EL表达式的Webshell检测装置包括:
解析模块301,解析待处理的Jsp网页,获得抽象语法树;
函数调用判断模块303,将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
参数判断模块305,执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
检测模块307,若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
在本说明书实施例中,所述基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否含有sink函数,进一步包括:
若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数;
若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数;
若所述待检测EL表达式的函数调用不存在预设的类危险函数,则将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数,进一步包括:
若所述待检测EL表达式具有source函数,则直接返回污点源,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数,进一步包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用,进一步包括:
若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式;
若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源;
若所述条件表达式的条件为污点源,则进行强制执行操作。
在本说明书实施例中,所述若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式,进一步包括:
若所述待检测EL表达式不是条件表达式,则执行所述待检测EL表达式后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,具体包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,基于所述预设的危险参数确定返回值,将所述返回值作为所述待检测EL表达式的执行结果。
在本说明书实施例中,所述若所述条件表达式的条件为污点源,则进行强制执行操作,具体包括:
若所述条件表达式的条件为污点源,则按照所述条件表达式是污点源及所述条件表达式不是污点源的两个执行分支,完成所述待检测EL表达式的执行,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述sink函数为预设的危险操作函数,所述sink函数至少包括:命令执行函数、脚本执行函数、库加载函数、反射执行和类加载函数、任意/危险类实例化函数。
本说明书实施例还提供一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
解析待处理的Jsp网页,获得抽象语法树;
将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell。
在本说明书实施例中,所述基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否含有sink函数,进一步包括:
若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数;
若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数;
若所述待检测EL表达式的函数调用不存在预设的类危险函数,则将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数,进一步包括:
若所述待检测EL表达式具有source函数,则直接返回污点源,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数,进一步包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用,进一步包括:
若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式;
若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源;
若所述条件表达式的条件为污点源,则进行强制执行操作。
在本说明书实施例中,所述若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式,进一步包括:
若所述待检测EL表达式不是条件表达式,则执行所述待检测EL表达式后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式。
在本说明书实施例中,所述若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,具体包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,基于所述预设的危险参数确定返回值,将所述返回值作为所述待检测EL表达式的执行结果。
在本说明书实施例中,所述若所述条件表达式的条件为污点源,则进行强制执行操作,具体包括:
若所述条件表达式的条件为污点源,则按照所述条件表达式是污点源及所述条件表达式不是污点源的两个执行分支,完成所述待检测EL表达式的执行,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
在本说明书实施例中,所述sink函数为预设的危险操作函数,所述sink函数至少包括:命令执行函数、脚本执行函数、库加载函数、反射执行和类加载函数、任意/危险类实例化函数。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (8)

1.一种用于EL表达式的Webshell检测方法,其特征在于,所述检测方法包括:
解析待处理的Jsp网页,获得抽象语法树;
将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell;
所述将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用,进一步包括:
若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式;
若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源;
若所述条件表达式的条件为污点源,若所述条件表达式的条件为污点源,则按照所述条件表达式是污点源及所述条件表达式不是污点源的两个执行分支,完成所述待检测EL表达式的执行,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
2.如权利要求1所述的检测方法,其特征在于,所述执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否含有sink函数,进一步包括:
若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数;
若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数;
若所述待检测EL表达式的函数调用不存在预设的类危险函数,则将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
3.如权利要求2所述的检测方法,其特征在于,所述若所述待检测EL表达式的函数调用不含有sink函数,则确定所述待检测EL表达式的函数调用是否存在source函数,进一步包括:
若所述待检测EL表达式具有source函数,则直接返回污点源,将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
4.如权利要求2所述的检测方法,其特征在于,所述若所述待检测EL表达式的函数调用不含有source函数,则确定所述待检测EL表达式的函数调用是否存在预设的类危险函数,进一步包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
5.如权利要求1所述的检测方法,其特征在于,所述若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式,进一步包括:
若所述待检测EL表达式不是条件表达式,则执行所述待检测EL表达式后,将所述待检测EL表达式的下一条EL表达式作为待检测表达式。
6.如权利要求4所述的检测方法,其特征在于,所述若所述待检测EL表达式的函数调用存在预设的类危险函数,则进行模拟执行操作,具体包括:
若所述待检测EL表达式的函数调用存在预设的类危险函数,基于所述预设的危险参数确定返回值,将所述返回值作为所述待检测EL表达式的执行结果。
7.如权利要求1所述的检测方法,其特征在于,所述sink函数为预设的危险操作函数,所述sink函数至少包括:命令执行函数、脚本执行函数、库加载函数、反射执行和类加载函数、任意/危险类实例化函数。
8.一种用于EL表达式的Webshell检测装置,其特征在于,所述检测装置包括:
解析模块,解析待处理的Jsp网页,获得抽象语法树;
函数调用判断模块,将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用;
参数判断模块,执行所述待检测EL表达式过程中,基于所述待检测EL表达式的函数调用,判断所述待检测EL表达式的函数调用是否具有sink函数;
检测模块,若所述待检测EL表达式的函数调用含有sink函数,则基于具有sink函数的待检测EL表达式,确定sink函数的参数为污点源的待检测EL表达式,检测出Webshell;
所述将所述抽象语法树中的每条EL表达式作为待检测EL表达式,判断所述待检测EL表达式是否存在函数调用,进一步包括:
若所述待检测EL表达式不存在函数调用,则判断所述待检测EL表达式是否为条件表达式;
若所述待检测EL表达式为条件表达式,则判断所述条件表达式的条件是否为污点源;
若所述条件表达式的条件为污点源,若所述条件表达式的条件为污点源,则按照所述条件表达式是污点源及所述条件表达式不是污点源的两个执行分支,完成所述待检测EL表达式的执行,随后将所述待检测EL表达式的下一条EL表达式作为待检测表达式,执行所述判断所述待检测EL表达式是否存在函数调用。
CN202310058335.8A 2023-01-20 2023-01-20 用于EL表达式的Webshell检测方法及装置 Active CN116167048B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310058335.8A CN116167048B (zh) 2023-01-20 2023-01-20 用于EL表达式的Webshell检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310058335.8A CN116167048B (zh) 2023-01-20 2023-01-20 用于EL表达式的Webshell检测方法及装置

Publications (2)

Publication Number Publication Date
CN116167048A CN116167048A (zh) 2023-05-26
CN116167048B true CN116167048B (zh) 2023-08-11

Family

ID=86417752

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310058335.8A Active CN116167048B (zh) 2023-01-20 2023-01-20 用于EL表达式的Webshell检测方法及装置

Country Status (1)

Country Link
CN (1) CN116167048B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018143605A1 (ko) * 2017-02-02 2018-08-09 주식회사 리투인소프트웨어 전자메일 제공 시스템 및 그 방법
CN112131573A (zh) * 2020-09-14 2020-12-25 深信服科技股份有限公司 安全漏洞的检测方法、装置及存储介质
CN114328208A (zh) * 2021-12-24 2022-04-12 中国电信股份有限公司 代码检测方法及装置、电子设备、存储介质
CN115168861A (zh) * 2022-06-10 2022-10-11 阿里云计算有限公司 数据安全验证方法、装置、设备及存储介质
CN115577363A (zh) * 2022-09-15 2023-01-06 华北电力科学研究院有限责任公司 恶意代码反序列化利用链的检测方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018143605A1 (ko) * 2017-02-02 2018-08-09 주식회사 리투인소프트웨어 전자메일 제공 시스템 및 그 방법
CN112131573A (zh) * 2020-09-14 2020-12-25 深信服科技股份有限公司 安全漏洞的检测方法、装置及存储介质
CN114328208A (zh) * 2021-12-24 2022-04-12 中国电信股份有限公司 代码检测方法及装置、电子设备、存储介质
CN115168861A (zh) * 2022-06-10 2022-10-11 阿里云计算有限公司 数据安全验证方法、装置、设备及存储介质
CN115577363A (zh) * 2022-09-15 2023-01-06 华北电力科学研究院有限责任公司 恶意代码反序列化利用链的检测方法及装置

Also Published As

Publication number Publication date
CN116167048A (zh) 2023-05-26

Similar Documents

Publication Publication Date Title
US8387017B2 (en) Black box testing optimization using information from white box testing
US9720798B2 (en) Simulating black box test results using information from white box testing
US9058489B2 (en) Marking documents with executable text for processing by computing systems
US8365291B1 (en) Browser extension control flow graph based taint tracking
US20060259973A1 (en) Secure web application development environment
Mohammadi et al. Detecting cross-site scripting vulnerabilities through automated unit testing
US20070083933A1 (en) Detection of security vulnerabilities in computer programs
Almorsy et al. Supporting automated vulnerability analysis using formalized vulnerability signatures
WO2009094384A2 (en) A method and apparatus for constructing security policies for web content instrumentation against browser-based attacks
JP2006523898A (ja) ソースコードの脆弱点の検出法および検出システム
US8572747B2 (en) Policy-driven detection and verification of methods such as sanitizers and validators
US20150302191A1 (en) Program execution apparatus and program analysis apparatus
US20070169065A1 (en) Computer program with metadata management function
US9158923B2 (en) Mitigating security risks via code movement
CN108140089B (zh) 分析装置、分析方法以及记录介质
US9098704B2 (en) Method for function capture and maintaining parameter stack
Kim et al. {FuzzOrigin}: Detecting {UXSS} vulnerabilities in browsers through origin fuzzing
Klein et al. Hand sanitizers in the wild: A large-scale study of custom javascript sanitizer functions
WO2020041411A2 (en) Object oriented smart contracts for utxo-based blockchains
US8646087B2 (en) Answering security queries statically based on dynamically-determined information
Klein et al. Accept all exploits: exploring the security impact of cookie banners
CN114626061A (zh) 网页木马检测的方法、装置、电子设备及介质
CN116167048B (zh) 用于EL表达式的Webshell检测方法及装置
CN115688108A (zh) 一种webshell静态检测方法及系统
Rafnsson et al. Fixing vulnerabilities automatically with linters

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant