搜索
查看: 777|回复: 3

浅谈变形PHP WEBSHELL检测

[复制链接]

432

主题

573

帖子

2543

积分

核心成员

Rank: 8Rank: 8

积分
2543
发表于 2013-10-22 15:41:29 | 显示全部楼层 |阅读模式
一、变形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扩展的性能和稳定性是一个严峻的考验,另外在服务器比较多的公司还存在一个推广和部署成本。


五、参考:
[1] http://hi.baidu.com/monyer/item/a218dbadf2afc7a828ce9d63
[2] http://www.laruence.com/2012/02/18/2560.html
[3]http://www.80vul.com/webzine_0x05/0x07%20%E6%B5%85%E8%B0%88%E4%BB%8EPHP%E5%86%85%E6%A0%B8%E5%B1%82%E9%9D%A2%E9%98%B2%E8%8C%83PHP%20WebShell.html

附件:check_webshell_demo.7z

您可以更新记录, 让好友们知道您在做什么...
854955425 该用户已被删除
发表于 2013-10-22 15:50:00 | 显示全部楼层
支持一下
专业回帖 该用户已被删除
发表于 2013-10-22 15:55:37 | 显示全部楼层
没看完~~~~~~ 先顶,好同志
zeroday 该用户已被删除
发表于 2013-10-24 14:41:18 来自手机 | 显示全部楼层
潜水是一种美德,回帖是一种责任!见贴就回,捞金币就闪。专业水金币。-----雷锋嗯哈哈哈哈哈哈哈哈哈
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表