第10讲 vpn 技术(二)

49
第 10 第 VPN 第第 第第 ()

Upload: natalya-penda

Post on 02-Jan-2016

107 views

Category:

Documents


8 download

DESCRIPTION

第10讲 VPN 技术(二). 一、 SSL/TLS 基本情况. 1、SSL/TLS 协议背景 2、SSL/TLS 协议功能目的 3、SSL/TLS 概况 4、SSL/TLS 协议栈. 1、SSL/TLS 协议背景. 1994年 Netscape 开发了 SSL(Secure Socket Layer) 协议,专门用于保护 Web 通讯 版本和历史 1.0,不成熟 2.0,基本上解决了 Web 通讯的安全问题 同时, Microsoft 公司发布了 PCT(Private Communication Technology), 并在 IE 中支持 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第10讲  VPN 技术(二)

第 10 讲 VPN 技术(二)

Page 2: 第10讲  VPN 技术(二)

一、 SSL/TLS 基本情况

1 、 SSL/TLS 协议背景2 、 SSL/TLS 协议功能目的3 、 SSL/TLS 概况4 、 SSL/TLS 协议栈

Page 3: 第10讲  VPN 技术(二)

1 、 SSL/TLS 协议背景1994 年 Netscape 开发了 SSL(Secure Socket Layer) 协议,专门用于保护 Web 通讯版本和历史 1.0 ,不成熟 2.0 ,基本上解决了 Web 通讯的安全问题

同时, Microsoft 公司发布了 PCT(Private Communication Technology) ,并在 IE 中支持

3.0 , 1996 年发布,增加了一些算法,修改了一些缺陷 TLS 1.0(Transport Layer Security, 也被称为 SSL

3.1) , 1997 年 IETF 发布了 Draft ,同时, Microsoft宣布放弃 PCT ,与 Netscape 一起支持 TLS 1.0

1999 年,发布 RFC 2246(The TLS Protocol v1.0)

Page 4: 第10讲  VPN 技术(二)

2 、 SSL/TLS 协议功能目的( 1 )

协议的设计目标 为两个通讯个体之间提供保密性和完整性 ( 身

份认证 ) 互操作性、可扩展性、相对效率

Page 5: 第10讲  VPN 技术(二)

2 、 SSL/TLS 协议功能目的( 2 )

协议的使用

Page 6: 第10讲  VPN 技术(二)

3 、 SSL/TLS 概况协议分为两层 底层: TLS 记录协议 上层: TLS 握手协议、 TLS 密码变化协议、 TLS 警告协议TLS 记录协议 建立在可靠的传输协议 ( 如 TCP) 之上 它提供连接安全性,有两个特点

保密性,使用了对称加密算法 完整性,使用 HMAC 算法

用来封装高层的协议TLS 握手协议 客户和服务器之间相互认证 协商加密算法和密钥 它提供连接安全性,有三个特点

身份认证,至少对一方实现认证,也可以是双向认证 协商得到的共享密钥是安全的,中间人不能够知道 协商过程是可靠的

Page 7: 第10讲  VPN 技术(二)

4 、 SSL/TLS 协议栈为上层协议提供安全性 保密性 身份认证和数据完整性

Page 8: 第10讲  VPN 技术(二)

二、 SSL 协议体系

1 、 SSL 体系结构2 、 SSL 的两个重要概念3 、 TLS 会话4 、 TLS 连接的状态5 、 TLS 记录协议

Page 9: 第10讲  VPN 技术(二)

1 、 SSL 体系结构( 1 )

SSL 被设计用来使用 TCP 提供一个可靠的端到端安全服务。 SSL Record Protocol 为更高层提供基本安全服务。

特别是 HTTP ,它提供了 Web 的 client/server交互的传输服务,可以构造在 SSL 之上。

SSL Handshake Protocol, SSLChange Cipher Spec Protocol, SSL Alert Protocol 是 SSL 的高层协议,用于管理 SSL 交换。

Page 10: 第10讲  VPN 技术(二)

IP

SSL ChangeCipher Spec

Protocol

SSL AlertProtocol HTTP

TCP

SSL Record Protocol

SSL Handshake

Protocol

SSL Protocol Stack

1 、 SSL 体系结构( 2 )

Page 11: 第10讲  VPN 技术(二)

2 、 SSL 的两个重要概念

SSL 连接( connection) 一个连接是一个提供一种合适类型服务的传输( OSI

分层的定义)。 SSL 的连接是点对点的关系。 连接是暂时的,每一个连接和一个会话关联。SSL 会话( session ) 一个 SSL 会话是在客户与服务器之间的一个关联。会

话由 Handshake Protocol 创建。会话定义了一组可供多个连接共享的加密安全参数。

会话用以避免为每一个连接提供新的安全参数所需昂贵的谈判代价。

Page 12: 第10讲  VPN 技术(二)

3 、 TLS 会话状态(TLS Session) 定义: 指客户和服务器之间的一个关联关系。通过TLS 握手协议创建 session ,它确定了一组密码算法的参数。 Session 可以被多个连接共享,从而可以避免为每个连接协商新的安全参数而带来 昂贵的开销。 TLS Session 都有一个当前状态

TLS connection 与底层协议的点对点连接相关联 每个 connection 都与一个 session 相关联 连接是短暂的

Page 13: 第10讲  VPN 技术(二)

4 、 TLS 连接的状态连接状态也包含一组参数 Server and client random ,客户和服务器为每个连

接选择的字节序列 Server write MAC secret ,服务器在发送数据的时

候,用于 MAC 运算的 key Client write MAC secret ,客户在发送数据的时候,

用于 MAC 运算的 key Server write key ,服务器加密数据的密钥,以及客

户解密数据的密钥 Client write key ,客户加密数据的密钥,以及服务器

解密数据的密钥 Initialization vectors ,在 CBC 模式中用到的 IV ,

最初由握手协议初始化,以后,每一个记录的最后一个密文块被用作下一个记录的 IV

Sequence numbers ,每一个连接都需要维护一个序 列号,当密码参数变化时,重置为 0

Page 14: 第10讲  VPN 技术(二)

5 、 TLS 记录协议( 1 ) TLS Record Protocol

操作过程示意图

Page 15: 第10讲  VPN 技术(二)

6 、 TLS 记录协议( 2 )操作第一步, fragmentation 上层消息的数据被分片成 214 字节大小的块,或者更小

第二步, compression( 可选 ) 必须是无损压缩,如果数据增加的话,则增加部分的长度不超过 1024 字节

第三步,计算消息认证码 (MAC) 计算公式:

HMAC_hash(MAC_write_secret, seq_num || TLSCompressed.type || TLSCompressed.version || TLSCompressed.length || TLSCompressed.fragment)

Page 16: 第10讲  VPN 技术(二)

6 、 TLS 记录协议( 3 )操作第四步, encryption 采用 CBC ,算法由 cipher spec 指定 数据长度不超过 214+2048字节,包括

加密之后的数据内容 HMAC padding, 共 padding_length ,每个字节的值也是

padding_length padding_length

IV ,初始协商指定,以后,前后记录连接起来 说明:如果是流密码算法,则不需要 padding

Page 17: 第10讲  VPN 技术(二)

6 、 TLS 记录协议( 4 )处理结果结果如下: struct { ContentType type; —— 8位,上层协议类型 ProtocolVersion version; —— 16位,主次版本 uint16 length; —— 加 密 后 数 据 的 长 度 ,

不超过 214+2048字节 EncryptedData fragment; —— 密文数据

} TLSCiphertext; length

Page 18: 第10讲  VPN 技术(二)

三、 SSL 高层协议1 、 TLS 密码变化协议 Change Cipher Spec Protocol

2 、 TLS 警告协议 Alert Protocol3 、 TLS 握手协议 TLS Handshake Protocol

Page 19: 第10讲  VPN 技术(二)

1 、 TLS 密码变化协议 Change Cipher Spec Protocol

它位于 TLS 记录协议之上 所以,它用到了 TLS 记录协议的处理过程 ContentType = 20 协议只包含一条消息,一个字节 1 用途:切换状态把密码参数设置为当前状态在握手协议中,当安全参数协商一致后,发送此消息

这条消息使得接收方改变当前状态读参数,使得发送方改变当前状态写参数

Page 20: 第10讲  VPN 技术(二)

2 、 TLS 警告协议 Alert Protocol ( 1 )

位于 TLS 记录协议之上 所以,也用到了 TLS 记录协议的处理过程 ContentType = 21 协议数据包含两个字节

第一个字节为 level :分别为 warning(1) 和fatal(2) 两种情况

第二个字节为情况说明 Fatal 类型的 alert消息导致

连接立即终止,此时,对应该会话的其他连接可以继续,但是会话标识符无效,以免利用此失败的连接来建立新的连接

Page 21: 第10讲  VPN 技术(二)

2 、 TLS 警告协议 Alert Protocol ( 2 )第二字节说明close_notify(0),unexpected_message(10),bad_record_mac(20),*decryption_failed(21),*record_overflow(22), *decompression_failure(30),*handshake_failure(40),*bad_certificate(42),unsupported_certificate(43),certificate_revoked(44),certificate_expired(45),certificate_unknown(46),illegal_parameter(47),*unknown_ca(48), *

access_denied(49),decode_error(50),*decrypt_error(51),export_restriction(60), *protocol_version(70), *insufficient_security(71), *internal_error(80), *user_canceled(90), #no_renegotiation(100), #

说明:1 * 表示该消息往往是 fatal 级别2 # 表示该消息往往是 warning 级别3 对于其他的错误情况,发送方可以根据情况决定是 warning 还是fatal, 对于 warning 消息,接收方可以自行决定如何处理,如果是fatal 消息,则一定要当作 fatal 消息来对待

Page 22: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 1 ) TLS Handshake Protocol位于 TLS 记录协议之上 也用到了 TLS 记录协议的处理过程 ContentType = 22 协议格式

用途:当 TLS 客户和服务器开始通讯的时候,它们要通过

协商,在以下信息方面获得一致 :协议版本、密码算法、是否认证对方、用什么技术来产生共享秘密数据,等等

Page 23: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 2 ) 流程交换 Hello消息,对于算法、交换随机值等协商一致交换必要的密码参数,以便双方得到统一的premaster secret交换证书和相应的密 码信息,以便进行身份认证产生master secret把安全参数提供给 TLS记录层检验双方是否已经获得同样的安全参数

Page 24: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 3 )使用的消息

消息 参数hello_request Null

client_hello 版本,随机数,会话 id ,密码参数,压缩方法server_hello

certificate X.509 v3 证书链server_key_exchange 参数,签名certificate_request 类型, CAs

server_done Null

certificate_verify 签名client_key_exchange 参数,签名finished Hash值

Page 25: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 4 )第一阶段:建立起安全能力属性

客户发送一个 client_hello消息,包括以下参数:版本、随机数 (32位时间戳 +28字节随机序列 ) 、会话ID 、客户支持的密码算法列表 (CipherSuite) 、客户支持的压缩方法列表然后,客户等待服务器的 server_hello消息服务器发送 server_hello消息,参数:客户建议的低版本以及服务器支持的最高版本、服务器产生的随机数、会话 ID 、服务器从客户建议的密码算法中挑出一套、服务器从客户建议的压缩方法中挑出一个

Page 26: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 5)关于会话 ID(Session ID)客户方 客户指定的会话 ID如果不等于 0 ,则表示它希望基于这个会话来更新已有连接的安全参数,或者创建一个新的连接

如果会话 ID等于 0 ,则表示客户希望在一个新的会话上建立一个新的连接

服务器 或者同意客户指定的会话 ID ,需要检查

cache 中的会话状态 或者返回一个新的会话 ID

Page 27: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 6 ) CipherSuite

第一个元素指定了密钥交换的方法, TLS 支持以下一些方法: RSA ,要求服务器提供一个 RSA 证书 DH(Diffie-Hellman) ,要求服务器的证书中包含了由 CA签名

的 DH 公开参数。客户或者在证书中提供 DH 公开参数,或者在密钥 交换消息中提供此参数

EDH(Ephemeral Diffie-Hellman) ,产生临时的密钥, DH公开参数由发送者的私钥进行签名,接收者用对应的公钥进行验证

匿名的 DH ,不加认证。会受到中间人攻击然后,指定以下信息 加密算法,和类型 (流还是分组密码算法 ) HMAC 算法, MD5还是 SHA-1 是否可出口 HashSize Key Material IV Size

Page 28: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 7)第二阶段:服务器认证和密钥交换

服务器发送自己的证书,消息包含一个 X.509 证书,或者一条证书链 除了匿名 DH 之外的密钥交换方法都需要服务器发送 server_key_exchange消息 可选的,有些情况下可以不需要。只有当服务器的证书没有包

含必需的数据的时候才发送此消息 消息包含签名,被签名的内容包括两个随机数以及服务器参数服务器发送 certificate_request消息 非匿名 server 可以向客户请求一个证书 包含证书类型和 CAs

服务器发送 server_hello_done, 然后等待应答

Page 29: 第10讲  VPN 技术(二)
Page 30: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 8)第三阶段:客户认证和密钥交换

客户收到 server_done消息后,它根据需要检查服务器提供 的证书,并判断 server_hello 的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器如果服务器请求证书的话,则客户首先发送一个 certificate消息,若客户没有证书,则发送一个 no_certificate 警告然后客户发送 client_key_exchange消息,消息的内容取决于密钥交换的类型最后,客户发送一个 certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的 HMAC值( 用 master_secret)进行签名

Page 31: 第10讲  VPN 技术(二)
Page 32: 第10讲  VPN 技术(二)

3 、 TLS 握手协议( 9 )第四阶段:结束

第四阶段建立起一个安全的连接客户发送一个 change_cipher_spec消息,并且把协商得到的 CipherSuite拷贝到当前连接的状态之中然后,客户用新的算法、密钥参数发送一个 finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对所有以来的消息进行校验。服务器同样发送 change_cipher_spec消息和 finished消息。握手过程完成,客户和服务器可以交换应用层数据。

Page 33: 第10讲  VPN 技术(二)
Page 34: 第10讲  VPN 技术(二)

四、 SSL 的安全性1 、密钥交换算法2 、重用一个 TLS 会话3 、伪随机函数 PRF(secret, label, seed)4 、 TLS/SSL 安全性分析5 、 SSL: PRNG攻击6 、 SSL: Million-message attack7、针对 SSL 的其他攻击

Page 35: 第10讲  VPN 技术(二)

1 、密钥交换算法TLS 记录协议需要: CipherSuite, master secret, and the client and server random values在 hello消息中,交换随机数以及各种算法对于各种密钥交换算法,从 pre_master_secret 计算得到 master_secret ,然后从内存中删除,公式:master_secret = PRF(pre_master_secret,

“master secret”, ClientHello.random+ ServerHello.random)[0..47]

* PRF(secret, label, seed) 为伪随机函数Master_secret总是 48字节长,而pre_master_secret长度不定,取决于密钥交换算法两类密钥交换算法: RSA ,客户产生一个 48字节的 pre_master_secret ,然后通

过服务器的公钥传递给服务器 Diffie-Hellman ,双方协商得到的密钥被用作

pre_master_secret

Page 36: 第10讲  VPN 技术(二)

2 、重用一个 TLS 会话客户和服务器在交换hello消息中,客户要求重用已有的 TLS 会话,服务器同意使用 cache中的会话* session id跳过第二第三阶段,直接把 TLS 会话中的参数传递给 TLS 记录层

Page 37: 第10讲  VPN 技术(二)

3 、伪随机函数 PRF(secret, label, seed)

P_hash(secret, seed) = +HMAC_hash(secret, A(1) + seed) +HMAC_hash(secret, A(2) + seed) +HMAC_hash(secret, A(3) + seed) + ...这里 A() 定义如下:  A(0) = seed A(i) = HMAC_hash(secret, A(i-1))伪随机函数 PRF(secret, label, seed) =

P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);

这里, S1 和 S2 为 secret 的各一半,如果 secret 为奇数个字节,则 S1 和 S2 共享一个字节

Page 38: 第10讲  VPN 技术(二)

4 、 TLS/SSL 安全性分析

针对一些常见的攻击手法 针对密钥算法的破解

取决于算法的强度,协商过程 利用明文模式的攻击

上层协议中常常有一些固定的模式可以参考,比如 http 协议中get 字节串

构造字典 ( 密文 -密钥对 ) ,查字典 TLS办法:用长密钥,使得不可能构造这样的字典

重放攻击 TLS 中的 nonce 有 32 字节 ( 包含时间戳 ) ,可用于避免重放攻击

会话 ID 标识了一个完整的会话,要重放部分会话需要知道私钥 中间人攻击

通过证书来认证对方 对于双方都是匿名的模式,中间人攻击也是成立的

Page 39: 第10讲  VPN 技术(二)

5 、 SSL: PRNG攻击Netscape v1.1 版本中存在,利用随机数发生器的弱点先看随机数发生器

global variable seed;

RNG_CreateContext() (seconds, microseconds) = time of day; /* Time elapsed since 1970 */ pid = process ID; ppid = parent process ID; a = mklcpr(microseconds); b = mklcpr(pid + seconds + (ppid << 12)); seed = MD5(a, b); mklcpr(x) /* not cryptographically significant; shown for completeness */ return ((0xDEECE66D * x + 0x2BBB62DC) >> 1);

(待续)

Page 40: 第10讲  VPN 技术(二)

5 、 SSL: PRNG攻击 (续 )

种子关联: pid, ppid, seconds, microseconds Seconds往往可以获得, microseconds未知 如果在目标机器上有账号,则 pid 和 ppid 可以获得 否则,可以寻找 pid 和 ppid 的。

对于大多数 UNIX平台, pid+(ppid << 12)只有 27 位

global variable challenge, secret_key; RNG_GenerateRandomBytes() x = MD5(seed); seed = seed + 1; return x;

create_key() RNG_CreateContext(); tmp = RNG_GenerateRandomBytes(); tmp = RNG_GenerateRandomBytes(); challenge = RNG_GenerateRandomBytes(); secret_key = RNG_GenerateRandomBytes();

Page 41: 第10讲  VPN 技术(二)

5 、 PRNG 的启示PRNG 并不是 SSL 协议本身的缺陷,而是实现上导致的缺陷 随机数对于安全协议或者安全系统的重要性

源码开放的另一层含义 关键的代码接受公众的审视

Reference: Ian Goldberg and David Wagner, “Randomness and the Netscape Browser”, January 1996 Dr. Dobb's Journal

Page 42: 第10讲  VPN 技术(二)

6 、 SSL: Million-message attack

在 RSA 算法作加密运算的时候,首先对明文消息进行编码,其格式为

0 2 random bytes 0 message

假设密文 C ,攻击者可以产生一系列整数 S 并计算 C’ = C*(Se) mod n ,在解密的时候,每一个 C’ 对应于一个M’ 。大多数的 M’ 不会满足上面的格式,但是有 2-16 的概率会产生这样的结果 ( 因为前两个字节是确定的 ) 。攻击者可以找到一系列满足条件的 S ,然后推断出密文 C 对应的明文M 。这个过程大约需要 220 个消息和应答。

攻击实施依赖于 需要一个可以提供解密准确性判断的服务器——称为

oracle SSL 实现是否能够精确地告知明文格式不正确? 只能得到一个消息的明文,无法得到私钥

Page 43: 第10讲  VPN 技术(二)

6 、 MMA 的启示实现 SSL 的时候 对待错误消息如何响应?

Contiune? 会不会招致 DOS ?返回精确的错误

充分利用明文模式 随机数填充

References1 RFC 32182 Bleichenbacher D. , "Chosen Ciphertext Attacks against Protocols Based on RSA Encryption Standard PKCS #1" in Advances in Cryptology -- CRYPTO'98, LNCS vol. 1462, pages: 1--12, 1998.

Page 44: 第10讲  VPN 技术(二)

7、针对 SSL 的其他攻击Export ciphers and distributed cracking 举例:

40 位 RC4 ,http://cypherpunks.venona.com/date/1995/07/msg00052.html

downgrade attacks 往 SSL 的低版本退化 密码算法的退化

Page 45: 第10讲  VPN 技术(二)

五、 SSL 的实现

1 、 SSL 实现基本情况2 、 IE 中 SSL/TLS 的一个漏洞3 、 Win2k 中的 SSL

Page 46: 第10讲  VPN 技术(二)

1 、 SSL 实现基本情况OpenSSL, 最新 0.9.6c, 实现了 SSL(2,3), TLS(1.0)

Openssl —— a command line tool. ssl(3) —— the OpenSSL SSL/TLS library. crypto(3)—— the OpenSSL Crypto library. URL: http://www.openssl.org

SSLeay http://www2.psy.uq.edu.au/~ftp/Crypto/

Microsoft Win2k SSL implementation

Page 47: 第10讲  VPN 技术(二)

2 、 IE 中 SSL/TLS 的一个漏洞( 1 )

IE处理内嵌在 HTTP页面中的 HTTPS 对象存在一个漏洞 它只检查 HTTPS 服务器的证书是否由可信的 CA签名

的,而完全忽略该证书是否有适当的名字,以及是否已经过期。

对于当前这个页面而言,其实并不危险问题在于 IE 会把这个证书缓存起来,并标记为可信任的,一直

到浏览器的会话结束 这意味着,假如说, IE 客户在访问一个 HTTP页面时,如果该页面被插入一个包含指向有问题的 SSL server的 HTTPS 对象 (比如说一个 image) 的话, IE 不会警告遇到一个非法的证书,只要这个证书确实是被可信CA签名的

Page 48: 第10讲  VPN 技术(二)

2 、 IE 中 SSL/TLS 的一个漏洞( 2 )假如说中间人在服务器返回的页面上加上一句话<img src="https://www.yoursite.com/nonexistent.gif" width=1 height=1>

HTTPS部分显示的是一个被偷来的或者过期的www.shop.com的证书,这个证书是有效签名的,但是 IE并不检查证书中的名字和过期情况如果客户通过 HTTPS 连接到 yoursite网站上, IE将认为这是可信的站点,而不再进一步检查……参考: ttp://archives.neohapsis.com/archives/vulnwatch/2001-q4/0077.htmlhttp://archives.neohapsis.com/archives/vulnwatch/2001-q4/0080.html

Page 49: 第10讲  VPN 技术(二)

3 、 Win2k 中的 SSL与 Kerberos 的关系 Kerberos 是服务器

认证客户的身份 SSL 的通常用法是客

户认证服务器的身份如果客户提供证书,则可以建立双向认证

服务器认证客户往往用“用户名+口令”方式

如何与授权过程结合起来