浅谈变形PHP webshell检测

安全 应用安全
webshell比如eval($_POST[])大家都耳熟能详,近几年在常见的webshell基础上衍生了很多变种,加大了检测难度。

一、变形webshell

webshell比如eval($_POST[])大家都耳熟能详,近几年在常见的webshell基础上衍生了很多变种,加大了检测难度,下面先看几个从网上摘取的样本:

1、无ascii码和数字的webshell

2、隐藏关键字

3、编码 + 隐藏关键字

从目前已经公开的样本来看,变形的php webshell都是采取了隐藏关键字(eval、system等)的方法来躲避查杀。有一位monyer同学写过一篇webshell的检测文章,他把webshell拆分为下面的结构,执行数据和数据传递,检测思路是:以小括号为界限,匹配执行数据部分是否命中收集的样本的关键字。这种思路很好,个人觉得有两处不足:

1、需要人工维护收集新样本。

2、误报量不可预估。

再看这个结构,变形的webshell无非是隐藏了执行数据部分或者数据传递部分,不过无论怎么变形本质上还是去调用eval、调用system、exec等命令执行函数,杀毒软件通过异常行为来检测木马病毒,比如开机自启动,这种思想同样也可以用在webshell的检测中。获取行为数据是第一步。

二、PHP HOOK

这里我们只需要一些敏感的行为数据,比如eval、system的调用。实现方法很简单,hook这些php函数或语法结构,这里通过php扩展来实现hook。下面以eval和system来简要概述下hook的方法。

Eval是一个语法结构,调用eval最终会调用php内核的zend_compile_string函数,hook eval的只需要重写zend_complie_string函数即可,流程如下:

System是php的一个内部函数,php代码是转化为opcode(指令)来执行,函数调用的指令是ZEND_DO_FCALL,风雪之隅大牛在taint扩展(详见参考二)就是通过重载ZEND_DO_FCALL的方法实现了。因为我们并不需要hook每个内部函数,所以这里介绍另外一种方法,流程如下:

上报的数据写在一个日志文件中,包括文件名、调用函数名、代码在文件的行数。日志结构和内容如下:

附件中有eval、system函数hook实现的demo,具体细节可以查看代码。demo只在php-5.3.6上测试过,不兼容之处忘见谅。

三、检测

变形webshell分为两大类,下面依次说明一下检测逻辑。

1、执行数据隐藏

一个正常的程序员如果使用eval、system是不会刻意的转换隐藏的,如果发现某个函数执行了,代码中却找不到这个函数名,我们认为这是一个异常行为。以下面这个变形为例

比如黑客传入参数nonalpha.php?_=system&__=whoami执行了一条命令,日志会记录

我们在后端取nonalpha.php文件的第7行内容匹配system(字符串,如果没找到,则认为是一个变形webshell。

2、数据传递隐藏

先看下面这个例子

这个webshell通过编码的referer来传递攻击载荷,利用日志文件记录到的文件名和行数把代码上报到后端,和后端svn中的代码做对比,如果不一致,则认为是一个webshell。

四、不足

web承受着大量的访问请求,增加的php扩展的性能和稳定性是一个严峻的考验,另外在服务器比较多的公司还存在一个推广和部署成本。

责任编辑:蓝雨泪 来源: 博客
相关推荐

2014-12-16 10:28:49

2015-07-05 18:46:46

2018-10-06 05:00:53

2009-07-15 15:43:57

综合布线测试

2013-07-18 14:11:20

2011-05-30 13:28:00

PHP

2019-09-18 16:52:58

hyperf微服务php

2013-08-20 16:16:19

2013-07-27 20:19:14

2021-06-25 18:42:11

云主机

2016-08-31 14:59:39

软件虚拟化

2011-07-12 17:26:02

PHPPython

2011-08-09 15:20:38

2020-08-02 08:02:26

Webshell样本安全

2014-04-01 09:08:05

2009-07-09 10:15:23

PHP DOM

2023-10-10 19:00:57

云网关报文检测

2011-03-03 09:02:29

JavaScriptPHPAndroid

2022-11-18 12:14:27

模型研究

2009-07-07 11:20:12

php jsp
点赞
收藏

51CTO技术栈公众号