网络生活的安全指引 - 信息安全

本文将以开源的互联网安全检查列表(Security Checklist)为基础,来讨论当今网络生活中如何令自己尽可能保持安全状态。

这个检查列表名为「Be safe on the internet.」,是一份仍在更新的开源列表。它讨论的安全状态主要包括两方面:

  • 隐私保护
  • 信息安全

这也是我认为的互联网时代自我保护最主要的两方面。无论是使用浏览器上网,还是通过应用和软件,无论是在个人电脑,还是移动设备,你使用鼠标的每一次点击,或使用手指的每一次触碰屏幕,都可能在这个互联网世界中成为安全隐患。

密码管理器

说到信息泄露,首当其冲的肯定是账户密码。我们可能听到过这样一些密码建议:

  • 不同的账户不能使用重复的密码
  • 密码要同时含有大写字母、小写字母、数字、符号
  • 长度必须大于10个字符
  • 设置动态安全码、短信验证码

然而,要记忆这样的密码何其不易。即使只有10个不同账户,每个账户都是彼此之间完全无关的密码,每个密码长度是15位,并且包含了前面提到的所有类型的字符,而且还绑定了一个动态验证方式。

因此,一种密码管理方式应运而生,典型代表如 1Password

密码管理器通常有以下一些功能:

  • 创建复杂密码
  • 为每个账户保存密码
  • 提供浏览器插件、手机客户端、桌面客户端

有的还可以:

  • 检查网站是否安全
  • 检查密码是否已经泄露
  • 支持双因子认证

这其实已经完美实现了前面那些密码建议。至于对密码管理器本身的安全性考虑,1Password 详细解释了它的安全原理,页面底部还提供了白皮书供查阅。

简单来说,密码管理器通常是在本地计算器上进行非常复杂的加密,而这种加密只有你手上的那个「唯一的密码」才能解开,强行破解的概率几乎为零。多设备同步时,它只把加密后的数据上传,这样,即使别人从网络上劫持了你的数据,由于没有密码,也无从解密(前几年另一款密码管理器 Lastpass 就曾经出过一定规模的数据泄露,但是可以说没有造成任何损失)。

非常重要的是,1Password 支持几乎所有平台。电脑的浏览器中可以自动填充,而 iOS 12 和 Android O 也都提供了对应的密码填充接口来在应用和手机浏览器中一键登录,十分方便。

除了 1Password,还可以使用前面提过的 Lastpass。它们都采用订阅制,每个月大约是 3 刀,也可以组建家庭组,人均可以降到每月 1 刀的样子,并不贵。

双因子认证

在密码管理器的介绍中提到了双因子认证。当一个软件或者网站要验证我们的身份时,一般会让我们输入用户名和对应的密码。但是近几年越来越频发的「脱裤」事件也让人非常担忧,单单靠用户名和密码的组合已经无法对我们的信息安全提供足够的保护。

所以我们需要在密码之上再加一层验证,来保证目前在操作的确实是你自己。这就是「双因子认证」。

很多地方会把双因子认证的设计划分成下面几种:

  • 你知道的信息:额外的个人认证码(PIN)、密保问题
  • 你拥有的物体:信用卡(购物)、手机号(短信)、密码器(银行)
  • 你个人的特征:人脸识别(支付宝)、声纹(微信)

较为普遍使用的双因子认证方式主要是「认证码应用」和「短信验证码」这两种。它们都属于第二类「你拥有的物体」。也就是说,借助你拥有的应用或手机号,你可以更好地证明你拥有访问账户的权限。

认证码应用

目前 1Password 同时提供了密码管理和双因子认证,而 Lastpass 则需要配合单独的双因子认证应用来管理。此外,也有一些独立的双因子应用,如 AuthyGoogle 家的以及微软家的。

这些应用提供的双因子认证是基于 TOTP(基于时间的一次性密码算法) 来实现的,已经成为 RFC6238 标准。它的运作过程可以分为「配置」和「使用」两部分来解释。

配置账户时:

  1. 服务器生成随机的密钥,如 4M7IFFT3Y45BLUXTY7WY7DJ3UA
  2. 通过彼此之间相对可信的通道进行第一次通信,现在一般用二维码,这个二维码能够传递服务名称、账户名称、随机密钥
  3. 客户端根据收到的信息,根据随机密钥和当前的时间,根据特定算法计算出一个 6 位的认证码
  4. 用户根据客户端上的显示,将 6 位认证码输入给服务器,服务器同时使用相同算法计算出认证码,核对是否一致

使用双因子认证时:

  1. 客户端根据之前记录的随机密钥和当前的时间,计算出 6 位认证码
  2. 服务器同时计算出认证码
  3. 用户根据客户端的显示,将认证码输入给服务器,服务器核对

由此可见,这种认证是基于:

  • 事先协商的密钥
  • 核验时的时间

因此,这种认证码是会随着时间变化的,并且对每个账户都是不同的。而计算认证码的算法包含了哈希,因此从认证码逆推出原始密钥几乎是不可能的。

值得指出的是,1Password 同时兼顾了密码管理器和认证码应用,还可以收纳证件、会员信息、信用卡、服务器等内容,所以很容易造成单点故障的困局。

短信验证码

国内使用认证码应用的比较少,一方面因为需要手动配置,对用户有一定技术要求,另一方面普遍使用的手机短信验证码由于手机号码实名制,显得更加符合国情,也更加便于管理。

然而针对短信验证码的攻击非常频繁,前不久甚至出现了使用黑科技强行拦截短信验证码并盗取支付宝的惊人案例,具体操作手法众说纷纭,但是短信作为一种保护信息安全的双因子认证显然显得不大可靠了。

诚如这份检查列表提供的其中一个资源链接中所说:

“SMS has turned that ‘something you have’ into ‘something they sent you,’” says Zdziarski. “If that transaction is happening, it can be intercepted. And that means you’re potentially at some level of risk.”

大概翻译过来是:短信已经从「你拥有的物体」转变成了「他们发送给你的东西」,这样就可能被窃听,也就有了潜在的危险。

所以,短信验证器是公认的辣鸡。

事实上,现在的技术除了轻而易举地给手机发送伪造的短信,也可以很轻松地骗取短信发送方的信任,而让发送方把本应发给用户的短信发送到你这边来。更有甚者,由于 2G 的安全性远低于 4G 通信,因此也有窃听者强行令手机切换到 2G 通信,从而更加容易地窃取短信。

果壳网的分析文章中指出:

很多APP都有读取短信的权限。只要这些APP中的任意一个存在漏洞,或者干脆本身就是恶意的,那你的短信也就危险了。

鉴于当前国内移动开发者(我知道我知道,是产品经理的锅)的素质良莠不齐,许多应用请求了短信权限,而后有意无意地把数据上传到服务器中。上传的过程如果不加密,那么很可能还会引入其他窃听者。

公开宣称需要短信权限甚至是经用户同意上传短信数据的应用有很多,比如 iOS 和几乎所有 Android 手机系统都会提供的云同步服务;也有很多应用声称只是为了「便于用户登录时自动输入验证码」而索取短信权限。

除了软件层面,由于把安全因子捆绑在手机这个每时每刻都在使用的设备上,要是手机被偷或不小心遗留在了公共场所,哪怕只是被人看了一眼屏幕,都可能导致验证码的泄露。所幸几乎所有手机系统都提供了「在锁屏界面不显示短信内容」的选项,我强烈建议把它打开,以避免手机在没有解锁时泄露重要的短信信息。

此外,我想说一下短信黑名单的问题。我自己的手机号码经常收不到服务提供商下发的验证码,猜测是由于某我也不知情的原因被一些短信平台加入了黑名单,导致我经常在登录或其他安全操作时受限,而不得不联系服务提供商在后台手动为我解锁。总体来说,短信验证码在到达率上确实也存在很大问题。

至于国内许多地方使用手机验证码来「替代」密码,只需要验证码而不需要输入密码,从而使整个认证体系从「双因子」降级为「单因子」的做法,我实在不(wu)想(li)讨(tu)论(cao)了。

避免使用数字密码

iPhone 和 Android 登录的时候都可以选择使用复杂密码(字母、数字、符号的组合)或数字密码(通常是 4-6 位)。虽然 iPhone 和 Android 都提供了时间惩罚来对付强行破解数字密码的行为,但是数字密码依然是非常不安全的,因为很容易猜对。

国内绝大部分能够用于支付的服务都提供 6 位数字密码,像支付宝同时提供复杂密码的选项,但是微信和其他许多服务就只能使用 6 位数字密码了。这样虽然方便输入和记忆,但是安全性几乎全部依赖于支付服务后台的风险控制能力了。况且现在都可以指纹或者刷脸,对简单密码的需求也并不是那么强烈。

最后,建议在旅行中或者丢失手机风险较大的时候临时关闭指纹和刷脸。尤其是面对抢劫和其他紧急情况时,更是要第一时间把生物解锁关闭。

开启 SIM 卡密码

手机的 SIM 卡可以设置 PIN,一般是 4 位数字。设置好之后,每次 SIM 卡重新在运营商网络中注册时(开机或插入新手机),会要求输入 PIN 码,否则不能使用这个手机号码。

PIN 的重试次数不多,试完之后需要使用 SIM 卡的个人解锁密钥(PUK 码)进行解锁,如果 PUK 码输入错误,那么必须联系运营商重新换卡。

苹果官方提示说:

绝不要尝试猜测 SIM 卡 PIN 码或 PUK 码。猜测错误可能会导致 SIM 卡永久锁定,届时您将需要获取新的 SIM 卡。

这对于手机被盗后保护信息安全还是有一定帮助的。试想,如果手机被盗,但是对方又不能解锁你的手机,这时他可能取出 SIM 卡从而获取对你手机号码的控制权,在国内,凭验证码就可以登录不少网站和应用了,同样也可以修改你的账户密码甚至购买商品、删除信息,造成许多不可逆的后果和严重的损失。

此时,如果 SIM 卡已经设置了 PIN,那么除非去运营商营业厅提供足够可信的材料证明自己受机主委托,而令电信运营商换一张新卡,否则完全无法使用这张 SIM 卡。

加密设备数据

现在,你的手机应该已经有了一个足够复杂的密码,你的电脑也有了连你自己都记不住的登录密码,这样就可以防止其他人从你手机或电脑上窃取你的数据了吗?

显然是否定的。对于绝大部分电脑而言,攻击者如果能够接触到主机,那么他可以在开机时引导到事先准备好的 U 盘中,而这个 U 盘里往往包含一个小型操作系统,虽然没有太多复杂的功能,但是读取、复制你硬盘中的文件却绰绰有余。

Windows 10、macOS 和 iOS、Android 都自带了硬盘加密功能,能够保证只有在正常登录账户的情况下可以访问到硬盘数据。

许多 Android 操作系统现在都自带刷机锁,没有密码的情况下既不能进入现有系统,也无法刷入其他系统。iOS 自 11.4.1 之后也对锁屏状态的 USB 通信进行了限制。