🕸️ 第九章 安全措施
📄 一句话概括

保护用户账号有两道闸——多因子验证负责确认【你是你】,CAPTCHA 负责确认【你是人】;两者都有效,但效果差距极大:抗钓鱼的验证能挡 99% 以上,短信验证码只能挡约 11%。

📝 本节和前面几节的关系

9-2 到 9-4 讲的都是护住服务器自己,这一节换到护住用户。它和 9-6(内部访问控制)是一对:一个管外面的人,一个管里面的人。教材 9-5 的并列关键词是【多因子验证、CAPTCHA】。

一、多因子验证:三类要素,凑够两类才算数

多因子的道理很朴素——一扇门要多把钥匙才开得动。这三大类要素是:

要求至少同时提供两类,就是多因子验证(MFA)。 它的效果有硬数字:微软的口径是抗钓鱼的 MFA 能挡掉 99% 以上的身份攻击; 被攻陷的账户里,超过 99.9% 没有启用 MFA。

反过来说,微软的另一个数据是:主流云平台每秒要挡下约 7000 次密码攻击, 其中 97% 是撞库或暴力破解。这就是为什么单靠密码已经守不住了。

二、同样叫 MFA,挡不挡得住钓鱼差很多

这是本节最值得记住的一张对比。三种常见的第二因素,抗钓鱼能力天差地别:

所以业界的重心已经从【有没有 MFA】转向【用哪种 MFA】。 数据显示抗钓鱼那一档的采用率从 8.6% 涨到 14.0%,一年涨了 63%—— 涨得快,但绝对水平仍然很低。

这也解释了另一个数字:被盗凭证仍然占到企业泄露的两成以上。 装了 MFA 却装了最弱的那一种,等于门上加了一把塑料锁。

三、采用率在爬,但多数人用的是弱的那一档

整体来看,覆盖率是在稳定上升的:

分规模的差距更明显:员工过万的大型企业有 87% 用了 MFA, 而 26 到 100 人的中型企业只有 34%,25 人以下的小微企业只有 27%。

还有一组数字说明【上了 MFA 不等于就过了关】: 约 28% 的用户仍在遭遇 SIM 换卡、MFA 疲劳、中间人这类攻击; 而有近三分之一的用户因为觉得麻烦,干脆不用。 易用性和安全性之间的那根绳,一直是这类机制最难拿捏的地方。

四、CAPTCHA:确认屏幕对面是人

另一道闸是 CAPTCHA,用在注册、登录、提交表单这些地方—— 它的唯一任务是分辨屏幕对面是人还是程序。

这个市场的集中度高得惊人:

有意思的是它的形态在变:新版的 reCAPTCHA 和 Turnstile 多数时候不弹图了, 而是在后台给这次访问打分,只有分数低的时候才弹出验证。 所以你看到一个网站【装了 CAPTCHA】,不代表你真会看到拼图。

最后补一个背景数字:自动流量已经占全部请求的 35.42%, 但只有约 17.7% 的站点装了专门识别它的东西。 多数网站是在被动挨爬——装上 CAPTCHA 的门槛低到只要能省事就行。

五、动手 Demo:把验证强度与采用率算一遍

抗钓鱼能力的差距、采用率的爬升,都可以算成更直白的倍数:

sms, push, key = 11, 62, 99.8   # 各方式拦住钓鱼的比例(%)
print("  硬件密钥是短信的 %.1f 倍" % (key / sms))
print("  硬件密钥相对推送的提升 = %.1f 倍" % (key / push))
print("  抗钓鱼采用率 8.6%% -> 14.0%%,涨了 %d%%" % ((14.0 / 8.6 - 1) * 100))
print("  大企业 87%% 对小微企业 27%%,差 %d 个百分点" % (87 - 27))

实跑输出:

--------------------------------------------------------------------
把门锁换成三把钥匙
--------------------------------------------------------------------
  Web 系统面对的是两类人:外面的用户,和里面的员工。这一节先说外面。
  多因子验证(MFA)的道理很朴素——要多把钥匙才能开一扇门。

  要素             例子               能不能被偷走
  -----------------------------------------------------------
  你知道的东西     密码、口令         能:撞库、钓鱼都能拿走
  你拥有的东西     手机、硬件密钥     难:要拿到实体设备
  你本身的东西     指纹、人脸         难:但不等于不会被骗
  -----------------------------------------------------------

  效果是有硬数据的。微软的口径:抗钓鱼的 MFA 能挡掉 99% 以上的身份攻击;
  被攻陷的账户里,超过 99.9% 没有启用 MFA。

  但同样是 MFA,挡不挡得住钓鱼,差别极大:

  验证方式                挡住钓鱼的比例     为什么
  ------------------------------------------------------------------------
  短信验证码              约 11%             能被复制,也怕换卡攻击
  App 推送确认            约 62%             会被反复推送直到用户点错
  硬件密钥 / 通行密钥     约 99.8%           私钥不出设备,钓鱼网站拿不到
  ------------------------------------------------------------------------

  所以业界的重心已经从有没有 MFA,转向用哪种 MFA。采用率本身也在爬:

  口径                MFA 覆盖率     备注
  -----------------------------------------------------
  全部受访企业        70%            2020 年初还是 50%
  技术行业            87%            各行业里最高
  保险 / 专业服务     77% / 75%      金融 71%
  医疗 / 制造         64% / 66%      还在往上走
  公共部门 / 酒店     59% / 55%      垫底的一档
  -----------------------------------------------------

  另一道闸是 CAPTCHA——在注册、登录、提交表单的地方分辨人和程序。

  产品                     在有防护站点里的份额     变化
  ---------------------------------------------------------------------------
  Google reCAPTCHA         65.26%                   仍占三分之二,但份额在掉
  Cloudflare Turnstile     3.68%                    增长最快的一档
  hCaptcha                 3.44%                    30 天净增约 2.5 万个站
  Akamai / 其他            不足 1%                  集中在高价值目标
  ---------------------------------------------------------------------------

  还有一组背景数字值得记住:自动流量已经占全部请求的 35.42%,
  但只有约 17.7% 的站点装了专门识别它的东西。多数网站是在被动挨爬。

  小算例:70% 的企业在用 MFA,但抗钓鱼的那一档只有 14.0%,
  从 8.6% 涨上来用了一年,涨幅 63%。也就是说,装了 MFA 的企业里,
  多数人用的还是能被钓鱼的那一种。

第一行的 9 倍最值得记住:同叫第二因素,强度可以差出一个数量级。 第三行的 63% 是个好信号,但 14% 的绝对水平说明还有很长的路要走。 第四行的 60 个百分点,说明安全投入和企业规模高度相关—— 小微企业不是不想做,是没人手做。

30 秒实验

  1. 打开你常用账号的安全设置,看看它的双重验证支持哪几种方式,能不能换成通行密钥。
  2. 找一个需要登录的网站,故意输错几次密码,看它有没有弹 CAPTCHA 或锁定账号。
  3. 把你手上重要账号的恢复方式检查一遍——很多账号是被【找回密码】这条路攻破的。

常见误区

  1. 错误:开了短信验证码就等于有了 MFA,安全了。——纠正:短信是抗钓鱼最弱的一档,拦截率只有约 11%;能换就换成密钥或通行密钥。
  2. 错误:多因子验证会让用户很麻烦。——纠正:麻烦的其实是最弱的那几种(推送、短信);通行密钥登录更快,满意度反而更高。
  3. 错误:装了 CAPTCHA 就一直在弹验证码。——纠正:新版本多数时候在后台打分,不弹图,只有风险高时才让人验证。
自测三问(点开对答案) 1. 多因子验证的三类要素是什么? —— **你知道的(密码)、你拥有的(手机/密钥)、你本身的(指纹/人脸)。** 至少要凑够两类才算多因子。 2. 为什么硬件密钥抗钓鱼能力远高于短信? —— 因为**私钥存在设备里、不出设备**——钓鱼网站就算照抄页面,也拿不到那个签名,所以约 99.8% 的钓鱼被挡住,短信只有约 11%。 3. CAPTCHA 市场现在的格局是什么? —— **Google reCAPTCHA 约 65.26%,Cloudflare Turnstile 约 3.68%,hCaptcha 约 3.44%。** 集中度极高,而且新版多在后台打分、不弹图。

相关笔记