网站被挂马这件事,和家里被盗不一样。入室盗窃很容易察觉物品被动过,但网站挂马往往是搜索引擎发送告警邮件,或是访客电脑杀毒软件弹出风险提示,站长才发现问题。登录网站后台查看,界面一切正常,文件修改时间看起来没有变动,站点却已经被标记为危险网站。
攻击者挂马有多种手段。最普遍的是一句话木马,攻击者在PHP文件内插入一行代码,这段代码可以接收外部指令并且执行。代码可以嵌入原有业务函数中间,文件名伪装成系统文件,类似wp-confing.php,肉眼浏览很难发现。只要这段代码保留,攻击者就能够继续上传文件、读取数据库,甚至接管整台服务器。

另一种方式是JavaScript注入。网站原始页面本身干净,攻击者在数据库字段或者引用的js文件写入加密脚本。访客打开页面,脚本会在浏览器执行,自动跳转博彩站点或者悄悄启动挖矿程序。这种方式隐蔽性强,直接查看网页源代码很难识别,需要工具解密脚本内容才能确认恶意行为。
攻击者挂马之后会留下多个后门文件作为持续访问通道。不会只放置单一入口,会在不同目录埋藏后门,有的伪装成图片文件,有的修改扩展名伪装日志。只删除一个后门文件,攻击者还可以通过其他入口重新进入。清理木马最大的难点就是清除不彻底,站点隔段时间再次被植入恶意代码。
木马检测工具分为不同实现思路。特征码扫描属于传统方案,工具内置大量已知木马特征字符串,匹配成功就告警。国内D盾、河马查杀、微步在线都采用这类机制。扫描速度快,但遇到加密或者变种木马识别能力不足。
行为分析类工具不单纯比对文件内容,重点监控文件执行行为。例如正常PHP文件突然对外访问陌生IP地址,或是在凌晨批量修改站点文件,这类异常行为会判定为可疑。检出能力更强,但误报数量偏高,需要人工查看日志确认。
云查杀是近些年比较主流的方案,上传文件哈希值或者可疑代码片段到云端,依托海量样本库,搭配沙箱模拟运行判断恶意行为。阿里云、腾讯云主机安全产品集成该能力,样本库更新及时,新型木马可以快速识别。缺点是需要联网,部分敏感环境不方便向外传输站点文件。
工具选择参考网站程序类型。WordPress站点,Wordfence和Sucuri是使用最多的插件。Wordfence免费版足够日常防护,文件哈希对比功能实用,记录程序原始文件哈希,文件改动就推送提醒。Sucuri偏向外部扫描,云端抓取站点页面检测注入脚本,不需要在服务器安装程序。
国内主机用户大多选用D盾或者河马。D盾适配Windows服务器,界面简洁查杀效果稳定。河马同时支持Linux、Windows系统,有在线版和本地版本,不想在服务器部署程序可以选用在线版本。微步在线偏向威胁情报,除木马查杀还可以溯源木马家族信息。
宝塔面板用户,面板内置网站防火墙自带木马查杀模块,底层引擎和河马相近,日常扫描需求可以满足。阿里云、腾讯云用户,控制台开启主机安全服务,自带免费基线检查和木马查杀功能,无需额外部署软件。
实际排查有几个实用经验。挂马之后优先查看访问日志,重点筛选POST请求频繁的IP,或是User-Agent信息异常的访问记录。攻击者上传文件大多使用POST请求,普通访客不会持续提交这类请求。其次查看文件修改时间,但攻击者可以篡改文件时间戳,不能单靠时间判断。对比文件哈希也是有效手段,把网站文件和官方原版安装包比对,存在差异的文件重点核查。
清理木马不能只删除显眼的恶意文件。完整扫描整个站点目录,上传目录、缓存目录、日志目录是高危区域。数据库也要同步检查,部分恶意脚本存储在数据库内,仅清理文件无法彻底解决。清理完成,全部密码都要更换,数据库密码、后台账号密码、FTP密码,攻击者大概率已经获取原有凭证。
提前防护远比出事之后清理简单。网站核心程序、插件、主题保持更新,多数入侵利用公开漏洞完成。正确配置文件权限,上传目录禁止脚本执行权限,PHP文件权限设置644,目录权限755。后台登录开启二次验证,不要使用admin这类通用用户名。做好这些基础防护,能够大幅降低被挂马概率。