站点安全强化之防SSL证书嗅探

桜庭清夏 · 2020-12-14 12:56:37 


站点安全系列文章的防止SSL嗅探部分,这里的SSL嗅探问题会导致原站IP暴露。

原理

虽然有CDN以及CF的保护,原站IP不可见,但是要想绕过防护找原站(真正提供服务的那台机器)还是有很多安保要做的。

扫描器通过IP访问你的原站(例如某些扫描器无时无刻在扫描全网的443端口),这时如果服务器没设置默认证书防御的话,服务器就会返回一个默认站点的SSL证书。

此时默认站点的SSL证书将包含域名,这样就会给不法分子可乘之机。

白话文阐述原理

原理就好比有个不法分子想冒充快递员对一栋楼里面的B这户人家实施不法行为,但楼里面所有户的门的外观都是一样的,如何确定他要找的人是在哪个屋子呢(也就是上面所说的嗅探)?

这里假设他假借要找A这个人的名义去敲门,实际想找的是B家的情况。

于是这个不法分子开始从第一户人家开始敲门。他说要找A,而那户人家很警惕,什么都没回复(也就相当于返回了空白SSL证书)。于是这个不法分子什么都没得到,只能转去第二家。

到了第二家,他刚敲门就被对方拒绝了。对方回答:我家没快递,你快走(链接被拒绝,也就是这端口可能根本没开的情况)。他继续前往第三家。

而敲第三家门的时候,他说要找A,但这户人家说,这是B家,你找错了。他狂喜,找到了B家。于是他离开了居民楼,码了一伙人到B家实施了暴力行为。(DDoS或者入侵)

这就是SSL证书嗅探的问题。

因为SSL的机制,如果不在SNI里面送去哪户人家(主机名)的话,服务器根本不知道你要找的是谁,所以也就无法正常握手了。不送SNI或者SNI错误都会让服务器返回一个默认证书,而这个默认证书上面可是记载着正确站点的域名的。

如何防御?

从上面白话文的解释也可以得知,有两种解决办法,一种是拒绝,一种是沉默。而拒绝的话我们站点的SSL也无法开启了,于是这里选择空白SSL证书。

新建一个空主机,内容随意或者干脆返回403/404,设置为默认主机。

listen 80 default_server;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
listen [::]:80 default_server;

listen [::]:80 default_server;

后面的default_server表示如果对方发来的Host字段和自己这里的主机没有任何匹配的话就跳转到这个主机。

将下列证书导入后保存到nginx,将默认主机也设置到这个主机上。重启nginx即可。

-----BEGIN CERTIFICATE-----
MIIBkjCB/AIJAI3bCYqa39hiMA0GCSqGSIb3DQEBBQUAMA0xCzAJBgNVBAYTAiAg
MCAXDTE4MTEyNDA5MDMzOFoYDzIwOTkxMjMxMDkwMzM4WjANMQswCQYDVQQGEwIg
IDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA18hepvNcznqDj735Opxircn3
M0Ruv8nkpHHPuurxr6tLPKAe1XAsy5dWHDbK7t4sXpT0ds9c74yqmvfwKofPk7z9
ZBhmyw/5sp454/JftL1c2fr58wB9ETfX6as5aR5hQR0M0NuQLSAB/KVzi9eeNWDd
EzT0QN5B1Ai9BR/ApMMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBiqHZsuVP09ubT
GzBSlAFEoqbM63sU51nwQpzkVObgGm9v9nnxS8Atid4be0THsz8nVjWcDym3Tydp
lznrhoSrHyqAAlK3/WSMwyuPnDCNM5g1RdsV40TjZXk9/md8xWxGJ6n1MoBdlK8T
H6h2ROkf59bb096TttB8lxXiT0uiDQ==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDXyF6m81zOeoOPvfk6nGKtyfczRG6/yeSkcc+66vGvq0s8oB7V
cCzLl1YcNsru3ixelPR2z1zvjKqa9/Aqh8+TvP1kGGbLD/mynjnj8l+0vVzZ+vnz
AH0RN9fpqzlpHmFBHQzQ25AtIAH8pXOL1541YN0TNPRA3kHUCL0FH8CkwwIDAQAB
AoGAQ4ejh6AV5VCWJ8AOZXdXsofIYzUBa+glNAmiNx8b8BwteZWq0KVAf56nBkFn
lQXW4OrA7wXKUfW11rXNZaIHJePJXv1swkN9+Em18Hon6BrtcqnKAwzAbhok3SzY
IVjI/zrgOABH6+ii77xCRBzI1itVPNN88DAUHC7PYLYiaaECQQD7PSoij37+kMc/
wPeEkl9r3vzU0OrsCsjU8Ev714OaoL/SIuAh6nsiRh9rcbUrrpGSSzIcmsk9HMDa
hXBNkNl5AkEA298yQvssaUc4tbEWxAVfd9DsHJdCdbXfgf9Dy5/tpCzYncY7T0du
VVHqKu3jXWoMc5XlesiCOerU/DIlMM8dGwJBANQn7GLO5iC1xWvS2bF7oVSIMtzL
pvW4jaszWBbNAPccc59RkA9T4LMqn/GtTZ4bhhYRpbl+BB21IC3nrNPzU5ECQG8T
Ln0QDruQs2F2eR3F6RjKfr1i3LxCiQtPPZycypzp2vS5tDS0zVRk8XuGehoy/N9X
lnqU2NURgU92tbsWpokCQQDdc9tU3B/OM/YfzUNwvOLmUVwrJX6PFSFsOn+XHrCC
q9LcGEAHyzaf5GEWje84ee4rkv5oaZcwll3dg4IioBnC
-----END RSA PRIVATE KEY-----

配置好后,这个证书会返回一个所有关键信息都为空的证书,也就阻止了SSL的嗅探。


你是否会像清风拂过花儿一样与我相遇呢?