你是否碰到过好端端地打开网站浏览信息,结果跳转出“威尼斯2020娱乐官网”,性感荷官,在线发牌”或者“北京赛车,菠菜站点”。
还有更尴尬的有时候在公交车上刷手机,不知道手抽碰到哪里了,屏幕中立刻出现不可描述的广告,还在众目睽睽之下发出奇怪的声音。

前言

暗链大家根据字面意思分析出八九不离十了,可以理解看不见的网站链接,“暗链”在网站中的链接做得非常隐蔽,短时间内不易被搜索引擎察觉。它和友情链接有相似之处,可以有效地提高权重值。
最近这几年,随着国家快速发展相关部门对互联网安全事件是越来越重视了、大部分软件开发厂商安全意识提高,曾经的那个“挂马”时代已经成为过去,攻击手段也已经慢慢减少,特别是 09 年刑法明确“挂马”事件量刑标准之后,多个曾经猖狂一时的 ”挂马” 集团相继落网,“挂马”这种风险高且收益不稳定的攻击手段逐步为黑色产业链所抛弃。黑色产业链是否因为挂马的衰落而就此沉寂呢?答案是否定的,攻击手段日新月异,其中“暗链”是近年来较为严重的问题,也是攻击者最为常见的一些手法。
黑链和暗链的区别

黑链

简单理解:所谓黑链,主要是利用不正当手段,获取高权重网站的管理权限,篡改目标网站的重要页面,添加黑链代码,从而通常以友情链接的方式挂上黑链,提高百度排名。
暗链
暗链主要是指见于百度爬虫,但由于各种原因,在线访问者看不到。从SEO的角度来看,这样的链接可以统称为暗链。

暗链目前的状况

搜索引擎通过一系列算法自动抓取互联网上的信息,并对其价值进行评估。当用户输入所需信息的关键词时,搜索引擎会搜索这些特征,并根据其感知价值对所发现的信息进行排名,最终将其显示给用户。因此,搜索结果的排名越高,对搜索引擎的价值就越高,被访问的可能性也就越大。因此,网站在搜索引擎中拥有相对较高的排名已经成为大多数站长的梦想。但是,随着搜索引擎的大规模使用,出现了一些问题。
搜索引擎通过查看其他站点的超链接来判断一个站点的价值。如果A网站有与B网站的超链接,搜索引擎会认为A网站的所有者认为B有价值,并愿意将他的权重分配给B。通常情况下,一个网站可以给另一个网站分配一个低权重,但是如果有大量的网站被链接到这个网站上,权重还是很大积少成多。想象一个仿照银行网站的钓鱼网站,搜索引擎最初认为它没有什么价值。但是,如果大量的网站都有钓鱼网站的超链接,那么每个网站都会被分配到一定的权重,甚至可能比它所模拟的银行网站还要高,甚至超过银行网站的权重。如果用户通过搜索引擎搜索银行的网站,可能是对于搜索引擎搜索结果的信任,访问到该钓鱼网站,从而导致银行账号、密码泄漏,甚至是经济损失。然而黑客想要获得大量网站的支持绝非易事,于是挂“暗链”成为一个不错的选择。

暗链的隐蔽性

目前挂暗链已经形成了一条完整的黑色产业链,并有取代挂马成为行业“领跑者”的趋势。据数据显示,挂马网站数量正日趋下降,而暗链逐步超越挂马成为威胁网站安全的头号敌人。暗链之所以被某些人喜欢,并逐步取代挂马,主要由于以下几个原因:
   1:风险低:我国刑法已明确挂马的量刑标准,而暗链尚无法律依据;
   2:投资少:几乎零成本,而挂马需要大量资金购买好用的网马、木马;
   3:收益稳定:只要约定时间内暗链没有被清除,黑客就可以获得收入;
  4:技术含量低:能够入侵网站即可,而挂马涉及到入侵网站、漏洞发掘、木马编写等技术;
  5:难以检测:暗链和普通超链接没有太大的不同,且没有实质性的威胁,所以程序很难准确的判断是否 存在暗链。而挂马所使用的网马和木马都可能被杀毒软件拦截。
   根据上面几个优势,暗链就成了香饽饽。

暗链的来源

用于挂暗链的网站有两种来源
1、是黑客自己动手,攻击网站挂暗链;
2、是收购其他黑客的数据信息。
有时一个网站同时被多个黑客盯上,在页面中可以看到多个暗链链接,甚至代码中存在“删我链接,我删整站”、“各挂各的,和平共赢”等内容,警告其他黑客不要删除自己的链接。

暗链最喜欢的网站

政府和教育类还有一些小企业官网站点,比较受他们的喜欢,被挂网站数占该类型网站总数的30%以上,成为暗链的重灾区。暗链之所以青睐这两类网站,原因主要有以下几点:
1:搜索引擎对这三类网站通常比较友好,分配的权重较其他类型的域名更高,用于搜索引擎优化的效果自然更好。
2:这三类网站通常比较稳定,较少出现没几天就消失不见的情况。
3:更新频率低,往往几个月不会更新一次,甚至没人维护。
4:业务系统通常由当地小公司开发和运维,忽视安全问题,导致系统存在大量安全漏洞。

暗链的危害

暗链对于普通用户没有实质性的危害,但是暗链所指向的网站通常是不正规的网站,甚至是非法网站。据统计数据显示,暗链所指向的网站主要有以下几种类型:网游私服、医疗、博彩、色情、股票内幕信息和网游外挂。这些网站在通过大量暗链增加权重后,会排在搜索结果的排名靠前。
当用户搜索某一特定关键词时,可能被欺骗至这些网站。例如用户通过搜索引擎搜索某个医院或某种疾病的治疗方法时,很可能被引导至一个非法小诊所,从而延误病情,甚至危及生命!
暗链是对搜索引擎的一种欺骗,导致搜索引擎的误判,将高权重分配给原本没有价值的网站甚至是钓鱼网站。这样极易导致用户对搜索引擎的不信任,甚至因为误导用户造成损失而引起法律纠纷。
暗链的存在往往标志着该网站存在安全漏洞,所以带有暗链的网站往往更容易被黑客入侵。此外,带有暗链的网站提供下载的资源也是不可信的,可能包含木马或后门。
暗链对政府网站来讲危害更大,当用户通过搜索引擎搜索某地政府网站时,可能从搜索引擎的描述中看到一些非法的关键词,从而影响政府的形象。
境外敌对势力甚至可以根据政府网站是否存在暗链来判断一个政府网站是否存在安全漏洞,并决定是否发起攻击。成功入侵后,可以发布虚假政策信息造成群众对政府的不信任,制造政府与群众之间的矛盾,引发社会事件。

暗链的防御

大多数暗链都是在网站被黑客攻击后植入的,所以修复安全漏洞、消除后门是防止黑链入侵的根本。通过简单删除暗链代码,黑客仍然可以通过漏洞或后门闯入一个站点,再次植入暗链,甚至履行他们删除整个站点的承诺。但是在网站被入侵后,很多网站并没有及时发现和修补暗链,而是采取了一些简单的手段来保护自己的网站。一些小网站受到黑客的恐吓,他们自己都不敢删除暗链代码。
发现和解决漏洞是困扰站长的两大难题。如何判断网站被黑客入侵并挂了暗链,分析 Web 日志是一个不错的选择,通过检索日志中的特征词,可以快速定位到漏洞位置。但是分析 Web 日志需要有一定的经验,很多 Web 日志厂商提供了免费的网站安全体检服务,比如新潮Tide实验室团队研发的“潮巡资产管理与威胁监测”系统根据要求进行注册并完成审核后,可以收到一份网站的漏洞报告及修复建议,对于没有安全防护经验的站长来说,选择网站安全体检服务是个不错的选择。
如果一个网站已经被黑客攻击,仅仅修补安全漏洞还不够。当黑客侵入一个网站时,他们通常会打开后门进行下一次入侵。在黑客攻击日益严重的今天,我们必须要提高网络防御的能力,而网站的安全防护离不开后门的支持。后门不仅限于Web层面,还可能涉及到操作系统层面,如系统隐藏账户、终端服务打开、远程控制软件等软件。这就需要我们对网站进行更全面的检测。

站点分析

今天就拿这个站点做例子分析:

但是查看源代码多处被修改,title 标题关键词 描述等,都不符合本站内容,都是一些非法站点的网站关键词,添加的目的呢就是为了权重。
首先分析下输入网址,网址没有跳转,页面也没有iframe 或
frameset 标签 ,我们再
查看网络请求JS,发现可疑js,没有设置burp的时候页面会显示下面内容(图1)页面内容也发生了改变,js也没有报错(图2),设置burp则内容显示正常,可以看到(图3)这个是一个https协议的,报错了,没有执行这个js,那说明我们要找的恶意代码在这个文件里面 。


JS16进制解密

图1第一段是一个 16 进制的 script 加密,可以使用 alert 函数来解密,打开记事本写入代码:
然后将需要解密的内容插入到 alert() 函数中,引入jquery库 像这样:


然后保存为 html 文件双击运行,就可以看到解密后的内容了:
或者直接用更简单的方法是
 在线解密工具解密 https://tool.lu/js/index.html
复制内容,这种16进制代码进行转义就行:

下边的jquery代码内容美化以后,上边解码后有一个url地址,我们看到有一个ajax 请求,请求url,请求类型,包括data数据,我们复制代码,放到刚才的文件里边,试一下是不是我们猜想的效果。
https://www.baidufe.com/fehelper/code-beautify/index.html
我们把代码复制进去(只截取了重要代码段),简单写了个html标签,代码如下:
运行结果如下:和我们想要的结果不太一样,页面内容变化了。
是因为调用php的时候,数据包不一样导致的。
自己调试更改下数据包内容就可以了。
执行结果:
攻击者通过入侵网站,调用js,ajax请求非法站点,返回数据将恶意代码写入了网页中。

暗链分类

HTML 隐藏型暗链——通过 css 或者 JavaScript 代码隐藏暗链,通常是通过 position 为负数,或者将 display 设置为 none 等方式来隐藏,目的是为了提升非法网站的 SEO 排名,但是这种暗链由于很容易被检测,所以已经越来越少了,现在的暗链大部分都是 JS 引入型暗链直接跳转。
JS 引入型暗链——通过修改网站 title,引入外部 JavaScript 代码来将暗链植入被害网站,当用户通过搜索引擎搜索特定关键字时就会进入该网站,通过引入的外部 JavaScript 代码实现跳转到非法网站,上面演示的暗链实例就是这种类型。

HTML隐藏型

这种类型的暗链通过 CSS 或者 JavaScript 代码对暗链进行隐藏。
1、通过 div 中的 display:none 直接来隐藏链接:
2、利用 css 中的位置属性来隐藏链接:
3、链接颜色与背景色相同,链接文字使用低像素:
4、利用跑马灯 marquee 属性,链接以跑马灯形式迅速闪现,跑马灯的长宽设置很小,同时将闪现的频率设置很大,使得查看页面时不会有任何影响:
以上四种是惯用的挂暗链的方法,但目前的搜索引擎也开始对这些方法进行识别和打击,如果代码没有任何处理的话,那么这些外链将有可能全部被降权。即便如此,这几种仍然是目前最常见的暗链隐藏方法。为了不被搜索引擎识别,攻击者利用 JS 向页面中写入 ccs 样式,并设置其属性,见5,6。由于搜索引擎对这种JS代码的内部实质意义还无法识别,因此也成为了挂暗链的一种常见形式。
5、通过 javascript 来控制 html 中 document 的结构来隐藏链接(利用 JS 向页面中写入 ccs 样式):
6、利用JS修改样式属性:
7、利用遮挡层隐藏暗链,z-index属性可以设置元素的堆叠顺序,z-index值越小其堆叠顺序越靠后,因此可以利用其它层来遮挡暗链:

JS引入型暗链

JS引入型暗链——通过修改网站title,引入外部 JavaScript 代码来将暗链植入被害网站,当用户通过搜索引擎搜索特定关键字时进入该网站,通过引入的外部 JavaScript 代码实现跳转到非法网站,下面介绍几种常见的 JS 引入型暗链。
一、JavaScript 中 windows 对象引入暗链
这种手法的原理是调用 widnows 对象中的 document.write 方法将外部的 JS 代码引入到当前页面,通常还会配合使用 16 进制编码来实现隐藏的目的。
例子:
上面黑客将网站的 title、keywords、description 都换成了10进制的 unicode 编码,这样的确能起到一些隐藏的作用,10进制 unicode 编码在浏览器解析的时候会还原成字符。
&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#32;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#45;&#21271;&#20140;&#112;&#107;&#49;&#48;&#30452;&#25773;&#32593;</title><metaname="keywords"content="&#21271;&#20140;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#32467;&#26524;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#25237;&#27880;&#32593;&#31449;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#44;&#21271;&#20140;&#36187;&#36710;&#35270;&#39057;&#32593;" /><metaname="description"content="&#12304;&#49;&#49;&#48;&#48;&#107;&#97;&#105;&#46;&#99;&#111;&#109;&#12305;&#32463;&#21271;&#20140;&#31119;&#24425;&#23448;&#32593;&#25480;&#26435;&#44;&#25552;&#20379;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#35270;&#39057;&#44;&#21271;&#20140;&#36187;&#36710;&#24320;&#22870;&#32467;&#26524;&#26597;&#35810;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#22312;&#32447;&#25237;&#27880;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#26368;&#19987;&#19994;&#30340;&#21271;&#20140;&#36187;&#36710;&#30452;&#25773;&#32593;&#33;
将这些十进制 unicode 编码丢到站长工具 https://tool.chinaz.com/tools/unicode.aspx 中解密,执行结果如下:
继续分析:
可以看到他调用了 JavaScript 中的 windows 对象,然后使用的方法都使用了 16 进制的编码,因为 JavaScript 是支持 16 进制编码的,这样可以躲过一部分简单的检测工具,确实具有一些隐蔽性。JS 代码中调用 navigator 对象中的 useragent 方法判断用户访问的 浏览器,如果不是通过百度点击跳转过来的(即直接输入网址进行访问的情况)就将 title 设置为正常的 title。
我们把上面的16进制代码解密下:
这样可以看到,他其实是使用的 window 对象中的 document.wirte 方法,将一段外部 JavaScript 代码写入到了当前的页面,这样就完成了一段暗链的植入。
二:使用十进制 unicode 编码引入 JavaScript
这种方法是通过引入 JavaScript 时,<script src="XX">通过将其中的 src 改为十进制 unicode 编码来实现的。这种方法不是在 JavaScript 上做文章,而是利用 html 的特性,使用十进制 unicode 编码改变<script>标签中的 src 来做文章。
案例:
可以看到黑客将 src 使用了十进制 unicode 编码,从而可以规避一些简单的或者肉眼的检测。我们将十进制 unicode 编码丢进站长工具中解码:
可以看到其引入的是一个外部的 JavaScript 代码,从而实现了暗链的植入,可以跟进去看看。
主要起作用的还是圈出的部分,上面是关于访问统计的代码。可以看到他先判断这个访问是不是通过搜索引擎过来的,如果是通过搜索引擎过来的,才会进行跳转。

总结

从上面的内容可以看到,JS 引入型的暗链相对于 HTML 隐藏型的暗链隐藏得深得多,而且不容易被检测到,JS 引入型的暗链正常去访问是不会触发的,而当百度等搜索引擎的爬虫去爬取该页面时,就会进行跳转,从而将爬虫引入到黑客指定的站点,来提升指定站点的排名。
检测思路,使用爬虫爬取所有页面的内容,对内容进行关键词检测,HTML隐藏型的这种是比较容易检测的,对于js引入性的,需要对windows对象引入的,判断是否使用了16进制如果使用了,那么加入黑名单。然后再判断 16 进制代码解析之后的内容,如果出现了 script 字样,基本上就可以判断是不是暗链了。
E
N
D
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章370余篇,自研平台达到26个,目有15个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们
继续阅读
阅读原文