热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

浅析 HTTPS 中间人攻击与证书校验?

知了堂姐
2024-07-08 17:22:16
0

证书是 https 里非常重要的主体,可用来识别对方是否可信,以及用其公钥做密 钥交换。可以看见证书里面包含证书的颁发者,证书的使用者,证书的公钥,颁 发者的签名等信息。其中 Issuer Name 是签发此证书的 CA 名称,用来指定签发

证书的 CA 的可识别的唯一名称(DN, Distinguished Name),用于证书链的认 证,这样通过各级实体证书的验证,逐渐上溯到链的终止点,即可信任的根 CA, 如果到达终点在自己的信任列表内未发现可信任的 CA 则认为此证书不可信。

https 握手过程的证书校验环节就是为了识别证书的有效性唯一性等等,所以严 格意义上来说 https 下不存在中间人攻击,存在中间人攻击的前提条件是没有严格的对证书进行校验,或者人为的信任伪造证书,下面一起看下几种常见的 https“中间人攻击”场景。

(1)证书未校验

由于客户端没有做任何的证书校验,所以此时随意一张证书都可以进行中间人攻 击,可以使用 burp 里的这个模块进行中间人攻击。 通过浏览器查看实际的 https 证书,是一个自签名的伪造证书。

(2)部分校验

做了部分校验,例如在证书校验过程中只做了证书域名是否匹配的校验,可以使 用 burp 的如下模块生成任意域名的伪造证书进行中间人攻击。 实际生成的证书效果,如果只做了域名、证书是否过期等校验可轻松进行中间人 攻击(由于 chrome 是做了证书校验的所以会提示证书不可信任)。

(3)证书链校验

如果客户端对证书链做了校验,那么攻击难度就会上升一个层次,此时需要人为 的信任伪造的证书或者安装伪造的 CA 公钥证书从而间接信任伪造的证书,可以 使用 burp 的如下模块进行中间人攻击。 可以看见浏览器是会报警告的,因为 burp 的根证书 PortSwigger CA 并不在浏 览器可信任列表内,所以由它作为根证书签发的证书都是不能通过浏览器的证书校验的,如果将 PortSwigger CA 导入系统设置为可信任证书,那么浏览器将不 会有任何警告。 手机客户端 Https 数据包抓取 上述第一、二种情况不多加赘述,第三种情况就是我们经常使用的抓手机应用 https 数据包的方法,即导入代理工具的公钥证书到手机里,再进行 https 数据 包的抓取。导入手机的公钥证书在 android 平台上称之为受信任的凭据, 可以看见是 Issuer 和 Subject 一样的自签名 CA 公钥证书,另外我们也可以通 过证书类型可以知道此为公钥证书,crt、der 格式的证书不支持存储私钥或证 书路径(有兴趣的同学可查找证书相关信息)。导入 CA 公钥证书之后,参考上文 的证书校验过程不难发现通过此方式能通过证书链校验,从而形成中间人攻击, 客户端使用代理工具的公钥证书加密随机数,代理工具使用私钥解密并计算得到 对称加密密钥,再对数据包进行解密即可抓取明文数据包。

(4)中间人攻击原理

一直在说中间人攻击,那么中间人攻击到底是怎么进行的呢,下面我们通过一个 流行的 MITM 开源库 mitmproxy 来分析中间人攻击的原理。中间人攻击的关键 在于 https 握手过程的 ClientKeyExchange,由于 pre key 交换的时候是使用 服务器证书里的公钥进行加密,如果用的伪造证书的公钥,那么中间人就可以解 开该密文得到 pre_master_secret 计算出用于对称加密算法的 master_key,从 而获取到客户端发送的数据;然后中间人代理工具再使用其和服务端的 master_key 加密传输给服务端;同样的服务器返回给客户端的数据也是经过中间人解密再加密,于是完整的 https 中间人攻击过程就形成了,一图胜千言,来 吧。

(5)App 证书校验

通过上文第一和第二部分的说明,相信大家已经对 https 有个大概的了解了,那 么问题来了,怎样才能防止这些“中间人攻击”呢? app 证书校验已经是一个老生常谈的问题了,但是市场上还是有很多的 app 未 做好证书校验,有些只做了部分校验,例如检查证书域名是否匹配证书是否过期, 更多数的是根本就不做校验,于是就造成了中间人攻击。做证书校验需要做完全, 只做一部分都会导致中间人攻击,对于安全要求并不是特别高的 app 可使用如

下校验方式: 查看证书是否过期 服务器证书上的域名是否和服务器的实际域名相匹配,校验 证书链。

大家都在看

知了汇智&高校紧密合作,助力培养当代应用型人才

2024-07-08 浏览次数:0

转行学IT,前端和软件测试哪个容易学

2024-07-08 浏览次数:0

软件测试可以做到多少岁?软件测试的发展前景

2024-07-08 浏览次数:0

参加JAVA培训后,真的能拿高薪吗?

2024-07-08 浏览次数:0

知了堂就业喜报 | 毕业20天,就业100%,黑...

2024-07-08 浏览次数:0

什么是服务器脚本语言?哪些是常用的服务器脚本语言...

2024-07-08 浏览次数:0
最新资讯