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

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

WBOY
WBOY원래의
2016-06-06 16:43:591834검색

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>

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

一些函数变种太多,工具只能扫描一些危险函数关键词
建议你人工审计吧..
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.