当前位置: 首页 > 科技观察

您需要了解的有关用户会话安全性的所有信息都在这里!

时间:2023-03-16 16:17:48 科技观察

【.com快译】会话安全的重要性在任何需要服务端与客户端通信的系统设计中,会话安全始终是重要的考虑因素之一。糟糕的安全设计通常会使用户帐户容易受到未经授权的访问。业界著名的OWASP(OpenWebApplicationSecurityProject,参见--https://dzone.com/articles/continuous-security-using-owasp)将“身份验证和授权实施不当”作为应用安全的第二要务。大风险(参见--https://www.owasp.org/index.php/Top_10-2017_Top_10)。以下是近年来网络安全领域发生的一个典型案例:今年早些时候,Docker的hub数据库被黑,导致Github访问令牌被盗。请参阅来源-https://www.theinquirer.net/inquirer/news/3074793/docker-hub-breachGitlab中的一个漏洞导致其所有用户的身份验证令牌都暴露在URL中。它们不仅没有过期时间,而且由于长度短,极易受到暴力破解攻击。见消息来源——https://threatpost.com/session-hijacking-bug-exposed-gitlab-users-private-tokens/127747/由于软件错误,9000万个Facebook账户受到影响,访问的Token被盗.消息来源请参考-https://newsroom.fb.com/news/2018/09/security-update/业内多位CSO(首席安全官)坦言,对认证授权的投入一直一直是企业安全预算中的一大烧钱者。此外,他们普遍认为正确实施用户会话管理可能既费时又费钱。否则,您和您的公司可能会成为“下一个杰克和他的泰坦尼克号”。值得注意的是:我们永远不要将会话管理与OAuth混淆(参见--https://dzone.com/articles/oauth2-tips-token-validation)。后者是仅用于授权目的的协议。而前者涉及如何在有效会话期间处理、存储和更改身份验证令牌。这里的令牌可以是OAuth流,也可以是服务器和客户端之间的会话流。JWT和OpaqueTokens下面,我们简要探讨会话管理中常用的两种主要类型的令牌:的令牌。例如,发给谁,以及他们的用户ID。由于后端不需要为每个API调用执行数据库查询,因此使用JWT具有一定的可扩展性。如果不使用黑名单之类的东西(请参阅-https://auth0.com/blog/blacklist-json-web-token-api-keys/),我们很难在不影响可扩展性的情况下做到这一点,按需撤销单个令牌,或在令牌过期之前。当然,我们可以通过更改签名密钥来撤销所有令牌。不透明令牌作为随机字符串,它们可以被视为指向仅由发行系统保存的信息的指针。每次使用它们时,都需要查找数据库或缓存。此类令牌可以根据需要轻松撤销。尽管这两种令牌类型具有不同的属性,但如果遭到破坏,两者都可能导致未经授权的帐户访问。常见的会话攻击通常,由于认证令牌可以同时存储在前端和后端,并且经常需要通过会话流在网络中传输,因此容易受到以下类型的攻击:-中间攻击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)暴力攻击面对上述攻击,我们需要通过Seriously考虑会话的安全性,部署适当的措施,减少由于系统自身的漏洞而积累的各种攻击的可能性。也就是说,系统架构师不仅要防止令牌被盗,还要确保系统能够尽快检测到令牌被盗。检测和防止身份验证令牌被盗由于令牌经常需要由应用程序的前端传输给另一个不受信任的方,并且很容易被盗,因此我们需要通过检查来构建第一道防线。现有的检测方法主要依靠启发式算法。例如:跟踪IP地址和浏览器(或移动端)指纹变异,标记用户异常行为等。但此类方法实施难度大,准确性不高。下面我们来讨论一些常见的会话管理方法。实现会话管理的常用方法最常用的设置会话管理的方法包括以下五类:长期访问令牌。中短期有效令牌用于获取新的访问令牌。寿命延长的中短期访问令牌。短期访问令牌。短期访问令牌和长期刷新令牌。1.Long-termaccesstoken当用户主动退出session时,accesstoken会在前端被撤销并清除。攻击分析:密钥认证令牌将永久暴露在前端、传输通道和后端三个攻击面。身份验证令牌被盗的影响:攻击者可能在令牌过期前数周或数月获得对受害者帐户的未授权访问权限。欺诈检测:检测只能通过使用主动启发式算法或被动依赖用户通知来实现。如果该方法使用JWT实现,则很难撤销token;如果使用不透明令牌,则撤销相对容易。2.使用中短期有效token获取新的accesstoken,这样即使之前的token还没有过期,前端也可以使用新的accesstoken。当用户主动退出会话时,访问令牌将在后端被撤销并从前端清除。如果访问令牌仅在短时间内有效,则用户需要尽快退出会话。(1)攻击分析密钥认证令牌将永久暴露在前端、传输通道和后端三个攻击面。(2)认证令牌被盗的影响:攻击者必须不断地更新他们的令牌以维持他们的未授权访问状态。(3)欺诈检测:为了保持登录状态,攻击者和受害者都需要在当前(被盗)令牌过期之前向服务器请求新的访问令牌。如果同一个token在请求中使用了两次,那么根据前端的实现方式,可以推断发生了盗用。可以看出,虽然中短期有效的token可以更快的检测出是否存在盗用,但由于生命周期较短,即使没有被盗用,用户体验也不好。当然,一旦检测到妥协,与会话关联的访问令牌将立即被撤销。但是,如果访问令牌是JWT,则防止此类攻击可能会很复杂。3.生命周期会延长的中短期访问令牌。当用户主动退出session时,accesstoken会在前端被撤销清空。攻击分析:密钥认证令牌将永久暴露在三个攻击面:前端、传输通道和后端。身份验证令牌被盗的影响:只要受害者的会话有效,攻击者就可以维持未经授权的访问。欺诈检测:检测只能通过使用主动启发式算法或被动依赖用户通知来实现。一旦检测到滥用,与会话关联的访问令牌将立即被撤销。但是,如果访问令牌是JWT,则防止此类攻击可能会很复杂。4.短期访问令牌当用户主动退出会话时,访问令牌将在前端被撤销并清除。攻击分析:这种情况下,虽然没有密钥认证token,但是由于在传输过程中暴露了用户的凭证,也容易受到中间人攻击。身份验证令牌被盗的影响:如果令牌被盗,攻击者将只有很短的时间来获得未经授权的访问。欺诈检测:检测只能通过使用主动启发式算法或被动依赖用户通知来实现。当检测到攻击时,我们不需要撤销访问令牌,因为它们非常短暂。但是,如有必要,我们可以通过从数据库中删除不透明访问令牌来撤销它们。5、短期访问令牌和长期刷新令牌u当用户主动退出会话时,访问令牌和刷新令牌会在前端被撤销和清除。攻击分析:Keyauthenticationtoken(和refreshtoken)永久暴露在前端和后端攻击面,当然在传输过程中偶尔也会暴露。身份验证令牌被盗的影响:访问令牌被盗:攻击者在令牌过期之前可以在短时间内进行未经授权的访问。被盗的刷新令牌:攻击者可以使用被盗的刷新令牌来获取新的访问令牌,并在较长时间内获得对受害者帐户的未授权访问权限。盗窃检测:访问令牌被盗:检测只能通过使用主动启发式方法或被动依赖用户通知来完成。被盗的刷新令牌:只有在极少数情况下,我们才能检测到此类盗窃并将损失降至最低。例如:通过某种实现,在新的token生成后立即撤销之前的accesstoken。据此,当攻击者和受害者同时在线时,系统可以识别盗用。也就是说,如果攻击者使用刷新令牌,受害者的访问令牌将被撤销,导致受害者请求新的访问令牌。这将迫使攻击者发出另一个请求,依此类推。因此,如果后端能够在短时间内检测到大量对新访问令牌的请求,则可以推断出盗用。当检测到攻击时,我们不需要撤销访问令牌,因为它们的生命周期非常短。但是,如果确实需要,我们可以通过从数据库中删除不透明访问令牌来撤销它们。下面,我们针对不同类型的会话攻击,讨论各种相应的对策。BestPracticesforAttacks1.Man-in-the-middleattack当session只使用HTTP,或者错误的实现了HTTPS,如果应用没有开启HTTPS和安全cookies,那么攻击者可以通过和受害者相同的网络,监控网络中的各种数据包,并查看传输过程中的明文身份验证令牌。此外,即使某些应用程序带有SSL证书,错误的实施也可能导致成功的中间人攻击。如前所述,防止此类攻击的最简单方法是在整个应用程序中正确使用HTTPS和安全cookie。此外,我们可以通过在每台设备上使用公钥和私钥来添加额外的防护层。也就是说,在用户登录之前,前端和后端会在初始化时交换这些公钥。另外,为了后续通信的安全,我们还可以使用公钥对token数据进行加密。2.OAuth令牌盗用如果一个应用程序通过OAuth向其他应用程序提供访问和刷新令牌。那么当其他应用所在的服务器被攻破时,应用本身的认证令牌也有被盗取的风险。上面提到的DockerHub的典型案例就属于这种类型。防止此类攻击的解决方案是采取适当措施及时检测被盗的刷新令牌,并仅使用短期访问令牌类型。3.XSS攻击在XSS中,攻击者可以将Javascript恶意注入到受害者的浏览器中,并在各种应用程序中运行。此类注入的代码会读取身份验证令牌并将其传回给攻击者。如果您想了解有关XSS攻击的更多信息,请参阅--https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)。我们可以通过使用HttpOnly或各种安全cookie来存储身份验证令牌来轻松防御此类攻击。但是,值得注意的是:不要使用localStorage来存储身份验证令牌,因为它们将被Javascript访问。4.此类CSRF攻击的目的不是窃取身份验证令牌,而是允许攻击者跟踪(搭载)现有的活动会话。为了防止CSRF攻击,我们通常需要使用抗CSRF令牌或SameSitecookie。当然,您也可以通过其他方式与整个认证流程无缝结合来解决此类问题。5.数据库/文件系统访问如果攻击者获得了有效的认证令牌,或者JWT/SSL私钥(盗取此类密钥往往比盗取密码更糟糕),他们就可以设法通过数据库注入攻击,访问服务器,甚至是数据库和文件系统管理的信息。由此,他们将能够轻松劫持会话,造成严重的安全后果。值得注意的是,攻击者很可能是你组织内部的员工,所以我们在对数据库/服务器实施访问控制时需要注意以下两个方面:只将刷新和访问令牌的哈希值存储在数据库,以防止攻击者劫持任何实时会话。由于JWT要求将私钥存储在服务器上,一旦攻击者获得私钥,他们将能够劫持当前以及未来的会话。为了限制攻击面,我们需要修改用于发布JWT的私钥,以便立即使所有当前JWT失效。由于refreshtoken会被用来生成一个用新私钥签名的JWT,所以这种更改私钥的方式不会影响用户体验。6.会话固定这种类型的攻击“主要”是web应用中的匿名会话,最好的应对方式是让用户每次登录时都生成一组新的认证令牌,并使旧令牌(如果有的话)及时到期。请注意,这是在逐个设备的基础上实现的,而不是逐个用户的基础。7.蛮力攻击拥有足够资源的攻击者通常会一直“猜测”身份验证令牌,直到其中一次尝试成功为止。据此,他们将获得被盗令牌授予的所有访问权限。防御此类攻击的最佳方法是使用具有高熵和长位的身份验证令牌。总结通过以上分析,我们了解了会话管理的基本概念、常见的会话安全漏洞、各种攻击类型以及应对措施的最佳实践。希望本文能对您在系统架构设计和安全管理实践中有所帮助。原标题:关于用户会话安全你需要知道的一切,作者:Supertokens.io