|
凌晨三点,网站手机弹出一条监控告警:首页文件被修改。被串我爬起来打开电脑,改办访问自己的网站网站,首页赫然挂着一串博彩广告,被串标题被改成了“真人视讯,改办秒到账”。网站后台登录密码没变,被串数据库看起来也正常,改办但index.php的网站修改时间变成了十分钟前。这就是被串典型的网站被篡改——攻击者拿到了文件写入权限,直接替换了页面内容。改办 遇到这种情况,网站第一反应别去删文件。被串我见过有人一着急把被改的改办首页删了,结果攻击者留的后门还在,第二天又被挂上同样的广告。正确的做法是先断网——把服务器从负载均衡里摘掉,或者直接停掉Web服务。让网站暂时打不开,比让用户看到赌博链接强得多。 接下来要搞清楚三件事:什么被改了、怎么被改的、还有没有其他入口。把被篡改的文件跟备份做diff,通常能看到攻击者插入的恶意代码。我那次发现首页底部多了一段base64编码的JavaScript,解码后是一个跳转脚本。但更关键的是找入口——检查Web日志里最近的可疑POST请求,尤其是上传接口和编辑器路径。很多CMS的旧版本存在任意文件上传漏洞,攻击者上传一个webshell,然后通过它修改任意文件。 如果服务器上跑的是WordPress、ThinkPHP这类常见程序,先看版本号。我处理过一个案例,对方用的WordPress 5.0,后台插件“WP GDPR Compliance”有提权漏洞,攻击者通过这个漏洞创建了管理员账号,再从后台主题编辑器里直接改文件。这种情况下,就算你把首页改回来,攻击者随时能再改一次。所以必须把漏洞补上——升级程序、删除无用插件、修改所有管理员密码,并且检查有没有多余的账号。 文件权限也得查。很多被篡改的服务器上,Web目录权限是777,或者属主是www-data但其他用户可写。攻击者只要拿到一个低权限shell,就能改任何文件。把目录权限设为755,文件设为644,上传目录禁止执行PHP。另外,检查一下有没有计划任务(crontab)被加了定时脚本,有些攻击者会留一个每十分钟拉取远程代码执行的任务。 清理阶段要彻底。不要只改被篡改的那个文件,用杀毒软件或者手动搜索所有文件中是否包含eval、base64_decode、assert这类危险函数。我习惯用grep递归搜一遍,再跟原始安装包对比。如果实在找不到干净版本,就从官方重新下载一份,把配置文件(数据库连接信息)单独迁移过去。数据库也要检查,有些篡改是通过SQL注入写入的,比如在wp_options表里插入恶意脚本。 最后说恢复。确认漏洞补了、后门清了、权限对了,再把备份文件恢复回去。但备份必须是篡改发生之前的,否则可能把恶意代码一起恢复。如果没有干净备份,就手动修复被改的文件。恢复后别急着上线,先本地跑一遍,用浏览器开发者工具看有没有异常请求。上线后保持监控,文件完整性检查工具(比如AIDE、Tripwire)能帮你第一时间发现再次篡改。 网站被篡改不是世界末日,但处理顺序错了会反复中招。断网、找入口、补漏洞、清后门、恢复文件——这五步里,补漏洞和清后门比恢复文件更重要。我见过太多人只做最后一步,结果一周内被篡改三次。攻击者不傻,他们留的后门比你想象的隐蔽。 |