会话固定是一种Web攻击技术。攻击者诱使用户使用特定的会话ID。用户使用提供的会话ID登录到Web应用程序后,攻击者使用此有效会话ID来访问用户帐户。

会话标识符:好的,坏的和丑陋的

会话标识符用于验证Web应用程序中的用户。该技术有其优点和缺点。如果没有会话标识符,我们将不得不比我们更频繁地登录Web应用程序。但是,会话标识符与密码具有相同的弱点:一旦有人知道它,便可以访问您的帐户,然后该帐户可能会被用于进一步的攻击和潜在的攻击。 特权升级.

攻击者以其可能的任何方式获取会话标识符。他们可以使用社会工程,网络钓鱼和其他措施。有几种与会话相关的攻击技术。会话劫持是关于从已登录用户获取现有会话ID的所有操作,例如,使用  中间人 渗透受害者浏览器与网络服务器之间通信的技术。在会话固定的情况下,情况相反。受害者获得了现有的会话ID,并被诱骗使用该标识符登录,从而使攻击者可以在以后接管用户的会话。

会话固定攻击的解剖

典型的会话固定攻击的执行方式如下:

  1. 攻击者访问Web应用程序登录页面,并接收Web应用程序生成的会话标识符。如果Web应用程序接受任意会话ID,则无需执行此步骤。
  2. 攻击者使用其他技术,例如 CRLF注射中间人攻击,社交工程等),并让受害者使用提供的会话标识符。这取决于Web应用程序如何处理会话ID。它可能像发送恶意URL一样简单,但也可能要求攻击者创建一个虚假网站。
  3. 受害者访问Web应用程序登录页面并登录到该应用程序。认证后,Web应用程序会将使用此会话ID的任何人都视为该用户。
  4. 攻击者使用会话标识符来访问Web应用程序,接管用户会话并模拟受害者。进一步的操作取决于攻击者和Web应用程序的功能。

攻击的确切阶段及其难度取决于几个因素。例如,很大程度上取决于应用程序如何处理会话ID。如果应用程序接受来自URL的会话ID(通过 GET 要求),攻击是微不足道的。如果应用程序接受来自的会话ID POST 请求,攻击者可能需要创建一个伪造的钓鱼网站。如果仅从cookie中接受会话ID,则将变得更加困难(但并非不可能)–攻击者必须使用诸如 跨站点脚本(XSS).

会话固定对策

会话固定的唯一原因是Web应用程序安全性不足以及与会话管理相关的不良编码做法:

  • 在最坏的情况下,开发人员不会检查会话标识符的有效性,并且可以提供任何字符串(或特定格式的任何字符串)作为会话ID。这使得会话固定攻击变得微不足道。
  • 开发人员通常会在用户登录之前分配会话ID,并且永远不要更改它。这是典型的会话固定攻击的主要原因。
  • 如果开发人员接受来自的会话ID GET or POST 请求,它们使攻击者更容易为用户强制设置会话ID。

有几种方法可以避免会话固定漏洞:

  • 标准方法是在用户登录后立即更改会话ID。这消除了大多数会话固定漏洞。
  • 另一对策是更改会话ID,丝毫怀疑可能存在不当行为。例如,Web应用程序可以测试IP地址还是 user-agent 的客户端已更改,如果已更改,请提供新的会话ID。
  • 超时后,您还应该使会话ID无效。例如,无活动的10分钟应导致自动注销。这为攻击者提供了使用固定会话ID的机会。
  • 一些消息来源建议在每次用户操作时更改会话ID。但是,这是一种剧烈的,不必要的并且潜在的危害–它可能会影响用户的体验和性能(例如,使用applet时可能是不可能的)。为了最大程度地减少影响,您可以在网站上执行每个重要的用户操作之前更改会话ID。
  • 请记住使用会话cookie进行会话管理,并且不要接受HTTP请求和HTTP标头中的会话ID。
  • HTTPS(HSTS), 反CSRF令牌, and suitable cookie flags (SecureSameSite)也有助于避免会话固定。

您可以使用 网络漏洞扫描器 检查您的网站或Web应用程序是否具有任何会话固定漏洞,但您必须记住,会话固定类似于逻辑漏洞,并且很难自动检测。

来源: //www.acunetix.com/blog/web-security-zone/what-is-session-fixation/