在服务器端检测 HTTPS 的中间人

信息安全 tls Web应用程序 中间人
2021-09-08 00:14:09

背景:我们有一个通过 HTTPS 工作的站点(不支持 HTTP,我们使用 HSTS)。它部署在第三方云中,这限制了我们对服务器硬件的控制和记录能力。我们不能强制使用客户端证书身份验证。因此,基本上我们拥有的是具有标准 2 因素身份验证(登录/通行证 + SMS)的公共 HTTPS 站点,可以从桌面或移动浏览器访问,以及从本地移动应用程序内部在同一站点上的附加 API。服务器软件基于.Net/IIS。

我们正在考虑以下场景——用户的计算机/智能手机以某种方式信任攻击者的证书,从而允许经典的 MiM 攻击(因此用户使用受信任的证书连接到代理,并且代理连接到我们的服务器)。一种常见的(在某些国家)场景是互联网提供商要求用户信任他们的自签名证书。

抛开客户端的安全性(检查证书指纹等) - 服务器(即我们的应用程序)有什么方法可以了解 MiM 攻击已经到位?

这类似于这个问题HTTPS - Can server see details of client side certificate? ,但我不仅在寻找立即检测此类攻击的方法(如果可能的话当然会很好),而且还在寻找可以帮助我们长期检测此类攻击的方法,例如有一些历史记录。

1个回答

一个完美的人可能无法检测到中间攻击,但通常这些攻击(或防火墙中的合法 SSL 拦截)并不完美。我建议看一下 ClientHello,尤其是客户端提供的密码。对于当今的浏览器来说,哪些密码是有序的以及以何种顺序是非常典型的。中间人解决方案通常不关心复制确切的密码,而只是使用他们自己的密码集。其他功能是协议版本或使用特定扩展,如 SNI 或 ALPN。

请注意,您可能不会从普通服务器中获得很多这些功能,即通常您获得的主要是最终密码和协议版本。要获得更多信息,您可能需要检测 TLS 库或嗅探流量并稍后进行分析。