• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

浏览器安全

2020-06-17

《白帽子讲Web安全》笔记

1. 同源政策

同源的定义

如果两个 URL 的 protocol、port (如果有指定的话)和 host 都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接是 “元组”。(“元组” 是指一组项目构成的整体,双重/三重/四重/五重/等的通用形式)。


同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。


换言之,a.com通过代码

<script src=http://b.com/bjs ><script>

加载了b.com上的b.js,但是b.js是运行在a.com页面中的,因此对于当前打开的页面(a.com)来说,b.js的Origin就应该是a.com而非b.com

在浏览器中,<script>, <img>, <iframe>, <link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带‘src”属性的标签每次加载时,.实际上是由浏览器发起了一次GET请求。

以www.qq.com的策略文件为例,当浏览器在任意其他域的页面里加载了Flash后,如果
对www.qq.com发起访问请求,Flash会先检查www.qq.com上此策略文件是否存在。如果文件
存在,则检查发起请求的域是否在许可范围内。

<allow-access-from domain='*.qq.com'>

随着互联网的发展,”同源政策”越来越严格。目前,如果非同源,共有三种行为受到限制。

(1) Cookie、LocalStorage 和 IndexDB 无法读取。

(2) DOM 无法获得。

(3) AJAX 请求不能发送。

1.1. XMLHttpRequest

XMLHTTP是一组API函数集,可被JavaScript、JScript、VBScript以及其它web浏览器内嵌的脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML或其它数据。XMLHTTP最大的好处在于可以动态地更新网页,它无需重新从服务器读取整个网页,也不需要安装额外的插件。该技术被许多网站使用,以实现快速响应的动态网页应用。例如:Google的Gmail服务、Google Suggest动态查找界面以及Google Map地理信息服务。

1.2. CSS跨域漏洞

font-family明显是CSS代码理应该写在CSS样式里面,但是写在body里面

问题发生在IE的CSS Parse的过程中,IE将fontFamily后面的内容当做了value,从而可以读取www.a.com/test.html的页面内容。


比如<script>等标签仅能加载资源,但不能读、写资源的内容,而这个漏洞能够跨域读取页面内容,因此绕过了同源策略,成为一个跨域漏洞

2. 浏览器沙箱

2.1. 挂马

在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑客圈子
里被形象地称为“挂马”。

浏览器的多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程
崩溃时,也不会影响到其他的进程。

Google Chrome是第一个采取多进程架构的浏览器。Google Chrome的主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。插件进程如flash, Java. pdf等与浏览器进程严格隔离,因此不会互相影响。

2.2. sandbox

Sandbox的设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。

2.2.1. IPC

进程间通信(IPC,Inter-Process Communication)指至少两个进程或线程间传送数据或信号的一些技术或方法。

  • 信息共享:Web服务器,通过网页浏览器使用进程间通信来共享web文件(网页等)和多媒体

3. 恶意网址拦截

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

3.1. EVSSL证书

在SSL连接中使用数字证书的一个重要动机是通过证书发行机构对网站持有者的身份审核并颁发证书从而使连接受到信任


历史上浏览器在工作时将匹配SSL证书和证书发行者,如果成功,SSL证书将在用户界面中获得更加明显的显示并且包含如下内容:

  • 证书持有者的公司或其他实体的名称;
  • 证书发行机构的名称;

3.2. 传输层安全性协议

传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

3.2.1. SSL

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

(1) 所有信息都是加密传播,第三方无法窃听。

(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

(3) 配备身份证书,防止身份被冒充。

  • 1.0版本从未公开过,因为存在严重的安全漏洞。
  • 2.0版本在1995年2月发布。2011年,RFC 6176 标准弃用了SSL 2.0。
  • 3.0版本在1996年发布,是由网景工程师Paul Kocher、Phil Karlton和Alan Freier完全重新设计的。

SSL的工作原理中包含如下三个协议。

  • 握手协议(Handshake protocol)
  • 记录协议(Record protocol)
    • 保密性:使用握手协议定义的秘密密钥实现
    • 完整性:握手协议定义了MAC,用于保证消息完整性
  • 警报协议(Alert protocol)
    • 客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,秘密和密钥

步骤

  • 客户端向服务器端索要并验证公钥。
  • 双方协商生成”对话密钥”。
  • 双方采用”对话密钥”进行加密通信。
3.2.1.1. 握手

需要注意的是,”握手阶段”的所有通信都是明文的。

Client Hello

  • 握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息

Server Hello

  • 服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。

客户端回应

  • 客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
  • 如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。
    • 一个随机数。
    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

服务器的最后回应

  • 服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”。

3.2.2. 端口

端口:80

  • 服务:HTTP

端口:443

  • 服务:Https

4. 额外参考

  • 浏览器的同源策略 - Web 安全 | MDN
  • SSL/TLS 握手过程详解 - 简书
  • SSL/TLS协议运行机制的概述 - 阮一峰的网络日志
  • 浏览器同源政策及其规避方法 - 阮一峰的网络日志
  • Security
  • Web Security
  • Note
跨站点请求伪造
跨站脚本攻击
  1. 1. 1. 同源政策
    1. 1.1. 1.1. XMLHttpRequest
    2. 1.2. 1.2. CSS跨域漏洞
  2. 2. 2. 浏览器沙箱
    1. 2.1. 2.1. 挂马
    2. 2.2. 2.2. sandbox
      1. 2.2.1. 2.2.1. IPC
  3. 3. 3. 恶意网址拦截
    1. 3.1. 3.1. EVSSL证书
    2. 3.2. 3.2. 传输层安全性协议
      1. 3.2.1. 3.2.1. SSL
        1. 3.2.1.1. 3.2.1.1. 握手
      2. 3.2.2. 3.2.2. 端口
  4. 4. 4. 额外参考
© 2024 何决云 载入天数...