网络安全小白记一次服务器被攻击排查全过程
本文由 小茗同学 发表于 2018-03-01 浏览(4987)
最后修改 2018-03-02 标签:服务器 攻击 memcached squid

背景

早上到公司发现个人网站打不开,一直在转,用xshell连接服务器,虽然能连上,但是卡到爆,处于完全无法操作的状态,登录阿里云后台发现CPU使用率持续超过45%:

可怜的1M带宽也被全部占用(也就是截图中的1122kbps):

想查看是哪个进程占用这么大的CPU和带宽,但是带宽被未知程序占用,xshell完全连不上,怎么破!最后只能强制重启服务器,重启之后CPU和带宽立马恢复正常,网站也能访问了,想着再去排查一下之前是什么原因导致的,但是由于恢复正常了,没法排查,所以就算了,以为从此就恢复正常了,可谁知,没过半小时网站又打不开了!

持续跟进

当时正好是中午吃饭时间,所以就没管了,吃完饭回来继续弄!

无意中发现阿里云的网页版远程连接可以正常使用,一点都不卡(估计是优先级比较高,优先使用带宽),由于对linux网络相关命令不熟,只能一边百度一边尝试解决。

先是查了一下CPU占用排名前十的进程:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

发现仅仅memcached就占了25%!但是当时以为这是正常现象,因为我也没关注过平时正常情况下占用多少。

然后又查了下内存占用排名前十进程:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

主要是memcachedtomcat。但是我主要还是想看哪个进程占用了主要带宽,以及客户端IP,然后试了下iftop这个蛮不错的命令,需要单独安装:

yum install iftop

安装完之后直接可以使用了,执行iftop -i eth1可以查看占用带宽最高的若干IP:

不执行还不知道,一执行吓一跳,一个名为103.102.4.4的俄罗斯IP累计带宽占用了1.28G,我说怎么网站访问不了啊,原来全被你占用了!但是仅仅是这样还不知道具体是哪个程序占用了,执行iftop -i eth1 -P可以分端口查看:

果然全是memcached进程!然后随便查了下发现memcached没有认证机制,默认情况下任何人都可以访问!也是醉了,所以赶紧把它给停了,停了之后发现带宽立马恢复正常,网站也能访问了(只是报了一个memcached服务没找到的错误)!

所以当时我想到最快的解决办法应该是先把这个攻击的IP拉黑,然后把网站尽快恢复正常:

vim /etc/sysconfig/iptables
# 添加如下一行
-A INPUT -s 103.102.4.4 -j DROP
service iptables restart

拉黑之后再把memcached开启,发现没过多久又被攻击了,这次是换了一个IP,所以发现拉黑IP这个方法也不是个办法!然后发现只需要禁止外网访问memcached就可以,启动参数里面加上-l 127.0.0.1即可:

./memcached -p 11211 -d -u root -m 100 -c 256 -P /tmp/memcached.pid -l 127.0.0.1

关于这一块可以访问我写的另外一篇博客:Linux上安装和启动Memcached-禁止外网访问Memcached

至此,关于memcached导致的问题已解决,不过当我再次执行iftop -i eth1 -P命令时发现不止memcached这一个东西被攻击,squid也被攻击了,只是带宽占用不大:

但是发现我的squid压根没启动啊,没办法,一朝被蛇咬十年怕井绳,对网络安全不太在行的我干脆把squid给卸载了!至此,网站才算正式恢复正常!正常情况下,CPU占用才1%而已嘛!

更新

2018-03-02更新,今天收到了阿里云官方发的邮件,说受到大规模memcached恶意攻击: