漏洞OAuth |如何在Web应用程序中实施安全授权

Anonim
漏洞OAuth |如何在Web应用程序中实施安全授权 2740_1

本文将处理众所周知的OAuth漏洞。读者还将学习如何在Web应用程序中实现安全和安全的授权。

OAuth是一种可靠的协议,但其安全程度主要取决于实施授权时的Web开发人员的认识。这使得这一主题对于信息安全专业人士来说非常重要。他们需要提供高度的对用户帐户保护。现在是时候熟悉有效的从业者,他们将有助于减少销售OAuth的穷人的危险。

介绍

OAuth 2.0协议目前广泛用于各种应用程序。使用它,与输入用户名和密码的传统方法相比,可用的方便用户界面,更容易认证和授权。通过适当和深思熟虑的实现,OAuth协议将比传统授权更安全,因为用户不需要使用第三方应用程序与第三方应用程序共享他们的会计数据来访问特定资源。用户通常更愿意使用他们的Google帐户,Facebook或LinkedIn登录,而不是每次需要在某些网站上注册时创建新帐户。因此,OAuth协议大大简化了我们的生活。

通常,流行的OAuth服务提供商非常可靠。使用Google或Facebook帐户登录激发了一定的安全感,它是正确的。专家仔细测试了该协议。开发人员始终始终快速纠正所有可用的漏洞。但是,值得注意的是,完全安全的感觉可能是假的。

OAuth服务提供商留下了应用程序开发人员有很多原因,以应对其计划的安全。事实上,最初受保护的OAuth服务在其安装过程中不正确地实现,可以成为入侵者的简单目标。此类预科,将导致用户的个人数据盗窃。

接下来,您应该考虑实现OAuth协议的第三方应用程序中遇到的最常见的漏洞,以授权其用户。必须记住,协议本身是安全可靠的。只有在不正确的实施之后,它变得容易受到黑客攻击的影响。

OAuth使用引用标题盗窃盗窃

当应用程序请求代表OAUTH Server的用户授权时,一个人收到代码进入并发送回服务器以进行后续检查。如果在工作期间,用户将重定向到另一个页面,则代码将在HTTP请求的“推荐”标题中看到。因此,代码将落在外部网站上,这将威胁在OAuth服务器上注册的用户数据。

注意:引用标题是一个HTTP查询标题,它传输发送请求的URL主机。

为了软化此漏洞的后果,开发人员必须确保其Web应用程序不包含任何HTML注入。如果检测到注射,则攻击者可以轻松将图像标记设置为其Web服务器,并找到一种方法来重定向用户。因此,他将有机会从HTTP请求的“推荐”标题中窃取代码。

OAuth使用redirect_uri参数盗窃盗窃

该应用程序通过向OAuth Server发送请求来启动授权过程:

https://www.example.com/signin/authorize ?[]&edirect_uri=httpps://demo.example.com/loginsuccessful。

查询始终包含OAuth Server使用的“redirect_uri”参数,以在用户同意后将令牌发送回应用程序。如果未控制或未被检查此参数的值,则攻击者可以轻松更改它并将请求重定向到其网站,在那里它使用特殊程序来处理令牌并获得对有限资源的访问权限。

https://www.example.com/signin/authorize ?[]&edirect_uri=httpps://localhost.evil.com。

有时相似的URL被阻止。攻击者可以将接收的数据重定向打开URL,如下所示:

https://www.example.com/oauth20_authorize.srf ?[.....[&edirect_uri=httpps://accounts.google.com/backtouthsubtarget?next=httpset://evil.com。

或这个:

https://www.example.com/oauth2/authorize?[...]%IRECT_URI = https%3a%2f%2fapps.facebook.com%2fAttacker%2f。

实现OAuth时,您永远不会在白色列表中包含整个域。只有少数URL应该添加到“redirect_uri”未重定向到打开重定向的请求。

伪造跨线请求

当攻击者成功使受害者单击他的链接时,可能会出现intersight请求的伪造,从而生成他不会生成的请求。侧线请求的伪造通常与CSRF令牌软化,CSRF令牌与用户会话相关联。它有助于申请检查发送请求的人的人员。 OAuth协议中的“状态”参数用作CSRF令牌。

值得查看CSRF攻击如何在OAuth上执行,并且可以使用“状态”参数来减轻漏洞的影响。

黑客打开Web应用程序并启动授权过程以使用OAuth访问服务提供商。该应用程序请求服务提供商访问需要提供的访问。黑客将被重定向到服务提供商网站,您通常需要输入您的用户名和密码以授权访问权限。相反,黑客捕获并阻止此请求并保存其URL。黑客以某种方式导致受害者打开此URL。如果受害者使用其帐户进入服务提供商的系统,则其凭据将用于发出授权代码。授权代码交换对访问令牌的访问权限。现在申请中的黑客帐户是授权的。它可以访问受害者的帐户。

那么,如何使用“状态”参数来防止这种情况?

应用程序必须创建一个基于源帐户以某种方式的值(例如,使用用户会话哈希键)。它不是那么重要,主要是,该值是唯一的,并使用有关原始用户的私人信息生成。它被分配给“状态”参数。

重定向时,该值将发送到服务提供商。现在,黑客邀请受害者打开他保留的URL。

授权代码已发出并在会话中发送回客户端以及“状态”参数。

客户端基于会话信息生成参数值,并将其与“状态”值进行比较,从授权请求发送到服务提供商。此值与查询中的“状态”参数不匹配,因为它仅基于关于当前会话的信息生成。结果,系统不接受所获得的值。

在实现OAuth时检测到的其他漏洞包括使用“redirect_uri”参数执行XSS(跨站点脚本)的能力,OAuth私钥设置(有时可以在分解移动应用程序时可以获得键)和授权代码规则违规(何时授权代码可以多次使用以发出多个访问令牌)。这些漏洞不太常见于上述那些,但它不会使它们不那么危险。开发人员应了解所有必要的实践,以确保其Web应用程序的可靠运行。

翻译文章的作者:Simon Saliba。

重要的!信息仅用于学术目的。请遵守立法,不适用此信息以获取非法目的。

Cisoclub.ru上的更有趣的材料。订阅我们:Facebook | VK |推特| Instagram |电报|禅|信使| ICQ新| YouTube |脉冲。

阅读更多