扒一扒浏览器的安全机制

Posted by ArkTeam on 2016-09-01 11:29:30 +0800

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

一、背景

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

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

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

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

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等,也被操作系统和编译器广泛采用。以上就是对几种主要安全机制的简单介绍,不够全面和详尽,还请大神勿喷。

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

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

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

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

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

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

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

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

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

总结

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

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

参考文献

https://www.netmarketshare.com/ AccuvantBrowserSecComparFINAL.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&utmsource=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 》]


Copyright © 2022, Built with Gatsby