
随着HTTPS的使用的增长,未经授权的人渗透到受保护的流量中的需求增加了。
HTTPS拦截的安全影响在 2017年进行的一项研究发现,这已成为越来越普遍的做法。 对Firefox更新服务器上的流量进行的分析表明,在某些国家/地区,在HTTPS中引入第三方代理的比例达到了15%。
自研究以来,这种情况不太可能得到改善。 现在,即使是最新的Sennheiser无线耳机型号也
需要在系统中安装根证书 (带有不安全的参数)。
防病毒或公司中间盒通常会破坏保护(请参见下面的列表),但情况可能更糟。 无论如何,最好先确定HTTPS频道何时实际上不是端到端安全的。 即使第三方系统拦截了意图良好的流量,它通常也不支持现代密码或不验证证书,从而降低了对连接的整体保护。 但是,它们不仅可以出于良好目的而且还可以出于恶意目的拦截SSL流量:例如,在州一级进行审查。
HTTPS监视程序充当透明的代理,它们可以中断TLS会话,检查内容,然后与目标服务器建立新的会话。 它们使用的TLS库版本与流行的浏览器不同,这使得真正的浏览器和代理的HTTP用户代理与TLS客户端Hello之间的不匹配可在服务器端检测到它们。
首先,这里有一些来自2017年研究的实践见解,包括Mozilla,Google,GlobalSign以及密歇根大学,伊利诺伊大学香槟分校和加州大学伯克利分校的学术研究人员。
HTTPS拦截的实际危害是加密性能下降和其他透明的代理漏洞。 该研究的作者通过这些参数评估了许多流行的中间盒。 如您所见,在2017年,其中几乎有一半不支持现代密码套件,并且有五个严重漏洞。 12个中只有1个能够完全镜像所有自定义密码套件。

通常还可以在服务器端检测到用户计算机上的防病毒活动。 研究表明,只有两种防病毒软件可以完全反映用户密码,在其他情况下,加密性能会降低。

防病毒可以抵御某些威胁,从而减少加密并添加自己的漏洞。 通常,安装第三方防病毒软件通常会大大降低系统的整体安全性。 一些专家建议用户
始终从系统中删除第三方防病毒软件 ,因为它们具有侵入性且编写不当的代码使浏览器和其他程序难以提供自己的安全性。
在客户端和服务器之间的途中,其他透明代理也可以工作。 为了更好地检测这些代理,Cloudflare最近发布了两个新工具:
- MITMEngine ,一个用于检测HTTPS拦截的免费库。
- MALCOLM ,一个仪表板,用于显示有关Cloudflare网络上HTTPS拦截的指标。
主要兴趣是MITMEngine库。 开发人员
写道 ,他们以流行的
Caddy Server MITM检测工具为示例。 它支持一组流行的浏览器,并通过TLS客户端Hello和用户代理消息的特定指纹识别HTTPS拦截,如上所述。
与Caddy Server MITM Detection相比,开发人员试图通过简化将来在检测器中添加新版本的浏览器以及提高性能和扩展检测器的功能来提供可扩展性。 它分析以下TLS客户端Hello参数,将真实数据与已知浏览器的指纹进行比较:
- TLS版本
- 密码套件;
- 扩展及其含义;
- 支持的椭圆曲线组;
- 椭圆曲线的点的格式。
实际上,MITMEngine会对用户进行部分指纹识别,而无需取消匿名,但可以可靠地确定连接是由真实的浏览器而不是中介建立的。
工作实例
假设MITMEngine从用户处看到以下用户代理:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/47.0.2526.111 Safari/537.36
该用户代理对应于Windows 7下的Chrome47。它随附TLS客户端问候消息,该消息以十六进制表示以下密码套件:
0000 c0 2b c0 2f 00 9e c0 0a c0 14 00 39 c0 09 c0 13 .+./.... ...9....
0010 00 33 00 9c 00 35 00 2f 00 0a .3...5./ ..
该消息与以下密码套件匹配:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
Chrome 47的默认密码套件如下:
0000 c0 2b c0 2f 00 9e cc 14 cc 13 c0 0a c0 14 00 39 .+./.... .......9
0010 c0 09 c0 13 00 33 00 9c 00 35 00 2f 00 0a .....3.. .5./..
如果仔细看,您会看到:在实际流量中,密码列表比实际浏览器中的密码列表略短。 尽管其余的排列顺序相同,但缺少两组:
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc14)
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc13)
可以假定来自用户浏览器的流量通过了不支持ChaCha密码的透明代理。 由于ChaCha旁边的AES-CBC密码套件
易受填充oracle攻击的
影响 ,因此降低了用户保护。
在某些情况下,MITMEngine甚至允许您确定哪个特定程序导致HTTPS连接降级(在上面的示例中,它是Sophos防病毒软件)。 服务器可以警告用户有关此威胁。

