曾经只在高安全的政府和企业中采用的双因子认证(2FA),如今普通人也能在网站和账户身份验证中广泛使用。2FA能够帮助减少被黑的风险,但可别就此以为2FA是绝对安全的。
许多人对2FA提供的安全性过于信任,觉得2FA不可黑、不可战胜,能阻挡所有高级持续性威胁(APT),打败网络钓鱼和社会工程。2FA得到了超出自身能力的过多信任,但实际上,能黑掉2FA的方法少说也有十几种。
1. 中间人攻击
只要中间人攻击者能诱骗用户访问他们的流氓网站并弹出2FA凭证输入页面,用户的2FA防护基本就玩完了。中间人攻击者能伪造用户使用2FA登录的网站,然后诱使用户输入其2FA凭证。更常见的情形,是在用户成功通过2FA验证后攻击者直接盗走所产生的(非2FA)令牌。
大多数人都不知道,2FA验证通过后(无论验证因子是生物特征还是硬件令牌或智能卡),操作系统就以随后产生的软令牌接管了你的访问授权。但该令牌是可被盗走和重用的。举个例子,你的Windows笔记本电脑要求用指纹验证登录。一旦你成功通过指纹验证,操作系统后台往往就开始使用NTLM或Kerberos令牌了。你的身份验证方式通常与你之后被赋予的访问权限毫无关系。想要成为优秀计算机安全人员的人士需要知道这一点,要了解验证方式与所授予权限的无关性,这很重要。
2. 终端中间人攻击
与中间人攻击类似,如果黑客可将其恶意软件植入你的计算机,他们就能修改你2FA验证过程用到的软件,盗取2FA令牌保护下的秘密,或者用你已经通过的验证结果来访问不该访问的东西。
早在本世纪初,银行木马就已经这么干了。这些木马潜伏在主机上,等待用户成功通过身份验证,然后在后台开启隐藏的流氓会话。你以为自己只是简单地查看下账户余额,但在后台,木马已经在将你的所有存款转账到他们的海外账户了。
通过产生与交易数额绑定且特定于该次交易的第二2FA验证码,银行感觉自己已经打败了上述银行木马。但银行木马的创建者们马上改变策略,开始拦截原始交易请求,产生并提交他们自己数额更大的请求,再将该请求发给银行。而丝毫没有意识到新交易实乃伪造的银行,就会以该伪造的数额产生第二2FA并发给提起请求的合法用户。该合法用户毫无戒心地输入收到的第二2FA验证码,完全不知道这个验证码仅对要盗走他们账户上所有资金的隐藏流氓交易有效。
针对新的攻击,银行再加了一道需要用户在输入2FA验证码之前确认交易金额的手续。然而,现实是,很多银行客户并未对交易细节多加关注,往往瞟一眼就习惯性地直接输入2FA码了。很多情况下,银行木马依然能偷到客户资金。
无论你采用哪种验证方式登录计算机或其他设备,只要通过了身份验证,隐藏在你系统中的流氓用户或恶意软件就能为所欲为。它们静待你的计算机超时,等待你打瞌睡或锁屏的时机。即便屏幕被锁定,你的身份验证和授权令牌依然有效,且能被重用。
3. 被黑的2FA软件
终端中人攻击的一种特殊类型,是黑了与2FA设备相关的软件。比如说,想要在设备上使用智能卡,设备必须安装能识别并操作该智能卡的相关软件。智能卡供应商会给你安装软件,或者在你所用设备的操作系统中预装相应驱动。
如果你的电脑被黑客植入了流氓软件,合法的2FA相关软件就会被篡改或替换掉。上面所述的智能卡例子中,该流氓软件会要求智能卡在下一次插入时共享其上存储的秘密,或者延长表征身份验证成功的令牌在内存中的驻留时间,以便攻击者盗取或重放。一些案例中,流氓软件被用于在另一台流氓设备上完全盗取或替换掉智能卡。
4. 盗取并重放密码生成器
很多硬件和软件2FA令牌会生成特定于用户和设备的一次性密码。身份验证软件和用户设备二者同时产生该一次性密码,然后将该用户提交的密码与身份验证系统自己产生的副本做比较,看是否一致。
大多数情况下,该一次性密码是基于特定于每台2FA设备和用户的共享随机“种子”值产生的,后续所有密码都采用同一个算法按预设时间间隔从该种子生成。这种2FA令牌要求用户在30秒到数分钟内输入该一次性密码,超时就要重新输入新产生的那个。RSA的SecureID令牌推广了此类2FA设备,尽管如今类似的硬件令牌少说也有几十上百种,而仅基于软件的此类令牌就更多了,成百上千。
基本上,仅基于软件的此类令牌因为软件更容易被黑而安全性不如其硬件版本。硬件令牌通常需要物理接触才能黑掉。
黑客很早以前就知道,如果能获取到原始种子值并知道该时间同步的密码生成算法,他们就能像真正的验证系统和2FA设备一样产生并匹配该单向密码。一些2FA设备使用了脆弱的一次性密码生成器,给了攻击者捕获任意一次性密码并产生后续所有密码的机会。如果无需知道原始随机种子值就能做到这一步,那就说明所用密码产生算法并不健壮。随机产生的值不应该被捕获到,更不应该能轻易用其生成后续“随机产生的”值。
广泛使用的常见黑客工具包含了相关功能,于是,黑客只要能搞到种子值,就能构造出虚假的2FA设备。APT攻击者已经在用此类攻击攫取利益了。其中最著名的例子就是中国黑客入侵RSA,搞到了洛克希德马丁公司的种子值,入侵了这家美国国防承包商的系统。
5. 未要求使用2FA
包括流行网站在内的很多服务都提供2FA但并不强制要求使用,这一点损害了设置2FA的初衷。大多数用户以为只要启用2FA,此后就一直都要用。但事实并非如此,大多数网站同时还允许用户输入口令、回答口令重置问题,或者致电技术支持中心来绕过2FA的阻碍。
对于允许用户使用多种登录方式但不允许合法用户要求必须使用2FA的网站,黑客早已精通社会工程掉这些站点的技术支持部门,让他们重置用户的口令;或者直接猜出口令重置问题的答案。
很多口令重置问题设置得很是侮辱智商,可以轻易猜出答案。口令重置问题简直就是身份验证行业的祸根,应该像蟑螂一样被灭掉。
黑客同样可以对用户下手,社会工程出他们的口令凭证,然后用输入口令凭证的方式登录,压根儿不用理会2FA。提供2FA登录但又不要求所有登录实例都应用2FA,本身就损害了设置2FA的安全用意。
如果你的公司使用2FA,但不在公司所有网站和服务中启用,就意味着你依然有一对登录公司用的用户名和口令,意味着2FA形同虚设,至少在接受你的非2FA凭证的站点上是这样的。
6. 伪造身份
智能卡供应商肯定不想让你知道每个2FA设备/软件都与一个用户/设备的ID挂钩。该ID在验证系统中应是唯一的。在很多2FA系统,尤其是智能卡身份验证系统中,只要能修改一个人的ID,即便只是暂时修改,都能使用任意2FA设备,甚至是关联到另一个人身上的2FA设备,以之作为目标用户通过身份验证。
举个例子。假设你的智能卡关联的是user1@example.com这个ID。手握其他任意智能卡和PIN码,比如说user2的黑客,能进入身份验证系统并将user1的ID修改为user2,将user2的ID改为user1。然后,他们就能用user2的智能卡和PIN码登录,但系统却会在审计中认为他们是user1。只要在完事后再将ID换回来,他们便能在不知道user1的PIN码也没有user1智能卡的情况下,以user1的身份作恶,且user1毫无所觉。智能卡为内部人2FA攻击提供了成熟的条件。
很多2FA设备都是这样的。用来唯一标识用户/设备的东西将2FA设备与该用户/设备绑定了。如果某人能修改其他人的ID,那他就切实拥有了将该用户/设备的ID切换给其控制下的任意其他2FA设备的能力。确实应该像监控口令修改一样严密控制并审计ID属性的修改。
7. 被盗生物特征
你的生物特征属性,比如指纹和视网膜纹,也会被盗和重用,而且你很难否认攻击者对这些生物特征属性的使用。生物特征身份还有很多其他问题,例如相当高的不识别率和错认率,但它最大的问题是一旦被盗就永远无法恢复了。口令被盗还能改改再用,但指纹或视网膜纹是没办法轻易改变的。
8. 共享集成身份验证
oAuth之类共享集成身份验证方案,可以让用户只登录一次,就可重用该凭证继续登录其他服务和网站。应用此类身份验证的情形,大多会要求初始身份验证过程使用2FA,而后续登录便不再要求——即便正常情况下也是需要2FA的。共享集成登录往往使用已经通过验证的令牌来登录后续站点或服务。
9. 社会工程
随着越来越多的站点允许或要求使用2FA,黑客也学会了如何从用户身上套取2FA。这与上文所述的中间人攻击或终端中人攻击类似,但更加精妙,涉及供应商意外要求2FA之类的情形。使用2FA未必意味着用户本身不会被诱骗交出2FA。
10. 2FA暴力破解攻击
2FA令牌被黑客试出来的事并非闻所未闻。如果使用2FA登录的网站或服务没做好登录尝试控制,攻击者是有可能反复尝试,直至试出所键入的PIN码的。大多数2FA站点确实有登录锁定措施,但不排除有少数站点没有。有人就抱怨过某著名网站竟然不对登录失败次数加以控制,当然,该网站随后修复了此漏洞。
11. 实施中的漏洞
可以说,2FA登录网站中,带有可致2FA被绕过的漏洞的,肯定比不带该漏洞的网站数量多。带漏洞的2FA实现或许是安全2FA实现的数百倍之多。
如何防御针对2FA攻击
2FA登录可被成功攻击,并不意味着你不能让黑客的成功之路布满荆棘。以下就是阻挡2FA攻击的几条建议,或许其中很多你已经在用了:
正确理解2FA登录的优缺点没什么坏处。2FA肯定比口令之类单因子验证更好更安全,但也不是一劳永逸的万灵药。2FA也会被黑。它们有助于抵御很多黑客攻击,但其本身并非完美无缺。可以放心使用2FA,但千万别过于乐观。