被黑了

话说从前些天开始,我的某台服务器不时会出现外网访问响应速度变慢的情况,不过内网访问倒是一直正常。因为并不是核心服务器,所以一开始我便忽略了监控报警,但是随着服务器的可用性越来越差,我不得不腾出手来看看到底发生了什么。

既然是网络问题,那么可以在客户端用「mtr <IP>」检查一下网络情况:

mtr

mtr

发现丢包主要发生在最后一跳,接着可以在服务器用「sar -n DEV」检查带宽:

sar

sar

明显可见 TX 流量时不时便会到达一定的高峰,说明服务器在向外发送大量数据,导致触及了带宽阈值,那么到底是什么原因造成的呢?是时候祭出「iptraf」神器了,本例的服务器中,内网(eth0)正常;外网(eth1)异常:

iptraf (General interface statistics)

iptraf (General interface statistics)

单独监控外网网卡发现大部分流量都集中在 UDP 协议之上:

iptraf (Detailed interface statistics)

iptraf (Detailed interface statistics)

按照端口监控发现流量主要集中在 UDP 的 53 端口上。不过需要说明的是这里的端口既可能是源端口,也可能是目标端口,并且 iptraf 缺省只监控 1024 以下的端口:

iptraf (Statistical breakdowns)

iptraf (Statistical breakdowns)

监控具体的流量包,发现本地端口在不停的往远程的端口发请求:

iptraf (IP traffic monnitor)

iptraf (IP traffic monnitor)

随便提一下,在上面的确诊过程中,我详细描述了 iptraf 的用法,其实 iftop 也不错,但是需要说明的是,iftop 缺省并不显示端口信息(按 p 键显示)。

iftop

iftop

如果要想知道某个端口运行的是什么程序,可以使用 lsof 命令:

shell> lsof -i:<PORT>

结果发现可疑进程是通过 jenkins 用户启动的,于是我们基本上可以确认攻击者是通过 jenkins 漏洞攻陷服务器的,让我的服务器成为一台肉鸡,进而对目标发起 DNS 反射攻击。既然已经大概搞清楚了被攻击的原因,那么最简单的方法就是把问题服务器直接下线,重新配置一个新服务器,不过有时候事情并不简单,所以得想办法恢复它。

因为攻击者可能会在服务器上做手脚,所以我们需要仔细排查每一个存在隐患的地方,比如 cron 配置,还有 /etc/passwd 和 /etc/rc.d/init.d/* 等文件。此外,一些常用的命令也存在被感染的可能性,如果操作系统是 CentOS 的话,可以按如下方式确认:

shell> rpm -V $(rpm -qa)

它会检测文件在安装后是否发生了变化,如果是,那么会给出相应的提示,比如:长度变化提示 S,权限变化提示 M,最重要是的 MD5 变化的话提示 5,一旦发现了某个命令可能存在问题,重新安装它(前提是 yum 没有被感染):

shell> yum reinstall <PACKAGE>

即便再小心,也难免百密一疏,木马可能会死灰复燃,此时可以试试 sysdig 命令:

shell> sysdig -c spy_users

它会监控所有的用户行为,如果木马有动作,自然也会被记录下来。

回想整个事件,如果我不在外网服务器上乱装服务,或者及时升级到最新版,那么可能就不会被黑;如果我没有忽视监控报警,那么可能很早就会发现问题。不过出问题并不可怕,更重要的是我们要能理清问题的来龙去脉,别重复摔在同一个坑里。

被黑了》上有4条评论

    • 不错,出问题不可怕,可怕的是自己回避它。

发表评论

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