白帽子讲Web安全(一)浏览器安全

1、同源策略

(1)什么是同源策略

同源策略/SOP 是由NetScape公司提出的一个著名的安全策略。所谓同源是指 “ 协议+域名+端口 ” 三者相同,即便两个不同的域名指向同一个ip地址,也非同源。浏览器出于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。

现在所有支持javascript的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。

当JavaScript被浏览器认为来自不同源时,请求被拒绝

(2)同源策略的应用

在浏览器中,< script>、< img>、< iframe>、< link>等标签都可以跨域加载资源,而不受同源策略的限制。但是带 “src” 属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的是,通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。

XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。

(3)跨域访问

同源策略限制了跨域访问,但是随着业务的发展,跨域请求的需求越来越迫切。因此,W3C委员会制定了XMLHttpRequest跨域访问标准。它需要通过目标域返回的HTTP头来授权是否允许跨域访问,因为HTTP头对于JavaScript来说一般是无法控制的,所以认为这个方案可以实施。
白帽子讲Web安全(一)浏览器安全

对于浏览器来说,除了DOM、Cookie、XMLHttpRequest会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。最常见的一些插件如Flash、Java Applet、Silverlight、Google Gears等都有自己的控制策略。

以Flash为例,它主要通过目标网站提供的crossdomain.xml文件判断是否允许当前 “ 源 ”的Flash跨域访问目标资源。

2、浏览器沙箱

(1)背景

一般而言,对于网络上的网页中的JavaScript代码和插件都是不受信的(除非是经过认证的网站),特别是一些故意设计侵入浏览器运行的主机代码更是非常危险的,通过一些手段或者浏览器中的漏洞,这些代码可能获取了主机的管理权限,这对主机系统来说是非常危险的,所以保证网页本身之外,还需要保证浏览器和浏览器所在的系统不存在危险。

对于网络上的网页,浏览器认为他们是不安全的。因为网页总是存在各种可能性,也许是无意的或有意的攻击。如果有一种机制,将网页的运行限制在一个特定的环境中,也就是一个沙箱中,使它只能访问有限的功能。那么,即使网页工作的渲染引擎被攻击,它也不能获取渲染引擎工作的主机系统中的任何权限,这一思想就是沙箱模型。

(2)原理

“ 沙盒 ”技术(Sandbox)与主动防御技术原理截然不同。主动防御是发现程序有可疑行为时及时拦截并终止运行。“ 沙盒 ”技术则是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“ 沙盒 ”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的 “ 沙盒 ”里充分表演,“ 沙盒 ”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“ 沙盒 ”就会执行 “ 回滚 ” 机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。

(3)实现

在Windows系统中,浏览器结合了DEP、ASLR、SafeSEH等操作系统提供的保护技术,用于对抗内存攻击。与此同时,浏览器开发商还发展出多进程架构。浏览器的多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程奔溃时,也不会影响到其他的进程。

由于沙箱模型严重依赖操作系统提供的技术,而不同的操作系统提供的安全技术是不一样的,这就意味着不同操作系统上的实现是不一致的。

Google Chrome是第一个采取多进程架构的浏览器。Chrome的主要进程分为:浏览器进程、渲染进程、拓展进程、插件进程。插件进程如flash、pdf、java 等与浏览器进程严格隔离,因此不会互相影响。

Chrome的渲染引擎由Sandbox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,在其中会进行一些安全检查。
白帽子讲Web安全(一)浏览器安全
采用Sandbox技术,可以让网页的渲染在一个独立的渲染进程中进行,并且该进程是受限的,如下图:
白帽子讲Web安全(一)浏览器安全

受限环境只能被某些或者很少的系统调用而且不能直接访问用户数据。

以下是Chrome实现的一个相对完整的Sandbox。
白帽子讲Web安全(一)浏览器安全沙箱模型工作的基本单位就是进程。每一个进程对应一个沙箱。相对于单进程浏览器,在发生奔溃时,多进程浏览器只会奔溃当前的Tab页,而单进程浏览器则会奔溃整个浏览器进程。这对于用户体验是很大的提升。

(4)注意

在现今的浏览器中,虽然有多进程架构和Sandbox的保护,但是浏览器所加载的一些第三方插件却往往不受Sandbox管辖。比如近年来在Pwn2Own大会上被攻克的浏览器,往往都是由于加载的第三方插件出现安全漏洞导致的。Flash、Java、PDF、.Net Framework在近年来都成为浏览器攻击的热点。

参考资料:
https://www.cnblogs.com/slly/p/6639173.html
《白帽子讲Web安全》 —— 吴翰清