ReelPhish:一种实时双因素钓鱼工具

 

一、基本概念

社会工程学攻击对企业而言始终是一种安全威胁,因为这种攻击活动针对的是最为薄弱的安全环节:人。这种攻击通常会捕捉并存储受害者的用户名及密码,以待攻击者稍后使用。通常情况下,双因素身份认证(Two-Factor Authentication,2FA)或者多因素身份认证(Multi-Factor Authentication,MFA)机制是应对这类安全威胁的解决方案。

2FA可以在典型的用户名及密码认证层上再添加一个身份认证保护层。目前有两种常见的2FA实现方案,分别为一次性密码(one-time passwords,OTP)以及推送通知。一次性密码由另一款设备(比如硬件令牌生成器)负责生成,与特定用户绑定。这些密码通常会在30到60秒之内过期,不能重复使用。推送通知需要向用户的移动设备发送提示信息,要求用户确认登录请求。这两种实现方案都可以保护用户免受利用用户名及密码的传统钓鱼攻击影响。

 

二、实时钓鱼

虽然安全专家极力推荐在个人及商业应用程序中使用2FA解决方案,但其实这种方案并非完美无缺。攻击者已经通过实时钓鱼(real-time phishing)技术突破了2FA的防线。在这些钓鱼攻击中,攻击者需要与受害者实时交互。

举个简单的例子,现在有一个钓鱼网站,要求用户输入一次性密码以及正确的用户名及密码。一旦用户在钓鱼网站上填写认证信息,完成认证过程,钓鱼网页会给用户返回一个通用的“登录成功”页面,并且成功捕捉到用户的一次性密码(但暂未使用)。此时,攻击者可以在一个较短的窗口期内,在令牌过期之前利用受害者的凭据。

许多社会工程学攻击活动已经用到了这些技术。从2010年起,已经有关于实时钓鱼攻击的相关报道。然而,人们通常会忽略这类攻击,因为这类攻击实际执行起来非常困难。本文的目标是改变人们这种看法,提高人们对此的警觉性,同时介绍新的攻击方案。

 

三、工具说明

为了改善社会工程学攻击流程,我们开发了一款工具:ReelPhish,这款工具能够简化实时钓鱼技术的复杂度。这款钓鱼工具的主模块运行在攻击者的系统上,包含一个Python脚本,用来监听攻击者钓鱼网站收到的数据,同时使用Selenium框架来调用本地安装的Web浏览器。该工具可以控制攻击者的Web浏览器,访问特定的网页,与HTML对象交互并抓取所需内容。

ReelPhish的另一个模块位于钓鱼网站中。嵌入在钓鱼网站中的代码可以将数据(比如捕捉到的用户名及密码)发送给在攻击者主机上运行的钓鱼工具。一旦钓鱼工具收到信息,则会使用Selenium启动浏览器,向合法网站发起身份认证请求。钓鱼网站服务器与攻击者系统之间通过加密的SSH隧道交互所有通信数据。

攻击者通过会话(session)令牌来跟踪受害者,钓鱼网站与ReelPhish之间的所有通信数据中都会包含此令牌信息。钓鱼工具可以借助该令牌,维持认证流程的状态,满足认证过程中涉及到的多个页面与不同挑战的具体需求。因为这款工具能够维持状态信息,因此它可以将信息从受害者那发送给合法网站的身份认证接口,反之亦然。

 

四、典型案例

ReelPhish以及相关方法在Mandiant的红队演练中有多次成功经验。我们遇到过的最为常见的一种场景是采用双因素身份认证机制的VPN入口。为了发起社会工程学攻击,我们复制了真实VPN入口的HTML页面、JavaScript以及CSS代码,通过这些代码创建与原始站点非常相似的一个钓鱼网站。

为了让我们的实时钓鱼工具顺利运行,我们在钓鱼网站中嵌入了服务端代码,可以与攻击者主机上运行的工具通信。我们也建立了一条通往钓鱼服务器的SSH隧道。当用户往钓鱼站点提交身份认证信息时,所提交的所有凭据会通过隧道发给攻击者系统上的工具。该工具随后会在攻击者系统中启动一个新的Web浏览器实例,向真实的VPN入口提交凭据。整个过程如图1所示。

图1. ReelPhish工作流程

VPN入口可以采用各种双因素身份认证方案。在某些场景中,用户需要在网页的“二次密码”认证表单中填写令牌信息。在其他场景中,用户需要在移动手机上响应系统推送的消息。如果钓鱼网站的行为模式与真实网站的行为模式相差无几,用户在向钓鱼页面提交凭据后很有可能会通过手机上推送的认证请求。

在某些情况下,为了处理多个认证页面,也为了方便钓鱼站点与攻击者主机上运行的工具之间来回交互数据,我们不得不开发更为复杂的钓鱼网站。我们的脚本可以处理这种复杂场景,因为该脚本可以跟踪受害者在钓鱼站点上的会话信息,将会话信息与攻击者系统中运行的特定浏览器实例正确关联起来。我们的工具的整体攻击过程如图1所示。

我们已经将这款工具提交到FireEye的GitHub仓库中。大家如有什么意见或者问题,欢迎向Git仓库提交pull以及issue请求。

 

五、总结

虽然2FA并非固若金汤,但我们依然不要放弃这种解决方案,它可以为我们额外提供一层安全防护。与其他安全机制类似,2FA依然存在安全风险,用人单位必须做好充足准备,以防2FA被攻击者突破。

我们需要为所有的服务采用2FA保护机制,以尽可能减少攻击者绕过2FA防护后所带来的安全影响。于此同时,我们可以减少会话的最长持续时间,缩短攻击者的行动时间窗口。如果限制每个用户账户最多只能有一个并发会话,就能阻止攻击者在受害者正常活动期间实施攻击。如果VPN服务存在问题,可以考虑实施严格的网络隔离机制。VPN用户只能访问与他们角色及职责相符的资源。最后,还是应该培养用户安全意识,使用户能够认识、避免并及时报告社会工程学攻击行为。

Mandiant之所以发布ReelPhish,是希望让公众了解到采用多层防护方案的必要性,不要依赖单一安全机制。这款工具可以在完整的渗透测试过程中为安全专业人员提供帮助。

在Mandiant的红队演练中,进入目标单位的内部网络只是第一步。本文介绍的这款工具可以帮助红队成功跨过第一步门槛。然而,整个攻击行为是否成功,很大程度上依赖于目标所采用的内部安全机制。请用人单位坚持评估并完善整体安全状况。Mandiant提供了各种安全服务,可以协助各类用人单位防护各种攻击活动。

(完)