东窗事发
最近在忙着做一个大项目,几乎没有什么空闲时间用来写文章了。
这个大项目的测试环境部署在一台从腾讯云购买的服务器上。
服务器是朋友买的,绑定的是朋友的微信号。
前两天的一个凌晨,朋友突然收到一条来自腾讯云的安全告警通知。
第二天我去控制台看了下详情,密码被人暴力破解了!
第一件事情,我先把密码改掉了。
之前随便设了个密码,只有 8 位,可能太过于简单,只被试了 1400 多次就被攻破。
这里我得到一个教训,有公网 IP 的服务器一定要设置很复杂的密码。
腾讯云最多可以设置 30 位密码,于是这次我就设置了 30 位的密码。
改完之后我又开始检查服务器是否被注入木马、检查数据库是否被勒索、查看有没有近期新文件、查看有没有新开启的端口、新增加的用户等等。
经过一番检查,没发现什么问题(实际上这些记录都被黑客清掉了)。于是我重启了服务器,然后没有继续理会这件事。但心里总感觉应该没有这么简单。
斗智斗勇
第三天早上,在我部署应用时发现 CPU 占用率已经 100%了!
于是我查看了下 CPU 被占用情况。
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
日志如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 28338 182 0.0 2437008 2732 ? Ssl 15:05 147:05 /usr/local/bin/wordpress root 25257 14.5 0.9 764436 36020 ? Ssl 16:25 0:00 npm root 23779 0.4 0.3 711348 14752 ? Sl 14:59 0:23 /usr/bin/ophvyn mongod 1405 0.1 1.2 989616 47732 ? Sl Mar30 6:28 /usr/bin/mongod -f /etc/mongod.conf root 9 0.0 0.0 0 0 ? R Mar30 0:09 [rcu_sched] root 8 0.0 0.0 0 0 ? S Mar30 0:00 [rcu_bh] root 789 0.0 0.0 4388 556 ? Ss Mar30 0:00 /usr/sbin/acpid root 775 0.0 0.0 26380 1740 ? Ss Mar30 0:00 /usr/lib/systemd/systemd-logind root 748 0.0 0.0 55528 1100 ? S<sl Mar30 0:05 /sbin/auditd root 7 0.0 0.0 0 0 ? S Mar30 0:00 [migration/0]
一个名为 wordpress 的进程已经占用了 182 的 CPU。
但我并没有在服务器上安装过 wordpress,看来这个就是黑客植入的木马了。
初步预测,我认为这是一个挖矿程序。
接着,我开始处理这个挖矿木马。
首先杀掉这个线程。
kill -9 28338
然后删除 wordpress 文件。
CPU 占用率立马降下来了,但我觉得事情并没结束,人家既然有本事搞我的服务器,不可能就只有这么两下子。
于是我开始耐心的等待是否有其他变化。
果不其然,在几分钟后,服务器的 CPU 占用率再次飘升 100%。
当我再次查看占用 CPU 最高的进程时,又看到了那个 wordpress。我估计它是有一个守护进程或者定时任务。
我开始找守护进程。
ps -eo ppid,pid,sid,stat,tty,comm | awk '{ if ($2 == $3 && $5 == "?") {print $0}; }'
日志如下:
0 1 1 Ss ? systemd 1 454 454 Ss ? systemd-journal 1 481 481 Ss ? systemd-udevd 1 484 484 Ss ? lvmetad 1 748 748 S<sl ? auditd 1 772 772 Ssl ? polkitd 1 775 775 Ss ? systemd-logind 1 776 776 Ss ? dbus-daemon 1 778 778 Ss ? ntpd 1 783 783 Ss ? lsmd 1 789 789 Ss ? acpid 1 1054 1054 Ss ? dhclient 1 1126 1126 Ssl ? tuned 1 1135 1135 Ss ? vsftpd 1 1249 1249 Ssl ? rsyslogd 1 1255 1255 Ss ? atd 1 1258 1258 Ss ? crond 1 1555 1555 Ss ? sshd 1555 1956 1956 Ss ? sshd 1956 2009 2009 Ss ? bash 1 2380 2380 Ss ? nginx 1 2860 2860 Ssl ? node 1 28338 28338 Ssl ? wordpress 2860 30275 30275 Ssl ? node
果然有一个 wordpress 的守护进程,而且奇怪的是,竟然有两个 node 进程。我的服务器上明明只运行了一个 node 进程。从 PID 来看,后面这个 30275 的 node 进程是在 wordpress 之后启动的。
看来这个 node 和 wordpress 必然存在某种关系。
于是我把这三个进程都杀掉了,同时删除了 wordpress 文件。
在观察了半小时后,服务器好像恢复正常了。
当天我睡了个好觉。
死灰复燃
今天早上,当我再次打开服务器时,发现 CPU 又被占用 100%了!
黑客的手段果然足够高明。
这次我重复昨天的步骤,然后观察服务器的变化。
过了一会,我发现 IO 有波动,然后 CPU 再次飘升 100%。
然后查看端口占用情况。
netstat -nlpt
日志如下:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:43575 0.0.0.0:* LISTEN 23779/ophvyn tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1405/mongod tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2380/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1555/sshd tcp6 0 0 :::21 :::* LISTEN 1135/vsftpd
当我看到那个名为 ophvyn 、PID 为 23779 的 43575 的端口,就像是看到了黎明的曙光。
看来它的作用就是从远程服务器上下载木马。
在这里又得到一个教训,配置安全组一定要慎重,一定不要全部开放。
由于这个是测试服务器,当时为了调试方便,就开放了所有端口。
接下来要杀掉 ophvyn。
首先查看 ophvyn 的详细信息。
ps 23779
找到了它的所在位置。
PID TTY STAT TIME COMMAND 23779 ? Sl 0:31 /usr/bin/ophvyn
我把相关的所有进程全部关闭,并把所有相关文件全部删除。
等了大半天,没有再出现什么幺蛾子。
世界好像清净了。
从头再来
一切都恢复了往日的平静,就好像什么都没发生过。
在第三天的下午,我决定把服务器上的数据备份下来,重新安装系统,和黑客彻底说再见。
在接到警告的第一天,我就可以备份数据,重装系统的。之所以没那么做,就是想看看黑客到底会对我的服务器做些什么。现在看也看了,折腾也折腾了,最后仍然选择重装服务器。