《黑客攻防技术宝典:浏览器实战篇》-- 上篇(笔记)

1. 浏览器安全概述

1.1 揭秘浏览器

1.1.1 与 Web 应用休戚相关

Web 浏览器的安全会影响 Web 应用的安全,反之亦然。

1.1.2 同源策略

同源策略是指对于不同的页面,它们的主机名、协议和端口都相同,它们资源之间的交互是不受限制的。

1.1.3 HTTP 首部

HTTP 首部是 HTTP 协议定义的原初指令,用于指示接收方怎么处理其后的内容。Web 客户端要在所有请求的开头提供 HTTP 首部,而 Web 服务器也要在任何响应的开头附上 HTTP 首部。

1.1.4 标记语言

标记语言是一种描述如何显示内容的方式。

1)HTML:是一种常用的编程语言,主要用于告诉浏览器如何显示网页。

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

1.1.5 CSS

CSS,即 Cascading Style Sheets(层叠样式表),是浏览器为网页内容指定样式的主要方法。

1.1.6 脚本

1)JavaScript:支持函数式编程和面向对象编程。

2)VBScript:只有微软的浏览器才支持,几乎弃用了。

1.1.7 DOM

DOM,即 Document Object Model(文档对象模型), 是在浏览器中操作 HTML 或 XML 文档的 API,使用脚本语言可以通过 DOM 提供的对象操作 HTML 元素。

1.1.8 渲染引擎

渲染引擎(Rendering Engine)又叫布局引擎(Layout Engine)或浏览器引擎(Web Browser Engine),是浏览器的核心组件,负责把数据转换为用户在屏幕上可以看到的样式。渲染引擎有 WebKit、Blink、Trident、Gecko 等。

1.1.9 Geolocation

Geolocation API 是为移动和桌面浏览器访问设备地理位置信息而开发的,该 API 可以通过 GPS、蜂窝小区三角测量、IP 地理定位和本地 Wi-Fi 热点取得地理位置信息。

1.1.10 Web 存储

Web 存储有两种存储机制:一种可以将数据持久保存在本地,另一种只在会话期间保存数据。

本地存储(Local Storage)负责存储持久数据,用户多次访问都可以存取;会话存储(Session Storage)负责存储会话数据,只在创建该数据的标签页内有效。

Web 存储与 Cookie 的区别:

1)只有 JavaScript 可以创建 Web 存储,HTTP 首部不行;

2)Web 存储中的数据不会随请求发送给服务器;

3)Web 存储的数据量至少 5 MB,比 Cookie 多得多;

4)本地存储没有路径限制。

1.1.11 CORS(跨域资源共享)

CORS 是一个让来源忽略同源策略的规范,需要给 Web 服务器的 HTTP 响应首部增加:

代码语言:javascript
复制
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET

1.1.12 HTML5

1)WebSocket:可以在浏览器与服务器之间打开一条即时响应的全双工信道。

2)Web Worker:可以看作在浏览器后台运行的线程,有两种:一种可以在同一来源的资源间共享,另一种只能与创建它的函数通信。

3)操作历史:使用历史对象,脚本可以添加或删除位置,也可以在历史链中向前或向后移动当前页面。

4)WebRTC:即 Web Real Time Communication(Web 实时通信),可以实现浏览器之间的互相通信,功能包括直接访问相机和音视频设备(用来支持音视频会议)。

1.1.13 隐患

隐患指容易被人攻击的功能。

1.2 浏览器在强化防御方面的安全特性

1.2.1 HTTP 首部

1)CSP(内容安全策略)

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

2)安全 Cookie 标志

主要目的是告诉浏览器不要通过任何不安全的渠道发送 Cookie,从而确保敏感的会话暗号无论何时何地都处于安全保护之中。

3)HttpOnly Cookie 标志

指示浏览器禁止任何脚本访问 Cookie 内容,可以降低通过 JavaScript 发起的 XSS 攻击偷取 Cookie 的风险。

4)X-Content-Type-Options

浏览器可以使用各种检测技术判断服务器返回了什么类型的内容,然后浏览器会执行一些与该内容类型相关的操作。而 nosniff 指令可以禁用浏览器的上述行为,强制浏览器按照 Content-type 首部来渲染内容。

5)Strict-Transport-Security

指示浏览器必须通过有效的 HTTPS 通道与网站通信。

6)X-Frame-Options

用于阻止浏览器中的页面内嵌框架,浏览器看到这个首部后,不把接收到的页面显示在一个 IFrame 中,目的是防止发生界面伪装(UI Redressing)攻击,如点击劫持(Clickjacking)。

1.2.2 反射型 XSS 过滤

浏览器会尝试被动地发现已经成功的反射型 XSS 攻击,然后尝试清除响应中的脚本,阻止它们执行。

1.2.3 沙箱

是一个解决现实问题的折中方案,基本前提是浏览器会遭受威胁,并且可能被攻击者控制。

沙箱本质上不过是缓兵之计,它把浏览器的高危区域封装在安全围墙之下,把注意力吸引到较小的攻击面上。

1)浏览器沙箱

它隔离的是操作系统赋予浏览器的权限和在浏览器中运行的子进程的权限。

2)IFrame 沙箱

指的是给这个嵌入的帧添加一个 HTML5 属性,添加这个属性后,就不能在其中使用表单、执行脚本,也不能导航到顶层页面,而且只能限于与一个来源通信。

1.2.4 反网络钓鱼和反恶意软件

浏览器会在访问网站时,将其与恶意站点名单进行对照,如果检测到要访问的网站是一个钓鱼网站,浏览器就会采取措施。

1.2.5 混入内容

所谓混入内容(Mixed Content),是指某个来源使用 HTTPS 协议,然后又通过 HTTP 请求内容。

1.3 核心安全问题

1.3.1 攻击面

指的是浏览器容易遭受未信任来源攻击影响的范围。

1)升级速度

从浏览器安全 Bug 被爆出之日起到这个 Bug 被修复期间,大多数组织的浏览器都处于容易被攻击的状态。

2)静默更新

如果浏览器在后台更新和新增功能时出现问题,就可能增大每个浏览器的攻击面。

3)扩展

每个扩展都可能成为攻击者的目标,因而它们会增大浏览器的攻击面。

4)插件

插件会大幅度增加攻击面,它们既能增强浏览器功能,又为黑客提供了攻击目标。

1.3.2 放弃控制

浏览器必须将很大一部分控制权让渡给服务器,浏览器必须执行收到的命令,否则就有可能无法正确渲染页面。

浏览器不安全以及容易受攻击,正是因为无法实时保证来自远程服务器的内容的可靠性。

1.3.3 TCP 协议控制

对攻击者而言,几乎可以不受限制地攻击 HTTP 协议或特定系统,再加上其他相关因素,就可能构成不同的攻击。

1.3.4 加密通信

浏览器支持的加密通信可以为攻击者所用,让他们私藏恶意指令,并安全地转移战利品。

1.3.5 同源策略

某些功能违背 SOP,那么本来合法的功能就可能成为敌人,因为它们会穿越安全区。

1.3.6 谬论

1)健壮性法则谬论

健壮性法则,即“发送时要保守,接收时要开放”。浏览器对自己要渲染的内容是极其开放的,这也是 XSS 为何难以根除的原因。

2)外围安全防线谬论

一个组织的内部网是一个经常要与攻击者玩打地鼠游戏的地方。现实情况是,浏览器提供了很多洞洞,就像直接在高高的围墙上面打开了很多口子。防护围墙因此会被间接攻破,难以阻拦浏览器带到围墙内的敌人。

专业术语:

SOE:Standard Operating Environment,标准运行环境

SOP:Same Origin Policy,同源策略

CORS:Cross Origin Resource Sharing,跨域资源共享

CSP:Content Security Policy,内容安全策略