网络钓鱼

网络钓鱼(Phishing)是一种社会工程学攻击,在这种攻击中,用户被欺骗,使其相信自己正在与一个他们拥有账户的网站进行交互,而实际上他们是在与攻击者进行交互。攻击者说服用户在虚假网站上输入他们的凭据,从而窃取用户的凭据。

概述

网络钓鱼是一种非常古老但仍然非常普遍的攻击,它已经经历了许多变种,既是为了规避防御,也是为了利用新的漏洞。尽管如此,在基本形式上

  1. 攻击者注册一个与目标网站相似的域名。例如,如果用户的银行网站是my-bank.example.com,攻击者可以注册my-bank.examp1e.com
  2. 攻击者在该地址创建一个看起来像真实网站的网站。
  3. 攻击者发送一封电子邮件给用户,声称来自my-bank.example.com,并给出某个理由要求用户访问该网站,其中包含指向虚假网站my-bank.examp1e.com的链接。
  4. 用户点击链接并被要求登录。他们输入用户名和密码,攻击者现在就拥有了他们的凭据。

网络钓鱼攻击有时会使用不同的技术来联系受害者,例如短信或语音电话,有时甚至根本不涉及网站,而是说服用户口头告知密码或 PIN 码。

有些网络钓鱼攻击是高度不加区分的,它们会向大量潜在受害者发送大量消息,希望其中一些能被欺骗。另一方面,在鱼叉式网络钓鱼(spear-phishing)攻击中,攻击者会研究特定的受害者,收集有关他们的个人信息,以使诱饵更具说服力。例如,电子邮件可能声称来自受害者认识的人,甚至包含私人信息。

网络钓鱼攻击并非只针对天真或缺乏经验的用户:数十年的经验表明,即使是经验丰富、知识渊博的用户也可能容易受到网络钓鱼攻击,尤其是当他们忙碌、疲惫或分心时。

防御措施

网络钓鱼的一个挑战在于,目标网站完全不参与攻击。它完全依赖于用户被攻击者欺骗。在本节中,我们将讨论一些可能有所帮助的做法,但唯一真正有效的是使用通行密钥(passkeys)而不是密码。

DNS 配置

网络钓鱼邮件经常伪造发件人地址,让受害者认为邮件确实来自目标网站。三个DNS 记录有助于电子邮件服务器检测这些伪造,从而确保网络钓鱼邮件在受害者电子邮件客户端中被标记为垃圾邮件,或者被完全阻止。

  • 安全策略框架 (SPF) 记录列出了允许从域名发送电子邮件的地址。接收电子邮件的服务器会从邮件的Return-Path 头部提取域名,并查找与该域名关联的 SPF 记录。
  • 域名密钥识别邮件 (DKIM) 记录使发件人能够数字签名电子邮件。接收服务器从签名中提取域名,并使用它来查找与该域名关联的 DKIM 记录。DKIM 记录包含用于验证签名的公钥。签名中的域名也必须与邮件From 头部中的域名对齐(这基本上意味着域名必须匹配,或者From 头部中的值必须是签名中域名的子域)。
  • 基于域的消息身份验证、报告和一致性 (DMARC) 告诉收件人如何处理 SPF 和 DKIM 失败:是将其作为垃圾邮件隔离、拒绝还是允许。

您应该为您的域名设置这些 DNS 记录,以帮助电子邮件服务器识别伪造的消息。

密码管理器

密码管理器可以提供一定程度的针对网络钓鱼攻击的保护。它们主要执行三个功能:

  • 密码生成:用户注册时创建强密码。
  • 密码存储:安全地存储用户的密码,这样用户就不必记住它们(因此可以使用更强的密码)。
  • 密码输入:当用户访问网站的登录页面时,自动输入用户的密码。

最后一个功能可以帮助防范网络钓鱼。用户可能看不出虚假域名my-bank.examp1e.com与真实域名my-bank.example.com之间的区别,但密码管理器会,因此它不会在虚假网站上自动输入真实密码。幸运的是,这足以警告用户登录请求不是合法的。

作为一名 Web 开发人员,您无法让您的用户使用密码管理器。但是,如果您不小心,您可能会使密码管理器无法与您的网站集成。文章使密码管理器与您的登录表单协同工作是对想要让用户在您的网站上使用密码管理器的最佳做法和需要避免的做法的绝佳总结。同样重要的是,要使用密码管理器测试您的网站,包括浏览器内置的密码管理器和流行的独立应用程序。

不幸的是,用户已经被训练成预期工具有时会失败,并设法绕过其故障。因此,即使某个用户拥有密码管理器,并且它与您的网站兼容,并且在网络钓鱼尝试期间不自动填充密码,您仍然无法保证用户不会手动粘贴密码。

多因素认证

使用多因素身份验证 (MFA) 对用户进行身份验证可以使网络钓鱼更困难,但根据所使用的具体方法,并不能完全阻止它。

特别地,在最常见的 MFA 实现中,用户需要输入他们的密码和另一个代码,称为一次性密码(OTP),该代码对于本次登录尝试是唯一的。两种常见的变体是:

  • 基于短信的 OTP

    • 用户在注册时提供他们的手机号码。
    • 用户提供用户名和密码后,网站会向用户发送一条包含 OTP 的短信。
    • 用户输入 OTP。
    • 如果 OTP 值匹配,用户将被登录。
  • 基于时间的 OTP (TOTP)

    • 用户安装了身份验证器应用程序。
    • 用户提供用户名和密码后,网站会使用当前时间作为输入来计算 OTP。
    • 用户的身份验证器进行相同的计算,用户输入应用程序生成的 OTP。
    • 如果 OTP 值匹配,用户将被登录。

TOTP 被认为比基于短信的 OTP 更安全,因为攻击者有可能拦截短信。但是,从网络钓鱼的角度来看,这两种方法都容易受到攻击。

为了钓取使用 OTP 作为第二因素的用户,攻击者的虚假网站是用户和真实网站之间主动的中间人(man-in-the-middle)。

  1. 攻击者发送电子邮件给用户,其中包含指向虚假网站的链接。
  2. 用户点击电子邮件中的链接,并在虚假网站上输入他们的用户名和密码。
  3. 虚假网站将用户名和密码中继到真实网站。
  4. 真实网站生成一个 TOTP。
  5. 虚假网站要求用户输入他们的 TOTP。
  6. 用户的身份验证器应用程序生成相同的 TOTP,用户在虚假网站上输入它。
  7. 虚假网站将 TOTP 中继到真实网站,攻击者被授予访问权限。

Diagram showing how a phishing attack can work against 2-factor TOTP authentication

这比仅仅钓取密码要困难得多,因为攻击者必须实时操作。然而,网络钓鱼工具包大大降低了完成此操作的复杂性。

Web Authentication (通行密钥)

最强大的技术防御网络钓鱼的方法是使用基于Web Authentication API通行密钥(passkeys)来验证用户。

通行密钥在用户注册网站时创建,并且仅限于最初创建它的源(origin)。通行密钥由一个称为身份验证器的模块生成并存储,该模块内置于用户的设备或连接到用户的设备。

与密码或 OTP 代码不同,用户从不在网站上手动输入通行密钥:实际上,通行密钥根本不会传输到网站。当网站要求用户使用 Web Authentication 进行身份验证时,浏览器会向身份验证器请求一个与网站源匹配的通行密钥。如果找到,身份验证器会生成一个令牌,浏览器将其发送到网站。网站验证令牌并登录用户。

由于通行密钥特定于网站源,如果为用户在my-bank.example.com 的账户创建了通行密钥,用户将无法在my-bank.examp1e.com 上使用它。浏览器根本不会认为它适用于虚假网站。

这使得通行密钥成为一种有效的网络钓鱼防御手段。通行密钥比密码或 OTP 是更新的身份验证方法,围绕它的工具集也不够成熟。然而,这种情况正在改变,通行密钥最终可能会取代密码,成为 Web 上最常见的身份验证方法。

个性化安全指示器

另一种网络钓鱼防御措施,现在已不再常用,是网站在其登录页面向用户显示一个秘密消息或图像。

  1. 用户注册后,会要求用户选择一个与他们的账户关联的秘密消息或图像。
  2. 当用户登录时,他们首先输入他们的用户名。
  3. 登录页面随后显示与账户关联的秘密。
  4. 如果秘密不是用户预期的,那么用户就不应该输入密码。

其想法是攻击者不知道秘密是什么,因此无法在虚假登录页面上显示它。

在此技术的变体中,网站使用持久性 cookie 来决定显示哪个秘密,而不是用户名。

实际上,这种技术存在一些困难:

  • 它依赖于用户关注安全指示器:也就是说,它依赖于用户教育。经验表明,作为一项通用原则(即,在安全管理的公司的受控环境之外),用户教育在防止网络钓鱼攻击方面效果不佳。
  • 取决于用于决定显示哪个秘密的机制,它可能容易受到与 MFA 相同的中间人攻击。
  • 服务器用于决定显示哪个秘密的机制可能容易受到攻击:例如,攻击者可能更容易发现用户名而不是密码。有了用户名,攻击者就可以确定秘密并构建一个令人信服的虚假网站。

由于这些弱点,这种防御措施很少使用:MFA 和通行密钥都被认为是更强大的防御措施。

防御总结清单

  • 为您的域名设置 SPFDKIMDMARC DNS 记录。
  • 考虑使用通行密钥来验证用户。
  • 如果您使用密码,请考虑使用 MFA,并确保密码管理器可以与您的网站协同工作。