如何在第一次请求时防止通过纯 HTTP 进行 MITM 会话固定攻击?

信息安全 tls Web应用程序 http 中间人 会话固定
2021-08-14 04:11:49

网站实施了各种方法来告诉浏览器始终使用 HTTPS - HSTS 标头、服务器重定向到 HTTPS、CSP 策略。但是,用户第一次访问该站点时,它可以通过 palin HTTP。只有在浏览器知道该站点应该通过 TLS 之后,它才会始终使用它。

但是,如果攻击在第一次访问期间就可以访问流量,并且表现得像中间人一样怎么办?

例如,攻击者可以执行会话固定攻击。攻击者访问该站点,并获得一个带有会话 ID 的 cookie。当用户通过 HTTP 访问站点时,攻击者代表服务器响应并将其 cookie 分配给用户。然后攻击者让所有流量通过。用户使用攻击者的会话 id 发出请求,泄露信息等。现在攻击者可以使用该 id 发出请求并获取用户的信息。

可以做些什么来阻止这种攻击?

1个回答

假设您始终将用户从 HTTP 重定向到 HTTPS,您可以将会话标识符放在服务器从不通过 HTTP 发送的安全 HTTP-Only cookie 中。

实际上,在我的情况下,HTTP 到 HTTPS 发生在 Apache 中,所以我的服务器代码无法将 cookie 发送给仅使用 HTTP 的用户。

至少,这将适用于您在问题中描述的场景。但是,我从未听说过在第一次请求时停止的 MITM 攻击。HTTPS 请求也可以由 MITM 代理,因此此时黑客无论如何都会获得安全 cookie。

正如 StackzOfZtuff 所提到的,您可以通过添加以下 HTTP 标头将您的站点注册到 HSTS 来强制请求仅在 HTTPS 中完成:

 Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

当然,这意味着您需要确保您始终拥有有效的证书,否则您的网站将有一段时间无法访问。您可能也不想包含子域。

使用 HSTS,第一个 HTTP 请求永远不会发生(至少来自理解该 HSTS 列表的浏览器。但现在越来越多的浏览器在未指定协议时首先使用 HTTPS 而不是 HTTP 进行测试。)