SSL/TLS & MIN

如何避免 SSL/TLS 中间人攻击

Posted by minicool on February 19, 2015

简述

SSL/TLS MIN (SSL/TLS man in the middle) 中间人攻击

SSL(secure sockets layer) 是介于传输层和应用层之间,提供通信数据的安全性和完整性的网络协议。主要提供: 1.使用证书确认用户和服务器。(身份认证) 2.在通信数据尾部添加校验码,防止中途篡改。(数据完整性) 3.加密通信数据和校验码,防止中途窃取。(数据保密性)

SSL握手协议主要由四个协议完成: *握手协议 *密码规则协议 *记录协议 *警告协议

优点

缺陷

基础流程(wireshark)

SSL通信流程 *客户端向服务器发送 会话ID,可用SSL版本号,当前时间,支持加密算法清单,支持压缩方式清单,产生随机数 Client-Secret(明文)。 *服务器端向客户端发送 会话ID,使用SSL版本号,当前时间,使用加密算法清单,使用压缩方式,产生随机数 Server-Secret(明文)。 *服务端将自己的证书发送给客户端。(证书包含公钥)【如果证书中信息不足,RSA协议需要提供公钥密码参数,DK协议需要提供密钥交换参数及公开值】 *客户端验证服务器的合法性(CA根证书及证书链是否可靠,发行者公钥是否验证证书签名,证书域名是否和实际域名匹配,证书是否过期),合法性验证失败,直接断开。成功继续下一步通信。【如果设置服务器需要验证客户端,需要提供客户端证书】 *客户端产生新主随机数 Pre-Master-Secret(密文),并用服务端证书中的公钥加密,并发送给服务器端。 *服务器端使用自己的私钥来解密随机数。 *双方根据约定的加密方法,使用前面的三个随机数,生成对话密钥(Session key),用来加密整个对话过程。 备注:为何需要三个随机数,而不只是需要最后生成Pre-Master-Key.应为不管是客户端,服务端都需要随机数。为保证协商出得密钥的随机性,所以需要引入随机因素来保证。Pre-Master 存在应为SSL协议不信任每个主机完全能生成随机的随机数,如果属于伪随机,那么Pre-Master-Secret就有可能被猜出来。如果使用三个随机数(客户端和服务端)都是伪随机数也十分接近随机。

详细流程

代码

伪代码

防范

SSL劫持攻击:

ARP欺骗

ARP(address resolution protocol) 地址解析协议。是一种IP地址转化为物理地址的协议(OSI第三层 网络层 转化为 OSI第二层 数据链路层)。 备注:现有三层交换机,支持通过IP地址分发。MAC地址必要性大大降低,但是最初设备接入路由时候,需要MAC地址注册获取IP。MAC地址属于物理地址,IP地址属于逻辑地址。 ARP欺骗,将IP地址到MAC地址的转换过程进行欺骗,使得IP地址转化为错误MAC地址,从而使数据流量引入错误物理地址。 在中间人攻击时候,一般将自己伪装成路由器。

DNS欺骗

DNS(domain name system) 域名系统。 处于应用层,将域名解析成IP地址(OSI第7层 应用层 转化为 OSI第三层 网络层) DNS欺骗,将域名信息转化为IP地址时候进行欺骗,使得域名地址转化为错误IP地址,从而使的数据流量错误定位IP地址。 在中间人攻击时候,一般伪装成目标服务器。 简易防范方法:写入HOSTS,可以绕过DNS攻击。但是应为不能将所有网站都写入HOSTS,所以存在局限性。

伪随机数猜解

通过不断对服务器进行初步校验时,对伪随机进行猜解。