CN110610088A - 一种基于php的webshell检测方法 - Google Patents
一种基于php的webshell检测方法 Download PDFInfo
- Publication number
- CN110610088A CN110610088A CN201910862983.2A CN201910862983A CN110610088A CN 110610088 A CN110610088 A CN 110610088A CN 201910862983 A CN201910862983 A CN 201910862983A CN 110610088 A CN110610088 A CN 110610088A
- Authority
- CN
- China
- Prior art keywords
- script file
- webshell
- detected
- php
- threat
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Abstract
本发明公开一种基于php的webshell检测方法。所述方法包括:加载并执行基于php的待检测脚本文件;对待检测脚本文件中的每一条语句进行运算推理:对于语句中包含用户输入的运算以及与用户输入相关的运算,其返回值均推理为用户输入,对于其它运算返回实际的运算结果;对运算结果进行解析,提取威胁函数,如果提取的威胁函数中包含威胁参数,则判定待检测脚本文件是webshell。本发明通过对检测脚本文件进行运算推理及结果解析,对webshell变形进行等价还原,提高了对webshell的检测效率,解决了现有检测方法因php语言变形多,很难对webshell变形进行有效检测的问题。
Description
技术领域
本发明属于网络安全技术领域,具体涉及一种基于php的webshell检测方法。
背景技术
Webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环,也称作网页后门境。黑客在侵入一个网站后,通常会将网页后门文件与网站服务器web目录下正常的网页文件混在一起,从而能够通过浏览器来访问网页后门,得到一个命令执行环境,以达到控制网站服务器的目的。
php(Hypertext Preprocessor,超文本预处理器)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。php的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,可用于网络开发人员快速编写动态页面。php语言本身非常灵活,但由于其变形多,现有检测方法很难对webshell进行有效检测。
目前,基于特征的基于php的webshell检测方法主要有两种:第一种是基于模型的检测方法,对webshell的样本进行模型训练,从中提取有效特征,然后用训练好的模型对webshell进行判别;第二种是基于正则表达式的检测方法,根据webshell样本的特征,写出符合webshell特征的正则表达式,通过正则表达式匹配对webshell进行判别。第一种方法是通过对webshell样本进行训练构建模型,由于采用php语言的webshell变形比较多,用于训练的样本很难覆盖全部webshell变形,导致由训练构建的模型对于不能覆盖的webshell变形的识别效果比较差。而第二种方法的正则表达式匹配方式,在识别采用php语言的加密代码变形或者混淆编排变形的webshell上效果比较差,没有与之匹配的正则表达式。
发明内容
为了解决现有技术中存在的上述问题,本发明提出一种基于php的webshell检测方法,通过对待检测脚本文件进行运算推理及结果解析,对webshell变形进行等价还原,实现了对webshell的有效判别。
为实现上述目的,本发明采用如下技术方案:
一种基于php的webshell检测方法,包括以下步骤:
步骤1,加载并执行基于php的待检测脚本文件;
步骤2,对待检测脚本文件中的每一条语句进行运算推理:对于语句中包含用户输入的运算以及与用户输入相关的运算,其返回值均推理为用户输入;对于其它运算返回实际的运算结果;
步骤3,对运算结果进行解析,提取威胁函数,如果提取的威胁函数中包含威胁参数,则判定待检测脚本文件是webshell;威胁函数包括命令执行函数、回调函数、文件操作函数和可执行代码段函数,威胁参数包括用户输入参数、文件内容输入参数和数据库内容输入参数。
与现有技术相比,本发明具有以下有益效果:
本发明通过加载并执行基于php的待检测脚本文件,对待检测脚本文件中的每一条语句进行运算推理,对运算结果进行解析,提取威胁函数,若提取的威胁函数中包含威胁参数,则判定待检测脚本文件是webshell,实现了对待检测脚本文件的webshell检测。本发明通过对检测脚本文件进行运算推理及结果解析,对webshell变形进行等价还原,提高了对webshell的检测效率,解决了现有检测方法因php语言变形多,很难对webshell变形进行有效检测的问题。
附图说明
图1为本发明实施例一种基于php的webshell检测方法的流程图;
图2为进行运算推理的示意图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
本发明实施例一种基于php的webshell检测方法,如图1所示,所述方法包括以下步骤:.
S101、加载并执行基于php的待检测脚本文件;
S102、对待检测脚本文件中的每一条语句进行运算推理:对于语句中包含用户输入的运算以及与用户输入相关的运算,其返回值均推理为用户输入;对于其它运算返回实际的运算结果;
S103、对运算结果进行解析,提取威胁函数,如果提取的威胁函数中包含威胁参数,则判定待检测脚本文件是webshell;威胁函数包括命令执行函数、回调函数、文件操作函数和可执行代码段函数,威胁参数包括用户输入参数、文件内容输入参数和数据库内容输入参数。
在本实施例中,步骤S101主要用于加载并执行待检测脚本文件。下面给出一段脚本文件的代码:
上面的程序代码是一种比较常见的webshell变形,包括动态函数调用和参数字符串混淆变形。其中动态函数调用通过调用自定义函数decode,并传入参数′dvvhuw′来得到最终的值。自定义函数encode这里并未使用,此处可以理解为付对基于模型的检测方法增加的噪音,用于骗过检测模型使其无法进行有效检测。代码$a=″_″.″G″.″ET″为字符串拼接混淆变形。代码$b=$$a利用php语言的特征最终将$b的值转化为用户输入即$_GET,此处无法有效地通过正则表达式来表示字符串混淆变形。前面的代码为代码$a($c[′code′])作铺垫,即$a动态函数调用,$c[′code′]通过字符串混淆变形转化为用户输入。因此,现有的两种webshell检测方法均不能有效检测上面的脚本程序。
在本实施例中,步骤S102主要用于对待检测脚本文件中的每一条语句进行运算推理。运算推理主要是将语句中包含用户输入的运算以及与用户输入相关的运算的返回值均推理为用户输入。相关的运算很多,如赋值运算、字符串连接运算和数组运算等。如图2所示,上面一段脚本程序中,$a的运算结果为_GET,$b的运算结果为$_GET。$b为用户输入,因此与$b的相关运算返回结果都推理为用户输入,即$b[′cmd′]为用户输入,继而推理$e为用户输入;$e经过赋值运算,将值付给$c[′code′],因此$c[′code′]也推理为用户输入。
在本实施例中,步骤S103主要用于对运算结果进行解析并判断待检测脚本文件是否为webshell。判断方法是从运算结果中提取威胁函数,如果威胁函数中包含威胁参数,则判定待检测脚本文件是webshell;否则不是webshell。威胁函数包括命令执行函数(如exec,passthru,shell_exec)、回调函数(如call_user_func,call_user_func_array,array_diff_uassoc)、文件操作函数(如bzwrite,event_buffer_write,file_put_contents)和可执行代码段函数(如assert,eval,create_function),当然还包括一些其它函数(如fread,fgets,fgetc)。威胁参数包括用户输入参数(如_GET,_POST,_COOKIE,_REQUEST,_FILES,_SERVER,_ENV)、文件内容输入参数(如fopen,fread,fgets,fgetss)和数据库内容输入参数(如mysql_fetch_array,pg_fetch_array,sqlite_fetch_array),当然还包括一些其它函数输入参数(如getenv,getallheaders)。对于上面一段脚本程序,由于只有if分支条件中包含威胁函数,但if分支条件未满足,执行脚本程序时执行的是不包含威胁函数的else部分,因此执行完成后不包含威胁函数。所以上面一段脚本程序判定为不是webshell。
作为一种可选实施例,所述方法还包括:如果待检测脚本文件执行结果中包含语法错误,则待检测脚本文件不是webshell。
本实施例给出了一种快速确定待检测脚本不是webshell的技术方案。判断方法是,如果待检测脚本文件执行结果中包含语法错误,则认为待检测脚本文件不是webshell。由于有语法错误的脚本文件,无法生成语法树,也无法运行,是无效检测样本,因此不可能是webshell。一旦待检测脚本文件被判定为不是webshell,就结束检测,不必再执行后面的步骤;如果执行结果中不包含语法错误,需要执行后面的步骤进行进一步的检测。
作为一种可选实施例,所述方法还包括:如果待检测脚本文件中包含加密字符串,执行待检测脚本文件时将其解密,解密后生成新的代码段,如果所述代码段被威胁函数eval或assert或create_function调用,则将所述代码段生成新的脚本文件,并针对每个脚本文件进行webshell检测。
本实施例给出了一种待检测脚本文件中包含加密字符串的处理方法。对于有些经过base64_encode加密的字符串,执行时需要将其通过base64_decode解密,解密后会生成新的代码段。如果生成的新的代码段被威胁函数eval或assert或create_function调用,则将所述代码段生成新的脚本文件,然后并针对每个脚本文件重复执行步骤S101~S103对其进行webshell检测。根据php语言的特点,eval、assert和create_function三个函数可以执行代码段;且经过对大量的webshell样本分析发现,这三个函数在执行新的代码段的过程中,新的代码段通常含有分支语句,因此需要将其生成新的文件重新进行检测。
作为一种可选实施例,所述方法还包括:如果步骤S103的判定结果为待检测脚本文件不是webshell,且待检测脚本文件中包含分支语句,将待检测脚本文件生成语法树,将每个分支拆分成一个新的语法树,并将新的语法树生成新的脚本文件;针对每个脚本文件进行webshell检测。
本实施例给出了一种当待检测脚本文件判定为不是webshell,且待检测脚本文件中包含分支语句(if、switch等)时的处理方法。黑客为了绕过检测工具,会故意制造干扰,绕过正常程序的执行。比如,通过设置分支语句,使正常情况下执行不包含威胁函数的那个分支,从而使检测工具判为不是webshell。因此,需要对分支语句进行拆分,以覆盖所有的执行路径。对分支语句拆分后得到多个新的脚本文件,然后对多个新的脚本文件分别进行webshell检测。拆分方法是先将待检测脚本文件生成语法树,然后将每个分支拆分成一个新的语法树,并将拆分后的语法树生成新的脚本文件。由脚本文件生成语法树的方法主要包括:词法扫描分析,将源文件转换成token流;语法分析,从token流生成抽象语法树;从抽象语法树生成op arrays。上面的脚本文件中包含下面的分支语句:
if(isset($d)&&$d==′a′){
$a=decode(′dvvhuw′);
$a($c[′code′]);
}else{
echo″hello″;
}
该分支语句包含两个分支,可拆分成两部分,第一部分为:
$a=decode(′dvvhuw′);
$a($c[′code′]);
第二部分为:
echo″hello″;
将上述分支语句拆分后得到分别与第一部分和第二部分对应的脚本文件1和脚本文件2。执行脚本文件1后,$c运算推理为用户输入$_GET,$a运算结果为assert,其中assert为威胁函数,因此它会被提取出来,且其参数$c[′code′]的推理结果为$_GET,是用户输入,属于威胁参数。因此脚本文件1判为webshell。上面列出的脚本文件判为webshell。
上面列出的脚本文件经语法树拆分、运算推理和结果解析后,实际上被等价还原为:″Function_Name″:″assert″,″Arguments″:[″′$_GET;″′]。由于assert为威胁函数,参数$_GET属于威胁参数,所以上面列出的脚本文件判为webshell。
为了提高拆分效率,可对分支内的函数调用进行等级划分,并根据等级高低进行打分,按照打分从高到低的顺序对分支排序,只拆分排在前面的几个分支。函数调用按照等级从高到低分为命令执行、动态函数调用、回调函数调用、数据库函数调用和其他函数调用五个等级。
作为一种可选实施例,所述方法还包括:如果在设定的时间阈值内没有返回待检测脚本文件是否为webshell的结果,判定待检测脚本文件不是webshell。
本实施例给出了一种提高检测效率的技术方案。通过设定时间阈值(最长检测时间),当检测时间超过设定的时间阈值时中止检测,并判定待检测脚本文件不是webshell。这样就可以避免webshell检测耗时过长。
上述仅对本发明中的几种具体实施例加以说明,但并不能作为本发明的保护范围,凡是依据本发明中的设计精神所做出的等效变化或修饰或等比例放大或缩小等,均应认为落入本发明的保护范围。
Claims (5)
1.一种基于php的webshell检测方法,其特征在于,包括以下步骤:
步骤1,加载并执行基于php的待检测脚本文件;
步骤2,对待检测脚本文件中的每一条语句进行运算推理:对于语句中包含用户输入的运算以及与用户输入相关的运算,其返回值均推理为用户输入;对于其它运算返回实际的运算结果;
步骤3,对运算结果进行解析,提取威胁函数,如果提取的威胁函数中包含威胁参数,则判定待检测脚本文件是webshell;威胁函数包括命令执行函数、回调函数、文件操作函数和可执行代码段函数,威胁参数包括用户输入参数、文件内容输入参数和数据库内容输入参数。
2.根据权利要求1所述的基于php的webshell检测方法,其特征在于,所述方法还包括:如果待检测脚本文件执行结果中包含语法错误,则待检测脚本文件不是webshell。
3.根据权利要求1所述的基于php的webshell检测方法,其特征在于,所述方法还包括:如果待检测脚本文件中包含加密字符串,执行待检测脚本文件时将其解密,解密后生成新的代码段,如果所述代码段被威胁函数eval或assert或create_function调用,则将所述代码段生成新的脚本文件,并针对每个脚本文件进行webshell检测。
4.根据权利要求1所述的基于php的webshell检测方法,其特征在于,所述方法还包括:如果步骤3的判定结果为待检测脚本文件不是webshell,且待检测脚本文件中包含分支语句,将待检测脚本文件生成语法树,将每个分支拆分成一个新的语法树,并将新的语法树生成新的脚本文件;针对每个脚本文件进行webshell检测。
5.根据权利要求1所述的基于php的webshell检测方法,其特征在于,所述方法还包括:如果在设定的时间阈值内没有返回待检测脚本文件是否为webshell的结果,判定待检测脚本文件不是webshell。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910862983.2A CN110610088A (zh) | 2019-09-12 | 2019-09-12 | 一种基于php的webshell检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910862983.2A CN110610088A (zh) | 2019-09-12 | 2019-09-12 | 一种基于php的webshell检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110610088A true CN110610088A (zh) | 2019-12-24 |
Family
ID=68892667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910862983.2A Pending CN110610088A (zh) | 2019-09-12 | 2019-09-12 | 一种基于php的webshell检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110610088A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111523118A (zh) * | 2020-04-15 | 2020-08-11 | 北京升鑫网络科技有限公司 | 一种Webshell检测方法、装置、存储介质和设备 |
CN112073418A (zh) * | 2020-09-10 | 2020-12-11 | 北京微步在线科技有限公司 | 加密流量的检测方法、装置及计算机可读存储介质 |
CN113489713A (zh) * | 2021-06-30 | 2021-10-08 | 平安科技(深圳)有限公司 | 网络攻击的检测方法、装置、设备及存储介质 |
CN113746784A (zh) * | 2020-05-29 | 2021-12-03 | 深信服科技股份有限公司 | 一种数据检测方法、系统及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598866A (zh) * | 2016-12-22 | 2017-04-26 | 合肥国信车联网研究院有限公司 | 一种基于smali中间语言的静态检测系统及方法 |
CN106815524A (zh) * | 2015-11-27 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 恶意脚本文件的检测方法及装置 |
CN107103237A (zh) * | 2016-02-23 | 2017-08-29 | 阿里巴巴集团控股有限公司 | 一种恶意文件的检测方法及装置 |
CN109189463A (zh) * | 2018-08-28 | 2019-01-11 | 杭州百腾教育科技有限公司 | 一种对程序代码自动进行判断的控制方法及控制装置 |
-
2019
- 2019-09-12 CN CN201910862983.2A patent/CN110610088A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815524A (zh) * | 2015-11-27 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 恶意脚本文件的检测方法及装置 |
CN107103237A (zh) * | 2016-02-23 | 2017-08-29 | 阿里巴巴集团控股有限公司 | 一种恶意文件的检测方法及装置 |
CN106598866A (zh) * | 2016-12-22 | 2017-04-26 | 合肥国信车联网研究院有限公司 | 一种基于smali中间语言的静态检测系统及方法 |
CN109189463A (zh) * | 2018-08-28 | 2019-01-11 | 杭州百腾教育科技有限公司 | 一种对程序代码自动进行判断的控制方法及控制装置 |
Non-Patent Citations (7)
Title |
---|
佚名: "PHP一句话Webshell变形总结", 《HTTPS://WWW.JB51.NET/HACK/63597.HTML》 * |
你要的黑不是白: ""雷火齐鸣·最燃公测"青藤云安全首次进行雷火引擎Webshell公开测试", 《HTTPS://WWW.FREEBUF.COM/FEVENTS/234637.HTML》 * |
傅建明: "基于CNN的webshell文件检测", 《郑州大学学报(理学版)》 * |
天王盖地虎: "一类混淆变形的Webshell分析", 《WWW.ANQUANKE.COM/POST/ID/98889?FROM=TIMELINE》 * |
杜海章等: "PHP webshell实时动态检测", 《网络安全技术与应用》 * |
王文清等: "基于组合策略的Webshell检测框架", 《计算机工程与设计》 * |
默安科技_影武者实验室: "PHP WebShell变形技术总结", 《HTTPS://WWW.FREEBUF.COM/ARTICLE/WEB/155891.HTML》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111523118A (zh) * | 2020-04-15 | 2020-08-11 | 北京升鑫网络科技有限公司 | 一种Webshell检测方法、装置、存储介质和设备 |
CN113746784A (zh) * | 2020-05-29 | 2021-12-03 | 深信服科技股份有限公司 | 一种数据检测方法、系统及相关设备 |
CN113746784B (zh) * | 2020-05-29 | 2023-04-07 | 深信服科技股份有限公司 | 一种数据检测方法、系统及相关设备 |
CN112073418A (zh) * | 2020-09-10 | 2020-12-11 | 北京微步在线科技有限公司 | 加密流量的检测方法、装置及计算机可读存储介质 |
CN112073418B (zh) * | 2020-09-10 | 2022-01-14 | 北京微步在线科技有限公司 | 加密流量的检测方法、装置及计算机可读存储介质 |
CN113489713A (zh) * | 2021-06-30 | 2021-10-08 | 平安科技(深圳)有限公司 | 网络攻击的检测方法、装置、设备及存储介质 |
CN113489713B (zh) * | 2021-06-30 | 2022-10-25 | 平安科技(深圳)有限公司 | 网络攻击的检测方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797298B2 (en) | Automating identification of code snippets for library suggestion models | |
CN110610088A (zh) | 一种基于php的webshell检测方法 | |
US11354225B2 (en) | Automating identification of test cases for library suggestion models | |
US11714611B2 (en) | Library suggestion engine | |
US11061648B2 (en) | Method and system for arbitrary-granularity execution clone detection | |
US11494181B2 (en) | Automating generation of library suggestion engine models | |
US20240126543A1 (en) | Library Model Addition | |
CN111639337B (zh) | 一种面向海量Windows软件的未知恶意代码检测方法及系统 | |
Lin et al. | Automated forensic analysis of mobile applications on Android devices | |
CN109857641B (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
RU91213U1 (ru) | Система автоматического составления описания и кластеризации различных, в том числе и вредоносных, объектов | |
US20240045971A1 (en) | Scalable source code vulnerability remediation | |
CN112131120B (zh) | 一种源代码缺陷检测方法及装置 | |
CN112688966A (zh) | webshell检测方法、装置、介质和设备 | |
CN114911711A (zh) | 一种代码缺陷分析方法、装置、电子设备及存储介质 | |
CN115688108B (zh) | 一种webshell静态检测方法及系统 | |
CN116032654B (zh) | 一种固件漏洞检测及数据安全治理方法和系统 | |
KR102174475B1 (ko) | 머신러닝을 이용하여 애플리케이션의 난독화 또는 패킹 여부를 식별하는 시스템과, 그것을 포함하는 은폐된 멀웨어 탐지 분류 시스템 및 방법 | |
KR102608014B1 (ko) | 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치 | |
CN116305131B (zh) | 脚本静态去混淆方法及系统 | |
Shi et al. | CAMFuzz: Explainable Fuzzing with Local Interpretation | |
Qiu et al. | Return Instruction Classification in Binary Code Using Machine Learning | |
Tao et al. | Research and application of a new fuzz-test framework |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191224 |