浏览器已经成为人们访问互联网必不可少的工具。作为用户访问互联网的主要工具,浏览器自然成为网络攻击者和安全研究人员的重要目标。
一方面,互联网的快速发展吸引了众多厂商参与到浏览器市场份额的争夺战中, 他们不断丰富浏览器功能并提升浏览器的安全性。另一方面,浏览器安全又与Web安全标准紧密相关, 厂商在提升浏览器安全性的同时也积极参与安全标准的制定, 使自己的产品获得竞争优势,而新的安全标准又促使厂商积极更新自己的产品, 以免被市场淘汰, 这样便形成良性竞争, 使浏览器在安全性各方面越来越趋于完善。
同源策略(Same origin policy) 是一种约定, 它是浏览器最核心也是最基本的安全功能, 它限制了JavaScript不能读取和操作其它源的资源。对于广泛依赖Cookie来维护用户会话的现代Web应用来说, 这种机制机制具有特殊意义, 浏览器只有严格限制不同源的资源互访问,才能保证网站会话凭证的安全, 防止敏感信息泄露。
从具体实践的角度, 所谓同源是指: 域名、协议、端口相同。
假设现在有一个URL: http://www.example.com/dir/page.html, 那么与该网站同源的网站有哪些呢? 参考以下表格:
URL | 结果 | 原因 |
http://en.example.com/dir/other.html | 否 | 不同域名 |
http://example.com/dir/other.html | 否 | 不同域名(需要完全匹配) |
http://username:password@www.example.com/dir2/other.html | 是 | 只有路径不同 |
http://v2.www.example.com/dir/other.html | 否 | 不同域名(需要完全匹配) |
http://www.example.com:81/dir/other.html | 否 | 不同端口(若未标明,http://默认端口号为80) |
http://www.example.com/dir/page2.html | 是 | 只有路径不同 |
http://www.example.com/dir2/other.html | 是 | 只有路径不同 |
https://www.example.com/dir/other.html | 否 | 不同协议(http和https) |
另外,同源策略又分为以下两种:
如果没有DOM同源策略, 也就是说不同域的iframe之间可以相互访问,那么黑客可以这样进行攻击:
如果没有XMLHttpRequest同源策略, 那么黑客可以进行CSRF(跨站请求伪造)攻击,攻击过程如下:
因此, 有了浏览器同源策略, 我们才能更安全的上网冲浪。
据保守估计, 平均每千行代码至少会产生一个安全漏洞。浏览器是非常复杂庞大的项目, 像Firefox浏览器已经有超过2500万行代码, 代码量已经接近Linux内核。要想确保一个程序不出现安全漏洞, 需要保证程序在各种输入条件下都能正常工作, 像浏览器这样的复杂项目,它接收的输入是全互联网复杂多样的网页, 做安全测试时要覆盖所有的输入条件组合几乎是不可能完成的任务。所以,现代浏览器都引入了多进程架构和沙箱机制, 它假设程序会存在安全漏洞, 通过沙箱来限制漏洞被进一步利用, 而多进程架构则可以确保单个页面或组件崩溃时不会影响整个浏览器。
沙箱利用操作系统提供的安全性,允许不能对计算机做出持久性改变或访问持续变化信息的代码执行。谷歌的Chrome是第一个采用多进程架构的浏览器, 通过Chrome的任务管理器功能可以看到, 浏览器将工作拆分到多个进程中完成, 主要的进程包括:浏览器进程、GPU进程、渲染进程、扩展进程、插件进程、网络和存储等功能进程。如下图:
由于每个网页由一个独立的进程来渲染, 每个扩展和插件也放在不同的进程中运行, 这就极大降低了单个模块崩溃产生的影响。
多进程模式只是让各个模块相互隔离, 但是当存在漏洞的模块被恶意利用时还是会对系统造成破坏。虽然现代操作系统和编译器提供了各种安全机制来保证程序的安全,如:DEP、ASLR、SafeSEH、StackGuard等内存保护技术, 但这些机制还是不断被安全研究人员突破,所以现在主流的浏览器都采用沙箱技术来进一步提升安全性。
以下是Chrome浏览器的沙箱架构图:
在Chrome中,浏览器进程也称为代理进程(Broker),其它的模块(如渲染引擎、插件)进程称为目标进程(Target),目标进程都运行在沙箱中。在目标进程中, 高风险的系统API调用会被拦截器截获(也叫Hook)并通过IPC方式转发给代理进程, 该调用行为需要通过代理进程的策略引擎检测后才会执行并返回结果, 违反策略的调用行为将直接返回失败。
理论上,有同源策略的限制, 恶意网站不能在浏览器中获取其它站点的数据, 但是任何代码都有可能存在安全漏洞,如果同源策略在实现上存在漏洞,将带来不可估量的危害。为此, Chrome提供了"站点隔离"特性, 它确保了不同站点的页面被放在不同的进程中渲染, 即使是一个标签页中的网页通过iframe加载了不同站点的页面,它们也将在不同的进程中渲染。
站点隔离可以看成同源策略之后的另一道防线, 即使攻击者找到了漏洞, 能绕过同源策略的限制, 但还是被限制在只渲染当前站点的沙箱进程中, 无法获取其它站点的数据, 这种做法就是典型的纵深防御的体现。
在2007年前后,XSS漏洞被OWASP评为互联网最大的安全威胁。为了在安全领域获得竞争力, 微软率先在IE8中推出了XSS Filter功能,用以对抗反射型XSS攻击。开启XSS Filter后, IE会检测HTTP请求中是否存在可疑的恶意脚本, 并且检测HTTP响应中是否存在相同的代码, 如果存在, 则认为这是一次反射型XSS攻击, 并改写HTTP响应内容, 让恶意脚本失效。随后, Chrome和Safari也发布了相应的XSS防御功能, 称为:XSS Auditor。
由于XSS Filter和XSS Auditor本质上还是通过特征过滤实现XSS防御,因此还是会被针对性的绕过, 因此Firefox主推另一种更加严格的方案- 内容安全策略(CSP), 这一策略是由安全专家Robert Hanson最早提出的, 其原理是由服务端返回一个名为Content-Security-Policy的HTTP头, 并在其中描述该页面应该遵守的安全策略, 然后由浏览器来执行, CSP语法可以实现非常灵活的策略, 比如下面的语句定义了当前页面只允许加载和执行来自当前域和https://apis.google.com的脚本:
Content-Security-Policy: script-src 'self' https://apis.google.com
另一种添加策略的方式是在HTML源码中通过标签添加,例如:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
目前主流的浏览器都支持CSP, 它本质上是一种白名单机制, 由开发者明确告诉浏览器, 哪些可信的资源是允许加载的。所以CSP是一个更加安全的机制, 新版的Chrome和Edge浏览器已经移除了XSS Auditor和XSS Filter功能,开始主推CSP方案。
当你在一个网站上搜索某商品后, 在接下来的一段时间里,你访问其它网站时,它们也会展示与你搜索的商品相关的广告,甚至在跨设备时这种关联都有效。我们在互联网上的各种行为在被持续的跟踪和分析,虽然它带来了更精准的广告投放和个性化推荐, 但是在个人隐私数据越来越受到重视的今天, 极易引发人们对个人隐私安全的担忧。
Firefox在2011年首次引入了一个称为"请勿追踪"(Do Not Track)的特性, 它允许用户配置自己的浏览器,通过HTTP请求中加入一个名为DNT的头来表明自己不希望被追踪。很快, 主流的浏览器都开始支持这一特性, 微软甚至在IE10中默认开启DNT选项, 而且DNT选项也成为W3C的一个标准。
苹果的Safari浏览器更进一步,其提供的"智能防跟踪"功能会在本地分析所有的第三方Cookie,鉴别其中的追踪Cookie,并周期性将它们删除,更大程度减少用户被追踪。
著名的安全搜索引擎DuckDuckGo发布了一个名为Tracker Radar的项目,它通过分析全互联网的数据生成了一份域名列表, 涵盖了绝大部分跨站点追踪的网站。DuckDuckGo将其开源, 并将这份列表分享给其他厂商使用, Safari内置的跟踪器列表正式由Tracker Radar提供的。
与此同时,一向以隐私保护著称的苹果还在其Safari浏览器中加入了隐藏IP地址的功能, 苹果为用户提供了代理IP地址,当用户访问这些追踪用户的网站时, 实际上是通过苹果的代理IP地址访问的,用户的真实IP地址被隐藏起来,实现了更强的隐私保护。
同样的,谷歌发起了一个名为“隐私沙盒”的项目, 隐私沙盒的主要目的是将用户隐私数据转由浏览器来管理,并通过API的方式供Web站点调用,最终将第三方Cookie完全废除。目前该项目仍然处于试用阶段。
现在主流的浏览器普遍都支持扩展, 允许开发者为浏览器添加新的特性。浏览器为扩展程序提供了非常多的权限,以实现复杂的功能,例如:读取和更改网页上的数据、读取和修改剪切板内容,甚至屏幕录像。和移动平台的权限管理相似,浏览器也实现了扩展程序的权限管理,扩展程序都需要声明自己所用到的权限,在安装时需要征得用户同意后才能添加到浏览器中, 而且扩展程序在运行中无法使用未授权的权限。以下是在Chrome浏览器中添加扩展需要申请权限:
浏览器为了减少扩展程序带来的危害,一方面加强扩展商店的安全审查,另一方面也在逐步把权限做的更加精细, 比如只对特定网站授权,或者每次使用时授权, 而不是一次性给全部网站永久授权。除此之外,即时用户已经同意安全扩展,在安装之后,用户仍然可以通过查看详情详细了解该扩展拥有的权限所能够做的事情, 例如Chrome浏览器的某个扩展权限详情:
网络钓鱼一直以来是互联网的一大威胁, 针对钓鱼网站, 浏览器厂商推出了恶意网站拦截功能, 除了拦截钓鱼和诈骗网站, 还会拦截下载恶意软件的站点。
恶意网站拦截的工作原理很简单, 一般都是浏览器周期性从服务端获取一份最新的恶意网址黑名单,如果用户访问的网址存在此黑名单中, 浏览器就会弹出一个警告页面,以下是Safe Browsing的拦截页面:
Google的Safe Browsing和微软的SmartScreen是应用最广泛的反恶意网站功能, Safe Browsing不仅被应用于Google的各个产品中, 它还提供了API供其他厂商使用, Safari和Firefox也都集成了Safe Browsing。微软的SmartScreen不仅提供拦截恶意网站和恶意程序的功能,还提供了基于文件信誉值高的文件, 它维护了一份曾被大量用户下载的热门文件列表, 其中的文件都被认为是信誉高的文件, 如果用户下载的文件不在这这个高信誉文件列表中, SmartScreen将给出警告。这项功能极大降低了用户下载恶意软件带来的危害。根据NSS Labs的统计数据, 基于文件信誉保护功能的SmartScreen阻止了99%的恶意文件下载。
除此之外,为了让用户更容易辨识可信网站, 全球数字证书颁发机构与浏览器厂商共同制定了一个更安全的增强型数据证书,叫做:EV SSL证书(Extended Validation SSL Certificate)。这个证书有更加严格的身份验证标准, 数字证书颁发机构除了验证申请者的域名所有权,还要对申请者进行严格的审查以确认身份的真实性,只有拥有良好信誉的申请者才能通过审查, 恶意仿冒网站很难申请到EV SSL证书。
对于没有使用https协议的网站,浏览器默认会对其标识为:不安全, 提醒用户注意, 如图:
而采用https协议的网站, 在地址栏前面会看到一把锁, 点击可以看到该网站的证书,以下是苹果Safari浏览器显示的证书:
其实除以上安全功能外,现代浏览器还提供了一个自动填充功能, 能够自动填写地址、信用卡、密码等信息。但存在一个问题, 浏览器内部的自动填充系统有时会与外部密码管理器产生冲突, 例如:1Password、Bitwarden等第三方密码管理器。为了解决该问题, 谷歌的Chrome于近日即将推出一项调整来解决该问题, 谷歌目前正在测试一项新的"自动填充选项"设置, 旨在改善Chrome与第三方密码管理器的兼容性, 这种更紧密的集成消除了需要复制粘贴信息的繁琐操作,对于第三方管理器更有利, 同时也使用户在使用非谷歌应用时更加方便, 对用户来说也更加安全。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8