SSO实施中的潜在安全问题是什么?

时间:2010-02-05 00:58:50

标签: asp.net security authentication single-sign-on

我目前正在研究跨域SSO实施,我可能无法使用第三方SSO提供商。

我在网上找到了一个自定义实现,涉及一系列重定向和一个加密的查询字符串参数。

  1. MrUser登录http://www.foo.com

  2. MrUser点击指向http://www.bar.com/page.aspx

  3. 的链接
  4. MrUser没有被认证上bar.com,但bar.com具有重定向到认证码http://www.foo.com/sso.aspx

  5. sso.aspx页面检查cookie集合中的有效ASP.NET身份验证cookie。如果它存在,sso.aspx重定向到http://www.bar.com/page.aspx&ssoauth=[encryptedkey](其中[encryptedkey]是MrUser的是foo.com和bar.com已商定加密ID)。如果没有有效的ASP.NET身份验证cookie,那么它只会在没有ssoauth参数的情况下重定向。

  6. Bar.com会检查以避免无限重定向循环,然后解密ssoauth值。如果没有ssoauth参数,然后MrUser被重定向到登录页面,否则Bar.com使用经解密的ID发送他之前page.aspx验证MrUser。

  7. 使用此方法有哪些潜在的安全问题(或其他类型的问题)?

    (引用:http://blogs.neudesic.com/blogs/michael_morozov/archive/2006/03/17/72.aspx

    修改:为响应答案援引加密ID是一样的,每次和一个攻击者可以使用它来访问 - 如果有什么bar.com检查引荐,使其只从foo.com接受ssoauth参数?

4 个答案:

答案 0 :(得分:2)

第一个问题是任何加密/解密方案都可以在明显可见时找出。您最好在PKI加密/解密平台上实现更多内容,其中加密密钥是公共的,但解密密钥是私有的。加密需要适当复杂,以增加“破解时间”,并且需要资源来执行密钥的加密/解密。

您拥有非公共域的事实将需要在标头中提供加密的部分(post或get),并以纯文本形式传递。虽然查询字符串信息在请求的生命周期内保持安全(编辑:假设为SSL),但它对浏览器历史记录(使其可供常用计算机访问)并不安全。

最严重的安全问题是“破解一切/破解所有”的概念。如果其中一台服务器遭到入侵,其加密/解密算法,盐等暴露出来,攻击者可能会通过随意生成有效的加密SSO密钥来破坏所有系统。

这些问题都不是非常悲惨的。我不会在银行或医疗机构实施这个计划,但对于像SO或Twitter这样的低风险网站来说,这是完全可以接受的。这一切都归结为管理资源,风险和收益。

答案 1 :(得分:2)

任何人都可以使用encryptedKey作为MrUser获取访问权限。不需要加密,而是需要签名或消息认证服务。经过身份验证的消息应包含带有用户标识符的随机数以防止重放。

这样的协议很难设计。即使是多年来被广泛使用和审查的TLS也存在安全漏洞。不要尝试使用未经验证的身份验证机制。

答案 2 :(得分:1)

一个潜在的问题是,如果ssoauth加密密钥只是用户的加密ID。这样的设置将导致每次提供相同的密钥,因此可以由原始用户重复使用,或者由第三方重复使用。

避免这种情况的一种方法是保持foo.com和bar.com服务器的时钟相对同步,并发出包含日期/时间(模5分钟)的密钥。

人们经常试图使用Web客户端的IP地址作为此加密的元素之一,但这是一个坏主意,因为几个代理和网关在其池中使用不同的公共IP来访问不同的域/服务器。 / p>

每次允许使用不同密码的另一种方法是将bar.com重定向到

http://www.foo.com/sso.aspx

包含参数,例如

http://www.foo.com/sso.aspx?ParamForKey=some_random_number

并将ParamForKey用作加密过程的一部分

答案 3 :(得分:0)

有几个问题: 1)加密令牌有效多长时间?它应该只对几个有效。如果所有服务器都在ntp上,则很容易。到期还可以保护用户,以防他们拥有包含加密令牌的链接。如果您有许多bar.com服务器,则验证nonce很困难 - 您可以说有几秒钟的到期时间可以减轻重播次数。

2)SSO跨域问题是单点注销。如果用户注销foo.com会怎么样?必须使bar.com上的会话无效。您可以将XSRF bar.com注销作为黑客:)。您应该每隔15分钟使用bar.com beacon foo.com查看用户是否仍然登录。

3)如果用户没有注销bar.com并且它是多用户计算机而另一个用户登录foo.com会怎么样?如果用户标识不匹配,则必须确保不显示先前用户的数据。

4)正如其他人提到的,你可能想要在userid上签名或使用HMAC而不是加密。如果您进行加密,请记住保护密文的完整性。您不希望用户A在密文中翻转位以查看他们是否可以在bar.com上访问用户B的数据。

我会通过https进行重定向。

最后,正如大家所说,推荐人可能会被欺骗。不要相信他们。