什么是 2FA?
首先我们要知道什么是 2FA。
2FA 代表双因素身份验证(Two-Factor Authentication)。它是一种安全措施,用于保护用户的在线账户和信息。传统的身份验证通常只涉及输入用户名和密码,但这种方法可能存在安全风险,因为密码可能被猜测、盗取或者破解。
通过使用双因素身份验证,用户需要提供两个不同类型的身份验证因素才能成功登录。这些因素通常分为以下几种类型:
- 知识因素:如密码、PIN码或者答案问题。
- 所有权因素:如硬件令牌、手机验证应用程序生成的一次性密码(OTP)或短信验证码。
- 生物特征因素:如指纹识别、虹膜扫描或面部识别。
当用户进行登录时,除了输入用户名和密码之外,还需要提供另外一个因素进行验证。这使得攻击者更难以入侵用户账户,因为他们需要获取并使用第二个因素才能成功登录。
2FA 提供了额外的安全层,帮助用户保护其账号免受恶意活动和未经授权的访问。
现在,越来越多的在线服务和应用程序支持 2FA,推荐用户启用 2FA 以增强账户安全性。
为什么要使用 2FA?
Github 首席安全官 Mike Hanley 在博客中提到:
2021年11月,一些未启用 2FA 的开发者账户遭到入侵,导致很多 npm 包被入侵者接管,为此 Github 承诺在 npm 账户安全性方面会投入更多的资源。我们会继续改进 npm 账户安全性,同时也会投入相同程度的努力来保护 Github 开发者的账户。
大多数安全漏洞并非少见的零日攻击的产物,而是来源于很多低成本的攻击手段,如社会工程、凭证盗窃或者泄漏,以及为攻击者提供对受害者账户及其所有资源的广泛访问权限的途径。被入侵的账户可用于窃取私有代码,或者将恶意更改推送到这些代码上。这不仅会将与受感染账户相关的个人和组织置于危险之中,而且会让所有使用受影响代码的用户都暴露在风险环境下。因此,这种攻击可能会对更广泛的软件生态系统和供应链下游产生巨大的影响。
这表示对于传统的单因素认证(即使用密码)来说它更容易受到密码泄漏、弱密码攻击、社会工程攻击等方式的威胁。对于一些每周下载次数高达成百上千次的 npm 包来说,它们更容易被黑客团伙攻击投毒,比如安装一些密码窃取器等。
❓什么是社会工程攻击?
它是指利用心理学和社会工程学原理,通过欺骗、诱导或操纵人员来获取信息或者实施非法行为的攻击手段。这类攻击往往不直接涉及技术上的漏洞,而是针对人类的社会和心理特征进行操作,从而获得所需的信息或者访问权限。
它的形式大概包括:
- 钓鱼攻击(Phishing):通过伪装成合法机构或者个人,发送虚假的电子邮件、短信或者网站链接,诱导受害人输入个人账户信息、密码或者敏感信息。
- 预文本信息攻击(Pretexting):攻击者伪装成他人,通过编造虚假的理由或者身份来诱使受害者透露信息或者执行特定操作。
- 人员招聘或渗透测试:攻击者伪装成潜在雇主或者客户,以获取内部信息或者物理访问权限。
- 垃圾邮件攻击:发送包含恶意软件或者链接的垃圾邮件,通过诱导受害者点击链接或者下载附件,以便攻击者获取系统访问权限或者窃取信息。
社会工程攻击通常需要攻击者对目标受害者进行深入的调查和分析,以便制定相应的欺骗方案。为了防范社会工程攻击,个人和组织需要加强对安全意识的培训,对于未知来源的信息和请求,我们要谨慎对待,保护自己的个人信息。
如何设置 2FA?
我们这里介绍一下国内可以使用的方式:使用 TOTP 应用。
那什么是 TOTP 应用呢?
TOTP 应用指的是基于事件的一次性密码(Time-based One-Time Password)应用,它是一种用于实现双因素认证的安全技术。TOTP 应用通常以移动应用的形式存在,用户在手机上安装相应的身份验证应用程序,如 Google Authenticator、Authy 等。
TOTP 应用的工作原理是,基于当前的时间戳生成一次性密码,该密码在一定时间内有效,然后过期。用户在登录时除了输入常规的用户名和密码外,还需要提供由 TOTP 应用生成的动态验证码,这样即使黑客获得了用户的账号密码,也无法直接登录用户的账户。
TOTP 应用依赖于一个共享的密钥(secret key),该密钥由服务提供商在用户启用双因素认证时生成,并通过二维码或者其他方式提供给用户。用户将该密钥输入到 TOTP 应用中后,应用根据当前的时间戳和密钥算法生成一串动态的验证码,用户在登录时需要输入该验证码方可完成登录。
但是在国内由于一些原因,安装不了 Google Authenticator,但是我们可以安装微软的 Authenticator,不过安装渠道是有限制的,对于安卓手机来说,目前只支持四个应用商城:
- Samsung
- Oppo
- 百度
- Lenovo
以 Oppo 的应用商城为例,我们在 App 中搜索 Authenticator 之后点击进行安装即可。
安装好之后,我们可以进行 Github 2FA 的认证操作。
- 首先打开你的 Github,并进入到设置页面中。
- 在左侧的菜单中找到 Password and authentication
- 在右侧的主内容区找到 Two-factor authentication,没有开通 2FA 的用户会看到以下内容,我们点击「Enable two-factor authentication」进行开通(如果已经是强制要使用 2FA 了,那会直接看到下图)
- 然后会弹出来一个对话框,默认方式是 「Setup authenticator app」也就是使用 TOTP 应用,这里会提供一个二维码
- 此时我们就可以通过刚刚安装的 app 来扫描这个二维码添加这个 Github 账号,选中「已验证 ID」-「扫码 QR 码」即可进行账户添加(这里截不了图,大家可以根据描述来进行操作)。
- 添加好 Github 账户之后,在 App 的首页就可以看到你 Github 的账户已经被展示出来了,我们点击这条记录然后就可以看到一个展示一次性密码的页面,将这个 6 位数验证码输入到浏览器中 「Verify the code from the app」的输入框中之后,Github 会自动进行验证。
- 完成上述步骤之后,Github 会返回给我们一个 Recovery Codes,这个 Codes 需要我们点击 「Download」 保存在本地。
- 最后点击「I have saved my recovery codes」完成设置
后续要登录 Github 除了输入密码之外,还需要通过输入 TOTP 应用提供的 code 来进行登录。
我们也可以进行编辑操作:
点击 「edit」之后,会重复上述展示二维码的步骤,按照之前说的进行操作即可。
如果设置了 2FA,但是在登录时手机 App 被卸载怎么办?
这种场景比较少见,我们在登录时,如果没有 Authentication code,可以使用保存在本地的 Recovery code 进行验证登录:
然后将我们保存在本地的 Recovery code 中的任意一个 code 输入进去即可完成登录。