攻击角度的浏览器安全----1、浏览器简介及安全基础


一、浏览器简介

浏览器的工作机制,就是向整个互联网请求指令,请求到以后几乎不加任何质疑地去执行。
浏览器工作图解:
在这里插入图片描述

浏览器的设计规格如下:
1、它要向互联网请求指令,然后执行获取的指令。
	a、防御者无法控制这些指令;
	b、某些指令会要求这个软件从以下来源再次请求其他指令:
			·互联网的其他地方;
			·内部网的其他地方;
			·非标准的HTTP和 HTTPS TCP 端口。
2、某些指令会要求这个软件通过TCP发送数据;这可能会造成对其他联网设备的攻击。
3、它会与互联网中任意服务器进行加密通信。防御者无法看到通信内容。
4、它会不断向攻击者暴露攻击目标。它会在后台静默更新。
5、它经常会依赖插件获得某些功能。没有统一的机制更新这些插件。

服务器和客户端必须相互依赖,才能发挥自己最大的潜能;没有服务器,浏览器什么也看不到,而没有浏览器,服务器的内容也不知道要交给谁。


二、浏览器基础知识

1、同源策略

同源策略(Same Origin Policy / SOP):是浏览器的安全功能,同源策略用于限制不同来源的资源之间的交互。

2、HTTP首部
HTTP首部:是HTTP协议定义的原初指令,用于指示接收方怎么处理其后的内容。Web客户端要在所有请求的开头提供HTTP首部,而Web服务器也要在任何响应的开头附上HTTP首部。
首部内容决定了接收方(可能是服务器,也可能是浏览器)如何处理被发送的内容。对于特定的交互而言,有些首部字段是必需的,有些首部字段是可选的,有些是为了提供额外信息用的。

3、标记语言
标记语言是一种描述如何显示内容的方式。具体来说,标记语言为在同一文档中创建数据占位符以及数据相关注释的占位符给出了标准的方式。我们目力所及的几乎任何一个网页都可能使用了标记语言,而标记语言负责告诉浏览器怎么把页面显示给我们。

HTML:即HyperText Markup Language(超文本标记语言),是一种常用的编程语言,主要用于告诉浏览器如何显示网页。HTML源于SGML(Standard Generalized Markup Language,标准通用标记语言),经过多年发展,已经有了非常大的变化。
对标记语言(数据与注释或指令并存)的依赖,是一些重要、持久和系统的安全问题的根源所在。本书后面还会详细讲到HTML,以及它的众多特性。

XML:是Web上常用的一种标记语言,最常用的情形是把它作为Web服务之间(或者通过远程过程调用)交换数据的标准格式。

4、CSS
CSS:即cascading style sheets(层叠样式表),是浏览器为网页内容指定样式的主要方法。CSS提供了一种把网页内容与样式分离的机制。

5、脚本
JavaScript:支持函数式编程和面向对象编程。与强类型的Java语言不同,JavaScript是弱类型的。JavaScript在Web开发的当下和可见未来,都是统治性的语言。所有浏览器默认的脚本语言都是JavaScript。
VBScript:只有微软的浏览器才支持,而且在真正的Web开发中几乎没人用了。

6、DOM
DOM:即document object model(文档对象模型),是浏览器中的一个基础性概念。DOM是在浏览器中操作HTML或XML文档的API,使用脚本语言可以通过DOM提供的对象操作HTML元素。
DOM是为JavaScript这样的脚本语言而定义的。DOM规范定义了通过脚本操作实时文档的方法,即浏览器中运行的脚本可以动态读取或修改网页内容。这样一来,网页可以不经过服务器就更新自己的内容,而且也不用用户参与。

7、渲染引擎
渲染引擎(rendering engine):在浏览器里有很多不同的称呼,比如布局引擎(layout engine)或浏览器引擎(web browser engine)。渲染引擎是浏览器的核心组件,负责把数据转换为用户在屏幕上可以看到的样式。浏览器可以把HTML、图片和CSS综合起来,共同决定用户在浏览器中看到的最终产品是什么样子。正是这些引擎让用户能够看到图形。其中Lynx和W3M只解析文本;WebKit、Blink、Trident和Gecko是几种常见的图形渲染引擎。

WebKit
很多浏览器都在使用(苹果的Safari,旧版谷歌Chrome等)。WebKit是一个开源项目,它的目标是成为通用的软件应用程序交互与展示引擎。除了在浏览器中使用,还有邮件客户端和即时通信系统也在使用它。

Trident
是微软开发的渲染引擎,也叫MSHTML,IE使用的Trident是闭源的。与WebKit类似,Trident也被用于浏览器之外的软件中,比如Google Talk。软件可以通过调用Windows系统中的mshtml.dll动态链接库来使用这个引擎。Trident首次出现在Internet Explorer的第四个版本中,一直非常稳定。

Gecko
Firefox是使用Gecko开源渲染引擎的最主要的软件。目前,Gecko主要用在Mozilla基金会和Mozilla公司开发的一些应用中,最主要的就是Firefox浏览器。

Blink
2013年,谷歌宣布从WebKit分支出来,创建了新的Blink渲染引擎。Blink最初致力于更好地支持Chrome的多进程架构,降低该浏览器的内部复杂度。

国内浏览器的多内核:
1、QQ浏览器:Trident+Webkit (Blink)
2、360安全浏览器:Trident+Webkit (Blink)
3、猎豹浏览器:Trident+Webkit (Blink)
4、世界之窗:Trident+Webkit (Blink)
5、搜狗高速浏览器:Trident+Webkit (Blink)
6、UC浏览器:Trident+Webkit (Blink)

8、Geolocation
Geolocation API:是为移动和桌面浏览器访问设备地理位置信息而开发的。该API可以通过GPS、蜂窝小区三角测量、IP地理定位和本地Wi-Fi热点取得地理位置信息。现实世界中有很多滥用地理位置信息的例子。为此,浏览器也增加了很多严密的安全措施,使得攻击的主要方法只剩社会工程了。后面几章还会继续讨论这个话题。

9、Web存储
Web 存储:(Web storage)又称DOM 存储(DOM storage),原来是HTML5规范的一部分,现在已经剥离出来。可以把Web存储看成超级cookie。与cookie类似,Web 存储有两种存储机制:一种可以将数据持久保存在本地,另一种只在会话期间保存数据。具体来说,本地存储(local storage)负责存储持久数据,用户多次访问都可以存取;会话存储(session storage)负责存储会话数据,只在创建该数据的标签页内有效。

下面是一个使用Web 存储 API的简单例子。在浏览器JavaScript控制台中运行以下命令,就可以在当前标签页的会话存储中保存一个"BHH"值:

sessionStorage.setItem("BHH", "http://browserhacker.com"); 
sessionStorage.getItem("BHH");

同源策略也适用于本地存储,而且每个来源都会分开。其他来源的资源不能访问当前的本地存储,子域也不行。

10、跨域资源共享
CORS(cross-origin resource sharing):是一个让来源忽略同源策略的规范,在最宽松的配置下,Web应用可以通过XMLHttpRequest跨域访问任何资源,服务器通过HTTP首部通知浏览器它是否接受访问。

CORS的一项核心内容就是给Web服务器的HTTP响应首部增加了以下字段:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET

如果浏览器向某服务器发送了跨域XMLHttpRequest请求,而该服务器的响应首部并不包含以上字段,则这个跨域请求就会失败,即不能访问该服务器响应的内容。这其实就是与同源策略一致。然而,如果Web服务器返回了前面的首部,那么现代浏览器就会遵循CORS规范,允许对该来源响应内容的访问。

11、HTML5
HTML5:是HTML的新版本,增强了原有功能及用户体验。从安全角度来说,攻击面增大了,HTML5新增的很多方法暴露了HTML没有暴露过的漏洞。

WebSocket:是一种浏览器技术,利用它可以在浏览器与服务器之间打开一条即时响应的全双工信道。这样一来,不使用服务器轮询也可以实现高标准的事件驱动系统。WebSocket替代了Comet11等基于Ajax的服务器端推送技术。但Comet需要客户端库,WebSocket API则完全是现代浏览器中的本地技术。包括IE10在内的所有现代浏览器都原生支持WebSocket,只有Opera Mini和安卓的原生浏览器例外。

Web Worker:之前的JavaScript代码都是单线程执行的。而要想实现并发,开发者就要依赖setTimeout()和setInterval()。HTML5新增了Web Worker,可以看作在浏览器后台运行的线程。有两种Web Worker:一种可以在同一来源的资源间共享,另一种只能与创建它的函数通信。虽然这个API也有一些局限,但仍然给开发人员提供了更多的灵活性。当然,攻击者因此也有了更多方式对浏览器发起攻击。

操作历史:以前,浏览器只要跟踪用户点了哪个链接才跳到新页面就行了。现在,点击链接可能会导致脚本执行并渲染页面。HTML5提供了操作历史记录的很多方法。使用历史对象,脚本可以添加或删除位置,也可以在历史链中向前或向后移动当前页面。

WebRTC:Web Real-Time Communication(Web实时通信),使用WebRTC可以实现浏览器之间的互相通信,而且延迟很低,但要实现富媒体的实时交互,必须有高带宽支持。WebRTC的功能包括直接访问相机和音频设备(用来支持视频会议)。这种实用但很容易被侵入的技术也会面临很多潜在的安全威胁。


三、浏览器安全策略

1、HTTP首部

内容安全策略
服务器会发送CSP HTTP首部Content-Security-Policy或X-Content-Security-Policy,以规定可以从哪里加载脚本,同时还规定了对这些脚本的限制,比如是否允许执行JavaScript的eval()函数。

安全cookie标志
HTTP和HTTPS都可以发送cookie,不会加以区分。但这样有可能影响与浏览器建立的会话的安全性。通过HTTPS建立的安全会话暗号(token)有可能被攻击者通过标准HTTP请求获取。这就是secure cookie标志希望一蹴而就解决的问题。这个标志的主要目的就是告诉浏览器不要通过任何不安全的渠道发送cookie,从而确保敏感的会话暗号无论何时何地都处于安全保护之中。

Http Only cookie标志
指示浏览器禁止任何脚本访问cookie内容,这样就可以降低通过JavaScript发起的XSS攻击偷取cookie的风险。

X-Content-Type-Options
浏览器可以使用各种检测技术判断服务器返回了什么类型的内容。然后,浏览器会执行一些与该内容类型相关的操作。而nosniff指令可以禁用浏览器的上述行为,强制浏览器按照Content-type首部来渲染内容。
举个例子,如果服务器给一个script标签返回的响应中带有nosniff指令,那么除非响应的MIME类型是application/javascript(或其他几个字符串),否则浏览器会忽略响应内容。
假如响应不包含这个指令,而且有人上传了一个特殊的文件,后来该文件又被人下载的话,可能就会造成威胁。此时,浏览器可能就会按照惯例错误地解释文件的MIME类型,例如把JPEG当作脚本来解释。

Strict-Traansport-Security
指示浏览器必须通过有效的HTTPS通道与网站通信。
如果是一个不安全的连接,用户不可能接受HTTPS错误并继续浏览网站。相反,浏览器会解释错误,并且不允许用户继续浏览。

X-Frame-Options
用于阻止浏览器中的页面内嵌框架。
浏览器在看到这个首部后,应该保证不把接收到的页面显示在一个IFrame中。制定这个首部的目的是防止发生界面伪装(UI redressing)攻击,其中之一就是点击劫持(clickjacking)。

2、反射XSS过滤

浏览器安全特性会尝试检测、清除和阻止反射型XSS(Reflected XSS)。浏览器会尝试被动地发现已经成功的反射型XSS攻击,然后尝试清除响应中的脚本或阻止XSS脚本执行。

3、沙箱

沙箱(sandbox):沙箱把浏览器的高危区域封装在安全围墙之下,把注意力吸引到较小的攻击面上。

浏览器沙箱
很多层面都可以使用沙箱机制。比如,可以应用在内核级别,把不同用户隔离开;可以应用在硬件级别,实现内核与用户空间的权限分离。
浏览器沙箱属于用户空间程序中最高层次的沙箱,它隔离的是操作系统赋予浏览器的权限和在浏览器中运行的子进程的权限。要想完全拿下浏览器,至少要两步。第一步是找到浏览器功能上的漏洞,第二步就是突破沙箱,后者也叫绕开沙箱(sandbox bypass)。在有的浏览器中,沙箱策略体现在用不同的进程打开不同的网站,让恶意网站很难影响其他网站乃至操作系统。这种沙箱同样也应用于插件和扩展,比如把PDF渲染进程独立出来。绕开沙箱能够得逞,通常是因为编译后的代码种类庞杂,而且攻击者企图破坏整个进程,这种情况下沙箱有效性的标志就是它能否通过检验,即能否阻止被破坏的执行路径取得全部进程的权限。

IFrame沙箱
作为一种机制,可以使用IFrame显示来自不同来源不被信任的内容,有时候也可以用于显示来自相同来源但不被信任的内容。比如,Facebook的社交媒体部件就是一个例子。
沙箱IFrame指的是给这个嵌入的帧添加一个HTML5属性,添加这个属性后,就不能在其中使用表单、执行脚本,也不能导航到顶层页面,而且只能限于与一个来源通信,施加于每一个父框架的限制,都会被嵌在其中的子框架自动继承。

4、反网络钓鱼和反恶意软件

通过伪造在线内容(包括电子邮件)窃取证书等个人信息的行为,一般称为网络钓鱼(phishing)。很多组织都会公布钓鱼网站的信息,而现代浏览器可以利用这些信息。浏览器会在访问网站时,将其与恶意站点名单进行对照。如果检测到要访问的网站是一个钓鱼网站,浏览器就会采取措施。
类似地,服务器也可能在所有者未察觉的情况下被利用,或者有人专门运行这种服务器,托管着一些利用浏览器的隐患内容。这些网站会诱惑用户手工下载和执行软件,从而绕过浏览器防御措施。关于托管有恶意代码的恶意网站,有很多组织都提供了相应的黑名单。浏览器可以直接引用,以便实时检测。

5、混入内容

混入内容(mixed content)网站:是指某个来源使用HTTPS协议,然后又通过HTTP请求内容。不通过HTTPS传输的内容有可能被修改,使得任何加密数据的措施形同虚设。如果通过未加密的通道传输的是脚本,那么攻击者就可能在数据流中注入指令,进而破坏浏览器与服务器间的交互。


四、核心安全问题

1、攻击面

攻击面(attack surface):指的是浏览器容易遭受未信任来源攻击影响的范围。这样说来,最小的情况下,浏览器的渲染引擎就是问题所在。大量的API和各种存取数据的抽象功能的与日俱增,浏览器的攻击面也是越来越大了。

升级速度
浏览器厂商不可能因为浏览器有安全问题,就宣传停止所有浏览器的使用,这么说来,从浏览器安全漏洞被爆出之日起到这个漏洞被修复的这段时间内,大多数组织的浏览器都处于容易被攻击的状态。

静默更新
静默的后台更新,给用户带来很大的便利,也增大了受攻击的可能性。
为保证可用更新的快速应用,一些开发人员也开始实现自己的静默机制。比如,谷歌就给自己的Chrome浏览器实现了一个静默更新功能。用户无权禁用这个功能,以此保证及时提供所有更新,而不会被用户阻断。
这方面一个明显的例子,就是谷歌在Chrome中部署自己的PDF渲染引擎取代Adobe Reader。这确保了每个自动更新的Chrome都不再受制于这个第三方插件的更新进程。
如果浏览器在后台更新和新增功能时出现问题,就可能增大每个浏览器的攻击面,而此时只能浏览器的开发者去对隐患进行清除修复。

扩展
扩展可以增强浏览器功能,而又不需要单独开发一款软件。但扩展kennel影响浏览器加载的每一个页面,反过来,每个加载的页面又会影响扩展。
每个扩展都可能成为攻击者的目标,因而它们会增大浏览器的攻击面。有时候,常见的XSS隐患也会通过扩展进入浏览器。

插件
一般来说,插件就是能够独立于浏览器运行的软件。与扩展不同,浏览器只会在Web应用通过对象标签或Content-type首部包含它们的情况下,才会运行插件。
有些互联网功能离不开合适的插件,这也是浏览器支持增强插件功能的原因。比如,浏览器在访问Juniper等VPN网关时,就要使用Java小程序。
很多公司的业务都依赖于一批主流的浏览器插件,而有些插件就暴露出了一些隐患。在这种情况下,防御者要么选择使用包含隐患的插件,要么选择停办一些公司业务。

2、放弃控制

浏览器从互联网上的任意位置请求指令,其主要功能是把内容呈现于屏幕之上,为用户与内容交互提供界面,而且会严格按照浏览器设计的方式呈现。作为这个核心功能的实施结果,浏览器必须将很大一部分控制权让给服务器。浏览器必须执行收到的命令,否则就有可能无法正确渲染页面。
对现代的Web应用而言,页面中包含大量其他来源的脚本和资源是很正常的。如果要正常显示页面,这些资源也必须正确处理和运行。
现代Web应用和浏览器可能会发出类似这样的请求:“我要打开你的麦克风,然后异步把数据发送给那边的服务器。”这种带有攻击性的功能随时会引发一个问题:不能保证所有用户只浏览非恶意网站。

3、TCP协议控制

服务器-客户端模型并没有提供太多灵活性,比如使用哪个端口与客户端通信,客户端可以使用哪个IP地址交换数据。对攻击者而言,几乎可以不受限制地攻击HTTP协议或特定系统。再加上其他相关因素,就可能构成不同的攻击。

4、加密通信

为了保证加密信息的完整性和机密性,可以使用SSL和TLS与受信任的组织通信,而同样的技术也可以用于与攻击者进行安全的通信。
浏览器与服务器间加密通信的目的,是保护通信双方传输的数据安全,但是这就给防御者带来了问题,因为他们没有机会检查到恶意数据。浏览器支持的加密通信却可以为攻击者所用,让他们私藏恶意指令。

5、同源策略

SOP在不同浏览器技术中具有不一样的应用方式,它的用意是在浏览器中隔离资源,以防同一浏览器中来自不同来源之间的资源纠缠不清。本质上说,这也是一个沙箱。
这个特殊的沙箱是浏览器安全的重要保障机制。考虑到在网络活动中的首要地位,浏览器实际上是连接互联网上不同资源区域的事实标准,因此也应该承担着维护和平的使命。为满足每个区域的需求,准许访问不同来源的自治功能相应泛滥,如果这些功能违背SOP,那么本来合法的功能就可能被攻击者利用。


五、浏览器攻防方法

1、初始化

初始化是浏览器攻防中第一个阶段,也是最为紧要的阶段。
每次攻击都以在浏览器中运行指令为开端。为此,浏览器必须遇到并执行我们控制的指令。我们需要给浏览器布下陷阱,诱使、欺骗或者强迫浏览器遇到我们的指令,并且执行任意指令代码。

2、持续化

成功初始化攻击后,如何扩大对目标的控制范围?如恶化保持对浏览器的控制,并且发动进一步攻击?这是我们在持续化阶段需要做的事情。

3、攻击

3.1、绕过同源策略
可以把SOP看成浏览器的一个重要沙箱。如果能绕过它,那只要访问之前被浏览器封死的另一个来源,就可以成功实现攻击。绕过SOP,就可以使用后续一系列可用的攻击方法对新出现的来源进行攻击。

3.2、攻击用户
使用浏览器提供的手段,以及我们控制页面的能力,可以创造一个受控的环境,让用户输入敏感信息,以便捕获和利用。
我们可以给用户布下陷阱,让他们在不知不觉中让渡权限,并触发其他操作,比如运行任意程序或者授权访问本地资源、可以生成隐藏的对话框和透明的框架,或者控制鼠标事件以辅助实现以上目的,向用户展示一个假象以掩盖用户界面的真实功能。

3.3、攻击浏览器
攻击浏览器就是直接攻击浏览器的核心。浏览器是一个巨大的攻击面,它有着众多API、各种存储和取得数据的抽象机制。

3.4、攻击扩展
如果攻击核心浏览器失败了,那就等于正门关闭了。此时,可以考虑攻击它所安装的外部程序。利用扩展的隐患,可以实现跨域请求,甚至执行操作命令。

3.5、攻击插件
插件一直是浏览器隐患多发区。插件与扩展不同,它属于第三方组件,由它服务的网页独立初始化,而非一直整合到浏览器中。

3.6、攻击Web应用
浏览器就是为了使用Web而生的,因此攻击Web应用就是自然而然的了。
很多组织的内部网都可以访问大量应用,如果另一个标签页中的外部网站能访问这些内部应用会怎么样?我们会发现受到防火墙保护的内部应用在外部攻击面前形同虚设。

3.7、攻击网络
某些浏览器连接到了非标准的端口,而且这种情况相当普遍;很多服务器安装的应用都随意指定端口,而互联网上的有些网站甚至不使用80和443端口发布内容。


数据来源:
1、《黑客攻防技术宝典-浏览器实战篇》----[澳]Wade Alcorn、[美]Christian Frichot、 [意]Michele orrù 著
2、MDN
3、http://taligarsiel.com/Projects/howbrowserswork1.htm#Introduction(how browser work)
4、https://blog.poetries.top/browser-working-principle/guide/part1/lesson04.html
5、《白帽子讲浏览器安全》----钱文祥 著

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七天啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值