0


浏览器安全

    浏览器已经成为人们访问互联网必不可少的工具。以往,我们使用浏览器获取信息;现在办公、娱乐都可以在浏览器上完成,而且随着 SaaS 应用逐渐普及,浏览器承担了越来越多的工作,文档编辑、专业领域的设计开发等工作也可以在网页上完成。作为用户访问互联网的主要工具,浏览器自然成为网络攻击者和安全研究人员的重要目标。一方面,互联网的快速发展吸引了众多厂商参与到浏览器市场份额的争夺战中,他们不断丰富浏览器功能并提升浏览器的安全性。另一方面,浏览器安全又与 Web 安全标准紧密相关,厂商在提升浏览器安全性的同时也积极参与安全标准的制定,使自己的产品获得竞争优势,而新的安全标准又促使厂商积极更新自己的产品,以免被市场淘汰,这样一来就形成了良性的竞争。在本章中,我们将介绍一些主要的浏览器安全特性。

同源策略

这一条规则不允许js脚本跨站访问

    Netscape 浏览器引入 JavaScript后,网页开始变得丰富且有活力,通过JavaScript 可以读取和操作 DOM 节点、读取 Cookie、发送请求,从而实现更复杂的功能。HTML 网页也在变得更加强大,它可以**加载不同站点的资源**,或者通过 iframe 嵌入其他站点的网页,这些站点的网页也有自己的 Cookie 和 DOM。浏览器开发人员很快意识到,如果不加限制,这将引起混乱并带来安全隐患。Netscape 的工程师在浏览器中设置了一个安全规则来限制不同源网站之间的互访问,并把这个规则称为同源策略(Same-origin Policy,有些中文文章中把“origin称为“域”,比如将 Cross-origin 译为“跨域”)。  

同源策略是 Web 应用中最核心和最基本的安全功能,它限制了 JavaScript 不能读取和操作其他源的资源。对于广泛依赖 Cookie 来维护用户会话的现代 Web 应用来说,这种机制具有特殊意义,浏览器只有严格限制不同源的资源互访问,才能保证网站会话凭证的安全,防止敏感信息泄露。

    试想如果没有同源策略,你登录网银站点 bank.com 后没有退出,又接着访问了一个恶意网站,这时该恶意网站中的JavaScript 代码向 bank.com 发起请求,就能读取其中的账户、余额等信息,甚至发起转账交易,将会非常危险。有了同源策略,才能避免这种跨越不同源网站的访问行为。即使用户用同一个浏览器在不同标签页访问不同的网站,或者一个网站的页面中嵌入了其他网站的内容,同源策略都可以确保不同站点之间是隔离且不可互访问的。

    理解同源策略是理解前端安全攻防的基础,但是与同源策略相关的内容比较复杂,而且与跨域访问有关的安全问题及注意事项非常多。

浏览器沙箱

** 简单来说:浏览器提供一个保护机制,让所有不同网站的各个进程都运行在沙箱之中,当沙箱检测到它存在威胁之后会通过IPC (IPC 是一种进程间通信的机制 ) 的方式向浏览器进程发出一个警告,然后浏览器用自己的安全策略去检测这个进程究竟要做什么,如果危险就把它隔离掉**

    据保守估计,平均每千行代码至少会产生一个安全漏洞。浏览器是非常复杂庞大的项目,Firefox 有超过 2500 万行代码,代码量接近于 Linux 内核。要确保一个程序不出现安全漏洞,需要保证程序在各种输入条件下都能正常工作,像浏览器这样的项目,它接收的输入是全互联网复杂多样的网页,做安全测试时要覆盖所有的输入条件组合几乎是不可能的。所以,现代浏览器都引入了**多进程架构**和**沙箱机制**,它假设程序会存在安全漏洞,通过沙箱来限制漏洞被进一步利用,而多进程架构则可以确保单个页面或组件崩溃时不会影响整个浏览器。

多进程架构:指浏览器将不同的功能模块(如渲染引擎、JavaScript引擎、插件等)运行在独立的进程中。每个进程具有独立的内存空间,这样即使其中一个进程出现问题,也不会影响其他进程的正常运行。此外,多进程架构还可以利用多核处理器的优势,提高浏览器的性能表现。

谷歌的 Chrome 是第一个采用多进程架构的浏览器,通过Chrome 的“任务管理器”功能可以看到,浏览器将工作拆分到多个进程中完成,主要的进程有: 浏览器进程、GPU进程、渲染进程、扩展进程、插件进程、网络和存储等功能进程。由于每个网页由一个独立的进程来渲染,每个扩展和插件也放在不同的进程中运行,这就极大降低了单个模块崩溃产生的影响(Chrome 也支持多种不同的进程模型,可以通过启动参数来指定)。

XSS保护

    在2007年前后,XSS 漏洞被 OWASP 评为互联网最大的安全威胁。为了在安全领域获得竞争力,微软率先在IE 8中推出了Xss Filter 功能,用以对抗反射型XSS攻击。一直以来,XSS都被认为是服务端应用的漏洞,应该由服务端应用修补代码,而微软率先推出了这一功能,就使得IE 8 在安全方面极具特色。开启 Xss Filter 后,IE 会检测 HTTP 请求中是否存在可疑的恶意脚本,并且检测HTTP 响应中是否存在相同的代码,如果存在,就认为这是一次反射型SS攻击,并改写HTTP 响应内容,让恶意脚本失效。

    虽然最初的 XSS Filter 设计并不完善,曾经被安全研究人员多次绕过,甚至在某些情况下还会给安全的网站带来额外的 XSS 威胁。总体上讲,XSS Flter 对缓解 XSS 攻击起到了很大的推动作用,随后 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 iself' https://apis.google.com

另一种添加策略的方式是在 HTML 源码中通过<meta>标签添加,如:

<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方案。

隐私策略

     当你在一个网站上搜索某商品后,在接下来的一段时间里,你访问其他网站时,它们也会展示与你搜索的商品相关的广告,甚至在跨设备时这种关联都有效。我们在互联网上的各种行为在被持续地追踪和分析,虽然它带来了更精准的广告投放和个性化推荐,但是在个人隐私数据越来越受到重视的今天,这极易引发人们对个人隐私安全的担忧。

    2002年,万维网联盟(W3C)推出了一个名为P3P的项目,全称是“隐私偏好平台项目”(Platform for Privacy Preferences Project),它的作用是让网站通过HTTP 响应头来声明自己采集的用户数据的类型和用途,例如:

P3P: CP="CURa ADMa DEVa PSAO PSDO OUR BUS UNI PUR INT DEM STA PRE COM NAV OTCNOI DSP COR”

    其中每一个短语都代表了特殊的含义。同时,终端用户可以通过浏览器配置P3P 策略,定义自己允许分享的隐私数据及其用途,当两者不匹配时浏览器会自动拒绝这个网站的 Cookie,这样让用户对网站采集的个人隐私数据有更多的知情权和控制权。

    但是P3P 项目被推出后很快就停止开发了,目前只有微软的IE和Edge 浏览器支持,并目微软在Windows10中也停止支持P3P。P3P 没有被大范围应用的原因有很多,首先,这个技术对普通用户来讲理解和使用成本过高,很少有用户会去定义自己的隐私策略:其次,网站主也没有义务去做详细的隐私声明;更重要的是,由于缺乏网络监管措施,很难知道网站有没有真正按照其隐私声明来执行,为了植入 Cookie,很多网站开发者只是随便抄一段 P3P 策略放在自己网站中。

    Firefox 在2011 年首次引入了一个称为“请勿追踪”(DoNot Track) 的特性,它允许用户配置自己的浏览器,通过在 HTTP 请求中加入一个名为 DNT 的头来表明自己不希望被追踪。很快,主流的浏览器都开始支持这一特性,微软甚至在IE 10 中默认开启 DNT 选项而且DNT也成为W3C的一个标准。

浏览器扩展

    为了丰富浏览器的功能,现代浏览器都支持扩展,允许开发者为浏览器添加新的特性。浏览器为扩展程序提供了非常多的权限,以实现复杂的功能,如读取和更改网页上的数据、读取和修改剪贴板内容,甚至屏幕录像。和移动平台的权限管理类似,浏览器也实现了扩展程序的权限管理(,扩展程序都需要声明自己所用到的权限,在安装时征得用户同意后才能被添加到浏览器中,而且扩展程序在运行中无法使用未授权的权限。

    扩展程序在安装后会自动更新,这就存在投毒的风险。2017 年一个流行的 Chrome 扩展程序的开发者账号被盗,攻击者发布了一个带有恶意脚本的扩展程序更新版本,当时超过 100 万用户中招。幸好这个恶意脚本只是向网页中插入广告,而没有盗取用户的账号、密码等机密数据。

    为了减少恶意扩展程序带来的危害,浏览器一方面不断加强应用商店的安全审查,另一方面也在把权限管理做得更加精细,比如只对特定网站授权,或者每次使用时授权,而不是一次性给全部网站永久授权。

高速发展的浏览器安全

近十年是浏览器快速发展的十年,旧的安全技术被淘汰,新的安全技术不断被推出。

    钓鱼一直是互联网的一大威胁,攻击者诱骗受害者访问一个虚假网站(钓鱼网站),骗取用户输入账号和密码等信息。针对钓鱼网站,浏览器厂商都推出了恶意网站拦截功能,除了拦截钓鱼及诈骗网站,还会拦截下载恶意软件的站点。

    恶意网站拦截的工作原理很简单,一般都是浏览器周期性地从服务端获取一份最新的恶意网址黑名单,如果用户访问的网址存在于此黑名单中,浏览器就会弹出一个警告页面。

    谷歌的 Safe Browsing和微软的SmartScreen 是应用最广泛的反恶意网站功能,Safe Browsing不仅被应用于谷歌的各个产品中,它还提供 API供其他厂商使用,Safari 和 Firefox 也都集成了Safe Browsing。微软的 SmartScreen 不仅提供拦截恶意网站和恶意程序的功能,还提供了基于文件信誉的下载保护功能,它维护了一份曾被大量用户下载的热门文件列表,其中的文件都被认为是信誉值高的文件,如果用户下载的文件不在这个高信誉文件列表中,SmartScreen 将给出警告。这项功能极大降低了用户下载恶意软件带来的危害。根据 NSS Labs 的统计数据,基于文件信誉保护功能的 SmartScreen 阻止了 99%的恶意文件下载。

    为了让用户更容易辨识可信网站,全球数字证书颁发机构与浏览器厂商共同制定了一个更安全的增强型数据证书,叫作 EV SSL证书(Extended Validation SSL Certificate)。这个证书有更加严格的身份验证标准,数字证书颁发机构除了验证申请者的域名所有权,还要对申请者进行严格的审查以确认申请者身份的真实性,只有拥有良好的信誉的申诸者才可能通过审查,恶意仿冒网站很难申请到EV SSL证书。同时,用户在访问拥有 EV SSL证书的网站时,浏览器的地址栏会显示为绿色,以标识当前网站很安全。

    为拥有EV SSL 证书的站点显示绿色地址栏,这种做法虽然当时被主流的浏览器采纳,但很快浏览器厂商便意识到,仅仅标识哪些网站是可信的,对用户而言安全防护效果非常有限,用户在访问仿冒的网站时并不会注意浏览器地址栏有没有显示成绿色。基于“默认安全”的原则,用户访问加密、可信的网站应该是常态,只有当他访问不可信的网站时才需要给出安全提示。所以,目前浏览器都取消了用户访问拥有 EV SSL 证书的站点时地址栏显示为绿色的做法仅在用户访问未加密的网站时,显示“不安全”

    随着 HTTPS 逐渐普及,在部分浏览器中,如果在未加密的 HTTP 页面输入内容,浏览器会将“不安全”这几个提醒文字显示为警示作用更强的红色。Chrome计划在未来的版本中对所有未加密的 HTTP页面都显示红色警示文字,恶意网站想要欺骗用户,成本会越来越高。 现代浏览器都提供了帮助用户保存网站密码的功能,在注册账号的网页中,Safari 会自动建议用户使用强度足够高的密码,这极大提升了网站账号的安全性。目前浏览器都提供了密码安全检测功能,对于已保存的密码,浏览器会与互联网上已经泄露的密码库匹配,提示用户密码是否已被泄露,并且也会检测是否存在强度低的密码,以及在不同网站共用的密码。

    最早的时候,域名只支持使用少数的 ASCII 字符,但后来国际化域名 (InteationalizedDomain Name,IDN)允许使用任意 Unicode 字符作为主机名或域名,比如“http://中科院.网址”。国际化域名可以转换成域名代码 (Punycode),它是用纯 ASCII 字符表示的,比如“http://中科院.网址”转成 Punycode就是“http://xn--figv77h35r.xn--ses554g/”。但是浏览器为了让展示效果更友好,地址栏通常会展示国际化域名。这就带来一个问题,在部分西方国家的语言中,有些字符的外观非常相像,如果攻击者注册一个国际化域名 http://ebay.com(此处是西里尔语言中的a,非英文字母 a),在浏览器中直接显示国际化域名就很容易让用户误以为这是 eBay 的官网,使攻击者实现钓鱼攻击,如果显示成 Punycode (http://xn--eby-7cd.com/)则不存在视觉欺骗性.

    这种攻击称为域名同形异义词攻击·(IDN homograph Attack)。为了应对这种攻击,包括Firefox 和 Chrome 在内的浏览器都实现了国际化域名的字符安全检测机制,用于判断一个国际化域名应该直接显示,还是转换成 Punycode 后显示。比如,Firefox 就实现了自己的IDN 显示算法,其检测算法步骤较多,这里不做详细介绍。
标签: 安全 web安全 网络

本文转载自: https://blog.csdn.net/Festival_/article/details/135884081
版权归原作者 Festival_ 所有, 如有侵权,请联系我们删除。

“浏览器安全”的评论:

还没有评论