物理安全密钥(Security Key)是最可靠的
引言 2022年9月底,Uber发生了重大黑客攻击事件,各种云平台管理员权限都被攻破了。黑客主要是通过“社会工程(social engineering)”,也就是钓鱼邮件等等,获得了员工的账号密码。 我听到这个消息大为震撼,Uber这么大的公司,肯定设置了多重身份验证,怎么还能被攻破呢?我于是不务正业地搜索资料,并思索了一番,最后得到以下结论: 在精心设计的钓鱼邮件/短信和虚假网站面前, 短信验证码并不安全。 多重身份验证APP,包括Duo、Authy等等,无论是输入验证码,还是点击“允许登录”的弹窗,安全性也仅仅比短信验证高一点,依然不够安全。 物理的安全密钥,类似USB或者NFC的那一类,比如YubiKey,才是足够安全的。 短信验证码不安全 按照以下步骤: 黑客给用户发送了一则消息,类似“您的账户出现异常,需要您登录检查”,附送一个链接。该链接指向的并不是真实的网页,而是黑客搭建的虚假网页,用户在上面输入的所有信息都会被黑客获取。 用户点击链接,输入账号密码。 黑客使用用户的账号密码登录真实的网页,真实的网页会给用户发送短信验证码,并要求黑客输入验证码。这个时候黑客是没有验证码的。 用户看到虚假网页弹窗:“我们已经给你发送了短信验证码,请输入验证码:”。 用户在虚假的网页上输入收到的短信验证码。 黑客从虚假的网页上获取了短信验证码。验证码是一次性的,但其实用户并未真正使用过,所以依然是有效的。 黑客在真实的网页上输入验证码,黑客登录成功。 多重身份验证APP验证码不安全 这种情况其实和短信验证码没有太大区别。相比起短信验证码,多重身份验证APP的验证码时效更短一些,比如只有20秒。也就是说,用户在虚假网页上提供验证码之后,黑客必须立即使用该验证码登录。这其实对自动脚本并不困难。 多重身份验证APP点击弹窗不安全 比如使用手机软件Duo做多重身份验证,在登录时Duo会推送一个弹窗,要求用户点击允许登录。但其实这没有比验证码安全,甚至简化了步骤。推送的登录IP地址可能让用户起疑心,但是恐怕很多用户都是顺手点开,压根不会关注登录IP地址吧。 按照以下步骤: 黑客给用户发送了一则消息,类似“您的账户出现异常,需要您登录检查”,附送一个链接。该链接指向的并不是真实的网页,而是黑客搭建的虚假网页,用户在上面输入的所有信息都会被黑客获取。 用户点击链接,输入账号密码。 黑客使用用户的账号密码登录真实的网页,此时Duo会给用户手机推送弹窗。 用户看到虚假网页弹窗:“请在手机软件Duo上确认登录”。 用户点击手机弹窗确认登录。 黑客登录成功。 物理安全密钥才是安全的 这种验证方式会需要用户在"登录的设备"上插入安全密钥USB或者扫描NFC来验证登录。 黑客拿不到安全密钥插在自己电脑上,即便诱导用户把安全密钥插在用户的电脑上,也无济于事。只要安全密钥不丢,就是安全的。安全密钥配合密码(有的安全密钥还会配合指纹),并在丢失安全密钥后立即删除权限,在我看来算是足够安全的了。 最后 对于公司而言,指望每一个员工都能对钓鱼邮件免疫,是不太现实的。这么想的话,可能还是用物理安全密钥的好。 网络安全公司Cloudlflare写过一篇blog记录他们遇到的网络钓鱼攻击,内容详实,非常具有启发性,推荐阅读。英文链接,中文链接