博客

Coders Conquer Security OWASP Top 10 API Series - 破碎的认证

马蒂亚斯-马杜博士
发表于2020年9月16日

难怪破损的认证被列入OWASP的API问题名单--认证机制是出了名的难以正确实施。另外,攻击者也有一点优势,因为就其本质而言,大多数认证挑战必须暴露给用户,让攻击者有机会研究它们,寻找他们可以利用的模式或漏洞。

最后,由于认证经常作为应用程序和潜在的网络其他部分的网关,它们是攻击者的诱人目标。如果一个认证过程被破坏或有漏洞,攻击者很有可能会发现这个弱点并加以利用。

因此,在本章中,我们将学习如何在涉及到认证问题时将坏人拒之门外。如果你想先测试一下你的技能,可以去玩我们的游戏化挑战。

想提高你的分数吗?请跟着我,我们来分析一下。

破损或配置错误的认证有哪些例子?

一个问题可能不那么明显的例子是,当一个认证方法容易受到凭证填充的影响,或者使用已知的用户名和密码列表来破坏安全。即使是通常非常安全的授权方法,如多因素认证,如果不对请求进行限制、节制或其他监控,也可能会受到攻击。

例如,攻击者可以通过向/发送POST请求来触发密码恢复请求。api/system/verification-codes并在请求正文中提供一个用户名,从而触发密码恢复请求。如果一个应用程序使用短信挑战,将六位数的代码发送到用户的手机上,但输入字段没有限制,那么该应用程序可以在短短几分钟内被攻破。攻击者只需向应用程序发送每一个可能的六位数组合,直到他们找到正确的组合。

在这种情况下,从表面上看,拥有双因素认证似乎可以保证应用程序的安全。但由于用户的输入没有速率限制,认证就被破坏了,很容易受到攻击。

在另一个例子中,一个应用程序可能使用编码的用户对象作为认证cookie。但是,如果一个有低级用户权限的攻击者使用Base64解码该cookie,他们可以发现该cookie如何定义会话和用户到应用程序。例如,他们可能会看到下面的JSON,一旦被解码。

{
"username" : "ShadyGuy",
"role" : "user"
{

在这一点上,恶意用户可以改变他们的用户名、角色或两者。他们可以通过改变几个值而成为另一个具有更高权限级别的用户。

{
"username" : "GoodGuy",
"role" : "admin"
{

在这一点上,如果攻击者重新编码信息并将其设置为cookie值,他们基本上就会成为具有更高权限级别的新用户。除非有办法防止这样的改变,否则应用程序很有可能会接受这种转变。

消除破损或错误配置的认证方式

如果认证失败,很有可能整个系统的安全就会受到影响。但是,在对应用程序进行编码时,遵循一些重要的准则可以帮助保持一切安全。

首先,一定要在允许用户访问程序功能的所有地方包括认证检查。如果认证检查根本不存在,那么这场战斗从一开始就已经输了。

在最佳实践方面,要记住的一件好事是避免在用户可访问的URL中暴露会话ID。在上面第二个关于破解认证的例子中,如果会话cookie从未暴露给攻击者,那么防止攻击者试图解码会话cookie就容易得多。

实施多因素认证也是一个好主意。这可以通过使用硬件令牌来安全地完成,这些令牌可以在严格的时间表上通过算法生成密码。如果你不能为你的用户提供这样的设备,短信也可以发挥作用。但你需要确保用户的请求被限制在合理的范围内,比如在30秒内尝试三次或四次,而且代码在几分钟后就会全部失效。使用字母数字代码也可以通过在潜在的密码中加入字母和数字来提高安全性。

最后,如果可能的话,避免依赖用户名或可预测的顺序值作为会话ID。相反,使用一个安全的服务器端会话管理器,每次生成一个随机会话ID。

实施安全的认证方法比打击一般的漏洞要棘手一些。但是,由于授权对每个应用程序、程序和API都非常重要,所以值得花额外的时间来确保你得到它。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。


查看资源
查看资源

认证通常作为一个应用程序和潜在的网络其他部分的网关,所以它们是攻击者的诱人目标。如果一个认证过程被破坏或有漏洞,攻击者很有可能会发现这个弱点并加以利用。

想了解更多信息?

Matias Madou, Ph.D.是一位安全专家、研究员和CTO,也是Secure Code Warrior 的联合创始人。Matias在根特大学获得了应用安全的博士学位,主要研究静态分析解决方案。后来他加入了美国的Fortify公司,在那里他意识到,仅仅检测代码问题而不帮助开发人员编写安全代码是不够的。这激发了他开发产品的热情,帮助开发人员,减轻安全的负担,并超越客户的期望。当他不在办公桌前作为Awesome团队的一员时,他喜欢站在舞台上,在包括RSA会议、BlackHat和DefCon等会议上发表演讲。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示
分享到
作者
马蒂亚斯-马杜博士
发表于2020年9月16日

Matias Madou, Ph.D.是一位安全专家、研究员和CTO,也是Secure Code Warrior 的联合创始人。Matias在根特大学获得了应用安全的博士学位,主要研究静态分析解决方案。后来他加入了美国的Fortify公司,在那里他意识到,仅仅检测代码问题而不帮助开发人员编写安全代码是不够的。这激发了他开发产品的热情,帮助开发人员,减轻安全的负担,并超越客户的期望。当他不在办公桌前作为Awesome团队的一员时,他喜欢站在舞台上,在包括RSA会议、BlackHat和DefCon等会议上发表演讲。

马蒂亚斯是一名研究员和开发人员,拥有超过15年的软件安全实践经验。他曾为Fortify Software和他自己的公司Sensei Security等公司开发解决方案。在他的职业生涯中,马蒂亚斯领导了多个应用安全研究项目,并将其转化为商业产品,他拥有超过10项专利。当他离开办公桌时,Matias曾担任高级应用安全培训courses ,并定期在全球会议上发言,包括RSA会议、黑帽、DefCon、BSIMM、OWASP AppSec和BruCon。

马蒂亚斯拥有根特大学的计算机工程博士学位,在那里他研究了通过程序混淆来隐藏应用程序的内部工作的应用安全。

分享到

难怪破损的认证被列入OWASP的API问题名单--认证机制是出了名的难以正确实施。另外,攻击者也有一点优势,因为就其本质而言,大多数认证挑战必须暴露给用户,让攻击者有机会研究它们,寻找他们可以利用的模式或漏洞。

最后,由于认证经常作为应用程序和潜在的网络其他部分的网关,它们是攻击者的诱人目标。如果一个认证过程被破坏或有漏洞,攻击者很有可能会发现这个弱点并加以利用。

因此,在本章中,我们将学习如何在涉及到认证问题时将坏人拒之门外。如果你想先测试一下你的技能,可以去玩我们的游戏化挑战。

想提高你的分数吗?请跟着我,我们来分析一下。

破损或配置错误的认证有哪些例子?

一个问题可能不那么明显的例子是,当一个认证方法容易受到凭证填充的影响,或者使用已知的用户名和密码列表来破坏安全。即使是通常非常安全的授权方法,如多因素认证,如果不对请求进行限制、节制或其他监控,也可能会受到攻击。

例如,攻击者可以通过向/发送POST请求来触发密码恢复请求。api/system/verification-codes并在请求正文中提供一个用户名,从而触发密码恢复请求。如果一个应用程序使用短信挑战,将六位数的代码发送到用户的手机上,但输入字段没有限制,那么该应用程序可以在短短几分钟内被攻破。攻击者只需向应用程序发送每一个可能的六位数组合,直到他们找到正确的组合。

在这种情况下,从表面上看,拥有双因素认证似乎可以保证应用程序的安全。但由于用户的输入没有速率限制,认证就被破坏了,很容易受到攻击。

在另一个例子中,一个应用程序可能使用编码的用户对象作为认证cookie。但是,如果一个有低级用户权限的攻击者使用Base64解码该cookie,他们可以发现该cookie如何定义会话和用户到应用程序。例如,他们可能会看到下面的JSON,一旦被解码。

{
"username" : "ShadyGuy",
"role" : "user"
{

在这一点上,恶意用户可以改变他们的用户名、角色或两者。他们可以通过改变几个值而成为另一个具有更高权限级别的用户。

{
"username" : "GoodGuy",
"role" : "admin"
{

在这一点上,如果攻击者重新编码信息并将其设置为cookie值,他们基本上就会成为具有更高权限级别的新用户。除非有办法防止这样的改变,否则应用程序很有可能会接受这种转变。

消除破损或错误配置的认证方式

如果认证失败,很有可能整个系统的安全就会受到影响。但是,在对应用程序进行编码时,遵循一些重要的准则可以帮助保持一切安全。

首先,一定要在允许用户访问程序功能的所有地方包括认证检查。如果认证检查根本不存在,那么这场战斗从一开始就已经输了。

在最佳实践方面,要记住的一件好事是避免在用户可访问的URL中暴露会话ID。在上面第二个关于破解认证的例子中,如果会话cookie从未暴露给攻击者,那么防止攻击者试图解码会话cookie就容易得多。

实施多因素认证也是一个好主意。这可以通过使用硬件令牌来安全地完成,这些令牌可以在严格的时间表上通过算法生成密码。如果你不能为你的用户提供这样的设备,短信也可以发挥作用。但你需要确保用户的请求被限制在合理的范围内,比如在30秒内尝试三次或四次,而且代码在几分钟后就会全部失效。使用字母数字代码也可以通过在潜在的密码中加入字母和数字来提高安全性。

最后,如果可能的话,避免依赖用户名或可预测的顺序值作为会话ID。相反,使用一个安全的服务器端会话管理器,每次生成一个随机会话ID。

实施安全的认证方法比打击一般的漏洞要棘手一些。但是,由于授权对每个应用程序、程序和API都非常重要,所以值得花额外的时间来确保你得到它。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。


查看资源
查看资源

请填写下表下载报告

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。

难怪破损的认证被列入OWASP的API问题名单--认证机制是出了名的难以正确实施。另外,攻击者也有一点优势,因为就其本质而言,大多数认证挑战必须暴露给用户,让攻击者有机会研究它们,寻找他们可以利用的模式或漏洞。

最后,由于认证经常作为应用程序和潜在的网络其他部分的网关,它们是攻击者的诱人目标。如果一个认证过程被破坏或有漏洞,攻击者很有可能会发现这个弱点并加以利用。

因此,在本章中,我们将学习如何在涉及到认证问题时将坏人拒之门外。如果你想先测试一下你的技能,可以去玩我们的游戏化挑战。

想提高你的分数吗?请跟着我,我们来分析一下。

破损或配置错误的认证有哪些例子?

一个问题可能不那么明显的例子是,当一个认证方法容易受到凭证填充的影响,或者使用已知的用户名和密码列表来破坏安全。即使是通常非常安全的授权方法,如多因素认证,如果不对请求进行限制、节制或其他监控,也可能会受到攻击。

例如,攻击者可以通过向/发送POST请求来触发密码恢复请求。api/system/verification-codes并在请求正文中提供一个用户名,从而触发密码恢复请求。如果一个应用程序使用短信挑战,将六位数的代码发送到用户的手机上,但输入字段没有限制,那么该应用程序可以在短短几分钟内被攻破。攻击者只需向应用程序发送每一个可能的六位数组合,直到他们找到正确的组合。

在这种情况下,从表面上看,拥有双因素认证似乎可以保证应用程序的安全。但由于用户的输入没有速率限制,认证就被破坏了,很容易受到攻击。

在另一个例子中,一个应用程序可能使用编码的用户对象作为认证cookie。但是,如果一个有低级用户权限的攻击者使用Base64解码该cookie,他们可以发现该cookie如何定义会话和用户到应用程序。例如,他们可能会看到下面的JSON,一旦被解码。

{
"username" : "ShadyGuy",
"role" : "user"
{

在这一点上,恶意用户可以改变他们的用户名、角色或两者。他们可以通过改变几个值而成为另一个具有更高权限级别的用户。

{
"username" : "GoodGuy",
"role" : "admin"
{

在这一点上,如果攻击者重新编码信息并将其设置为cookie值,他们基本上就会成为具有更高权限级别的新用户。除非有办法防止这样的改变,否则应用程序很有可能会接受这种转变。

消除破损或错误配置的认证方式

如果认证失败,很有可能整个系统的安全就会受到影响。但是,在对应用程序进行编码时,遵循一些重要的准则可以帮助保持一切安全。

首先,一定要在允许用户访问程序功能的所有地方包括认证检查。如果认证检查根本不存在,那么这场战斗从一开始就已经输了。

在最佳实践方面,要记住的一件好事是避免在用户可访问的URL中暴露会话ID。在上面第二个关于破解认证的例子中,如果会话cookie从未暴露给攻击者,那么防止攻击者试图解码会话cookie就容易得多。

实施多因素认证也是一个好主意。这可以通过使用硬件令牌来安全地完成,这些令牌可以在严格的时间表上通过算法生成密码。如果你不能为你的用户提供这样的设备,短信也可以发挥作用。但你需要确保用户的请求被限制在合理的范围内,比如在30秒内尝试三次或四次,而且代码在几分钟后就会全部失效。使用字母数字代码也可以通过在潜在的密码中加入字母和数字来提高安全性。

最后,如果可能的话,避免依赖用户名或可预测的顺序值作为会话ID。相反,使用一个安全的服务器端会话管理器,每次生成一个随机会话ID。

实施安全的认证方法比打击一般的漏洞要棘手一些。但是,由于授权对每个应用程序、程序和API都非常重要,所以值得花额外的时间来确保你得到它。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。


访问资源

点击下面的链接,下载本资料的 PDF 文件。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

查看报告预定一个演示
下载PDF
查看资源
分享到
想了解更多信息?

分享到
作者
马蒂亚斯-马杜博士
发表于2020年9月16日

Matias Madou, Ph.D.是一位安全专家、研究员和CTO,也是Secure Code Warrior 的联合创始人。Matias在根特大学获得了应用安全的博士学位,主要研究静态分析解决方案。后来他加入了美国的Fortify公司,在那里他意识到,仅仅检测代码问题而不帮助开发人员编写安全代码是不够的。这激发了他开发产品的热情,帮助开发人员,减轻安全的负担,并超越客户的期望。当他不在办公桌前作为Awesome团队的一员时,他喜欢站在舞台上,在包括RSA会议、BlackHat和DefCon等会议上发表演讲。

马蒂亚斯是一名研究员和开发人员,拥有超过15年的软件安全实践经验。他曾为Fortify Software和他自己的公司Sensei Security等公司开发解决方案。在他的职业生涯中,马蒂亚斯领导了多个应用安全研究项目,并将其转化为商业产品,他拥有超过10项专利。当他离开办公桌时,Matias曾担任高级应用安全培训courses ,并定期在全球会议上发言,包括RSA会议、黑帽、DefCon、BSIMM、OWASP AppSec和BruCon。

马蒂亚斯拥有根特大学的计算机工程博士学位,在那里他研究了通过程序混淆来隐藏应用程序的内部工作的应用安全。

分享到

难怪破损的认证被列入OWASP的API问题名单--认证机制是出了名的难以正确实施。另外,攻击者也有一点优势,因为就其本质而言,大多数认证挑战必须暴露给用户,让攻击者有机会研究它们,寻找他们可以利用的模式或漏洞。

最后,由于认证经常作为应用程序和潜在的网络其他部分的网关,它们是攻击者的诱人目标。如果一个认证过程被破坏或有漏洞,攻击者很有可能会发现这个弱点并加以利用。

因此,在本章中,我们将学习如何在涉及到认证问题时将坏人拒之门外。如果你想先测试一下你的技能,可以去玩我们的游戏化挑战。

想提高你的分数吗?请跟着我,我们来分析一下。

破损或配置错误的认证有哪些例子?

一个问题可能不那么明显的例子是,当一个认证方法容易受到凭证填充的影响,或者使用已知的用户名和密码列表来破坏安全。即使是通常非常安全的授权方法,如多因素认证,如果不对请求进行限制、节制或其他监控,也可能会受到攻击。

例如,攻击者可以通过向/发送POST请求来触发密码恢复请求。api/system/verification-codes并在请求正文中提供一个用户名,从而触发密码恢复请求。如果一个应用程序使用短信挑战,将六位数的代码发送到用户的手机上,但输入字段没有限制,那么该应用程序可以在短短几分钟内被攻破。攻击者只需向应用程序发送每一个可能的六位数组合,直到他们找到正确的组合。

在这种情况下,从表面上看,拥有双因素认证似乎可以保证应用程序的安全。但由于用户的输入没有速率限制,认证就被破坏了,很容易受到攻击。

在另一个例子中,一个应用程序可能使用编码的用户对象作为认证cookie。但是,如果一个有低级用户权限的攻击者使用Base64解码该cookie,他们可以发现该cookie如何定义会话和用户到应用程序。例如,他们可能会看到下面的JSON,一旦被解码。

{
"username" : "ShadyGuy",
"role" : "user"
{

在这一点上,恶意用户可以改变他们的用户名、角色或两者。他们可以通过改变几个值而成为另一个具有更高权限级别的用户。

{
"username" : "GoodGuy",
"role" : "admin"
{

在这一点上,如果攻击者重新编码信息并将其设置为cookie值,他们基本上就会成为具有更高权限级别的新用户。除非有办法防止这样的改变,否则应用程序很有可能会接受这种转变。

消除破损或错误配置的认证方式

如果认证失败,很有可能整个系统的安全就会受到影响。但是,在对应用程序进行编码时,遵循一些重要的准则可以帮助保持一切安全。

首先,一定要在允许用户访问程序功能的所有地方包括认证检查。如果认证检查根本不存在,那么这场战斗从一开始就已经输了。

在最佳实践方面,要记住的一件好事是避免在用户可访问的URL中暴露会话ID。在上面第二个关于破解认证的例子中,如果会话cookie从未暴露给攻击者,那么防止攻击者试图解码会话cookie就容易得多。

实施多因素认证也是一个好主意。这可以通过使用硬件令牌来安全地完成,这些令牌可以在严格的时间表上通过算法生成密码。如果你不能为你的用户提供这样的设备,短信也可以发挥作用。但你需要确保用户的请求被限制在合理的范围内,比如在30秒内尝试三次或四次,而且代码在几分钟后就会全部失效。使用字母数字代码也可以通过在潜在的密码中加入字母和数字来提高安全性。

最后,如果可能的话,避免依赖用户名或可预测的顺序值作为会话ID。相反,使用一个安全的服务器端会话管理器,每次生成一个随机会话ID。

实施安全的认证方法比打击一般的漏洞要棘手一些。但是,由于授权对每个应用程序、程序和API都非常重要,所以值得花额外的时间来确保你得到它。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。


目录

下载PDF
查看资源
想了解更多信息?

Matias Madou, Ph.D.是一位安全专家、研究员和CTO,也是Secure Code Warrior 的联合创始人。Matias在根特大学获得了应用安全的博士学位,主要研究静态分析解决方案。后来他加入了美国的Fortify公司,在那里他意识到,仅仅检测代码问题而不帮助开发人员编写安全代码是不够的。这激发了他开发产品的热情,帮助开发人员,减轻安全的负担,并超越客户的期望。当他不在办公桌前作为Awesome团队的一员时,他喜欢站在舞台上,在包括RSA会议、BlackHat和DefCon等会议上发表演讲。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示下载
分享到
资源中心
资源中心