HTTPS常见不安全配置


前言

截止到写这篇文章日期,我居然还能刷到有一些看起来很专业的人在炒老饭。

主要是在介绍 HTTPS暴露源站 的问题。这个问题在一些新手运维里面,确实是一个容易犯的错误之一。

比起介绍社会工程学方式的获取源站IP,我更想介绍一下未设置默认站点导致的问题。

什么是暴露源站?为什么会这样?

IPV4简介

众所周知,截止本文发布时间,由于IPV6目前还未在全世界得到普及,还是有相当多地区不提供IPV6。因此,IPV4在NAT帮助下依旧续命,还是占据主要地位的。

冷知识:尽管目前大部分大型云服务商都能提供IPV6,且多数大型网站都会使用它,但是 github 没有提供IPV6的访问。

在这个背景下,一台服务器依旧是以IPV4为主。

IPV4地址主要由四个部分组成

x.x.x.x

其中,每个x对应了一个字节,它们组合起来,刚好是4个字节。而在计算机中,4个字节能表示的最大范围(无符号的情况下)只有 0 - 4294967295

也就是 2^32 - 1 (二的三十二次方减一),看起来相当大不是吗?但是IPV4还有保留地址段。像是回环地址 127.0.0.1 , 局域网地址 192.168.x.x , 10.x.x.x 等等

你可以在维基百科了解所有保留地址

暴力破解IPV4

暴力破解IPV4?!筛选掉保留地址和普通用户的地址之后,剩下的地址用于暴力破解已经相当可观了!

是的!你可以想象到,我们可以把整个互联网的IPV4地址通过筛选后,暴力破解所有地址,对它们进行扫描,并检测这些地址附加到的服务器背后,返回的数据是什么,我们可以探测到相当多有用的信息!

证书泄露

HTTPS实现中,为了让浏览器能够验证证书有效性,不被骗了。目前证书都会使用X.509格式,它包括了一些除了证书内容本身以外的额外信息,最直接的信息就是:你的域名地址

与HTTP不同,HTTPS需要在建立可信连接时,需要使用TLS(SSL)建立安全链接,服务器需要首先通过浏览器告知的当前域名,来找到并拿出对应的证书,接下来的安全连接才能建立!

但是如果我们根据前面暴力破解的方法,尝试使用IP地址并通过HTTPS来访问了一台服务器,例如 https://127.0.0.1,当你通过IP地址向其建立TLS连接的时候,由于服务器没有找到IP的对应证书,于是,坏事发生了!

服务器可能从最早加载的证书列表里面掏了一个出来,并期望你认这个证书。假如我们是恶意攻击者,此时一看这个证书,好家伙!地址是 example.com,原来你这台服务器是 example.com的服务器,躲在CDN后面被我逮到了!

至此,我们已经找出了一个域名背后的真实服务器地址。

如何防御这类攻击?

呃,这个相对简单。

方法一:你只需要限制你的服务器在80,443的端口上访问者的地址只能是你使用的CDN提供商的地址就可以了。这可能有点麻烦,并不是所有CDN提供商都会公开自己的IP地址段。

方法二:设置HTTPS默认站点规则,当找不到有对应地址的证书后,只需要响应一张自签名的证书就行了,但是这个证书里面的信息一定不要和你的服务有关。