记一次异常流量盘查

2015年1月30日

早上收到 Linode 一张 『abuse ticket』,报告我的 vps 变成了肉鸡向外发送大小数据包。于是,马上登录 linode 查看流量记录,果然如此,而且攻击已经持续了8个小时了。

image

不忙不忙,先去泡一杯咖啡,坐下来慢慢看。

查看非法流量的来源

首先,要搞清楚非法流量是哪里产生的,它到底是个什么东西。登录 vps 之后,就用sudo iftop命令查看。不看不知道,一看吓一跳。原来是自己的 vps 正在向邻居 linode 狂发数据。又由于linode 之间是内网传输,速度竟然达到了150m/s。我猜应该是自己的 vps 被别人当做了肉鸡,接下来就排查一下是哪个 pid 发起的攻击。

接着,用sudo netstat -anpt查询 socket 状态,发现除了我自己的 ip 地址意外,还有一个陌生的 ip 连接到了。先尝kill它的 pid,杀死了之后又重新起来了。那么确认就是这个 ip 搞的鬼。

根据进程信息查看漏洞

既然已经找到了问题 ip,那么即刻要做的不是封杀它,而是先看用ps aux查看一下问题进程。我发现它是利用了root 账户进行攻击,按道理配置 vps 之后,我都会把 root 账户禁用,这次可能疏忽了。既然找到了病因,接下来就是封锁问题 ip。用 iptables 添加规则 iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP.完成之后再用sudo iftop查看流量立马下来了,oh yeah!

修补漏洞

其实很简单,只要禁止 root 帐号远程登录,以后就可以避免类似情况发生。打开/etc/ssh/sshd_config,修改PermitRootLogin no,然后重新启动 sshd 服务service /etc/init.d/ssh restart

另外还有一种方法,就是直接禁用 root账户。平时如果需要用到 root 权限操作,只要用sudo就可以了。用以下命令关闭 root:

    sudo passwd -l root

当你需要重新开启 root 的时候,输入:

    sudo passwd

先输入当前用户的密码,在输入新 root 的密码即可


2015年1月31日

重启动服务器

重启之后,突然发现异常流量又出现了。于是马上查看 iptables 规则

sudo iptables --list

发现之前添加的规则在重启之后消失了,于是在网上找到需要保存规则,方法如下:

  • 在 Ubuntu下,需要用 root 帐号登录,sudo行不通(如果上面禁用了 root,那么重新开启一下)
  • 输入

      iptables-save > /etc/iptables-rules
    
  • 最后编辑 /etc/network/interfaces,在最后一行插入

      pre-up iptables-restore < /etc/iptables-rules
    
  • 完成,重新启动之后运行sudo iptables --list,就可以看到之前保存的规则

修改当前用户密码

passwd

获取进程 pid 的父进程

cat /proc/xxxxxx/stat

xxxx 填入需要查看的 pid

2015年2月2日

安装扫描软件

分别用了下面两个扫描软件,扫描了一遍并没有发现任何异常,看来不靠谱。

ClamAV

RKHunter

网上寻找解决方案

首先在 v2ex 上找了一通,发现一个标题为『清理了一个服务器 DDos 木马』的帖子,发现楼主的症状与我的类似。于是仔细看了一下全部内容,其实中招的病毒并不是同一个,但是原理差不多。我感觉自己的 vps 也是被替换了某些文件,导致怎么 kill 进程都没有用。还了解到,可以替换文件的那种病毒叫做RootKit.

后来有根据病毒生成的异常进程名字『rghuoywvrf』在 google 上搜索,发现国外有一个帖子有相同的关键词,并且描述的问题与我完全一致。看到了一丝希望,详细查看。

这是一个类似 StackOverFlow 的问答网站,这个问题的第一条解答是重装系统。他的意思是这种病毒是 RootKit,修改了若干个系统内文件,用普通替换文件的方法很难删除干净。我觉得太麻烦,于是看第二条解答。

这个人的解决方法就是删除一些文件,而且还获得了一个 Support,这说明他的方法有效。另外如果是这样,那么这个病毒就不是 rootkit,所以完全不需要重新装系统,省去许多不必要的麻烦。于是我就开始按部就班删起来。越来越高兴,因为他的解决方案与我的症状完全吻合,看来就是这种病毒没跑了。做完之后reboot 一下,发现原来一直会自动开启的异常进程没有了。

到目前为止正常运行了16分钟,仍然没有见到异常进程。似乎是解决了,但决不能掉以轻心,一直开着iftop,一有异常流量出现马上关闭。

完整回答点击这里

2015年2月3日

为了确保 ssh 的22号端口不被GFW查封,我决定提前做好防范工作,以免到时候需要换服务器IP。

  • 打开 sshd_config 配置文件

      sudo vi /etc/ssh/ssh_config
    
  • Port 22下面添加Port YOUR_PORT(可以添加多个端口)

  • 打开 ssh_config 配置文件

      sudo vi /etc/sshd_config
    
  • Host *下面添加Port YOUR_PORT(可以添加多个端口)

  • 重启 ssh

      sudo service ssh restart
    
  • 搞定

Jan 30th, 2015

Comments