引言:本文将向您介绍会话管理的基本概念,分析常见的会话安全缺陷、攻击类型、以及应对措施的最佳实践。
目录
- 会话安全的重要性
- JWT和Opaque令牌
- 常见的会话攻击
- 检测与防止认证令牌被盗
- 实施会话管理的常用方法
- 应对攻击的最佳实践
会话安全的重要性
在任何需要服务器和客户端之间进行通信的系统设计中,会话的安全性总是需要重点考虑的因素之一。不当的安全性设计往往会导致用户帐户容易受到未经授权的访问攻击。业界著名的OWASP(开放Web应用程序安全项目,请参见-- https://dzone.com/articles/continuous-security-using-owasp)将“认证与授权的不当实施”视为应用安全的第二大风险(请参见-- https://www.owasp.org/index.php/Top_10-2017_Top_10)。下面是近年来发生在网络安全领域的典型案例:
在业界,许多CSO(首席安全官)都承认:在认证和授权方面的投入,向来都是企业安全预算中的烧钱大户。而且,他们普遍认为正确地实施用户会话管理可谓既耗时且昂贵。否则,自己乃至所在企业很可能会成为“下一个Jack和他的泰坦尼克号”。
值得注意的是:我们切勿将会话管理与OAuth(请参见-- https://dzone.com/articles/oauth2-tips-token-validation)相混淆。后者是一种仅用于委托目的的协议。而前者涉及到如何在有效会话期间处理、存储和更改认证令牌。该处的令牌既可以是OAuth流,也可以是服务器与客户端之间的会话流。
JWT和Opaque令牌
下面,我们将简要地探讨会话管理中两种常用的主要令牌类型:
JSON Web令牌(JWT,请参见-- https://jwt.io/)
Opaque令牌
- 作为随机字符串,它们可被视为仅由颁发系统保存的信息指针。
- 在每次使用它们时,都需要对数据库或高速缓存进行查找。
- 此类令牌可以很容易地被按需吊销。
尽管这两种令牌类型的属性不同,但是一旦被盗用,都可能导致未经授权的帐户访问。
常见的会话攻击
通常情况下,由于验证令牌既可以被存储在前端,又可以被存放在后端,而且往往需要通过会话流经由网络传送,因此,它们很容易遭受到如下类型的攻击:
- 中间人袭击
- OAuth令牌盗用
- XSS(请参见--https://dzone.com/articles/the-cross-site-scripting-xss-vulnerability-definit)
- CSRF(请参见--https://dzone.com/articles/fixing-csrf-vulnerability)
- 数据库/文件系统访问
- 会话固定(请参见--https://dzone.com/articles/session-fixation-and-how-fix)
- 蛮力攻击
面对上述攻击,我们需要通过认真地考虑会话的安全性,部署适当的措施,来降低由于系统自身漏洞,所积累的各种攻击可能性。也就是说,系统架构师不仅要防止令牌被盗,还应当确保系统能够尽快地检测到令牌被盗的情况。
检测与防止认证令牌被盗
由于令牌往往需要被应用程序的前端传输到不受信任的另一方,而且很容易被盗用,因此我们需要通过检查来构建第一道防线。现有的检测方法主要依赖于启发式算法(heuristic algorithms)。例如:跟踪IP地址与浏览器(或移动端)指纹的突变,标记异常的用户行为等。不过此类方法既难以实施,又准确性不高。下面让我们来讨论一些常见的会话管理方法。
实施会话管理的常用方法
最常用的会话管理设置方法包括如下五大类:
- 长期访问令牌。
- 将短—中期有效的令牌,用于获取新的访问令牌。
- 短—中期访问令牌,其使用期限会延长。
- 短期访问令牌。
- 短期访问令牌和长期刷新令牌。
- 长期访问令牌
- 在用户主动注销会话的时候,访问令牌将被吊销,并在前端被清除。
攻击分析
关键的认证令牌会永久性地暴露在前端、传输通道和后端,三个攻击面上。
认证令牌被盗的影响:
在令牌的到期之前,攻击者可能会未经授权地访问到受害者的帐户,并长达数周或数月之久。
盗用检测:
只能通过使用主动的启发式算法、或被动地依靠用户通知再实施检测。
如果该方法是使用JWT实现的,则很难吊销令牌;如果使用的Opaque令牌,则比较容易吊销。