具体描述
浏览器是重要的互联网入口,一旦受到漏洞攻击,将直接影响到用户的信息安全。作为攻击者有哪些攻击思路,作为用户有哪些应对手段?在《白帽子讲浏览器安全》中我们将给出解答,带你了解浏览器安全的方方面面。《白帽子讲浏览器安全》兼顾攻击者、研究者和使用者三个场景,对大部分攻击都提供了分析思路和防御方案。《白帽子讲浏览器安全》从攻击者常用技巧的“表象”深入介绍浏览器的具体实现方式,让你在知其然的情况下也知其所以然。
本书根据作者若干年实战与工作积累的丰富经验编写而成,深入地分析了浏览器从导航到页面展示的整个过程中可能会出现的安全问题,也对浏览器的部分实现细节有着详细和深入的介绍,对安全工作者有一定的参考意义。
作者简介
钱文祥(常用ID:blast),专职浏览器安全研究。安徽理工大学毕业后就职于腾讯科技(北京)有限公司,专注于PC浏览器安全研究和安全相关功能的开发。活跃于多个漏洞报告平台,曾报告过数十个安全漏洞,涵盖IE、Chrome及国产定制浏览器。参与过多个浏览器安全相关以及漏洞挖掘的项目,维护有网马解密工具Redoce。
目录信息
1 漏洞与浏览器安全 3
1.1 漏洞的三要素 3
1.2 漏洞的生命周期 4
1.3 浏览器安全概述 5
1.4 浏览器安全的现状 7
1.5 浏览器的应对策略 9
1.6 “白帽子”与浏览器厂商的联手协作 9
1.7 全书概览 10
1.8 本章小结 12
2 浏览器中常见的安全概念 13
2.1 URL 13
2.1.1 URL 的标准形式 15
2.1.2 IRI 16
2.1.3 URL 的“可视化”问题——字形欺骗钓鱼攻击 18
2.1.4 国际化域名字形欺骗攻击 19
2.1.5 自纠错与Unicode 字符分解映射 20
2.1.6 登录信息钓鱼攻击 23
2.2 HTTP 协议 24
2.2.1 HTTP HEADER 25
2.2.2 发起HTTP 请求 26
2.2.3 Cookie 28
2.2.4 收到响应 29
2.2.5 HTTP 协议自身的安全问题 31
2.2.6 注入响应头:CRLF 攻击 31
2.2.7 攻击响应:HTTP 401 钓鱼 32
2.3 浏览器信息安全的保障 33
2.3.1 源 33
2.3.2 同源准则 34
2.3.3 源的特殊处理 34
2.3.4 攻击同源准则:IE11 跨任意域脚本注入一例 35
2.4 特殊区域的安全限制 37
2.4.1 安全域 37
2.4.2 本地域 37
2.5 伪协议 38
2.5.1 data 伪协议 38
2.5.2 about 伪协议 40
2.5.3 javascript/vbscript 伪协议 41
2.5.4 伪协议逻辑出错:某浏览器跨任意域脚本注入一例 42
2.6 本章小结 43
3 探索浏览器的导航过程 45
3.1 导航开始 45
3.1.1 浏览器的导航过程 46
3.1.2 DNS 请求 46
3.1.3 DNS 劫持和DNS 污染 47
3.1.4 导航尚未开始时的状态同步问题 48
3.1.5 实例:针对导航过程发起攻击 49
3.2 建立安全连接 50
3.2.1 HTTPS 50
3.2.2 HTTPS 请求中的Cookie 51
3.3 响应数据的安全检查——XSS 过滤器 52
3.3.1 IE XSS Filter 的实现原理 53
3.3.2 Chrome XSSAuditor 的工作原理 55
3.4 文档的预处理 56
3.4.1 浏览器对HTML 文档的标准化 56
3.4.2 设置兼容模式 57
3.5 处理脚本 59
3.5.1 脚本的编码 60
3.5.2 IE 的CSS expression 的各种编码模式 62
3.5.3 浏览器的应对策略:CSP 63
3.5.4 “绕过”CSP:MIME Sniff 65
3.5.5 简单的Fuzz:混淆CSS expression 表达式 68
3.6 攻击HTML 标准化过程绕过IE/Chrome 的XSS Filter 71
3.7 本章小结 73
4 页面显示时的安全问题 75
4.1 点击劫持 76
4.1.1 点击劫持页面的构造 76
4.1.2 X-Frame-Options 78
4.2 HTML5 的安全问题 80
4.2.1 存储API 81
4.2.2 跨域资源共享 83
4.2.3 基于FullScreen 和Notification API 的新型钓鱼攻击 84
4.2.4 组合API 后可能导致的安全问题 87
4.2.5 引入新的XSS 攻击向量 87
4.2.6 互联网威胁 89
4.3 HTTPS 与中间人攻击 92
4.3.1 HTTPS 的绿锁 92
4.3.2 HTTPS 有多安全? 94
4.3.3 HSTS 96
4.3.4 使用SSLStrip 阻止HTTP 升级HTTPS 97
4.3.5 使用Fiddler 对PC 端快速进行中间人攻击测试 99
4.3.6 使用Fiddler 脚本和AutoResponse 自动发起中间人攻击 101
4.4 本章小结 103
5 浏览器扩展与插件的安全问题 105
5.1 插件 106
5.1.1 ActiveX 106
5.1.2 ActiveX 的安全问题 107
5.1.3 ActiveX 的逻辑漏洞 108
5.1.4 NPAPI、PPAPI 111
5.2 定制浏览器的扩展和插件的漏洞 113
5.2.1 特权API 暴露 114
5.2.2 DOM 修改引入攻击向量 114
5.2.3 Windows 文件名相关的多个问题 115
5.2.4 NPAPI DLL 的问题 116
5.2.5 同源检查不完善 117
5.2.6 Content Script 劫持 118
5.2.7 权限隔离失败 118
5.2.8 配合切核策略+本地内部页XSS 执行代码 118
5.2.9 下载服务器限制宽松 119
5.2.10 TLDs 判定问题 119
5.2.11 经典漏洞 120
5.2.12 中间人 120
5.3 Adobe Flash 插件与Action Script 121
5.3.1 Flash 的语言——Action Script 121
5.3.2 Flash 文档的反编译、再编译与调试 122
5.3.3 SWF 的网络交互:URLLoader 124
5.3.4 crossdomain.xml 与Flash 的“沙盒” 125
5.3.5 ExternalInterface 126
5.3.6 FLASH XSS 126
5.3.7 Microsoft Edge 中的Flash ActiveX 130
5.4 浏览器的沙盒 131
5.4.1 受限令牌 132
5.4.2 完整性级别与IE 的保护模式 133
5.4.3 任务对象 134
5.5 本章小结 135
6 移动端的浏览器安全 137
6.1 移动浏览器的安全状况 138
6.2 移动端的威胁 141
6.2.1 通用跨站脚本攻击 141
6.2.2 地址栏伪造 142
6.2.3 界面伪装 143
6.3 结合系统特性进行攻击 144
6.3.1 Android 一例漏洞:使用Intent URL Scheme 绕过Chrome SOP 144
6.3.2 iOS 的一例漏洞:自动拨号泄露隐私 146
6.3.3 Windows Phone 一例未修补漏洞:利用Cortana 显示IE 中已保存密码 147
6.4 本章小结 149
第2 篇 实战网马与代码调试
7 实战浏览器恶意网页分析 153
7.1 恶意网站中“看得见的”攻防 153
7.2 恶意脚本的抓取和分析 155
7.2.1 发现含攻击代码的网址 156
7.2.2 使用rDNS 扩大搜索结果 156
7.2.3 下载攻击代码 157
7.2.4 搭建测试环境 158
7.2.5 初识网马反混淆工具 158
7.2.6 恶意脚本中常见的编码方式 159
7.3 一个简单的挂马代码的处理 169
7.3.1 快速判断挂马 169
7.3.2 JS 代码的格式化 170
7.4 更为复杂的代码处理:对Angler 网马工具包的反混淆 170
7.4.1 Angler EK 的特征 170
7.4.2 推理:找出代码中的“解密-执行”模式 172
7.4.3 检证:确定“解密-执行”模式的位置和方法 175
7.4.4 追踪:使用浏览器特性判断用户环境 179
7.4.5 利用漏洞CVE-2014-6332 发起攻击 188
7.5 本章小结 190
8 调试工具与Shellcode 191
8.1 调试工具的用法 191
8.1.1 调试符号 191
8.1.2 WinDbg 的用法 192
8.1.3 IDA 的用法 195
8.1.4 OllyDbg 的用法 199
8.2 与Shellcode 的相关名词 201
8.2.1 机器指令 201
8.2.2 控制关键内存地址 203
8.2.3 NOP Slide 204
8.2.4 Magic Number 0x8123 205
8.3 Shellcode 的处理 205
8.3.1 实现通用的Shellcode 206
8.3.2 调试网马中的Shellcode 212
8.4 本章小结 218
第3 篇 深度探索浏览器漏洞
9 漏洞的挖掘 221
9.1 挖0day 221
9.1.1 ActiveX Fuzzer 的原理 221
9.1.2 使用AxMan Fuzzer 来Fuzz ActiveX 插件 222
9.1.3 现场复现 225
9.2 DOM Fuzzer 的搭建 229
9.2.1 搭建运行Grinder 的环境 230
9.2.2 Fuzzer 的结构与修改 231
9.2.3 现场复现 232
9.3 崩溃分析 233
9.3.1 哪些典型崩溃不能称作浏览器漏洞 233
9.3.2 ActiveX 崩溃一例 236
9.3.3 IE11 崩溃一例 238
9.4 本章小结 244
10 网页的渲染 245
10.1 网页的渲染 245
10.1.1 渲染引擎 245
10.1.2 DOM 结构模型 247
10.1.3 IE 解析HTML 的过程 249
10.1.4 IE 的Tokenize 251
10.1.5 Chrome 解析HTML 的过程 253
10.1.6 Chrome 的Tokenize 254
10.2 元素的创建 256
10.2.1 IE 中元素的创建过程 256
10.2.2 Chrome 中元素的创建过程 257
10.2.3 元素的生成规律 258
10.3 实战:使用WinDbg 跟踪元素的生成 260
10.4 实战:使用WinDbg 跟踪元素的插入 263
10.5 实战:使用WinDbg 跟踪元素的释放 264
10.6 本章小结 266
11 漏洞的分析 267
11.1 分析IE 漏洞CVE-2012-4969 267
11.1.1 崩溃分析 268
11.1.2 追根溯源 270
11.2 分析JScript9 漏洞CVE-2015-2425 271
11.2.1 跟踪漏洞 275
11.3 Hacking Team 的Flash 漏洞CVE-2015-5119 分析 276
11.3.1 静态阅读:成因分析 276
11.3.2 Vector 的覆盖过程 278
11.4 本章小结 279
12 漏洞的利用 281
12.1 ShellCode 的编写 281
12.2 CVE-2012-4969 的利用 284
12.2.1 DEP/ASLR 绕过 287
12.3 CVE-2015-5119 的Vector 296
12.4 本章小结 301
附录 303
附录A IE(Edge)的URL 截断 303
附录B IE 的控制台截断 304
附录C 表单中的mailto: 外部协议 305
附录D 危险的regedit: 外部协议 306
附录E IE XSS Filter 的漏洞也会帮助执行XSS 307
附录F 更高级的策略保护——CSP Level 2 308
附录G 更快的执行速度——JScript5 to Chakra 309
附录H Chakra 的整数存储 310
附录I 安全实践 311
参考资料 315
· · · · · · (收起)
读后感
用户评价
关于“浏览器自动化测试”以及“安全自动化工具”在浏览器安全中的应用,这本书提供了非常实用的视角。作者介绍了一些常用的自动化测试框架和工具,以及如何利用它们来发现浏览器中的安全漏洞。我了解到,自动化工具能够模拟大量的用户行为和网络请求,从而高效地检测出潜在的安全隐患。 书中还探讨了“模糊测试”(Fuzzing)在发现浏览器漏洞中的作用。模糊测试通过向程序输入大量异常、意外或随机生成的数据,来诱导程序产生崩溃或错误,从而暴露潜在的漏洞。我认识到,安全研究人员和浏览器开发者都在积极地利用这些自动化技术来不断提升浏览器的安全性,而作为普通用户,了解这些背后的努力,也能让我们对浏览器的安全有更客观的认识。
书中关于“浏览器指纹”和“隐私保护”的章节,更是让我对自己在互联网上的痕迹有了全新的认知。我一直以为只要不主动分享个人信息,自己的隐私就是安全的,但这本书让我发现,浏览器本身,以及我们在浏览网页时留下的各种“痕迹”,都可以被用来构建一个独一无二的“指纹”。作者详细介绍了各种用于浏览器指纹识别的技术,例如通过浏览器配置信息(User-Agent、屏幕分辨率、插件列表等)、字体、Canvas渲染、WebRTC等。 理解了这些,我才意识到,即使我使用无痕模式,甚至VPN,都可能无法完全避免被追踪。这本书不仅揭示了问题的严重性,还给出了一些实用的隐私保护建议,比如使用支持隐私保护的浏览器扩展、禁用不必要的JavaScript、定期清除浏览器缓存和Cookie等。这些都是我之前很少考虑到的细节,但现在看来,它们对于保护个人隐私至关重要。
另一本让我受益匪浅的部分是关于同源策略(Same-Origin Policy)的讲解。一直以来,我都觉得这是浏览器最基本也最重要的安全基石之一,但书中对同源策略的剖析远超我的想象。作者不仅解释了同源策略的三个要素(协议、域名、端口),还深入探讨了它在防止数据泄露和跨站请求伪造(CSRF)等攻击中的关键作用。更让我惊叹的是,书中还详细介绍了绕过同源策略的一些技术,比如JSONP、CORS(跨域资源共享)以及利用代理服务器等。这让我了解到,看似简单的同源策略,在实际应用中却有如此多的细节和需要权衡的地方。 理解了这些绕过同源策略的机制,也让我对前端开发中跨域请求的安全性有了更深的认识。过去,我可能为了方便而随意地在后端设置允许所有来源的CORS,现在我明白了这样做的潜在风险。书中强调了在配置CORS时,应该尽可能地缩小允许的来源范围,只允许信任的域进行访问,并且要注意HTTPS的使用。这些具体的实践建议,对于任何从事Web开发的人来说,都具有极高的参考价值。
最后,这本书在“如何成为一名合格的浏览器安全研究员”方面给出的建议,更是让我对这个领域产生了浓厚的兴趣。作者并非仅仅停留在技术层面,而是强调了安全研究员应具备的素质,例如好奇心、耐心、批判性思维以及良好的沟通能力。它告诉我,成为一名优秀的浏览器安全研究员,不仅仅是掌握技术,更重要的是拥有一种探索未知、解决问题的精神。 书中还分享了作者在安全研究过程中的一些心得体会,比如如何有效地利用搜索引擎和安全数据库查找信息,如何进行有效的代码分析,以及如何与社区进行交流和合作。这些宝贵的经验,对于任何想要深入了解浏览器安全,甚至以此为职业方向的人来说,都是无价之宝。这本书确实是一扇通往浏览器安全世界的大门,让我看到了更广阔的天地。
关于“HTTPS协议”的讲解,我原本以为只是简单了解一下SSL/TLS握手过程就足够了,但这本书让我认识到HTTPS协议的复杂性和其在现代Web安全中的核心地位。书中详细阐述了HTTPS不仅仅是加密传输,还包括了数字证书的验证、公钥基础设施(PKI)的运作、以及TLS协议不同版本之间的安全性差异。 我特别对书中关于“中间人攻击”(Man-in-the-Middle Attack)的防御机制进行了深入的学习。了解了HTTPS如何通过服务器证书的验证来确保通信的端点是可信的,以及TLS协议中的各种加密算法如何保证数据的机密性和完整性,这让我对上网安全有了更坚实的信心。同时,书中也提到了HTTPS的一些误区,比如只关注数据加密而忽略了证书链的完整性校验,这对我日后的实践非常有指导意义。
阅读《白帽子讲浏览器安全》这本书,对我来说是一次非常有价值的学习经历。在此之前,我对浏览器的安全性认知仅限于一些基础的常识,比如不要点击可疑链接,要及时更新浏览器等。然而,这本书则以一种系统化、深入浅出的方式,为我揭示了浏览器背后庞大而复杂的安全体系。我特别欣赏作者在讲解过程中,不仅仅停留在理论层面,而是大量引用了实际的安全事件和案例,这使得那些原本抽象的安全概念变得生动形象,也让我更容易理解其背后的原理和潜在的风险。 例如,在谈到跨站脚本攻击(XSS)时,书中详细剖析了不同类型的XSS(存储型、反射型、DOM型)的工作原理,以及攻击者是如何利用浏览器渲染机制的漏洞来执行恶意代码的。作者还介绍了几种常见的XSS防御措施,例如输入验证、输出编码和内容安全策略(CSP)。特别是CSP,它通过声明允许的资源加载来源,能够有效地限制浏览器执行不信任的脚本,这一点让我印象深刻。过去,我可能只是听说过CSP,但从未真正理解它的重要性和实现方式,这本书让我茅塞顿开。
《白帽子讲浏览器安全》在“浏览器插件与扩展安全”方面的讨论,也给我带来了很多启发。过去,我习惯性地安装各种浏览器插件来增强功能,但从未深入思考过这些插件可能带来的安全风险。书中详细剖析了浏览器插件的权限模型,以及恶意插件是如何滥用这些权限来窃取用户数据、进行广告轰炸甚至是安装恶意软件的。 我特别学习了关于“权限最小化原则”的重要性。书中建议用户只授予插件完成其功能所必需的权限,并且定期审查已安装的插件,卸载那些不再使用或存在安全隐患的插件。此外,书中还介绍了一些识别恶意插件的方法,比如检查插件的来源、阅读用户评价、以及关注安全新闻等。这些都为我提供了一个更安全的插件使用指南。
书中关于“JavaScript引擎安全”的论述,极大地拓展了我对浏览器安全边界的理解。我一直以为JavaScript只是一个简单的脚本语言,但作者通过对V8引擎(Chrome的JavaScript引擎)等内部机制的深入剖析,让我看到了一个庞大而复杂的运行时环境。书中详细介绍了JavaScript引擎是如何解析、编译和执行JavaScript代码的,以及其中可能存在的安全漏洞,例如内存损坏、类型混淆等。 我尤其对书中关于“内存安全”的讲解印象深刻。作者解释了JavaScript引擎是如何管理内存的,包括垃圾回收机制(Garbage Collection)的工作原理,以及攻击者如何利用内存管理中的缺陷来执行代码。这些细节让我意识到,即便是看似高级的语言,其底层也充满了需要精细处理的安全挑战。
在深入阅读了关于“Web安全漏洞赏金计划”以及“浏览器厂商的安全防护机制”的章节后,我更加深刻地体会到了“白帽子”的价值和意义。书中通过真实的案例,展示了安全研究人员是如何通过细致的分析和不懈的努力,发现浏览器中隐藏的安全漏洞,并与浏览器厂商协作,共同修复这些漏洞,从而保障了亿万用户的安全。这不仅仅是一份工作,更是一种责任和担当。 我了解到,浏览器厂商投入了大量的资源来构建和维护安全防护体系,包括代码审计、模糊测试、漏洞奖励计划等等。这些机制的有效运作,离不开像作者这样的“白帽子”们的贡献。这本书让我看到了技术和道德的完美结合,也让我对那些默默守护我们网络安全的人们充满了敬意。
《白帽子讲浏览器安全》这本书的魅力还在于它对“浏览器沙箱”机制的深入解析。我一直以为沙箱只是一个简单的隔离层,但作者通过生动的比喻和详细的图示,让我看到了沙箱背后精密的工程和设计。书中详细介绍了沙箱是如何将浏览器进程分解为多个独立的进程(如渲染进程、GPU进程、插件进程等),以及这些进程之间是如何通过IPC(进程间通信)进行安全交互的。 我特别对Chrome浏览器的沙箱模型印象深刻,它将不同的渲染工作分配到独立的进程中,即使其中一个进程被恶意代码攻破,也不会影响到其他进程,从而最大程度地保护了主进程和用户的数据。书中还探讨了沙箱逃逸的原理和技术,以及安全研究人员是如何不断发现和利用沙箱中的漏洞的。这让我意识到,即使是看似坚不可摧的沙箱,也需要持续的关注和维护。
专门讲浏览器相关攻防的知识,讲的很透,从原理、调试,从web到二进制,说的都比较多。
今年读的最有趣的一本书,极大拓宽了传统Web安全的内容面。
一直认为浏览器没有那么高的权限,这本书还是长了不少见识。特别是第7章在解密网马的过程中和恶意软件作者斗智斗勇俨然像是在看侦探效果一样,内心跌宕起伏充满悬疑,最后完全解密的时候的心情真的是无以言表。可惜的是第8章以后就看不懂了,看来需要好好补一补基础。真的是不得不感慨,“道高一尺,魔高一丈”,程序员何苦为难程序员😢
专门讲浏览器相关攻防的知识,讲的很透,从原理、调试,从web到二进制,说的都比较多。
一直认为浏览器没有那么高的权限,这本书还是长了不少见识。特别是第7章在解密网马的过程中和恶意软件作者斗智斗勇俨然像是在看侦探效果一样,内心跌宕起伏充满悬疑,最后完全解密的时候的心情真的是无以言表。可惜的是第8章以后就看不懂了,看来需要好好补一补基础。真的是不得不感慨,“道高一尺,魔高一丈”,程序员何苦为难程序员😢