王丽++钱文祥
摘要:浏览器是互联网的重要入口,其脆弱性直接影响到用户数据和财产的安全。本文在分析跨站脚本攻击、跨站请求攻击以及点击劫持的攻击方法和成因的基础上,提出相应的动态检测和拦截方式,从而加强浏览器的安全性。通过使用WebBrowser控件实现自定义浏览器,载入网页脚本预过滤等相关模块,实现防御功能。相关实验证明,本方案将有效提升浏览器安全性,减少网络风险。
关键词:攻击识别;浏览器安全;动态检测
中图分类号:TP391文献标志码:A
文章编号:1672-1098(2015)01-0060-04
微软推出Internet Explorer 3之时便同时开放了WebBrowser给开发者使用,开发者可以在自己的程序中使用WebBrowser控件以实现与浏览器类似的功能。
截至2014年,服役13年之久的Internet Explorer 6由于安全性不足引发了人们的关注。微软也多次劝告用户升级至更高版本的浏览器。在版本6之后的浏览器中,Internet Explorer一直在增添新的安全功能。Internet Explorer 8中,微软加入了基于请求字串的XSS检测功能和对反点击劫持的HTTP头的支持;之后,Internet Explorer 9、10、11几个版本加入了进程层面的安全特性,例如加入硬件执行保护、代码地址随机化、安全异常处理链以及浏览器的64位化。但是浏览器作为脚本宿主,针对脚本攻击却没有更多的安全提升。因此,为了用户的数据安全,有必要为其定制安全功能。
1攻击检测
由于网页中代码和数据的界限不明,导致了很多注入类的攻击手段,针对脚本注入的跨站脚本请求攻击(Cross Site Scripting,XSS,由于和层叠样式表缩写一样,被改称为XSS)。而浏览器自身的实现,将导致表示层的攻击,利用视觉欺骗的攻击点击劫持则是这类攻击。而网站自身实现的不完善,则将导致其他针对网站的攻击,例如浏览器中可以实现的跨域请求伪造(Cross Site Request Forgery,CSRF)。
而超文本标记语言是一个语法宽松的语言,在HTML标签的“属性=值”对中,有很多字符会被浏览器丢弃,即使加入了也不影响执行。Internet Explorer支持的VBScript和Javascript中,存在更多的编码方式。由于对脚本的支持,字符和函数还可以通过Javascript的重载和库函数、系统事件、对象强制转换等方式获得。
1.1XSS的动态检测
由于XSS属于脚本注入,而且由于浏览器支持信息的多样化,攻击者注入的脚本采用普通字符比对方式将难以检测。因此,将采用正则表达式,在用户发出请求时进行动态检测并修正。
程序将在Internet Explorer自带的检查之外再次做额外的检查。主要检测方式是针对请求字串在正文写入的位置进行判断,对非文本节点通过Boost库的TR1正则表达式引擎对请求内容进行正则匹配,实现扫描。通过导出mshtml.dll中的字符串组,可以得到Internet Explorer自带的库,对其自带的库进行判断分析之后,可以知道其无法防御的攻击方法,接着,针对这些内容完善补充正则表达式即可防御攻击者的防御。
使用时,如果用户访问的请求匹配到了正则表达式,那么提示用户可以选择过滤或是继续访问。如果用户选择过滤,程序将动态删除攻击向量,达到动态清除攻击向量的作用。新增的正则表达式如表1所示。
表1新增的正则表达式
正则表达式作用
(j|&[#()\[\].]x{0,1}0*(74|4a|106|6a);?)[\t]*(a|&[#()\[\].]x{0,1}0*(65|41|97|61);?)[\t]*(v|&[#()\[\].]x{0,1}0*(86|56|118|76);?)[\t]*(a|&[#()\[\].]x{0,1}0*(65|41|97|61);?)[\t]*(s|&[#()\[\].]x{0,1}0*(83|53|115|73);?)[\t]*(c|&[#()\[\].]x{0,1}0*(67|43|99|63);?)[\t]*(r|&[#()\[\].]x{0,1}0*(82|52|114|72);?)[\t]*(i|&[#()\[\].]x{0,1}0*(73|49|105|69);?)[\t]*(p|&[#()\[\].]x{0,1}0*(80|50|112|70);?)[\t]*(t|&[#()\[\].]x{0,1}0*(84|54|116|74);?)[\t]*(:|(&[#()\[\].]x?0*((58)|(3A));?)).
过滤所有javascript:开头的脚本和它的一切变形形式,包括八进制、十六进制和HTML实体编码的转※。
(v|&[#()\[\].]x{0,1}0*(86|56|118|76);?)[\t]*(b|&[#()\[\].]x{0,1}0*(66|42|98|62);?)[\t]*(s|&[#()\[\].]x{0,1}0*(83|53|115|73);?)[\t]*(c|&[#()\[\].]x{0,1}0*(67|43|99|63);?)[\t]*(r|&[#()\[\].]x{0,1}0*(82|52|114|72);?)[\t]*(i|&[#()\[\].]x{0,1}0*(73|49|105|69);?)[\t]*(p|&[#()\[\].]x{0,1}0*(80|50|112|70);?)[\t]*(t|&[#()\[\].]x{0,1}0*(84|54|116|74);?)[\t]*(:|(&[#()\[\].]x?0*((58)|(3A));?)).endprint
过滤所有vbscript:开头的脚本和它的一切变形形式,包括八进制、十六进制和HTML实体编码的转※。
[\S\s]*?<[-\{\}\[\]:;?/a-zA-Z0-9=+ \t\"\'`\n]+?[ /]{1}style[ \t]*=[ \t]*[\"'`]*[\S\s]+?[\n\t]*:[ \\t]*(e|E|\\(0)*45|\\(0)*65)+?[ \\\t\n]*(x|X|\\(0)*58|\\(0)*78)+?[ \\\t\n]*(p|P|\\(0)*50|\\(0)*70)+?[ \\\t\n]*(r|R|\\(0)*52|\\(0)*72)+?[ \\\t\n]*(e|E|\\(0)*45|\\(0)*65)+?[ \\\t\n]*(s|S|\\(0)*53|\\(0)*73)+?[ \\\t\n]*(s|S|\\(0)*53|\\(0)*73)+?[ \\\t\n]*(i|I|\\(0)*49|\\(0)*69)+?[ \\\t\n]*(o|O|\\(0)*4F|\\(0)*6F)+?[ \\\t\n]*(n|N|\\(0)*4E|\\(0)*6E)+?[ \\\t\n]*(\()+?.*\).*[\S\s]+?>[\S\s]*?过滤带有style属性而且style中有expression表达式的标签。同时过滤expression和它的一切变形形式,包括IE兼容的所有样式表转义符以及空格、缩进符号等。
1.2CSRF的动态检测
CSRF属于网站侧的实现缺陷,因此,浏览器只能协助减少危害,而并不能保证消除所有危害。CSRF攻击主要依靠同源准则来检测,程序不仅会应用较为严格的同源策略,还会对请求实体进行XSS检查,使用的XSS判断方式如上节所述。之所以加上这类检测是因为IE自带的XSS过滤器其实只会对GET请求进行检查,而POST XSS在某种程度上也是一个危害较大的攻击方式,尤其是配合上CSRF,一样可以达到同样的危害。所以,如果浏览器的POST请求中发现了XSS攻击代码,浏览器将同样会对POST的实体部分进行净化,然后询问用户是将POST转换为GET请求,还是将POST丢弃。软件的同源判断逻辑如表2所述。
表2软件的同源判断逻辑
规则例子级别
一级域名相同其他不同均可http://1.MYSITE.com/https://2.MYSITE.com:81/在此模式下认为同源宽松模式
一级域名相同协议相同端口相同其他不同均可http://1.MYSITE.com/http://2.MYSITE.com/在此模式下认为同源普通模式
域名相同协议相同端口相同(互联网标准的同源判定)http://A.MYSITE.com/1http://A.MYSITE.com/2在此模式下认为同源严格模式
1.3点击劫持的动态检测
在浏览器中有一个特性,即如果样式表中存在opacity属性,那么元素在浏览器中显示的顺序将不会再以其z-index大小来判定,而是使用一个特殊的判断逻辑:谁的opacity大,谁显示的时候排在前面。
但是,同一个位置的元素的事件接受函数将依然使用z-index来判断,如果一个位置上有多个元素,而这个位置上发生了某个事件,那么这个位置上的元素中谁的z-index大,谁就会接收到这个事件。
因此,要实施点击劫持攻击,攻击者最容易的是只通过iframe框架的方式来加载被害网站,而且通常是设置iframe全透明或者透明度非常大,以至于几乎无法看见,通常是0%~1%的情况比较多。然后,在iframe上方覆盖一层虚假页面,例如“点击某处开始游戏”的页面,而要求用户点击的地方实际上覆盖在下方iframe中一些敏感位置,例如微博的“关注”按钮等位置。
因此,攻击者攻击时,只需要指定下方iframe的样式为高z-index和低opacity,给自己伪造的内容的样式指定为低z-index和高opacity,那么就可以创建一个点击劫持页面。
点击劫持页面的特性也正是检测的突破口所在。通过遍历元素的样式表,找到存在opacity属性的iframe,并对其进行逻辑检查,从而以最小的报警次数获得较为准确的判定结果,发现攻击后,程序将删除元素的透明元素,从而将真实页面内容展现给用户。
2程序效率和分析
用系统函数可以得到较为精准的时间量,测试中选用CPU时间/CPU时钟频率来获取经过时间。据此可以得出算法从开始处理数据到处理结束(不包括对话框弹出的等待时间)额外消耗的时间。试验3次,取平均值,得出耗时数据如表3所示。
表3基准耗时测试结果
模块时间1/ms时间2/ms时间3/ms平均时间测试网站页面完全载入时间/s占页面载入时间比例/%
XSS检测835.7×10-31.019994.8×10-3949.8×10-3
CSRF检测24.5 19.524.222.7
Clickjacking检测351.5×10-3298.4×10-3354.1×10-3334.7×10-3百度新闻1.761
0.000 541.290.000 19
需要注意的是,页面完全载入时间指页面完全下载的时间,不包括DOM树渲染的时间。网络时间采用IE的开发人员工具。
安全模块对用户浏览时产生的可感知的影响极小,也即用户几乎无法感知到模块加载前后浏览时间上的差异,从而不会产生由于用户觉得安全模块过于拖慢显示速度从而关闭安全模块的事情。安全模块的执行效率也会因此直接影响用户浏览网页时的安全性。
而需要大量操作元素的Clickjacking模块,事实上并不会对用户浏览造成影响。因为攻击者攻击浏览器时产生的页面元素通常都非常少,否则将不利于攻击代码的传播,因此过滤时大部分都将仅对大约20个左右的元素进行操作。endprint
而IE浏览器在实现直接通过IHTMLDOMNode接口操作浏览器元素的方法时,其做的具体操作是,将对应的DOM节点从IE的节点二叉伸展树上移除,然后将元素对应的类从内存中删除。这一操作具体实现起来资源开销是十分少的。
以下测试结果是在程序冷启动(开机后第一次运行)下,开启对应标签后5秒时的资源情况。每个标签的占用数据均包括标签和主程序,用后者减去前者除以标签差量得出单个标签的占用,最终全部加起来除以总标签差量得到平均每个标签的占用。后单页内存消耗方法与此相同,内存增量测试结果如表4所示。
表4内存占用增量测试结果KB
模块1标签程序占用内存总量3标签程序占用内存总量5标签程序占用内存总量平均每个标签的占用测试网站单页内存消耗相对内存增量
XSS检测15,78427,94038,6365,715
CSRF检测16,29630,00837,9165,405
Clickjacking检测16,64430,10839,2725,657百度首页5,313
+398+92+344
标签内占用的内存大部分是由IE窗口导致的,而相对内存增量则是保护模块和IE自身共同作用带来的增量,这可以部分反应模块对浏览时内存增加所带来的贡献。
浏览器自身就是一个资源密集型程序,如果模块贡献了过多的内存增量,那么对用户使用来说将是不利的。但是上述测试可以发现安全模块并没有贡献出过多的内存占用。
在日常使用过程中内存占用是有一定波动的,在实际测试和理论验证中内存增量并不会太多。事实证明这还是一个简单易行而且对用户机器资源消耗较少的方法。
控制内存增加的主要办法是,尽量多利用栈上内存,必要时才在堆中分配,因为栈上内存结构简单,不像堆中各个堆块数据都有不少字节用于维护堆表信息。而这两种内存都将在函数函数结束时及时释放,所以对用户来说,内存只是一个短期的增长。而一段时间后内存不断增长主要还是因为IE自身的实现机制,与模块并无多大联系。因此本保护模块可以实现使用少量内存占用实现安全功能。
3 结语
浏览器中添加安全模块是一种自由、可定制的轻便服务形式。同时,采用模块化的防护函数可以保证在现今产品主程序迭代较慢的情况下达到产品的迅速迭代性,进而可以及时防御互联网攻击,具有十分重要的现实性意义,这是目前产品开发所流行推崇的研究开发方向。
对互联网上存在的攻击,在浏览器层面给用户添加一层额外的保障,可以让用户在浏览互联网时更加安心、省心。同时,人性化的设计也可以照顾到各个层次的互联网使用者,浏览器可以在安全和易用性上可以做到一个好的平衡点。随着互联网的进步和技术水平的提高,在未来,可以预见的是将有更多的互联网威胁,同时也会有更多的安全保护措施的诞生,安全防护意在提升黑客攻击的门槛,同时给予用户更好的互联网浏览体验,从而推动整个行业的发展。
参考文献:
[1]CHRISTIAN KANAMUGIRE.A Client-Side Solution Against Session Hijacking Through Xss Attacks[D].长沙:中南大学,2012.
[2]温凯,郭帆,余敏. 自适应的Web攻击异常检测方法[J].计算机应用,2012(7):2 003-2 006.
[3]徐少培,姚崎. 基于操作劫持模式的Web攻击与防御技术研究[J].信息安全与通信保密,2011(1):86-89.
[4]张伟,吴灏,邹郢路. 针对基于编码的跨站脚本攻击分析及防范方法[J].小型微型计算机系统,2013(7):1 615-1 619.
[5]WADE ALCORN, CHRISTIAN FRICHOT,MICHELE ORR.The Browser Hackers Handbook[M] .America:John Wiley & Sons, Inc.,2014.
[6]MICHAL ZALEWSKI.Web之困——现代Web应用安全指南[M] .北京:机械工业出版社,2014.
[7]MICHAEL SUTTON,ADAM GREENE, PEDRAM AMINI.模糊测试——强制性安全漏洞发掘[M]. 北京:机械工业出版社,2009.
[8]PACO HOPE,BEN WALTBER.Web Security Testing Cookbook[M] .America:OReilly Media, 2008.
[9]王文君,李建荣.Web应用安全威胁与防治-基于OWASP Top 10与ESAPI[M] .北京:电子工业出版社, 2009.
(责任编辑:李丽)endprint