浏览器系统安全 - 安全沙箱
首先,我们设想一下,如果我们下载了一个恶意程序,但是没有执行它,对我们有没有影响?
那肯定没有,而浏览器也是一样的
浏览器可以安全地下载各种网络资源,但是执行的时候就需要谨慎了。比如解析HTML、CSS、执行JS等操作,一不小心黑客就会利用这些操作对有漏洞的浏览器发起攻击
所以需要在渲染进程和操作系统之间建一堵墙,有这堵墙在挡着,黑客能黑进来,也只能获取渲染进的操作权限(如下图),不会影响到外面,而这隔离操作系统和渲染进程的一堵墙就是安全沙箱
安全沙箱最小的保护单位是进程,并且能限制进程对操作系统资源的访问和修改,这就意味着,安全沙箱所在的进程不能有读写操作系统的功能,比如读写本地文件、发起网络请求,调用GPU接口等
安全沙箱怎么影响各个模块功能
持久存储
- 存储Cookie的读写,浏览器内核会维护一个存放所有Cookie的Cookie数据库,在渲染进程通过JS读取Cookie时,渲染进程会通过IPC将读取Cookie的信息发送给内核,浏览器内核读取Cookie之后再将内容通过IPC返回给渲染进程
- 缓存文件的读写也是由浏览器内核实现
网络访问
:渲染进程不能直接访问网络,也需要通过浏览器内核,而浏览器内核在处理URL请求之前,会检查渲染进程有没有权限请求该URL,比如有没有跨域用户交互
- 输入时:操作系统会将输入事件传给浏览器内核,内核判断如果是地址栏输入事件就直接在内核处理,如果是页面里的就转发给渲染进程
- 渲染时:渲染进程渲染出位图后,需要将生成好的位图发送给浏览器内核,再由内核将位图复制到屏幕上显示
站点隔离你知道吗
我们知道一个标签页会有一个渲染进程,假如这个标签页里面有多个不同站点的 iframe 呢? 这就会导致多个不同站点的内容运行在同一个渲染进程中,这肯定不行
所有操作系统中都存在两个A级漏洞:幽灵(Spectre)和熔毁(Meltdown),这是处理器架构导致的,很难修补
如果银行页面中有一个恶意 iframe ,这个恶意站点利用两个A级漏洞入侵渲染进程,那恶意程序就可以读取银行站点渲染进程内所有内容了,这对用户来说风险就很大了,如果没有沙箱保护,甚至还可以对操作系统发起攻击
所以后来Chrome对渲染进程进行重构,将标签级的渲染进程改成 iframe 级渲染进程,就是说一个标签页内可能运行多个渲染进程,并且相互隔离,这样恶意 iframe 就无法访问页面中其他的内容了,也就无法攻击其他站点了,这就是站点隔离