当前位置:首页 > 探索

服务器被黑

凌晨三点,服务手机在床头柜上震了一下。器被我以为是服务垃圾短信,翻了个身没理。器被过了十秒,服务又震了一下。器被接着是服务第三下、第四下,器被像有人拿手指头戳我肩膀。服务我摸过手机,器被屏幕上一排报警推送——CPU占用率100%,服务持续五分钟。器被那是服务我们那台跑着客户订单系统的小服务器,平时负载连20%都不到。器被

我爬起来打开笔记本,服务SSH连上去,第一眼看到的是top命令的输出里有个叫kdevtmpfsi的进程,吃掉了四个核心。这名字我从来没见过。顺手查了一下,是挖矿木马,专门盯着Redis未授权访问的漏洞往里钻。我们的Redis端口确实开着,密码?没设。当初图省事,想着内网环境没人会碰。

这就是典型的“门没锁,还怪贼惦记”。

我先把那个进程kill掉,删了对应的定时任务和启动脚本。以为完事了,结果十分钟后它又回来了。像蟑螂,踩死一只,暗处还有一窝。翻/var/spool/cron,发现被塞了三条定时任务,每两分钟从某个IP拉一次脚本执行。那个IP在荷兰,查了一下,是个被入侵的跳板机。

真正让我后背发凉的是另一件事。我查authorized_keys,里面多了一把SSH公钥。也就是说,对方不光在挖矿,还留了后门。这意味着我改密码、关端口都没用,人家已经能随时进来。我盯着那串公钥看了半分钟,脑子里闪过一个念头:这台机器上跑着客户最近三个月的订单数据,姓名、电话、地址,全在里面。

接下来做的事像拆弹。先把服务器从负载均衡里摘出来,切断外网访问,然后备份数据、重装系统。那把公钥、那个木马、那些定时任务,全部随着旧系统一起格式化掉。重装完,Redis加了密码,只监听本地,防火墙规则重新过了一遍,SSH禁用了密码登录。折腾到早上七点,天亮了,服务器重新上线,客户那边没什么感觉。

但我知道这事没完。后来我查日志,发现入侵发生在五天前。也就是说,那台机器被人当矿机用了五天,而我直到CPU报警才发现。五天里,对方可能翻过数据库,可能拷走过文件,也可能什么都没做,只是挖矿。我没法确定。这种“不确定”比报警本身更让人难受。

这件事之后,我给所有服务器加了一条规矩:Redis、MySQL、MongoDB,一律不允许裸奔在内网。内网不是保险箱,内网只是你觉得安全而已。攻击者从一台被攻陷的办公电脑跳进来,比从外网打进来容易得多。你以为的“内网环境”,在对方眼里就是一条没上锁的走廊。

还有一点,报警别只盯着CPU。那台机器被入侵的第一天,CPU就有异常波动,但被夜间正常的备份任务掩盖了。后来我把报警阈值调低,加了进程白名单监控。不是信不过系统,是信不过自己——人总有打盹的时候,机器不会。

现在那台服务器还在跑,Redis密码换了三次。每次登录看到kdevtmpfsi这个词,我都会想起那个凌晨。它像一根刺,扎在“应该没事”和“真出事了”之间。技术这行干久了,你会慢慢明白:安全不是一道墙,是一扇每天都要检查一遍的门。

分享到: