2018年9月28日上午9点41分,Facebook在其新闻官网(https://newsroom.fb.com )上发文表示:该公司发现了一个安全漏洞,黑客可利用这个漏洞来获取信息,可能导致近5000万客户信息的泄露。
在这篇新闻稿中,FB产品管理副总裁盖·罗森 (Guy Rosen) 撰文表示:
1、技术团队在9月25日下午发现了这个漏洞。
2、此安全漏洞是2017年7月份出现的,在2018年9月25日被识别、并于9月27日被侦测到。
3、目前 FB 基本确定,已经有黑客利用这个漏洞发动攻击。
4、9月27日早间,大约有5000万个Facebook账户受到攻击。
5、在问题发现后,FB对受影响的5000万客户的访问信息进行了重置。
6、除了受影响的5000万客户外,FB还对另外4000万客户同样做了同样的重置操作。总计影响客户9000万。
7、Facebook在9.26晚上称其已经修复了这个漏洞,并已通知美国联邦调查局(FBI)和爱尔兰数据保护委员会(Irish Data Protection Commission)等执法机关。
在披露这一消息之前,Facebook股价已经下跌了1.5%左右,消息传出后进一步走低,到收盘时下跌2.59%报164.46美元,盘中一度触及162.56美元的低点。
漏洞介绍
这个安全漏洞存在于 Facebook 的“View As”功能的代码中。
因为 FB 的隐私设置极为繁琐,客户经常不知道别人看得见、看不见自己发布的某些信息。
View As 这个功能可以让客户以第三人称观看自己的账户,确认隐私设置能否符合自己要求。
FB 透露,利用这个漏洞黑客窃取了客户的“访问令牌”(access token)。
访问令牌的作用是为客户保存密码,这样客户就不用每次登陆都输一次密码验证身份。
获得令牌后,黑客可以黑进别人的账户,看到设置为不对外公开的帖文和信息。
作为应对,FB 对受到漏洞影响的5000万客户以及可能成为进一步攻击目标的另外4000万客户,进行了访问令牌重设。
什么是access token
通过官方给出的资料,我们无法确认黑客利用的漏洞中的access token究竟是如何使用和泄露的。
不过我们可以拿OAuth2来详情一下access token的作用和如何保证安全。
OAuth 2 是一种受权框架,允许第三方应用通过客户受权的形式访问服务中的客户信息,最常见的场景是受权登录;再复杂一点的比方第三方应用通过 Github 给开发者提供的接口访问权限内的客户信息或者仓库信息。OAuth2 广泛应用于 web 、桌面应用、移动 APP 的第三方服务提供了受权验证机制,以此实现不同应用间的数据访问权限。
OAuth2中最典型的Authorization Code 受权模式,其大致流程如下:
我们把OAuth2的整个认证过程大致分为三个阶段。
第一阶段主要是向客户获得受权许可,对应图中的第1、2步;
第二阶段主要是申请访问令牌(access_token),对应图中的第3、4步;
第三阶段就是使用access_token获取客户数据,对应图中的第5、6步。这一过程中涉及了不少敏感参数和数据,access_token某种程度上来讲就是客户的session id。
也就是说,整个认证过程中,一旦黑客获取到了access_token,即便他不知道你的客户名和密码,也可以访问到你的客户数据。
OAuth2究竟安不安全
可以这么说,OAuth2协议本身是相对安全的,至少比纯客户名、密码形式的登录要安全的多。
假如发生像FB那样的access token泄露问题的话,至少密码是没有泄露的,只需网站重置客户的access token,那么之前的旧的access token就会失效。这种情况,要比客户名和密码泄露影响会小少量。
但是,因为OAuth引入的漏洞也很多,大多是由于使用不当导致的。乌云曾披露过很多很多因为OAuth实施不正确导致的网站漏洞:
CSRF劫持第三方账号
WooYun:大麦网存在账号被劫持风险
WooYun:美丽说oauth漏洞可劫持账号
对参数没有进行验证泄露code
WooYun:腾讯微博开放平台openid、openkey截取
WooYun:搜狐微博OAuth2.0获取Authorization Code过程隐患
重放攻击
Inwatch-InHealth用户端接口若干安全bug打包
应用冒充,获取token控制客户账户
@囧虎张建伟,新浪微博Android用户端SSO受权认证缺陷
WooYun:腾讯开放平台单点登录SSO方案设计缺陷导致钓鱼风险
直接用平台方客户名和密码获取access token
WooYun:开心网android用户端暴力破解漏洞,测试2000帐号,成功132个
315晚会:安卓系统手机应用软件严重窃取客户资料
关于OAuth2的具体安全防范这里就不开展了。感兴趣的朋友可以自行Google。或者者我后面单独出一篇文章深入分析一下。
欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)正当利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!