会话是站点上用户身份验证有效的时间范围。创建会话是因为在每次请求时都要求提供用户凭据将非常低效(因为单个页面可以对用户特定资源发出 10 次请求)。会话是通过 cookie 或其他请求参数实现的,只要浏览器请求用户特定的内容,就会提交这些参数。目前使用的方法是给用户一个标识符字符串。此标识符称为会话令牌。会话管理高度敏感,因为它也是一种身份验证机制。
使用用户的会话令牌未经授权访问其帐户被称为“会话劫持”。由于 Web 服务器通常无法知道哪个包含有效令牌的请求是真实的,哪个是未经授权的,因此很难检测到这种攻击。会话劫持可能会导致个人/敏感数据的泄露或丢失。这就是为什么了解黑客用来劫持会话的一般方法对于最终用户和开发人员都至关重要。
通过不安全传输进行会话劫持:
就像密码一样,通过 HTTP 传输会话标识数据是不安全的。攻击者可以执行中间人 (MITM) 攻击以查看用于维护用户会话的 cookie 和其他敏感数据。攻击者可以立即使用此数据来创建重复会话。攻击者将保持登录状态,直到用户注销。在受害者注销后,攻击者是否会继续访问受害者的帐户,取决于会话管理的实现。例如,如果站点因会话固定(多个会话的相同 cookie)而易受攻击,那么攻击者将可以持续访问用户的帐户。
通过 XSS 进行会话劫持:
容易受到跨站点脚本攻击并使用 cookie 进行会话管理的 Web 应用程序也容易被用作定位其用户的媒介。默认情况下,可以通过页面上的 JavaScript 访问 Cookie。攻击者可以利用 XSS 执行 JavaScript,将 cookie 发送到攻击者的服务器。
一些网站为每个用户(包括访客用户)提供一个会话 cookie。用户会话通过该 cookie 的状态进行跟踪。一旦用户从浏览器登录,发给该浏览器的 cookie 就会与该用户的会话相关联。在这种情况下,如果存在 XSS 漏洞,攻击者可以将其访客 cookie 插入到用户的会话中。用户登录后,攻击者也登录了。
通过会话固定进行会话劫持:
会话修复是一个漏洞,其中单个用户的多个会话使用一组 cookie。对用户设备进行物理访问的攻击者可以在用户注销时复制 cookie。然后,攻击者可以使用 BurpSuite 等拦截代理在其浏览器上编辑 cookie。当用户再次登录时,cookie 将使攻击者获得对用户帐户的完全访问权限。
通过 CSRF/XSRF 进行会话劫持:
跨站点请求伪造是一种攻击,它利用 HTTP 的本机功能将网站的 cookie 提交给对该网站的所有请求,而不管它们的来源如何。可以利用 CSRF 将用户的密码重置为攻击者指定的密码。这会导致用户无法访问其帐户。如果网站没有采取适当的恢复措施,则此类攻击可能会导致用户永久无法访问其帐户。
通过流氓 WiFi AP 进行会话劫持:
攻击者可以创建与真正 WiFi 接入点的 SSID 匹配的虚假 WiFi 接入点,以欺骗用户连接到 AP 并使用它登录网站。攻击者控制 AP 的 DNS 服务器。然后,攻击者可以轻松修改用户访问的网站的 DNS 条目,将用户引导至虚假登录页面。这种攻击也可以通过“免费高速WiFi”引诱用户来实现。
给用户的提示:
除了常规的安全预防措施外,用户无法做很多事情来防止他们的会话受到损害。这些预防措施是:不要使用公共WiFi进行敏感工作,使用后立即退出敏感站点,避免密码重复使用等。
给开发人员的提示:由于会话劫持主要是通过利用站点上的漏洞来完成的,因此开发人员可以做很多事情来防止此类攻击。开发人员应该:
- 使用 CSP(内容安全策略)和 XSS 保护标头。
- 对会话 cookie 使用指令“httponly”,以便现场 JavaScript 无法访问它。因此,即使该站点易受 XSS 攻击,会话令牌也将是安全的。
- 在注销时使用服务器端 cookie 失效。
- 避免 cookie 重用。
- 在他们的网站上使用 HTTPS 和 HSTS。
- 在密码更改等敏感操作上使用强反 CSRF 令牌。