导语:虽然许多缓解措施中都包含“启用双因素认证”这样一条建议,但是千万别就此以为双因素认证(2FA)是完全安全的。
虽然许多缓解措施中都包含“启用双因素认证”这样一条建议,但是千万别就此以为双因素认证(2FA)是完全安全的。
所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤。其中,密码是最常见的认证方法,但是不安全,容易泄露和冒充。不可否认,与普通密码相比,2FA具有其独到优势,并且正在加大部署于各种网络和服务中。如今,不仅具备高度安全需求的政府和企业开始部署2FA,就连普通人也正在使用2FA来进行网站和账户认证。可以说,2FA能够降低黑客攻击的风险。
什么是双因素认证?
一般来说,三种不同类型的证据,可以证明一个人的身份,包括:
· 秘密信息:只有该用户知道、其他人不知道的某种信息,比如密码;
· 个人物品:该用户的私人物品,比如身份证、钥匙;
· 生理特征:该用户的遗传特征,比如指纹、相貌、虹膜等等。
这些证据就称为三种“因素”(factor)。因素越多,证明力就越强,身份就越可靠。双因素认证就是指,通过认证同时需要两个因素的证据。银行卡就是最常见的双因素认证,用户必须同时提供银行卡和密码,才能取到现金。
不过,正是由于太多人对2FA所提供的安全性过于信任,觉得它是坚不可摧、不可战胜的。他们认为,2FA能够阻止高级持续性威胁(APT),打败网络钓鱼和社会工程,甚至阻止其从未设定过的各种威胁。2FA明显存在一种感知误区,即得到的信任比其自身应得的更多。但事实显然并非如此,相反地,攻击者有很多种瓦解它的方法,具体攻击方式总结如下:
攻击2FA的11种方式
1. 中间人(MitM)攻击
如果中间人攻击者能够诱骗你访问他们的流氓网站,并提示你提供2FA证书,那么可以说你的2FA屏障基本宣告报废了。中间人攻击者可以伪造一个你信任的,且使用2FA登录的网站,然后诱使你输入自己的2FA生成的凭证。更常见的情形,是在你使用2FA成功进行身份验证后,攻击者直接窃取生成的(非2FA)令牌。
大多数人都不明白,一旦你使用2FA进行身份验证(无论是通过生物特征识别、硬件令牌还是智能卡),操作系统都会使用辅助生成的软令牌来接管你的访问授权。但该令牌可以被盗并重新使用。例如,也许你的Windows笔记本电脑需要指纹验证才能登录,一旦你成功通过指纹验证,操作系统后台经常会使用NTLM或Kerberos令牌来接管你的访问授权。你的身份验证方式,通常与你之后被赋予的访问权限毫无关系。如果你想成为一名优秀的计算机安全人员,你需要了解这个概念及其影响,因为其造成的影响将会是巨大的。
2. 终端人(Man-in-the-endpoint)攻击
与MitM攻击类似,如果黑客可以将他们的恶意软件加载到你的计算机上,他们就可以修改2FA验证过程中用到的软件,窃取2FA令牌保护下的机密,或者使用你已经通过的验证结果来访问原本无权访问的内容。
自本世纪初以来,银行木马一直都在这么做。基本上,这些木马会潜伏在主机上,等待你成功通过身份验证,然后在后台启动隐藏的流氓会话。你以为自己只是查看了一下银行余额,但在后台,木马正在将你所有的存款转移到他们的离岸银行账户中。
银行认为,他们可以通过生成一个次级2FA代码来应对这种类型的木马,因为该代码能够从交易数据中擦除,并且是该交易独有的。但是现实却并不理想,Bancos木马创建者就通过拦截原始交易请求,生成并提交他们自己数额更大的请求,再将该请求发给银行等待回应。但是银行并不知道新交易请求是假的,就会以该伪造的数额生成次级2FA,并发给提起请求的合法用户。该合法用户将输入这些次级2FA验证码,但却永远不知道这个验证码仅适用于窃取他们账户所有资金的隐藏流氓交易有效。
之后,银行又要求用户在输入2FA验证码前确认交易金额,来应对这些新型攻击。然而,令银行惊讶的现实是,银行客户并没有注意到交易细节,并且通常非常痛快地就输入了验证代码。在很多情况下,银行木马依然能够战无不利,轻松窃取到客户的资金。
无论你的电脑或设备采用何种验证方式(无论是否为2FA),只要你通过了身份验证,隐藏的流氓用户或恶意软件都可以在你的设备中执行任何想要的操作。它只是在静待你的计算机超时,等待你打瞌睡或锁屏的时机。因为,即便锁定屏幕,你的身份验证和授权令牌也是有效的,且可以重新使用。
3. 妥协的2FA软件
一种特殊的终端人攻击(man-in-the-endpoint),是妥协与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的目的。
6. 伪造身份
智能卡供应商不希望你知道的一个小秘密是,每个2FA设备/软件都会挂接到一个用户/设备的身份(ID)。该ID在身份验证系统中必须是唯一的。在许多2FA系统中——尤其是智能卡——只要能够修改一个人的ID(即便是暂时的),就可以使用任意2FA设备,甚至是挂接到其他人,也可以使用它作为目标用户进行身份验证。
举例说明,假设你的智能卡已挂接到名为[email protected]的ID,已经获取其他任意智能卡和PIN码(比如说user2)的黑客,将能够进入身份验证系统并将user1的ID修改为user2,反之亦然。然后,他们可以使用user2的智能卡和PIN码,以user2的身份登录,但系统却会在审计中将它们追踪为user1。在完成非法活动后,黑客可以轻松地再将ID切换回来,而无需知晓user1的PIN或拥有user1的智能卡。可以说,智能卡为内部人2FA攻击提供了成熟的条件。
许多2FA设备都是如此,无论用什么来作为用户/设备的唯一标识,它都会将2FA设备“捆绑”到该用户/设备。如果某人有权更改其他人的ID,他就可以将该用户/设备的ID切换到其他任意2FA设备(他们有权控制)。与密码更改一样,你应该控制并审计任何信赖的ID属性更改行为。
7. 被盗的生物特征识别
你的生物特征识别属性(例如指纹或视网膜扫描)也可能会被盗用并重复使用,而且你将很难拒绝攻击者使用它们。生物特征识别还有许多其他问题(如高比例的假阴性和假阳性),但最大的问题是,一旦它们被盗就会永远存在隐患,因为指纹和视网膜并不能够像密码一样高进行修改。
8. 共享、集成的身份验证
我非常喜欢共享、集成的身份验证方案(例如oAuth),它允许用户只登录一次,然后就可以重新使用该凭证(通常在后台)登录到更多服务和网站中。使用共享、集成的身份验证时,通常会要求初始身份验证过程使用2FA,而后续登录便不再要求(即便正常情况下也是需要的)。共享、集成的登录通常使用已经通过身份验证的令牌来进行其他登录。
9. 社会工程
随着越来越多的网站允许或需要2FA,黑客也学会了如何社会工程用户。这些攻击可能类似于上述讨论的中间人攻击或终端人攻击,但可能更为精妙,涉及供应商意外要求2FA之类的情况。总之,仅仅因为你正在使用2FA并不意味着你本身不会被诱骗交出2FA。
10. 2FA暴力攻击
2FA令牌被黑客暴力破解出来的事情并不是闻所未闻。如果使用2FA登录的网站或服务没有设置错误登录尝试控制,那么攻击者就可能会反复尝试,直至输入正确的PIN码。大多数2FA网站确实具备登录锁定机制,但却并非所有网站都具备。
11. 漏洞实现
可以肯定地说,2FA登录网站和软件中存在很多允许绕过2FA的漏洞,而且这些存在漏洞的网站和软件比例,可能比不存在该漏洞的网站数量多。事实上,存在漏洞的2FA实现事例可能高达数百个之多。
如何防御2FA攻击行为
尽管瓦解2FA的方法有很多,但这并不意味着你不能做些什么,来增加黑客攻击的难度。以下是防御2FA攻击的一些建议,其中许多也许你已经在用了:
· 培训管理员和用户了解2FA威胁及攻击;
· 询问你的供应商关于上述各种2FA威胁攻击场景的解决情况;
· 确保系统始终运行最新的杀毒软件,以检测并防止可能试图绕过或盗取你的2FA凭证的恶意软件及黑客;
· 确保你的用户了解并接受2FA社会工程场景的培训,让他们不再轻易地交出自己的2FA PIN码,或一遇到要求使用2FA设备/软件的网站和电子邮件就使用;
· 当网站或服务允许使用2FA时,请务必使用它。如果能用2FA,且要求你必须使用2FA登录时,请务必启用所需的功能;
· 了解你的2FA供应商允许使用什么东西绕过2FA。这些东西能被社工出来吗?
· 询问你的2FA凭证提供商,是否在开发这些硬件和软件时使用了安全开发生命周期(SDL)编程最佳实践;
· 保护并审计2FA使用的身份属性,作为2FA登录的唯一标识;
· 使用密码重置问题时,不要提供一本正经的老实答案;
· 鼓励网站和服务使用动态身份验证,以便在登录请求来自新设备或某些其他不自然属性(例如外国位置或异常登录时间)时,增加所需验证的问题或因素数量。
与使用密码等单因素认证方式相比,2FA显然更好也更安全,但是它并不是“万灵丹”,它一样具备自己的缺陷,也存在被破解的可能。它能够帮助我们有效地抵御许多黑客攻击,但即便如此,它也并非完美无缺。本文的目的是希望大家能够全面的了解2FA的优劣性,你可以放心地继续使用它,只是千万别对其功能过分的乐观。