Panabit Support Board!

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13371|回复: 2

关于 HTTPS 管控的探讨-Tom CzHen

[复制链接]
发表于 2017-8-18 13:36:54 | 显示全部楼层 |阅读模式
本帖最后由 2576021932 于 2017-8-18 13:36 编辑

前言
本文只是探讨一些原理,并不提供实际的解决方案,如果你期望能在这里直接找到如何管控 HTTPS 的方法那就要失望了。阅读本文需要有一定的网络知识——网络基本的七层或四层架构。


什么是 HTTPS
HTTP 是属于应用层的协议,关于 HTTP 协议的内容就不细说了,HTTP应用非常广泛,像 Web 和大部分移动 APP 都是使用的 HTTP 协议。不过 HTTP 协议有个安全问题——所有信息都是明文传输的。

由于是讨论应用层的东西,所以抓包只需要使用 Fiddler 就可以了。与 Wireshark 不同,Fiddler 是使用代理的方式抓包——但只有应用层的包。因此,对比 Wireshark 所能抓的信息会少一些,方便说明。

打开 Fiddler 之后,随意打开一个 HTTP 协议的网站,然后在 Fiddler 中就可以查看到发送的信息了。实际上,任何一层网关都是能获取到 HTTP 协议传输的信息的,并且也能修改——比如给你的网页添加一点元素、替换掉下载的文件等等。

这就是常见的劫持手段之一了,通常也称为中间人攻击。

为了解决中间人攻击问题,业界提出了 HTTPS 协议,也就是 HTTP+SSL/TLS,在 HTTP 应用层与传输层之间加了一层加密层,使用的加密技术就是 SSL/TLS。

关于 SSL/TLS 的细节就不详细展开了,需要知道的是 SSL/TLS 每次连接成功时都会生成不同的对称加密密钥,而这个密钥交换过程是使用的非对称加密,并且对传输包有防重放机制。

使用对称加密意味着中间人无法获取到明文信息,每次链接都会生成不同密钥,加上放重放机制意味着不能简单的通过重放传输层数据包来进行攻击。

那么是不是只要使用了 HTTPS 就意外着绝对安全无法劫持呢?并不是如此。

降级攻击
首先 HTTP 协议是早于 HTTPS 协议出现的,网站为了兼容旧的访问方式——毕竟不可能要求用户或者所有浏览器都使用 HTTPS 协议,通常都是保留了 HTTP 协议访问的。并且会通过一个重定向将 HTTP 访问请求重定向到 HTTPS。

一个 HTTP 请求,首先需要通过 DNS 解析域名获得网站服务器的实际地址,然后才能达到网站服务器。然后服务器返回 301 或 302 状态码,告知浏览器重定向到 HTTPS 地址。

以上这个过程,可以在打开 Fiddler 的情况下在浏览器中手动输入 http://www.baidu.com ,然后看抓包活动的请求过程。

如果在 DNS 解析时通过 DNS 劫持到攻击者的网站,那么就不会有重定向到 HTTPS 这一步。

因此,对于这种仍然保留 HTTP 访问的地址,可以通过劫持 DNS 的方式,让客户端无法重定向到 HTTPS,就可以完成中间人攻击了。

当然,业界也不是吃白食的。为了应对这种攻击,提出了 HSTS 规范,当浏览器支持该规范时,可以通过预置规则,强制使用 HTTPS 访问,这样劫持 DNS 之后就会有证书错误的提示。

360安全浏览器就是使用了类似的原理,对于预置的地址都是使用的 HTTPS 直接访问,所以无法使用降级攻击来做到劫持。

中间人攻击
如果你够细心的话,可能会发现 Fiddler 中一样能抓到 HTTPS 的包的内容。实际情况也正是如此——只要条件满足,HTTPS 一样可以被中间人攻击。

前面有提到 SSL/TLS 是使用了非对称加密,而且有关注过 HTTPS 的话也应该知道证书这个概念。

由于网页是需要为公众提供访问的,因此为了解决“信任”问题,有一套完整的证书体系。首先有签发机构签发证书(CA 证书),而签发机构的证书是预置在操作系统或者浏览器的。

当浏览器访问 HTTPS 网站时,会检查网站证书的合法性,就是通过证书签发机构和预置的签发机构证书来进行校验的。如果校验出现问题,就会提示证书存在问题。

这些和 Fiddler 能抓 HTTPS 的包有什么关系?

安装 Fiddler 时会将一个 CA 证书添加到系统,然后当你通过 HTTPS 访问时,Fiddler 会用 CA 证书给自己签发一个对应网站的证书,这样就满足了证书校验的要求,Fiddler 可以获取请求的明文信息。
然后 Fiddler 再将获取的信息转发到真正的网站获得返回的信息。

整个过程中 Fiddler 就能抓到所有的信息了。所以,HTTPS 中间人攻击的关键点就是伪造证书——毕竟现实 CA 机构签发证书时会验证域名是否真的是申请人所有,并且有一系列的商业保险担保。

这也是为什么信任来路不名的 CA 证书是非常危险的事。

总结
实际十年前就有商业产品能做到 HTTPS 管控,当然,前提是安装一个它指定的 CA 证书。
个人看法是不考虑道德和法律因素(请记得《网络安全法》),仅仅从商业角度出发,HTTPS 管控功能都不太可能出现在标准版上。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本文由 Tom CzHen 首发于 为知笔记
期待Tom CzHen的后续作品
 楼主| 发表于 2017-8-18 13:38:29 | 显示全部楼层
  因原作者忘了论坛密码,我代为转发
发表于 2017-8-29 14:04:24 | 显示全部楼层
很好,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|北京派网软件有限公司 ( ICP备案序号:京ICP备14008283号 )

GMT+8, 2024-11-22 03:47 , Processed in 0.071007 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表