我们以 Steam/Google/FB/Microsoft/Twitter 登录为例。
它们都通过短信提供两步验证。假设黑客无法访问我的手机。但是他在某个时间点可以访问我的电脑。
黑客从我的浏览器中提取了我的 cookie(这很容易做到),然后将该 cookie 放入他的浏览器中。
从理论上讲,他可以只使用它来登录服务,而无需经过两步验证过程。
有没有办法检测这种行为或防止这种情况发生?
此外,对于使用上述提供的 OAuth 身份验证的服务提供商,他们可以采取什么措施来检测这种行为?
我们以 Steam/Google/FB/Microsoft/Twitter 登录为例。
它们都通过短信提供两步验证。假设黑客无法访问我的手机。但是他在某个时间点可以访问我的电脑。
黑客从我的浏览器中提取了我的 cookie(这很容易做到),然后将该 cookie 放入他的浏览器中。
从理论上讲,他可以只使用它来登录服务,而无需经过两步验证过程。
有没有办法检测这种行为或防止这种情况发生?
此外,对于使用上述提供的 OAuth 身份验证的服务提供商,他们可以采取什么措施来检测这种行为?
马修的答案绝对是正确的答案,但我想我会跟进更多细节:
基于 cookie 的身份验证有一个很大的弱点 - cookie 是您进行身份验证所需的全部。如果有人能够窃取用户的 cookie,则 cookie 身份验证过程中没有任何内容可以让服务器知道恶作剧发生了。您使用了攻击者对计算机进行物理访问的示例,但这种情况很少见。带有不安全 cookie 的站点上的 XSS 漏洞是 cookie 被盗的一种更为常见的方式。同样常见的还有:会话固定攻击、对不使用 https 的站点的不安全无线网络上的数据包嗅探,以及各种其他形式的 MITM 攻击。需要明确的是,这不仅仅是基于 cookie 的身份验证的问题。根本的问题是 HTTP 是一个无状态协议,这意味着如果你可以完全重放之前的请求,那么服务器就没有办法(烘焙到 HTTP 中)知道你不是同一个人。
那么服务如何确保与他们交谈的人是他们真正想交谈的人呢?答案不一定是直截了当的。正如 Matthew 所提到的,您必须以其他方式监控您的访问凭据:IP 地址更改、浏览器更改、用户代理更改等......本质上,您跟踪与您正在与之交谈的设备相关的元数据并密切关注任何可疑的变化。
正如您在评论中指出的那样,即使这也不是万无一失的。人们显然可以伪造用户代理。这可能会通过使用设备指纹识别技术来解决(设备指纹识别和大规模计算机监控)) 攻击者对其的控制要少得多。IP 地址不是固定的,尤其是对于移动运营商而言,但只要每台设备都有自己的 cookie,即使这也有可能被跟踪和解释。如果给定的 cookie 已与同一个 IP 地址关联 6 个月,并且突然出现在另一个国家/地区,那么您可能遇到了问题。如果设备经常更改 IP 地址(例如电话),但现在显示的 IP 地址与移动运营商或其通常的地理区域无关,那么您可能遇到了问题。要记住的另一件事是,每个设备都应该有一个唯一的 cookie。因此,即使与Cookie相关联的IP地址通常变化,如果你正在接受来自两个不同的IP地址,从该cookie的请求在同一时间,你可能有问题。
最后,如果它们看起来有问题,最简单的修复方法是简单地使所有 cookie 无效(也就是注销用户)。合法用户只是有点不便——他们只需要重新登录。攻击者虽然失去了所有访问权限,但必须重新开始。
带走
从上面的讨论中应该有几个明显的收获:
那么,大人物们如何最大限度地减少人们带着证书离开所造成的潜在损害呢? 简短的回答:深度防御。 在应用程序的所有层保护访问凭证,使用访问凭证监控来自客户端的元数据,如果有疑问,将其注销。
基本方法是定期更改 cookie - 使从您的计算机获取 cookie 的攻击者只有有限的有效期限。即使会话保持打开的时间更长,您也可以更定期地更换与会话关联的 cookie。
为了检测这种类型的滥用,服务还可以提供与 IP 地址/设备类型/等相关联的活动会话列表。这允许用户查看是否打开了意外会话,并关闭这些会话。
为应用程序中的每个重要操作要求第二个因素也是一个好主意(正如评论中提到的@Xavier59) - 这些可能是更改密码、更改关联的电子邮件地址或尝试关闭 2FA。