扒一扒浏览器的安全机制

*本文原创作者:梅孜,本文属FreeBuf原创奖励计划,未经许可禁止转载

随着互联网深入人们的生活,浏览器的发展更加丰富多彩,其种类多样,版本更新速度也日益提高。与此同时,浏览器的安全问题也备受关注。下面,我们就扒一扒主流浏览器实现了什么样的安全机制。

一、背景

随着互联网的快速发展,种类繁多的浏览器也变得越来越复杂,它们不仅分析纯文本和HTML,还包括图像、视频和其他复杂的协议和文件格式等。

这些极大地丰富了浏览器的功能,给用户带来了方便和更好的浏览体验,然而也带来了一系列的安全问题,各种各样的安全漏洞层出不穷,成为了黑客最易攻击的对象之一。

为此,浏览器厂商也在不懈努力,在积极修复漏洞的同时,也在浏览器安全机制方面做着努力,本文将展示和对比主流浏览器当前对安全机制的实现状况。

首先来看看最近全球浏览器的市场份额,根据Net Market Share的统计数据,2016年7月份全球浏览器的市场份额如下图所示:Chrome占据市场份额最多,占50.95%,其次是占29.60%的IE,接下来依次是Firefox、Safari和Edge,这五款浏览器占据了全球98.27%的市场份额,其影响力非同一般。

图1 2016年7月份全球浏览器市场份额分布图

二、浏览器安全机制简介

近来,我们对上述五款浏览器的安全机制做了初步的探究,发现其内部的安全机制大同小异,下面就其主要的安全机制做一下简单介绍。

1、沙箱(Sandbox)

沙箱是一种隔离对象/线程/进程的机制,控制浏览器访问系统资源的权限,从而达到保护用户的系统不被网页上的恶意软件侵入、保护用户系统的输入事件(键盘/鼠标)不被监视、保护用户系统中的文件不被偷取等目的。

最初的浏览器沙箱是基于Hook实现的,后来的Chrome沙箱是利用操作系统提供的一些安全机制实现的。

2、地址空间布局随机化(ASLR)

ASLR是一项缓解缓冲区溢出问题的安全技术。其原理是将进程运行所需的系统核心组件和对象在内存中的分布随机化。为了防止攻击者利用在内存中跳转到特定地址的函数,ASLR技术随机排列进程的关键数据区域的位置,包括可执行的部分、堆、栈及共享库的位置。

3、JIT Hardening

JIT Hardening是防止对JIT引擎本身的滥用的机制。JIT引擎通常在可预测的地址空间中放置可执行代码,这无疑给攻击者提供了可乘之机。只要攻击者计算出可执行代码放置的地址,极有可能通过代码覆盖来进行恶意活动。

因此,必须有一项类似于ASLR的技术来保护JIT引擎,即JIT Hardienng。JIT Hardening常用技术包括:代码库队列随机化、指令库队列随机化、常量合并、内存页面保护、资源限制等。

4、数据执行保护(DEP)

DEP是一种阻止数据页执行代码的机制。将数据所在内存页标识为不可执行,当程序尝试在数据页面上执行指令时会抛出异常,而不是去执行恶意指令。

5、缓冲区安全检查(/GS)

/GS是一种不强制缓冲区大小限制的代码常用技术。通过将安全检查插入到已编译代码中完成,检测某些改写返回地址的缓冲区溢出。

6、执行流保护(CFG)

CFG是对CFI(控制流完整性)的一个实用性实现,是一种编译器和操作系统相结合的防护手段,目的在于防止不可信的间接调用。对基于虚表进行攻击的利用手段可以有效防御。

7、附加组件签名机制

附加组件签名机制是Firefox43版本开始正式采取的一项对其附加组件管理的机制。Mozilla 根据一套安全准则对其附加组件进行验证并为其“签名”,需要签名的类型包括扩展,未被签名的扩展默认被禁用。

这一机制对阻止来自第三方的恶意扩展起到了很好的作用。

8、W^X

W^X是“写异或执行”(WriteXOR Execute)的缩写,是OpenBSD中富有代表性的安全特性之一。W^R内存保护机制能够让网页使用内存写入代码或执行代码,但不能够同时进行这两种操作,可以阻止某些缓冲区溢出的攻击。

9、MemGC

MemGC即内存垃圾收集器(Memory Garbage Collector),是一种内存管理机制,由IE11的Memory Protector改进而来,首次在EdgeHTML和MSHTML中使用,采用标记清除(Mark-Sweep)算法对垃圾进行回收,能够阻止部分UAF(Use After Free)漏洞。

需要指出的一点是,上述几种安全机制并不是浏览器独有,有些机制,例如ASLR、/GS、CFG等,也被操作系统和编译器广泛采用。以上就是对几种主要安全机制的简单介绍,不够全面和详尽,还请大神勿喷。

三、主流浏览器对安全机制的实现情况

对于前面提到的几种浏览器安全机制,主流浏览器并不是全部实现了,具体情况如下表所示:

图2 主流浏览器安全机制的对比情况表

由表可以明显看出,除了Safari以外,其他四种浏览器均实现了前六种安全机制。而Safari不支持缓冲区安全检查机制,未实现CFG执行流保护机制但有资料显示其实现了控制流完整性(CFI)。

对于后面三种安全机制,附加组件签名机制和W^X机制是Firefox浏览器独有的,而MemGC机制是Egde浏览器独有的。

在此,还需指出一点,虽然对某一安全机制有多个浏览器支持,但各个浏览器的实现方式及实现程度不尽相同。下面举两个例子加以说明:

(1)虽然Edge浏览器和IE浏览器都实现了沙箱机制,但Edge浏览器将框架进程也包含在了整个安全体系里面,权限更低,大大提高了安全性。

(2)Chrome和IE的沙箱机制对各种行为的限制也是不同的,图3列举了一些常见行为及Chrome和IE沙箱机制对其的限制对比情况:

图3 Chrome和IE沙箱机制对部分行为的限制情况

总结

浏览器发展至今,已经拥有比较成熟的安全机制,主要包括沙箱机制、JIT Hardening、地址空间布局随机化、数据执行保护、缓冲区安全检查、执行流保护、附加组件签名机制、W^X、MemGC等。

然而,浏览器的安全并不是已经完全保障,各大浏览器厂商也在安全机制方面做着不懈的努力,期待着浏览器安全方面质的提高。

参考文献

https://www.netmarketshare.com/

AccuvantBrowserSecCompar_FINAL.pdf

http://www.freebuf.com/news/73858.html

https://wiki.mozilla.org/Security/Sandbox

https://developer.apple.com/safari/technology-preview/release-notes/

https://support.mozilla.org/zh-CN/kb/add-ons-signing-firefox?as=u&utm_source=inproduct

https://jandemooij.nl/blog/2015/12/29/wx-jit-code-enabled-in-firefox/

https://securityintelligence.com/memgc-use-after-free-exploit-mitigation-in-edge-and-ie-on-windows-10/

*本文原创作者:梅孜,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

TW洞见 | 胡凯:Mock不是测试的银弹

开发者编写高质量测试的征途上可谓布满荆棘,数据库、中间件、不同的文件系统等复杂外部系统的存在,令开发者在编写、运行测试时觉得苦恼异常。由于外部系 统常常运行在不...

37360
来自专栏知识分享

6-51单片机WIFI学习(测试TCP服务器--使用串口调试助手--不连接路由器)

上一篇连接  http://www.cnblogs.com/yangfengwu/p/8757513.html 注意:更加详细的操作请参考, http://ww...

48340
来自专栏FreeBuf

HTTP2.0协议被曝4个高危漏洞,可致服务器崩溃

如果你认为HTTP2.0协议比标准HTTP(超文本传输协议)更安全,那你就错了。有研究人员花费4个月的时间在HTTP2.0协议中发现4个漏洞! 去年2月,谷歌把...

33580
来自专栏生信技能树

计算资源及编程-仅针对生信人员

第 5 章 计算资源及编程 5.1 硬件配置 理论上在个人Windows电脑上面做生物信息学数据分析是不实际的,因为太多的生物信息学相关软件的开发者对windo...

584100
来自专栏PhpZendo

事件驱动架构设计

这篇文章是 软件架构演进 一个有关 软件架构 系列文章中的一篇。这些文章,主要是我学习软件架构、对软件架构的思考及使用方法的记录。相比于这个系列的前几篇文章,本...

84220
来自专栏求索之路

从零开始仿写一个抖音App——日志和埋点以及后端初步架构本项目的 github 地址:MyTikTok

拿 Java 来说:比如我们有两个服务 A、B 在两个服务器上,此时我们要在 A 上调用 B 的服务获取其上的数据 Foo。那么在 A 中可以写成 Foo f ...

57250
来自专栏Java后端技术栈

分布式之消息队列复习精讲!

小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客...

8530
来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

一、问题背景 手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下: 1、问题表象:“未读不消失”、...

48790
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–报价处理(232)-12组件和活动更新

image.png CJ20N组件和活动更新 由于客户修改订购的最终产品数量,项目必须根据这一新的信息进行更改。注意的是,项目的组件和作业的期间也需要进行相应的...

35250
来自专栏C/C++基础

C/C++代码调试的几点建议

代码调试在程序开发阶段占有举足轻重的地位,可见代码调试的重要性。但是有一点必须强调:程序是设计出来的,而不是调试出来的。这是所有程序员必须牢记在心的一条准则。一...

9210

扫码关注云+社区

领取腾讯云代金券