对现代网络钓鱼策略的技术探索,从基础的 HTML 页面到先进的绕过多因素认证技术,并分析钓鱼者在 2025 年所使用的基础设施搭建与投递方式。
引言
到 2025 年,网络钓鱼依然是全球最普遍的网络攻击形式。实际上,全球 1.2% 的电子邮件流量为钓鱼邮件。这意味着每天有 34 亿封钓鱼邮件,但最终造成危害的数量并不多,因为“只有”3% 的员工会点击恶意链接。然而,一旦点击,就可能对公司造成灾难性影响。91% 的网络攻击始于向目标发送的恶意电子邮件。考虑到这一点,我们很容易理解为什么网络钓鱼依旧是威胁行为者最青睐的初始访问方式之一。
在 Quarkslab,我们的对抗模拟团队经常在渗透测试以及为客户提供的真实演练训练中执行高级钓鱼活动。
本博文的目标是回顾当前网络钓鱼攻击中使用的方法。我们将从攻击者的角度出发,分析所采用的技术以及恶意邮件是如何传送到受害者手中的。我们还将研究任何钓鱼活动的核心——也就是基础设施。本技术回顾将仅聚焦于电子邮件钓鱼,不包括短信钓鱼(smishing)、语音钓鱼(vishing)和其他形式的社会工程攻击。
高级网络钓鱼技术
把自己置于攻击者的立场。你想攻破一个组织,你会怎么做?当然是钓鱼攻击,这是阻力最小的路径,但该如何实施呢?
在本节中,我们将介绍用于钓鱼活动中获取受害者凭据甚至会话的不同方法。所有这些方法都有其优点和缺点。
经典方法
HTML 页面
在高级钓鱼技术中提及经典的 HTML 钓鱼页面似乎有些奇怪,但这可能是最常用的方法。这种方法的核心是在构造一个模仿合法网站外观的 HTML 页面。例如,微软是钓鱼活动中最常被冒充的公司,钓鱼者常常复制其登录页面,以窃取受害者的凭据。
微软登录页面
钓鱼者只需要一个看起来与原始页面相似的页面,这意味着他可以移除或禁用所有不必要的元素。在上面的示例中,我们可以禁用除“下一步”按钮之外的所有按钮,链接也是如此。
💡 自定义重定向
另一种选择是,在用户点击不希望被点击的按钮时,将其重定向到一个伪造的错误页面。尝试在真实网站上触发错误并复制其设计。别忘了根据新的错误场景调整文字内容。
由于我们只需要保留页面的外观,因此有必要移除所有 JavaScript 脚本,主要原因是它们可能会向原始网站发送 HTTP 请求,从而使钓鱼页面被发现。但需要注意的是,如今的网站大多是在浏览器中动态生成的,所以应该在页面完全加载后再“导出”目标页面。正如下面的截图所示,页面源码(左)与加载后的页面(右)其主体是不同的。
页面加载前后 <body>
的差异
在多步骤页面中,例如微软的登录页面,保留某些动画效果可能会让页面对受害者来说显得更真实。在下面的示例中,我们可以看到一个带有加载圆点的动画,随后页面切换为请求用户输入密码。保留这些熟悉的效果有助于降低用户的警惕,因为它们会让用户产生邮箱正在被真实验证的错觉。
邮箱与密码提示之间的过渡
一旦受害者提交了他们的凭据,就将其重定向到一个合法网站,或显示一个错误页面。
💡 禁止返回
与其使用 POST 请求提交表单,不如使用 JavaScript 中的
fetch()
或ajax
来提交数据,然后通过window.location.replace(url)
进行跳转。这样可以防止用户使用返回按钮回到我们的钓鱼页面。
诡计多端的方法
浏览器中的浏览器(Browser-in-the-Browser)
2022 年,一位名为 mr.d0x(@mrd0x)的安全研究员提出了一种名为“浏览器中的浏览器攻击”(BITB,Browser In The Browser)的技术。他从一个简单的问题出发:如何让“检查 URL 是否正确”这条建议变得不再可靠?事实上,URL 通常是判断网站是否可信的一个重要指标,因为它无法被伪造。此外,许多网站允许用户通过受信任的第三方进行身份验证,例如 Microsoft、Apple、Google 甚至 GitHub。
Canva 登录页面上的多个第三方认证选项
例如,点击“使用 Google 继续”会弹出一个窗口,要求你使用 Google 账户登录。
使用 Google 登录的弹窗窗口(来源:mr.d0x)
而这正是技巧所在。钓鱼者可以仅通过 HTML、CSS 和 JavaScript 来复现这一行为。我们可以对传统的 HTML 钓鱼页面进行增强,将登录过程从一个异常域名“转移”到一个伪造的浏览器窗口中,并显示一个看似合法的 URL。这个伪造的浏览器窗口是一个可以像真实窗口一样拖动的 iframe,使其更加逼真。这样,只需添加一个“使用 X 登录”的按钮,就可以构造一个与目标凭据无关的钓鱼场景作为幌子。
BITB 演示(来源:mr.d0x)
适用于 Windows 和 macOS 的模型可以从 mr.d0x 的仓库 获取。他甚至为两个操作系统都制作了浅色和深色主题,可根据受害者的偏好显示。
💡 不仅仅是伪造浏览器
mr.d0x 的初始概念验证展示了一个伪造的浏览器窗口被打开,但我们可以在这个思路上进行扩展。钓鱼者甚至可以诱使用户在伪造的 SSL VPN 客户端(如 FortiClient)中输入凭据。
伪造 CAPTCHA
一个由名为 Blind Eagle(APT-C-36) 的 APT 组织使用的巧妙钓鱼技巧,旨在传播恶意软件。这种钓鱼技术伪装成 Google 的 reCAPTCHA 验证挑战,用于检测是否为人类用户。然而,它并不只是让用户勾选复选框或选择包含某些元素的方块,而是要求用户执行一系列组合按键操作。
伪造的 reCAPTCHA 验证(来源:JohnHammond)
这种方法依赖于受害者不了解他们所使用的快捷键。幕后脚本会将一个 PowerShell 的单行命令写入受害者的剪贴板。受害者按照指示打开“运行”窗口,然后粘贴恶意代码并执行,误以为自己完成了 CAPTCHA 验证。John Hammond(@_JohnHammond)基于这种钓鱼技巧发布了一个概念验证(POC),可以在他的 GitHub 仓库 中找到。他的版本看起来比 Blind Eagle 制作的更加逼真。此外,他还添加了一个诱饵 HTA 文件,用于执行恶意代码并显示一个伪造的错误提示,从而降低受害者的怀疑。
💡 执行方式
John Hammond 使用
mshta
来执行代码,但由于我们可以运行任意命令,因此可以选择任何方法来执行我们的载荷。本质上你已经拥有了远程命令执行的能力,唯一的限制就是你的想象力(以及一些安全检测机制)。
懒人方法
中间人攻击者(Attacker-in-The-Middle)
称这种技术为“懒人方法”可能有些误导,但它确实不需要太多编码技巧。这种技术被称为“中间人攻击者(Adversary-in-the-Middle)”,简称 AITM。其原理与传统的中间人攻击(MITM)非常相似:目标是让攻击者位于受害者(客户端)和真实服务器之间,充当一个反向代理。攻击者配置其服务器,当客户端连接时向真实网站发送请求,并将响应返回给客户端。整个过程对受害者来说是完全透明的。
利用反向代理实现的透明钓鱼(来源:mrgretzky)
我们无需编写任何 HTML 或 CSS,因为网页是由真实网站返回并由受害者的浏览器加载的。为此,我们需要在客户端发送的请求中动态替换所有想要代理的域名。我们可以使用由 Kuba Gretzky(@mrgretzky)开发的 AITM 钓鱼工具 Evilginx 3.0。正如 Evilginx 仓库中所提到的,这项技术最有趣的地方在于:它不仅可以捕获登录凭据,还可以获取会话信息(如 Cookies、令牌等),从而绕过多因素认证(MFA)。
Evilginx 3.3 命令行界面
使用 Evilginx 相对简单,完整文档可参考 这里,以下是简要说明。我们将用 Go 编译好的静态二进制文件部署到一台连接互联网的主机上,然后创建 DNS 记录,将钓鱼域名指向我们的 Evilginx 实例,该实例将充当 Web 和 DNS 服务器。最后,我们通过配置文件(或命令行)对 Evilginx 进行配置,指定要监听的接口、目标域名等。这是网络部分的配置,接下来我们需要创建“phishlets”,即用于特定网站的钓鱼配置文件,以生成钓鱼链接发送给受害者。
Phishlets 使用 YAML 编写,定义了反向代理在处理特定目标网站时的行为。例如,我们可以使用 proxy_hosts
指令指定要代理的域名;使用 sub_filters
实现动态字符串替换;使用 auth_tokens
和 credentials
分别指定要捕获的会话信息和登录凭据,通过正则表达式来匹配提取内容。Phishlet 格式的详细说明请见 这里。
💡 定制化响应
利用 phishlets 中的
js_inject
指令,可以让反向代理在返回响应时插入自定义 JavaScript 脚本。能够在受害者浏览器中执行 JavaScript 就像拥有超能力,几乎可以为所欲为,比如修改样式、记录键盘输入,甚至更多。
另一个具有相同功能、基于相同原理(反向代理)的工具是 Modlishka,由 Piotr Duszyński(@drk1wi)开发。不过,该工具的维护频率不如 Evilginx,也不太方便捕获非 Cookie 认证的会话(例如 JWT)。但这可以通过用 Go 编写自定义插件来实现补充。
Modlishka 启动信息
混合方法
无框架的浏览器内浏览器(Frameless Browser-in-the-Browser)
我们已经了解了多种有效但各有不足的钓鱼技术。将这些技术结合成一种“混合”技术,实际上可以提高其效果,甚至能够“绕过”某些钓鱼指标(IoP)。这里介绍一种名为“无框架 BITB”的技术,由 Wael Masri(@waelmas01)开发。该技术的核心思想很简单:使用 BITB 技术展示伪造的 URL,同时嵌入一个真实的代理认证页面。
传统的 BITB 技术使用 iframe 来加载钓鱼页面,但这容易被微软、谷歌等大型厂商检测并阻止。为了解决这个问题,无框架 BITB 通过用自定义的 HTML 代码替换原始认证页面的元素,实现类似效果。这样就不需要将页面插入 iframe,而是利用 CSS 的“魔法”完成。最终,用户与我们的页面交互,该页面看似位于“后台”且使用无关的 URL,同时显示由 Evilginx 代理的真实认证页面,并做了大量样式修改,例如在窗口显示伪造的 URL。这些元素增强了用户对钓鱼页面的信任,让他们觉得整个流程是合法的。
无框架 BITB 实际演示(来源:Wael Masri)
演示地址:https://blog.quarkslab.com/resources/2025-03-11_technical-dive-into-modern-phishing/frameless-bitb-in-action.gif
一个完整的视频在 YouTube 上展示了该攻击并解释了其原理。同时,所有复现此概念验证(POC)的步骤都可以在Wael 的代码库中找到。
💡 全面 BITB
该 POC 展示了如何用微软的登录页面创建 BITB,但这也适用于其他任何公司。只需做一些工作即可开发相应的模板。
重型方法
noVNC
本节将介绍一些用于钓鱼的“重型”技术。为什么称其为重型?因为它们需要攻击者端投入更多资源。到目前为止,我们见过的技术都是在受害者的浏览器中加载钓鱼页面,让受害者承担大部分计算负载。现在我们来看一些必须由攻击者自己加载页面并显示给受害者的技术。
其中一种技术是使用 noVNC。这项技术由同一位提出 BITB 技术的安全研究员 mr.d0x(@mrd0x)详细介绍。不过据他所说,这种技术早在这篇文章中就已有提及。不管怎样,其核心理念不变:在“展览模式”(kiosk mode)下托管一个网页浏览器,并通过 Web VNC 提供访问权限。由于受害者使用的是我们的浏览器进行认证,这就有效绕过了二步验证(2FA),因为我们可以通过导出浏览器配置文件来重用受害者的会话。需要注意的是,给受害者 VNC 访问权限意味着他们可能尝试跳出展览模式,访问远程机器的其他部分。为了防止这种情况,我们必须尽可能加强 VNC 的安全防护。
一个名为 EvilnoVNC 的优秀项目正是为解决上述问题而开发。该项目由红队网络安全专家 Joel Gamez Molina(@JoelGMSec)开发,使用 Docker 容器对浏览器进行沙箱隔离,减少逃逸风险。该项目已在多场会议上介绍。Joel 让使用变得非常简单,比如你想钓鱼 Google 账号,只需运行下面的命令即可。
EvilnoVNC 运行中(来源:JoelGMSec)
就是这么简单。它会负责启动容器,在展览模式(kiosk mode)下打开目标网页,甚至在设置为 dynamic
(而非固定的 1920x1080x24
)时,根据受害者浏览器自动调整分辨率。
受害者访问钓鱼页面时的视图(来源:JoelGMSec)
受害者的配置文件会保存在“Downloads”文件夹下,允许你将其导入到自己的浏览器中,并使用刚刚劫持的已认证会话浏览网站。
💡 保持登录状态正如Joel在他的博客中提到的,有些会话 Cookie 不能通过导入在另一个浏览器中重复使用,比如 Google 和 Microsoft 的 Cookie。你需要保持会话“运行”状态,不能关闭 EvilnoVNC。
WebRTC
“重度”类别还包括一种被称为“Browser-in-the-Middle”(BITM)的钓鱼攻击。此前我们介绍了将浏览器放在浏览器内(BITB),以及自己置于客户端和网站之间(AITM),现在我们将浏览器置于客户端和目标网站之间(BITM)。但如何做到这一点而不让受害者访问远程机器呢?答案很简单:通过浏览器流式传输。目标用户不需要直接操作浏览器——由我们操作。实际上,目标用户的操作会被同步到受控的浏览器,这意味着我们可以更好地控制用户的输入。
Forrest Kasler(@FKasler)制作了一款名为 CuddlePhish 的惊艳工具,正是用来实现这种攻击。他使用了 WebRTC 技术,专门为屏幕共享等功能设计。浏览器运行在 Xvfb(X虚拟帧缓冲器)中,这是一个常用于客户端测试的 X11 服务器,并通过 Puppeteer 进行控制。这样,目标用户的操作被代理到攻击者控制的浏览器,给人一种显示的是真实网页的错觉。
CuddlePhish 实战演示(来源:FKasler)
CuddlePhish 具有一个管理后台,允许你对会话执行多种操作。钓鱼者可以将用户重定向到不同页面,控制浏览器,随后将控制权还给受害者,甚至在目标用户认证成功后抓取其 Cookie。“发送载荷”功能非常方便,它可以强制在受害者的浏览器中下载攻击者指定的任意文件。
CuddlePhish 管理面板
💡 STUN 失败回退机制正如 Forrest 在他的博客文章和 Git 仓库的“故障排除”部分提到的,某些网络可能因 NAT 限制而无法使用 STUN。为解决此问题,我们可以部署自己的 TURN 服务器,绑定到 443 端口,并通过 coTURN 添加 TLS。默认情况下,它会同时接受 STUN 和 TURN 请求,因此当 STUN 被阻止时,CuddlePhish 会自动回退到 TURN。
技术对比
我们已经介绍了多种可用于钓鱼攻击的技术。每种技术都有其优缺点。以下基于多个维度对它们进行评估:
-
• 系统独立性:能否跨所有主流操作系统(Windows、MacOS、Linux)无缝工作,不受目标平台限制。 -
• 可扩展性:能否同时高效地攻击大量目标,避免计算或基础设施资源呈指数级增长。 -
• 绕过 2FA:能否绕过多因素认证机制,如推送通知、短信验证码和认证器应用的令牌。 -
• 真实性:能否模拟真实服务和用户界面,消除目标通常警觉的明显钓鱼痕迹。 -
• 移动兼容性:能否在移动设备上保持完整功能。
HTML 页面
-
• 优点:HTML 可在所有浏览器和操作系统上运行,后端资源消耗轻,即使针对大量目标也易于管理。可以完全控制视觉元素,完美还原目标应用界面,且在各种设备上灵活表现。钓鱼服务器与真实应用无直接连接,降低被检测风险。 -
• 缺点:无法处理 2FA,因为不与真实服务通信。明显痕迹如 URL 非真实网址,目标用户易察觉。且制作和维护高仿真页面耗时,且页面可能需随时更新。
Browser-in-The-Browser (BITB)
-
• 优点:真实性远超普通 HTML 页面,可伪造完整 URL 栏,用户注意力转移到模拟浏览器窗口。资源需求低,凭借与 HTML 页面相同的凭证记录器,易于同时管理大量目标。 -
• 缺点:无法绕过 2FA,因不与真实服务通信。窗口样式因操作系统和桌面环境不同而变化,移动设备不支持此法(无窗口概念)。
假 CAPTCHA
-
• 优点:仅需简单 HTTP 服务器和 HTML 页面即可实现,能执行目标远程命令。 -
• 缺点:目前仅限 Windows 平台(因快捷键限制),平台特异性强。无法直接绕过 2FA,但可通过远程代码执行盗取会话。显示的 CAPTCHA 不真实,易被警觉用户识破。
Attacker-in-The-Middle (AITM)
-
• 优点:无需复杂开发,即可作为受害者与远程应用间的反向代理运作。资源需求低,一台服务器即可处理大量目标。跨设备兼容,平台无关。攻击者处于中间,可转发 2FA 验证并截取会话,实现绕过。 -
• 缺点:高级用户能辨别钓鱼域名与真实域名差异。
Frameless BITB
-
• 优点:是经典 BITB 的改进版,继承其所有优势。额外可绕过 2FA。 -
• 缺点:继承原方法缺点,窗口样式与目标环境不匹配易暴露钓鱼。仅限桌面设备,移动设备不支持。
noVNC
-
• 优点:受害者通过自己的浏览器直接登录钓鱼者控制的浏览器,攻击者侧保存会话。支持任意设备,能根据受害者浏览器动态调整分辨率,兼容移动设备。 -
• 缺点:若 VNC 没有充分加固,受害者可能绕过限制访问整台机器,安全风险高。每实例只能钓取一个目标,资源需求随着目标增加迅速增长。URL 非原始网站,存在明显钓鱼标志。
WebRTC
-
• 优点:受害者通过视频流直接在钓鱼者浏览器中认证,真正绕过 2FA,会话存储于攻击者浏览器。支持所有设备(包括移动设备)。 -
• 缺点:网络慢时显示效果差,页面模糊容易引起怀疑。URL 与真实域名不符。虽然可扩展,但每个目标需生成一个 Docker 容器实例,资源消耗大。
钓鱼基础设施
当渔夫出海捕鱼时,他需要一艘可靠且坚固的船,才能放心完成任务。钓鱼攻击者(phisher)进行行动时也是如此:他们需要一套强健的基础设施来满足其需求。本节将探讨这些需求是什么,以及如何满足这些需求。
托管环境
执行一次钓鱼活动,最低要求可能只是一台云端的简单 VPS,配置非常低,比如 1 个虚拟 CPU 和 2GB 内存。我们还需要一个公网 IP 地址,以便目标用户能够连接。这几乎就是实现上文提到的各种钓鱼技术所需的全部条件。
然而,如果想要实现更规范的架构,将不同服务分开部署,并且妥善处理敏感数据,基础设施的设计可能会有所不同。
首先,如前所述,我们将处理一些敏感数据,比如有效的会话 Cookie 或明文凭证。为了降低这些数据被他人窃取的风险,重要的是不要将它们存储在 VPS 上,而应存储在你完全掌控的机器上。即使这台服务器进行了加固,它仍暴露在互联网中,可能因尚未公开的漏洞被攻破,导致严重的信息泄露。
一个良好的做法是搭建一个暴露在外的反向代理,将请求转发到内部的本地服务。这些本地服务通常包括钓鱼工具、SMTP 邮件服务器以及其他一些实用应用,后续会详细介绍。
仅暴露反向代理
其次,我们必须选择一个或多个与钓鱼借口(幌子)相匹配的域名。对此,有几种可选方案:注册新域名、注册已过期域名、使用可信域名。
注册一个与钓鱼主题完美契合的新域名,能够毫无疑问地引诱受害者上钩,听起来很诱人。但需要注意,域名的“年龄”是钓鱼检测中的关键因素。新注册且尚未在互联网上被广泛识别的域名,可能会让你的钓鱼行为更显可疑。域名需要一定时间和访问量来被分类。实际上,域名的良好分类能降低进入垃圾邮件或被公司代理阻挡的几率。以下是一些可以检查域名分类的工具:
-
• 趋势科技网站安全中心 (Trend Micro Site Safety Center) -
• FortiGuard 网页过滤查询 -
• Palo Alto Networks URL过滤 — 测试网站 -
• Symantec 网站审核 (Sitereview) -
• McAfee URL检查 -
• Talos IP和域名信誉中心 -
• 谷歌透明度报告
如果你想跳过域名分类这一步,可以选择注册一个已经获得分类的过期域名。寻找此类域名的最佳途径是使用 ExpiredDomains.net。该网站列出了所有过期域名,并支持高级筛选搜索。你甚至可以创建符合特定条件的关注列表,并在域名释放时通过邮件接收通知。务必检查域名信誉,因为有些域名可能已经被归类为“钓鱼域名”。
ExpiredDomains.net 首页
ExpiredDomains.net 的高级筛选搜索
找不到合适的过期域名,或者新注册的域名分类有问题?我们可以借用一个可信的域名。这个思路很简单:利用云服务获取一个域名。比如,在 Azure 上创建虚拟机时,会分配一个公网 IP 地址。Azure 允许你为其域名设置自定义子域名。下面我们选择添加 “auth” 作为子域名,最终用于诱导受害者输入他们的 Azure 凭据,适用于目标是 Azure 用户的场景。
在 Azure 中为公网 IP 地址配置 DNS 名称
最终结果是你拥有一个子域名 auth.francecentral.cloudapp.azure.com,它会解析到你的虚拟机。
DNS 解析至钓鱼者的虚拟机
同时,该子域名继承了微软 Azure 域名的信誉。它通过了我们使用上述列表进行的所有检查。当然,其他主要的云服务提供商,如亚马逊 AWS 和谷歌云平台 GCP,也可以用来达到同样的效果。
多项检测中的良好分类与信誉
💡 伪造的 Punycode
Punycode 是一种长期被用来欺骗人类的技术,通过展示一个与原始网址极为相似的 URL。例如,钓鱼者可能注册域名 аррӏе.com,看起来几乎与 apple.com 一模一样。如果你没注意到,组成 apple 的字母都被替换成了外观相似的 Unicode 字符。然而,你的浏览器会在地址栏显示 xn--80ak6aa92e.com。如今,这种技术也被邮箱服务提供商检测到,几乎所有此类邮件都会被标记为垃圾邮件。
协同管理
这里的协同管理指的是不同元素之间协调合作以实现预期效果。我们可以把协同管理看作是整个基础设施的大脑和核心。虽然没有完美的工具来完全胜任这个角色,但我发现 Gophish 是最佳选择。Gophish 自称是“一个为企业和渗透测试者设计的开源钓鱼工具包”。它确实具备多个很棒的功能且易于部署,是钓鱼者的控制面板。
Gophish 允许你同时管理多个钓鱼活动。每个活动包含启动数据、钓鱼 URL、目标群体等配置信息。基本上,你可以创建包含名字、姓氏、电子邮件和职位的“群组”,然后将这些群组分配到不同活动中。
你还可以设置“发送配置文件”,实际上就是活动中使用的发送者身份。发件人字段可以自定义以匹配你的借口。发送配置文件允许你使用指定凭证(或匿名)连接到 SMTP 中继或服务器,并用其发送邮件。一个很酷的功能是可以通过发送测试邮件来检查活动是否能够成功投递。
Gophish 允许用户直接在浏览器中创建邮件和登录页面模板,然后导入使用。模板中可以使用一些占位符,如目标的姓名或电子邮件地址,使得定制邮件对受害者更具说服力。登录页面可以为空,或者在创建邮件模板时指定不同的 URL。这样,Gophish 可以用于发送邮件并跟踪活动结果,同时还能结合其他钓鱼技术使用。
Gophish 活动跟踪页面
创建钓鱼活动的典型流程如下:
-
1. 添加或导入目标群组 -
2. 创建或导入邮件模板 -
3. 创建登录页面(仅适用于经典的 HTML 页面) -
4. 创建发送配置文件并测试发送邮件 -
5. 创建并安排活动时间 -
6. 赚钱盈利
💡 无缝集成
Kuba Gretzky 创建了一个集成其 Evilginx 工具的 Gophish 分支。这允许钓鱼者利用 Evilginx 提供的双因素认证(2FA)绕过功能,同时保留 Gophish 提供的活动管理和跟踪功能。你甚至可以结合 Evilginx 的
js_inject
功能使用 Gophish 模板中的占位符,从而向代理响应注入自定义 JavaScript。
保护措施
在反向代理重定向器后搭建基础设施是一个良好的开端,但这还不够。我们需要进一步强化安全。目标是尽可能控制访问你的钓鱼页面的访客,因为链接会出现在你发送给目标的邮件中。在邮件到达预定接收人之前,它会被多次通过各种检测机制(如沙箱环境)分析,这些机制试图在邮件进入收件箱前拦截不良邮件。钓鱼者可以采用与合法网站相同的方法来保护其页面免受机器人和不受欢迎访问的干扰。
在反向代理层面可以实现的基本保护措施是基于用户代理(User-Agent)和 IP 地址的访问白名单。使用 Nginx 配置即可实现。
你可以使用 ~*
操作符对 User-Agent 做不区分大小写的匹配,如下例所示。这样会阻止所有 User-Agent 中包含 "googlebot"、"curl" 或 "python" 的访问者。也可以反过来,只允许识别为目标使用的浏览器 User-Agent 访问。下面的示例中,如果目标没有使用 Firefox、Chrome 或 Safari,则会被阻止访问。
location / { # if contains one of the following, block if ($http_user_agent ~* "googlebot|curl|python") { return 403; } # if doesn't contain one of the following, block if ($http_user_agent !~* "gecko|chrome|applewebkit") { return 403; }}
要允许或阻止来自特定 IP 地址的请求,我们可以使用 Nginx 的 ngx_http_access_module
模块。例如,如果你只想允许来自法国的连接,可以将这份列表添加到你的 Nginx 配置中,示例如下。
location / { allow 1.179.112.0/20; allow 2.3.0.0/16; allow 2.4.0.0/14; [...] deny all;}
这些防护措施非常基础,因为通过修改用户代理和使用代理服务器发送请求,很容易被绕过。为了提升防护效果,我们可以借助外部服务来对抗机器人。例如,钓鱼者可以使用 Cloudflare 来代理其页面。Cloudflare 提供免费的套餐,包含许多强大功能,如 SSL 证书(比经常被滥用的 LetsEncrypt 更受信任)、Web 应用防火墙和简单的机器人防护。启用“攻击模式”(Under Attack Mode)后,Cloudflare 会显示一个过渡页面,使用其替代的 CAPTCHA 解决方案 Turnstile,强制用户完成验证后才能继续访问。
启用“攻击模式”保护的网页
另一种选择是使用谷歌 reCAPTCHA,并设置一个自己的页面,如果用户通过验证,则将其重定向到最终页面。一个不错的方法是模仿谷歌著名的“异常流量”(Unusual Traffic)页面。用户可能对这个偶尔出现的简单页面比较熟悉,从而增加了诱饵的可信度。
伪造的谷歌异常流量页面
如果作为钓鱼者,我们选择这条路,开始构建自己的重定向机制以允许特定用户访问页面,那么在精细化控制方面将没有限制。例如,我们可以允许目标用户仅访问钓鱼页面一次,之后的任何尝试都会被阻止。或者,不那么严格地,只允许已识别为非机器人的访客访问页面。一个解决方案是使用 Fingerprint —— 一个收集指标并通过“智能信号”(Smart Signals)进行评估的脚本。通过这种方式,我们可以授权页面访问权限给第一个真人访客,同时将 Fingerprint 生成的标识符与插入 URL 中的唯一标识符关联起来。之后,任何尝试访问相同 URL 的访客都会被阻止,因为两个标识符不匹配。
Fingerprint 生成的唯一标识符
💡 智能信号(Smart Signals)
Fingerprint 不仅分配唯一标识符或检测机器人,还会分析浏览器数据以获取访客的精准画像。通过这种方式,Fingerprint 能检测出多种有助于判断访客是否为有效目标的重要信息:
• 虚拟机环境 • 模拟的安卓设备 • 隐身模式(无痕浏览) • 用户代理(User-Agent)伪装
发送方式
现在我们已经了解了钓鱼者如何搭建并保护自己的基础设施,接下来仔细看看他们是如何成功将恶意邮件送进目标收件箱的。本节将介绍钓鱼者发送看起来可信的钓鱼邮件的不同方式,从而引诱目标点击链接并上当受骗。
发件人
当然,作为钓鱼者,我们本可以花时间搭建一个 SMTP 服务器,强化其配置,从而提升其在互联网中的信任度。但这种方法既费时,有时还可能失败。为了绕过信誉过滤、提高送达率,攻击者往往选择使用已有的知名解决方案,现成可用。
既然互联网上有那么多可用的 SMTP 中继服务器,为什么还要花时间自己搭建呢?其中一个原因可能是伪造目标域名。这是一种如果目标缺少某些 DNS 记录,攻击者就可以冒用目标域名的策略。一个很好的检测此类错误配置的工具是 Spoofy。它检查 DNS 记录,并根据响应告诉你域名是否可被伪造。你还可以参考这张表格来了解某个域名是否可被伪造。如果可以,且你发送的恶意邮件假装来自该域名,那么很有可能邮件会直接进入受害者的收件箱。
Spoofy 识别出的可伪造域名
另外,我们还可以利用互联网上一些开放或配置错误的 SMTP 服务器。这正是钓鱼者常用的手法。他们利用服务器可能存在的配置缺陷,比如没有正确的身份验证,借助这些服务器发送钓鱼邮件。值得一提的是,这些服务器可能已经在之前的钓鱼活动中被使用过,因此其信誉可能已经受到影响。
为了解决这个问题,钓鱼者会转而使用第三方营销和邮件服务,比如 Mailchimp、Mailjet 或 SendGrid。这些平台经常被滥用,因为它们提供了可信赖的邮件发送基础设施,钓鱼者可以将其与自己精心挑选的域名配合使用。此外,这些服务还为攻击者提供了许多实用功能,比如能够追踪邮件是否成功送达。大多数第三方邮件服务都提供免费套餐,允许每月发送数千封邮件,下面是一张免费套餐对比表:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
云服务提供商成为钓鱼者另一个有吸引力的攻击途径,因为它们提供具有可信基础设施的电子邮件服务。例如,微软 Entra ID(Azure)会提供格式为 <tenant>.onmicrosoft.com
的域名,这在社会工程学攻击中尤其有效。由于这些邮件来自微软的基础设施,它们自然显得更可信,更有可能直接进入收件箱。当人们看到发件人地址中带有微软域名时,更容易放松警惕,信任邮件内容。举例来说,我们可以通过创建租户名为“helpcenter”,并将用户命名为“support”,来冒充微软支持团队,从而让目标相信这是一封权威的邮件。
假冒微软支持账号
想要获得更高的信任度吗?企业邮箱妥协(BEC)将钓鱼提升到了全新高度。钓鱼者不再仅仅是创建假账户或伪造身份,而是利用他们通过钓鱼或暴力破解攻击已经入侵的合法企业邮箱账号。当用于内部钓鱼时,这些邮件几乎百分百能够送达最终收件箱,并且拥有极高的信任度。即使是针对外部用户,这些被入侵的账户也能借助公司已有的声誉、既有关系和合法域名,保证邮件顺利送达目标收件箱。
💡 以钓鱼对付钓鱼
钓鱼者想要达到目标时,可以采用一种隐秘方式:先钓鱼入侵一个更脆弱、警觉性较低的目标,然后利用该受害者账户去接触那些对外部攻击更警惕、但不会怀疑来自内部同事邮件的对象。这种技术尤其危险,因为只要借口合理,很多钓鱼的警示信号就会被压制掉。
虽然不是新招,但滥用联系表单的手法近来重新流行起来。钓鱼者利用联系表单有两种方式:一是当表单被提交时,指定的邮箱会收到该信息副本;二是信息只被钓鱼目标公司收到。在这两种情况下,攻击者都是利用合法服务向目标发送恶意链接。有趣的是,这种方式邮件送达的成功率非常高,且钓鱼者发送消息的数量可能无限制。
邮件外观
我们已经了解了如何将邮件成功送达目标邮箱,以及如何最大化邮件进入收件箱而非垃圾箱的几率。在目标还未察觉或已经相信发件人合法的情况下,接下来需要让邮件的外观进一步说服受害者。我们需要利用多种认知偏差,促使受害者继续相信邮件的真实性。
钓鱼者会复制邮件布局,开始利用“视觉熟悉效应”。作为人类,我们对“单纯曝光效应”非常敏感,这是一种偏差,表现为我们会自然偏好那些曾经见过的事物。攻击者在设计邮件时自然而然地依赖这种效应,因为它能自动激发目标的正面第一反应。邮件布局通常包括标志、标题、副标题、正文、图片和页脚。这些都是微软或 DocuSign 等公司自动发送邮件中常见的元素。近年来,DocuSign 邮件频繁被用于各种主题钓鱼活动,模拟有人与你共享文档时发送的相同邮件。
DocuSign 主题钓鱼邮件(来源:卡巴斯基)
品牌冒充通过尝试复制潜在受害者经常见到并认可的某些模式和细节来实现。钓鱼者利用这种一致性偏差,满足目标长期形成的某些预期。例如,上图中的钓鱼邮件截图重复了下方这封来自 DocuSign 的合法邮件中的关键元素(图形元素最近有所更新)。结构相同:一个图标居中放置在彩色横幅中,带有需要执行的操作和按钮,下面是文件发送者及其留言,最后是带有信息和指示的经典页脚。
原始 DocuSign 邮件
💡 HTML 标志
图片,尤其是公司标志,常被用来冒充品牌并增强邮件的可信度。然而,大多数邮件客户端会屏蔽远程内容或 base64 编码的图片。绕过此限制并保持图片效果的一种方法,是仅用 HTML 和 CSS 重新创建标志。例如,这个 gist 可以用来制作微软标志。请注意不同邮件服务商和客户端对 CSS 的兼容性,因此最好在与目标环境相同的环境中进行渲染测试。
我们对邮件合法性的判断还会受到权威偏见的影响,因为我们通常较少质疑权威人物。一般来说,来自经理或同等级别人员、且带有与原邮件相同签名的邮件,更具说服力,目标用户也更少怀疑其合法性。同样的情况也可能出现在假冒 IT 管理员的邮件中,比如以“根据新政策请更改密码”为由,声称这是为了你的“安全”,从而让你顺从执行。
最后,钓鱼者会施加压力以获得更快的回应,再次减少你的思考时间,可能导致你做出原本不打算采取的行动,这被称为“紧迫偏见”。虽然这种偏见通常通过文字内容表现出来,视觉元素也能加强其效果。例如,在之前假冒 IT 管理员的例子中,邮件包含一些指令性说明、截止日期以及未执行动作的后果。所有这些元素都会以加粗或彩色字体突出显示。字体也可以精心选择以吸引注意。下面是一个利用紧迫偏见的高亮预设文本简单示例:
利用多种偏见的钓鱼邮件
链接
链接是邮件中最后一个需要精心设计的元素。本节将探讨钓鱼者用来让恶意链接看起来更可信,并绕过如邮件过滤等安全措施的各种技巧。
URL 缩短服务可以将较长的 URL 转换成更短的版本。虽然这些服务最初是为了方便分享链接,尤其是在字符限制的平台上,但现在它们常被滥用于钓鱼活动。常见且提供免费计划的 URL 缩短服务包括 Bitly、T.ly、Rebrandly(或免费版)、Short.io、Cutt.ly。
这些服务为钓鱼活动带来了几个关键优势。最主要的是可以利用信誉良好的域名(可通过前述分类工具检测)生成短小且简洁的链接。许多服务还支持自定义子域名和路径,使钓鱼者能够打造与其借口完美匹配的链接,比如:
-
• https://bit.ly/office-365-sign-in -
• https://t.ly/account-microsoftonline-com -
• https://rebrand.ly/login-microsoftonline-com -
• https://microsoftonline.short.gy/login -
• https://cutt.ly/sign-in-to-continue
结合了高信誉域名和精心设计路径的短链接,在钓鱼活动中特别有效。当目标看到熟悉的短链接域名后跟相关关键词时,往往更容易信任该链接。
跨站脚本(XSS)和开放重定向漏洞为钓鱼者提供了重大机会。这类漏洞发生在网站接受用户控制的输入,指定重定向目标 URL 却未进行有效校验。攻击者利用这些漏洞借助可信域名,使恶意链接看起来合法。
该技术尤其有效,因为初始域名是合法且受信任的,能立即给受害者带来安全感。重定向自动发生,用户几乎无时间注意到域名变化,顺畅跳转到恶意网站。大多数用户习惯只检查 URL 开头的合法性,使开放重定向成为极具欺骗性的手段。
举个具体例子,安全研究员 Jip (@jipisback) 最近在 X(原推特)上分享了一种滥用 YouTube 重定向功能的方法,步骤如下:
-
1. 找到任意带有外部链接的 YouTube 视频描述 -
2. 复制重定向 URL,形式应为: https://www.youtube.com/redirect?event=video_description&redir_token=TOKEN&q=URL&v=VIDEO_ID
-
3. 修改 q
参数指向你的目标网站 -
4. 得利
我们做了一个示例,重定向到 Quarkslab 的网站:
https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbmhkMTluUmZ4VVhPMk84TXdjTDN1NEFaVFhnZ3xBQ3Jtc0tsRkdrdlR5djhhSk1Uc3JxcFUzcXpETzkxT2dUWnFIOGpsYmExR3lDWHB6Q0ZMNFVhbllLYnM2WERDbFpOSDNmZmdkTkVBa0VFQnhsM2taWDZSMVlaUEJyZTZaY1JxaGpDMk1kdTk2X2IzNllIcHZ2Yw&q=https%253A%252F%252Fwww%252Equarkslab%252Ecom%252Fpentest%252Dproactive%252Dthreat%252Dmitigation%252F
💡 重定向链
在利用开放重定向漏洞时,应将重定向目标设置为 URL 缩短服务的地址,而非实际的钓鱼域名。此技术带来两个关键好处:一是防止易受攻击的应用程序记录你的真实钓鱼域名;二是增加了另一层混淆,使用户更难察觉钓鱼行为。
云服务提供商为攻击者创造了生成看似合法 URL 的强大手段,这些 URL 能绕过安全防护措施,甚至欺骗那些有钓鱼防范意识的用户。这些平台提供受信任的域名,继承了大型科技公司的声誉。下表列出了一些可能被用于恶意目的(如钓鱼)的服务,列表并不完全。
云提供的域名已经成为完美的钓鱼工具,利用了像 Microsoft、Amazon 和 Google 这样受信任的品牌名称,能够轻松通过安全检测。这些域名配备了受信任的 SSL 证书,且安全解决方案很少阻止它们,因为它们承载的是合法的业务流量。它们通常被归类为“商业/科技”类别,而非“可疑”。虽然云服务提供商确实尝试通过关闭可疑站点来防止滥用,但攻击者通常能够在未被发现的情况下运行足够长的时间来完成他们的攻击活动。
例如,一个像 auth.francecentral.cloudapp.azure.com(前文托管部分提到的)这样的域名,应能通过所有安全检测,同时对识别“Azure”作为微软产品的用户来说显得十分可信。
结论
钓鱼攻击的形态已经发生了重大转变,从简单的 HTML 页面发展到更先进的技术,比如 Browser-in-The-Browser (BITB)、Attacker-in-The-Middle (AITM) 和基于 WebRTC 的方法。有些方法甚至结合使用,形成更强大的技术,如 Frameless BITB。这些技术展示了绕过多因素认证和打造逼真用户体验的日益成熟。
与此同时,利用云提供商域名的基础设施改进和复杂的投递方式,使得恶意邮件越来越难被检测。2024 年,根据 Fortra 的报告,Cloudflare Workers 的滥用增加了 104%,Cloudflare Pages 的滥用增长了 198%。不过,他们已经意识到这些滥用行为,并正努力尽快响应。
随着 人工智能 的兴起,攻击者手中拥有越来越强大的工具来打造更具说服力的钓鱼活动。然而,这项技术同样可被防御者利用,通过识别人类可能忽略的细微信号来检测钓鱼尝试。
有效防范钓鱼需要多层次的策略,结合技术控制与人类意识。组织需要实施先进的邮件过滤、终端保护和网络监控,同时保持安全团队和员工对新兴钓鱼技术的了解和警觉。
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论