授权计算机访问Web应用程序

时间:2012-06-12 03:59:55

标签: authentication security hmac one-time-password

我有一个网络应用程序,我的任务是添加安全登录以增强安全性,类似于Google添加到Google帐户的内容。

使用案例

基本上,当用户登录时,我们想要检测用户是否先前已授权此计算机。如果计算机未经授权,则向用户发送他们必须输入的一次性密码(通过电子邮件,短信或电话),用户可以选择记住该计算机。在Web应用程序中,我们将跟踪授权设备,允许用户查看他们最后从该设备登录的时间/位置,并在他们选择的情况下取消对任何设备的授权。

我们需要一种非常轻便的解决方案(意思是,无需安装客户端软件),并且可以与Safari,Chrome,Firefox和IE 7+一起使用(不幸的是)。我们将提供x509安全性,提供足够的安全性,但我们仍然需要一个不能或不会使用x509的客户的解决方案。

我的目的是使用Cookie存储授权信息(或者,可能使用本地存储,降级为Flash Cookie,然后使用普通Cookie)。

乍一看

Initial secure sign-on sequence diagram 跟踪两个单独的值(本地数据或cookie):表示安全登录令牌的哈希,以及设备令牌。这两个值都由Web应用程序驱动(并记录),并由客户端决定。 SSO令牌取决于设备以及序列号。这有效地允许设备被取消(所有SSO令牌变得无效)并通过使用序列号减轻重放(但不是有效的,这就是我提出这个问题的原因),并且使用了一个随机数。

问题

使用此解决方案,某人可以只复制SSO和设备令牌并在另一个请求中使用。虽然序列号将帮助我检测到这种滥用并因此取消对设备的授权,但检测和响应只能在有效设备和恶意请求都尝试访问之后发生,这是有足够的时间进行损坏。

我觉得使用HMAC会更好。使用私钥跟踪设备,序列,创建随机数,时间戳和散列,然后将散列加上这些值作为纯文本发送。服务器执行相同操作(除了验证设备和序列)并进行比较。这似乎更容易,更可靠......假设我们可以安全地协商,交换和存储私钥。

问题

那么,我如何安全地为授权设备协商私钥,然后安全地存储该密钥?是否更有可能,至少,如果我决定使用本地存储或闪存cookie存储私钥,只是说它“足够好”?或者,我可以对原始草案做些什么来缓解我描述的漏洞?

2 个答案:

答案 0 :(得分:5)

我怀疑你要求比系统更安全,如上所述,可以提供。简而言之,如果您无法控制客户端,它可以(错误地)以无数(非预期)方式使用SSO和设备令牌,如您所知。无论你如何设计系统的其他部分;这是你系统的致命弱点。

换句话说,在您描述的系统中,您正在任务并信任客户端的Web浏览器以提供其设备令牌和SSO令牌。对?如果是这样,你怎么能阻止这些令牌移动到其他设备? (见下文的缓解策略。)

现在,要正确地回答你的问题:

  

“那么,我如何安全地协商授权的私钥   设备,然后安全地存储该密钥?“

这样做并没有什么坏处,但正如我在上面解释的那样,它没有任何帮助。

  

“至少,如果我决定使用存储私钥,是否更有可能   本地存储或闪存饼干,只是说它“足够好”?

我不能告诉你“足够好”是什么。您应该清楚地传达“移动令牌”攻击并帮助客户做出明智的决定。

  

“或者,我可以对原始草案做些什么来减轻我描述的漏洞?”

肯定有一些缓解策略取决于您的用户安装基础和您对风险的容忍度。

关键问题,正如我所看到的那样 - 考虑那些可能将令牌从一台机器转移到另一台机器的人的技能和能力 - 你的缓解策略能否在不降低系统性能的情况下对这种行为产生重大影响和“诚实”用户的可用性?

以下是一些想法:

  • 您可以使用双因素身份验证,例如RSA SecurID。这不会阻止机器令牌的移动,但它需要TFA随之移动。

  • 您可以尝试模糊或隐藏这些令牌的本地副本,但这似乎只是通过默默无闻的安全性。

  • 您可以检查机器的MAC地址。如果克隆MAC地址比移动设备令牌更困难,这可能是一个有用的安全层。

  • 您可以尝试使用某些“锁定”对这些令牌的访问权限的自定义浏览器。这只是一个想法;我不知道它是否实用。

  • 如果您知道机器本身不应移动,您可以检查网络属性以查找机器位于不同网络位置的证据,从而查找物理位置。

  • 如果查询并存储(在服务器上,而不是客户端上)计算机配置信息,则可以检测令牌是否从具有一个配置的一台计算机移动到具有不同配置的计算机。 (当然,这种方法会在机器升级时抱怨。)

  • 您可能需要安装为Web应用程序提供身份验证API的应用程序,而不是存储本地设备令牌。这个应用程序可以将自己嵌入计算机上的某个地方,这个计算机很难被破解,根除或移动。 (这样,该应用程序将为机器提供“双因素身份验证”系统 。)

  • 与上述想法一致或分开,您可以在设备上安装单独的“手机之家”应用程序。它将不时与您的服务器“签入”。如果它更改网络位置,设备配置或停止响应,您可以相应地拒绝访问。

我希望这会有所帮助。我不认为自己是安全专家,但我喜欢思考设计问题。如果您在https://security.stackexchange.com/

询问,可能会得到更好的回复

答案 1 :(得分:1)

如何捕获计算机的MAC地址并将该信息存储在数据库中呢?如您所知,MAC地址对于所有计算机都是唯一的,与IP地址相对应。

Getting MAC address on a web page using a Java applet

在线查看有几种方法可以通过网页和小程序捕获MAC地址。