一个朋友上周发来一段日志,寄劫持问我看不看得懂。生虫日志里全是繁殖十六进制地址和函数名,唯一能辨认的程序字符串是
parasite_v30。我说你中招了,寄劫持这是生虫PHP寄生虫繁殖劫持程序V30。他问那是繁殖什么,我说你先别管是程序什么,把服务器网线拔了。寄劫持这东西最早出现在暗网论坛的生虫一个帖子里,发帖人用俄语写了句"免费版够用了",繁殖附件是程序个压缩包。解压后是寄劫持个PHP文件,大小不到30KB,生虫混淆得跟麻花一样。繁殖我拿到样本的时候,第一反应是这玩意儿写法很脏,变量名全是
$a1、$b2这种,循环里套循环,eval叠eval。但脏归脏,逻辑清楚得很。它干的事其实就三步。第一步,扫描当前服务器上所有
.php文件,找到那些有写入权限的,把自己的代码插进去。不是替换,是插入。插在文件最前面,加个@include或者直接内联。第二步,修改.htaccess,把特定User-Agent的请求全部重定向到一个远程地址。第三步,也是V30跟老版本最大的区别——它会主动去连内网其他机器。用file_get_contents去请求内网IP段的80端口,看返回头里有没有X-Powered-By: PHP。有,就尝试用默认口令或者已知漏洞打进去,然后重复第一步。我见过一个被感染的WordPress站点。站长的做法很典型:发现网站变慢,以为是插件问题,装了个缓存插件。缓存插件把恶意代码也缓存了,结果每个访客的浏览器里都跑了一遍劫持脚本。那个脚本做的事很简单——用户访问任何页面,它先判断来源,如果是搜索引擎,就正常显示;如果是直接访问或者社交平台,就弹一个假的"您的Flash版本过低"的提示,诱导下载一个exe。站长三天后才发现,因为有个用户打电话来骂他,说在他网站上下了个挖矿程序。
V30的繁殖机制有个恶心的地方:它不依赖数据库。很多安全软件查PHP后门,喜欢扫数据库里的
wp_options表,看有没有可疑的eval。V30完全不碰数据库,它只改文件。而且改完文件后,它会记录文件的修改时间,下次再感染的时候,如果发现修改时间变了——说明有人动过这个文件——它会重新感染一遍,并且把修改时间改回去。你手动清理了一个文件,过两天它自己又回来了,你都不知道怎么回来的。更麻烦的是它的传播路径。它不靠漏洞扫描器那种广撒网,它靠的是"信任链"。你服务器上有个PHP文件被感染了,这个文件被其他站点
include了,那其他站点也中招。很多CMS系统喜欢用include来加载公共函数库,一个中招,全站中招。我见过一个案例,一个开发者在GitHub上开源了一个工具类库,被V30感染后提交了更新。三个月内,所有用composer拉取这个库的项目全部中招。那个开发者直到收到律师函才知道自己的库被污染了。清理V30不能只删恶意代码。它的持久化机制藏在三个地方:被感染的文件、被修改的
.htaccess、以及一个写在/tmp目录下的隐藏脚本。那个隐藏脚本每隔几分钟就检查一次,如果发现主文件里的恶意代码被删了,它会立刻重新写回去。很多人清理完发现过两天又中招,就是因为没删/tmp里那个东西。我一般建议直接重装系统,因为谁也不知道它还在哪里留了后门。最后说个事。那个发帖的俄语论坛用户,后来被扒出来是个19岁的乌克兰学生。他写V30的初衷据说是为了"惩罚那些用盗版WHMCS的站长"。这个理由听起来很中二,但V30的代码里确实有一段逻辑:如果检测到服务器上装了正版WHMCS,它会自动卸载自己。你说这算什么?寄生虫还挑食。
顶: 63311踩: 2176






评论专区