|
3月17日凌晨两点,网站运维群里弹出一条告警:官网首页被替换成了一个博彩页面。被植点进去一看,入木原本的马整产品介绍全没了,只剩下一张红底金字的改报告赌博广告图。更糟的网站是,搜索引擎已经收录了那个页面,被植快照里清清楚楚挂着我们的入木域名。 这不是马整简单的首页篡改。登录服务器后发现,改报告攻击者通过一个一年前上传的网站旧版编辑器插件留下的后门,拿到了webshell权限。被植那个插件早就不用了,入木但文件一直没删,马整藏在 /uploads/2022/backup/ 目录下,改报告文件名伪装成 cache_thumb.php。谁会在意一个缓存缩略图文件呢? 排查过程比想象中麻烦 先封了入口,把网站切到维护页。然后开始翻日志。Nginx的access.log里,攻击者的请求其实有规律——每次都在凌晨1点到4点之间,User-Agent伪装成Googlebot,但IP反查回去是越南的VPS。他先试探性地访问了几个不存在的路径,返回404后,隔了十几秒才去碰那个后门文件。这种节奏说明不是扫描器自动打的,是人工在操作。 更头疼的是,木马不止一个。除了那个webshell,还在 /wp-content/uploads/ 里发现了三个混淆过的PHP文件,代码里用了 eval(gzinflate(base64_decode(...))) 这种多层嵌套。其中一个文件的功能是往数据库的 wp_options 表里写一条定时任务,每隔六小时检查一次远程服务器有没有新指令。也就是说,就算删了首页的木马,他还能再回来。 清理和加固 先把整站文件跟三个月前的备份做了diff,找出所有被改动或新增的文件。备份也不干净——有两处后门在备份之前就存在了。所以不能直接恢复,得手动挑出干净文件。数据库里用 SELECT * FROM wp_options WHERE option_name LIKE '%transient%' 扫了一遍,删掉了十七条异常记录。 改密码这种事就不说了。关键动作是:删掉所有不用的插件和主题,连文件夹都不留;把 uploads 目录的PHP执行权限关掉,在Nginx里加了一条 location ~* /uploads/.*\.php$ { deny all; };给wp-admin和wp-login.php加了IP白名单,虽然麻烦点,但总比再被爆破强。 还有个小细节:攻击者留了一个 .htaccess 文件在根目录,里面写了 RewriteRule ^google(.+)\.html$ /go.php [L],用来做流量跳转。这种手法现在不新鲜了,但第一次看到的时候还是愣了一下——他连伪装成谷歌验证文件的路径都想好了。 后续观察 清理完到现在三周了,没再出现异常请求。搜索引擎那边的快照也通过站长平台申请删除了。不过说实话,这种事防不胜防。那个旧插件是两年前一个离职同事装的,当时图方便,没想到留了雷。现在每周五下午我会花二十分钟扫一遍日志里的404和500请求,看看有没有人在试探。不是强迫症,是被搞怕了。 另外提一句,别太信那些“一键扫描木马”的工具。这次中的三个后门里,有两个是工具扫不出来的,因为代码里用了变量函数和字符串拼接,静态特征匹配不到。最后还是靠人工比对文件修改时间才揪出来。机器快,但人更懂自己的代码。 |