序言
安恒信息中央研究院零壹实验室持续监测暗链植入事件,针对一种被称为“寄生虫”并以脚本文件形式存在的病毒文件进行了分析,与DLL病毒不同,寄生虫病毒虽无法进行全局劫持,但其具备的自我繁殖特性却能自动地在短时间内为黑灰产劫持到大量流量,更为严重的是,它意味着网站已经被攻陷,沦为了黑灰产的肉鸡,病毒中携带的后门可以让黑灰产在失陷的主机上肆意妄为,对网络空间造成极大的威胁。
第72届戛纳电影节金棕榈奖最佳影片《寄生虫》描述了全是无业游民的一家四口人,通过欺骗的方式寄宿在富豪朴社长家并最终导致了“宿主”朴社长的死亡。而在网络世界,同样存在着“寄生”在高权重网站上并吸取其流量作为“营养”,继而提升非法关键词(网站)在搜索引擎中排名的暗链病毒——寄生虫程序。
如生物界的寄生虫一样,该种病毒往往会通过webshell进入一个高权重的网站,并在里面“繁殖”出大量包含非法关键词及链接的页面,借助这个网站在搜索引擎中的高权重达到快速排名的效果, 而“宿主”网站在不知情的情况下给黑产“借了东风”。据安恒信息中央研究院零壹实验室的暗链监测结果显示,仅上半年,就有近400个重点网站(政府、事业单位网站)、万余个高权重企业网站遭受寄生虫病毒攻击。
图1 某事业单位遭受寄生虫病毒攻击,产生大量bo cai页面
你的流量是我的了——流量劫持原理
图2 寄生虫程序运行流程
动态寄生虫程序的运行流程如图2所示,分为服务端和客户端,其中客户端程序通过webshell、文件上传漏洞等方式进入失陷网站,只有一个脚本文件,当客户端有访问请求时,它会进行请求判断,如果达成特定条件(详见客户端源码详解)便会与服务端进行通信,并呈现服务端的返回内容;服务端通常包含寄生虫网页模板、非法关键词库、新闻内容库及失陷网站库,服务端会组建寄生虫页面并进行返回(详见服务端源码详解)。
作为一种黑帽SEO手段,寄生虫程序会利用搜索引擎算法的漏洞,使用作弊手段,达到关键词收录、网页提权的目的。每次搜索引擎访问时,便会在失陷网站下自动生成大量的寄生虫网页,这些寄生虫网页里具备以下特点:
1、充斥着大量非法关键词,其目的是利用失陷网站在搜索引擎中的先验高权重使得这些关键词被搜索引擎快速收录。这些文本通常出现在网页的title、keywords、description(TKD)位置——这些位置为搜索引擎判断网页内容主题的主要来源。
图3 寄生虫页面的TKD出现混淆后的关键词
2、网页包含大量轮链——一种链接到其他失陷网站寄生虫页面的结构,其目的是利用搜索引擎爬虫会爬取页面中外链的特性让爬虫去访问其他的失陷站点,而上文提到每次访问时,病毒又会产生大量寄生虫页面,最终搜索引擎爬虫会在茫茫失陷站点群中不停地来回访问,而这些寄生虫页面就会被搜索引擎快速收录。
图4 寄生虫页面中包含大量轮链
找不到的页面——动态寄生虫
寄生虫病毒分为静态和动态寄生虫,它们的区别在于静态寄生虫会在失陷网站下生成寄生虫页面,多为“.html”结尾的静态资源,容易引起网站管理员的警觉,且相对而言繁殖数量有限;动态寄生虫真正意义上实现了无限“繁殖”,通过一个以PHP或ASP结尾的动态文件,虚拟繁殖出成千上万的页面文件,除去病毒本身外并不会在网站本地留下其他文件痕迹,成为当前暗链植入的主流病毒,因此本文后续聚焦动态寄生虫进行源码剖析。
表1 静态、动态寄生虫病毒对比表
隐蔽性 | 繁殖数量 | 繁殖文件类型 | |
静态寄生虫 | 低 | 有限 | Html静态文件 |
动态寄生虫 | 高 | 无限 | 虚拟繁殖的动态文件 |
3揭开寄生虫的面目——病毒代码分析
安恒信息零壹实验室按照发现的时间纵向对比分析了病毒源码,结合最新监测检出的失陷网站特征,对动态寄生虫程序进行了总结归纳。
客户端代码详解
客户端的作用主要是伪装、鉴权并向服务端发起通信,我们总结了目前见到的病毒功能(详见表2),并以PHP病毒为例,选取其中有代表性的3个样本进行介绍。
表2 客户端病毒样本功能汇总表
功能 | |||||
来源判断 | 搜索引擎判断 | 后门 | 防删除 | 路径判断 | |
样本一 | × | √ | × | × | × |
样本二 | √ | √ | √ | × | × |
样本三 | √ | √ | × | √ | √ |
01样本一
样本一会对访问对象进行判断,具备一定隐蔽性,若为正常访客访问则不显示寄生虫页面;若访问对象是搜索引擎,则会构造UA为” aQ0O010O”的访问体并向服务端发起访问。
图5 客户端样本一的部分源码
02样本一
样本二不但实现了搜索引擎判断,还对访问来源进行判断,当访客通过搜索引擎的搜索结果访问该网页时会显示寄生虫页面,而寄生虫页面会利用搜索引擎爬虫不加载js的特性,通过js加载iframe标签的方法展示出非法页面。除此之外,样本二还植入了一个后门,通过HTTP报文中的特定字段鉴权,可用于后续病毒更新、接收服务端指令等。
图6 来源判断代码
图7 后门代码
03样本三
样本三除来源判断和搜索引擎判断外,还会判断访问路径中是否带有特定字符串,只有带有特定字符串如”. psd”的访问才会返回寄生虫界面,一定程度上增加了病毒的隐蔽性。
图8 特定字符串判断代码
除此之外,样本三还会针对参数进行判断,具体特征为访问不带参数时,仅返回轮链,访问携带参数时,返回寄生虫页面,这样只需利用一定办法(如蜘蛛池)让搜索引擎爬虫访问一次客户端程序,如”www.victim.com/virus.php”,便可让爬虫自动地爬取繁殖出的页面。
图9 样本三参数判断页面
样本三还兼具一定的防删除功能,利用php可以执行系统命令的特性将病毒本身修改为只读。
图10 防删除功能代码
服务端代码详解
服务端的功能为制作寄生虫页面,各样本间的功能大同小异,以其中一个样本为例,其主要文件构造及作用如表3所示。
表3 静态、动态寄生虫病毒对比表
文件名称 | 作用 |
index.php | 程序总入口 |
mb.html | 模板页面,需要替代的文本/链接带{} |
lunlian.txt | 存放失陷网站的客户端链接,用于制作轮链 |
keyword.txt | 存放非法关键词 |
content.txt | 存放新闻或小说等正常文本,用于欺骗搜索引擎 |
服务端的运行如图9所示,以一个静态网页源码为模板,将需要收录的黑词和轮链植入,并利用新闻、小说等近期搜索率较高的文本让搜索引擎误认为这是个包含高质量内容的正常网页。
图11 服务端运行流程
为了自动化地更新新闻文本,每当客户端发起一次访问,服务端会从随机从中国新闻网爬取最新的新闻,代码如图10所示。
图12 实时新闻采集代码
只是暗链?——欢迎联系我们
“寄生虫”不叮“无缝”的网站,病毒往往都过后门进入失陷网站,切不可轻视暗链植入的情况,单纯地删除暗链页面或病毒是不够的,不彻底清除网站的后门可能会使网站再次挂链。零壹实验室在监测中发现,某高校学报网站于2022年5月13日被检出存在暗链植入情况,并于6月份修复了这一暗链网页。但由于可能并未对网站后门进行修复,该网站在2022年9月2日再次被挂上了bo彩网站的暗链。
图13 浙江某高校学报两次被挂链
另外,在暗链监测过程中,零壹实验室发现,黑产进行暗链植入的方式和手法呈现多元化和对抗性,寄生虫程序从静态到动态的进化就是一个例子。为了避免网站被植入寄生虫病毒,需定期对网站下资产进行扫描、检测,尤其注意更新日期较近的PHP、ASPX文件。