导读:php
服务器忽然负载比日常高出了50%,通过长时间分析发现原来是黑客利用nginx的一个漏洞,经过图片上传了含有代码的图片,而后调用图片使用post传入代码,生成一个含有推广连接代码的php可执行文件,代码在调用时须要屡次解密,所以直接致使负载升高。linux
原由:nginx
今天早上来到公司照例打开cacti监控查看服务器的运行状况,忽然发现两台网站服务器的负载比平时高了50%,这个主要从CPU的使用状况以及服务器的load值来看。web
排查:安全
因而赶忙登陆到服务器上使用top命令查看,发现是一些php-fpm的进程瞬间占用了大量的CPU,奇怪,平时那些php-fpm的进程占用CPU不多超过2%的,今天怎么有的会达到100%,因而赶忙咨询运维的同事昨天是否是有程序发布到正式环境。同事回答倒是有,发布时间为19:48左右,对照cacti的查看,发现负载升高是在凌晨3点中左右,所以能够初步确认发布和负载升高没什么直接的关系。服务器
那么究竟是什么致使服务器的负载一会儿升高了那么多呢?带着这个疑问,我开始采用linux下的一些命令行工具开始排查,过程以下:运维
首先查看进程是否打开什么文件,找到进程高的pid,cat /proc/pid/fd 没有发现有打开的文件,接着采用strace –p pid跟踪相应的占用cpu高的php-fpm进程,也很难发现问题,由于占用CPU高的进程不是一直占用CPU高,而是瞬间的,因此很难跟踪。而后采用lsof命令查看相应的占用CPU高的pid,lsof –p pid ,发现路径都是指向bbs根目录下,所以初步肯定bbs根目录一定有蹊跷。dom
目前能够肯定的是bbs根目录和此次的负载高有直接的联系,那么如何找到其中的联系呢?个人思路是想找出是什么php文件引发的,也就是php-fpm进程是调用的哪一个PHP文件的时候会出现负载忽然升高的状况呢?请教了几个高手都不清楚,在网上找了半天也没找到合适的答案,忽然想起前段时间出现相似的木马事件,也是致使服务器负载高了不少,上次木马事件是由于nginx一个文件上传的漏洞致使,而且为了防止此类事情的发生已经写了一个专门检测php文件的脚本,采用对文件进行md5的形式,若是如今的文件的md5和原始文件不匹配就会发短信和邮件报警。同时也开启了nginx上post日志,会记录用户执行post操做的内容。彷佛忽然来了灵感,赶忙运行了那个文件检测脚本,发现一个forums.php异常,服务器上原本不存在这个文件的,攻击者为了隐藏其连接,对该文件中的代码作了30屡次的加密封装,经过开发同事的协助解密该文件后发现以下内容:php-fpm
很明显,服务器中马了。将此文件备份后删除,服务器的负载立刻降了下来,看来这个文件就是罪魁祸首了。如今知道了是这个文件致使的,那么这个文件是经过什么方式上传上来的呢?如何避免再次被种马,接下来详细分析一下是什么漏洞致使了此次木马事件,如何来预防?工具
分析:
查看到那个木马文件的更改时间是凌晨的3点零4分,那么这个文件的上传时间可能就是凌晨的3点零4分,带着这个疑问,就去查看服务器网页日志文件,发现了攻击的蛛丝马迹,从日志中显示,该用户是经过上传头像,头像中含有php代码,而后利用Nginx %00空字节执行任意代码(php)漏洞,经过POST /ucenter/data/tmp/upload545562.jpg%00.php的方式,把代码写入到论坛根目录,从http://sebug.net/vuldb/ssvid-20898查到了该漏洞,nginxnginx 0.5.*、nginx 0.6.*、nginx 0.7 <= 0.7.6五、nginx 0.8 <= 0.8.37这些版本都存在这个漏洞,只须要将版本升级到0.8.37以上的版本就能解决,所以将立刻将nginx升级至1.0.12版本,问题解决!
经验教训:
经过此次木马事件,有几个教训和心得和你们分享一下:Ø 积极关注服务器的相关安全漏洞,Nginx %00的漏洞去年凌晨的2011-07-20就出来了,若是关注及时的话这次木马时间彻底能够避免。Ø 对全部的程序文件都按期的进行md5校验,当出现不一致的时候检查代码文件,能更快的发现代码文件被改的迹象,减小损失。Ø 对服务器的权限严格控制,若是设置了论坛根目录不能写入,这次攻击也能避免。Ø 增强监控,天天关注服务器的运行状况,对服务器忽然的异常保持敏感并立刻着手排查。所以之后主要从这三方面来增强web服务器的安全。