CrawlPhish:网络钓鱼中客户端伪装技术的大规模分析

 

网络钓鱼是对互联网用户的严重威胁。尽管广泛的生态系统可以保护用户,但是网络钓鱼网站正变得越来越复杂,借助逃避技术,网络钓鱼网站可能会越过生态系统的检测系统,进而对现实世界造成破坏。 复杂的客户端规避技术(称为cloaking)利用JavaScript来实现潜在受害者和网络钓鱼网站之间的复杂交互,因此在减缓或完全防止自动缓解方面特别有效。但是,尚未有研究客户端伪装的普遍性和影响。

在本文中介绍了CrawlPhish,这是一种用于自动检测和分类已知网络钓鱼网站使用的客户端伪装的框架。在2018年至2019年之间的14个月内部署了CrawlPhish,以收集并彻底分析112,005个网络钓鱼网站的数据集。通过采用最新的静态和动态代码分析,发现其中35,067个网站具有1,128种不同的客户端伪装技术实现。此外发现攻击者对伪装的使用率从最初的23.32%增长到了数据收集期结束时的33.70%。通过框架检测到的伪装显示出较低的假阳性率和假阴性率,分别为1.45%和1.75%。本文分析了检测到的技术的语义,并提出了跨三个高级类别的八种类型的规避分类法:用户交互,指纹识别和僵尸行为。

使用150个人工钓鱼网站从经验上证明,每种规避技术都可以有效避免基于浏览器的网络钓鱼检测(关键的生态系统防御)。另外,通过用户研究,验证了该技术通常不会阻止受害者的访问。因此提出了一种方法,不仅可以提高生态系统利用客户端伪装方法减轻网络钓鱼网站的能力,还可以不断发现攻击者发起的伪装技术。

 

0x01 Introduction

尽管安全社区进行了广泛的研究,网络钓鱼攻击仍使攻击者受益,并不仅对他们所针对的受害者用户而且对他们所冒充的组织都造成了实质性损害。近年来,网络钓鱼网站已取代恶意软件网站成为最流行的基于Web的威胁。即使技术对策可以有效地缓解基于Web的恶意软件,网络钓鱼网站的复杂度仍在不断增长,并成功地摆脱了现代防御手段的困扰。

在具有反网络钓鱼生态系统的对抗中,复杂的网络钓鱼网站采用逃避技术来延迟或避免通过自动反网络钓鱼系统进行检测,从而最大程度地提高了攻击者的投资回报率。这种回避行为(通常称为“伪装”)通常旨在确定网站的访问者是否为浏览器,如果存在则显示良性内容。这些网站试图窃取不仅仅是用户名和密码,从而加剧了成功逃避带来的危险:当今的网络钓鱼攻击试图获取受害者的全部身份,这可能对整个生态系统造成更广泛的破坏,并且对于有效缓解更具挑战性。

因此,阻止网络钓鱼者的逃避努力是反网络钓鱼社区内部的一个重要问题,因为及时检测是成功缓解网络钓鱼的关键。先前的研究已经描述了网络钓鱼网站使用的服务器端伪装技术,并表明它们可以击败关键的生态系统防御,例如基于浏览器的检测。但是,人们对高级伪装技术(例如使用JavaScript在客户端实现的伪装技术)的性质和普遍程度了解得很少。客户端伪装可能特别危险,因为它可以实现与潜在受害者的复杂交互。

通过大规模分析已知网络钓鱼网站的客户端源代码,不仅可以了解网络钓鱼者所使用的逃避技术,还可以利用这种理解来改进现有网络钓鱼检测系统并提供指导生态系统使用的缓解措施。与网络钓鱼网站使用的服务器端代码不同,可以通过网络爬网轻松获得客户端代码。然而,从这些数据中获得更多见解的一个关键挑战是JavaScript代码的动态特性,这阻碍了自动化分析。在本文中克服了这一挑战,并通过开发CrawlPhish评估了客户端的回避行为。

CrawlPhish是一个健壮的框架,可以在野收集实时的,以前报告的网络钓鱼网站的源代码,并自动检测和分类这些网站使用的客户端伪装技术。通过有效地利用先进的程序分析技术,以先前对JavaScript恶意软件的研究为灵感,本框架不仅可以识别这些伪装技术的语义,而且可以跟踪由Java编写的代码的演变特定的网络钓鱼工具包作者。

使用CrawlPhish框架对网络钓鱼网站使用的客户端伪装环境进行大规模评估。从2018年中到2019年中的14个月中,收集并彻底分析了112,005个网络钓鱼网站。测量了这些网站中客户端伪装技术的普及程度,发现有35,067(31.3%)使用这种伪装技术。其中确定了1,128组相关的实现,认为这些实现来自不同的威胁参与者。此外观察到带有客户端伪装的网络钓鱼网站的百分比从2018年的23.32%增加到2019年的33.70%。

为了理解为什么经常使用客户端伪装,本文描述了它的功能方式,并在三个高级类别中定义了八种不同类型的规避技术:用户交互,指纹识别和僵尸行为。这些类别中的技术分别要求人类访客执行任务,基于各种属性来描述访客或利用爬虫和实际浏览器之间的技术差异。

对CrawlPhish进行了评估,发现它可以低误报率(1.45%)和误报率(1.75%)检测伪装的存在,同时平均需要29.96秒的时间来分析每个网络钓鱼网站。一旦CrawlPhish检测到伪装性,它就可以同时使用静态和动态代码功能对伪装性技术的这些原理进行可靠分类。

最后,为了证明客户端的伪装构成了现实世界的威胁,部署了150个精心控制的人工网络钓鱼网站,以根据经验证明这三类逃避行为都可以成功绕过Google Chrome,Microsoft Edge和其他主要网络浏览器的基于浏览器的检测。还证明这些网站仍然可以吸引潜在的人类受害者。因此向上述浏览器开发人员披露了本研究的发现,他们正在努力提高发现相应钓鱼网站的及时性。

本研究分析进一步了解了复杂的网络钓鱼网站的性质。此外,CrawlPhish框架可以部署为在复杂的规避技术内连续监视趋势,同时识别攻击者引入的新型技术。本文方法不仅可以直接帮助弥补生态系统对复杂的网络钓鱼网站的检测中的空白,而且还可以帮助开发属性以改善现有的反网络钓鱼缓解措施,例如基于浏览器的检测。

 

0x02 Background

在过去的几年中,反网络钓鱼生态系统已经采用了多种技术来检测和缓解网络钓鱼攻击。对网络钓鱼URL和网站内容的分析已经引起了生态系统级防御,例如电子邮件垃圾邮件过滤器,恶意基础结构检测和URL黑名单。

具体来说,诸如Google安全浏览和Microsoft SmartScreen之类的系统为反网络钓鱼后端提供了强大的支持,这些后端在检测到网络钓鱼时会在主要的Web浏览器中显示突出的警告。这些警告主要基于黑名单:它们依赖于基于内容的检测。网络钓鱼网站通常使用的逃避技术能够绕过或延迟这种黑名单。

A.网络钓鱼中的伪装技术

1600151840742

攻击者利用伪装技术来躲避反网络钓鱼系统的检测:具有伪装功能的网络钓鱼网站只要怀疑访问来自安全基础结构,就会显示具有良好外观的内容而不是网络钓鱼页面。伪装技术可以分为两类:服务器端和客户端(上表显示了每种类型的示例)。服务器端伪装技术通过HTTP请求中的信息来识别用户。通过在访问者的浏览器(JavaScript)中运行的代码来实现客户端伪装,以使用Cookie或鼠标移动之类的属性来应用过滤器。

现有的反伪装方法着重于通过比较通过发送具有不同配置(例如,用户代理或IP地址)的多个Web请求检索到的不同版本的已爬网网站的视觉和文字特征来绕过服务器端伪装。但是,由于自动分析JavaScript代码和理解其语义方面的挑战,客户端伪装技术仍然知之甚少。此外,在网络钓鱼的情况下,尚未调查客户端伪装的盛行和影响。

1600151856445

上图显示了如何在网络钓鱼网站中使用客户端伪装技术。嵌入在HTTPresponse有效负载中的伪装代码基于访问者(潜在的受害者或浏览器)的标识显示不同的网页内容。因此,伪装的网络钓鱼网站可能比没有以下内容的网站具有更长的使用寿命:通过延迟或避免检测,启动这些网站的攻击者会最大化其投资回报率。由于客户端逃避技术使潜在的受害者和网络钓鱼网站之间可以进行复杂的交互,因此,它们比传统的服务器端伪装更有效地阻止了自动检测,从而对潜在的受害者用户构成了威胁。

B.分析客户端伪装的挑战

与服务器端代码不同,可以通过爬网轻松获得网站的客户端代码(JavaScript)。因此,恶意网站通常会利用代码混淆方法,例如字符串数组编码,对象密钥转换,无效代码注入甚至完全加密。攻击者还可以动态生成和执行代码(例如,使用eval)以伪装恶意行为。这种混淆方法对静态代码分析方法提出了挑战,否则静态代码分析方法因其效率而受到青睐。

其他类型的混淆也试图防止动态分析方法检测到恶意行为。恶意JavaScript代码通常通过对特定版本的Web浏览器和操作系统进行指纹识别。由于检测系统需要大量资源来揭示触发攻击的条件,因此很难发现此类攻击。而且,外部和块间依赖关系(需要在不同的执行路径中记录状态)可能成为阻碍JavaScript代码分析的障碍。此外,脚本可以以事件驱动的方式执行,从而需要外部触发器来发起恶意行为,而否则看起来是良性的。

网络钓鱼网站对客户端伪装技术的实施可能会潜在地利用所有上述反分析方法。鉴于难以分析此类伪装行为,安全社区难以充分了解网络钓鱼者策略的影响和普遍性,因此可能无法适当地减轻它们的危害。当考虑网络钓鱼攻击的规模时,相应的漏洞在检测和缓解方面的后果可能会很大。

 

0x03 Overview

客户端伪装技术可以帮助网络钓鱼网站逃避反网络钓鱼实体的检测,尽管有证据表明复杂的网络钓鱼网站(例如具有客户端伪装的网站)是造成大多数攻击的原因,但之前的研究并未对其进行详细调查。网络钓鱼对真实世界的损害。

1600151876971

本研究发现了三个高级类别的八种不同类型的JavaScript伪装技术:用户交互,指纹识别和僵尸行为(总结在上表中)。仅当访问者与网络钓鱼网站进行交互时(例如,通过移动鼠标或单击特定按钮),“用户交互”类别中的伪装技术才会显示网络钓鱼内容。具有指纹识别功能的网络钓鱼网站通过检查浏览器或Web请求的配置来识别访问者。最后,具有僵尸行为的网络钓鱼网站会根据诸如网页保持打开状态多长时间以及最初失败后是否重复网络请求等因素来识别反网络钓鱼爬虫。

1600152034462

本文的目标是通过自动的分析方法,全面了解并描述网络钓鱼网站在野使用的客户端伪装技术的前景。为此设计、实施和评估CrawlPhish:一种可自动检测和分析网络钓鱼网站中客户端伪装行为的框架。上图概述了CrawlPhish体系结构。 CrawlPhish由以下组件组成:

1)爬网和预处理:CrawlPhish首先通过访问最近报告给反网络钓鱼摘要的实时网络钓鱼网站URL来收集网页源代码(以及所有外部文件包含)。然后过滤无法检索的URL以及没有任何JavaScript代码的URL。

2)特征提取:CrawlPhish改编了最先进的代码分析方法,即强制执行,无论分支条件如何,都可以执行JavaScript,并提取所有可能的规避技术的执行路径。已实施。然后,通过屏幕快照得出(a)呈现的网页的视觉特征,以及(b)每个路径的代码结构特征,例如Web API调用,事件侦听器和抽象语法树(AST)。

3)伪装检测:CrawlPhish分析与每个执行路径相对应的视觉特征,以检测是否存在伪装,并存储每个此类路径的对应代码结构特征。

4)伪装分类:CrawlPhish使用代码结构功能,根据网络钓鱼的语义对网络钓鱼网站使用的伪装技术进行分类。

数据集:在评估中使用两个不同的数据集。
(1)APWG数据集:CrawlPhish使用反网络钓鱼工作组(APWG)URL提要收集了2018年6月至12月的28,973个钓鱼网站的源代码和2019年5月至2019年11月的100,000个网站的源代码。

(2)公共数据集:网络钓鱼网站的源代码,于2019年9月至12月从各种知名来源获得,由安全研究人员公开共享。

本文确保实验不会对合法的互联网基础设施造成任何破坏,也不会对任何人类用户造成负面影响。研究的抓取不会对任何合法网站造成负面影响,因为CrawlPhish在启动分析之前已修剪了这些网站,用户研究接受了IRB审查并获得批准。在本研究过程中,不会从参与者那里征求或获取任何个人身份信息(PII)。此外,没有人类用户看到过任何人工钓鱼网站,也没有将这些网站配置为收集可能已提交的任何数据。

 

0x04 CrawlPhish Design

CrawlPhish的设计目标是在克服前文中讨论的JavaScript代码分析挑战的同时,以自动化的方式检测和伪装客户端伪装技术。

A.检索与预处理

为了收集实时网络钓鱼网站的源代码以检测和分类当前在野使用的客户端逃避方法,CrawlPhish首先实时获取已知网络钓鱼网站的URL。

在部署中,CrawlPhish不断从APWG eCrime Exchange数据库中提取URL,这是由从事反网络钓鱼的各个组织维护的网络钓鱼URL的经过精心挑选的信息中心。因为该数据库会经常更新并跟踪针对各种类型的网络钓鱼URL,所以它非常适合网络钓鱼网站分析。但是,请注意,数据库中包含URL并不意味着已经适当缓解了该URL。 (例如,通过及时列入黑名单)。因此,发现使用复杂的客户端伪装的网站仍然值得审查。

接下来,CrawlPhish通过使用程序控制的Web浏览器访问每个钓鱼网站URL(在被提取后不久)来下载源代码。具体来说,CrawlPhish使用HAR文件存储源代码,该文件捕获了客户端和服务器之间的所有HTTP请求/响应,并确保为每个网站保留所有依赖项(例如链接脚本)。在请求失败的情况下,CrawlPhish会在IP地址和用户代理的不同配置之间切换,以规避网络钓鱼网站使用的潜在服务器端伪装技术。切换请求配置后,爬取的128,973个网站中有4,823个(占3.74%)显示了不同的响应状态代码。

最后,CrawlPhish过滤掉包含空白页面或非钓鱼网站的URL。这些网站要么已经被删除,要么在爬取时被检测为假阳性。发现APWG数据集中的URL的0.53%为误报。因此,在以下情况下,CrawlPhish排除数据:

i 空网站:服务器无响应。

ii 错误的网站:由于网上诱骗网站已被关闭或使用了无法绕过的服务器端伪装,因此拒绝了URL请求。

iii 非网上诱骗网站:错误报告的网址,CrawlPhish会根据人工策划的信誉良好的白名单对网址进行过滤。

B.特征提取

伪装的内容检测:网络钓鱼网站中使用的客户端伪装技术可能比服务器端伪装技术更加多样化,因为它们不仅可以基于浏览器和系统的配置来识别访问者的身份,而且还可能要求访问者与网站进行交互。为了有效地检测客户端伪装技术,CrawlPhish改编了J-Force:一种在WebKitGTK +浏览器中实现的强制执行框架,该框架沿所有可能的路径执行JavaScript代码,并且不会崩溃,而与可能的分支条件,事件处理程序和异常无关。将J-Force修改为将众所周知的JavaScript库(例如Google Analytics(分析)或jQuery)列入白名单(避免强制执行),以通过忽略此类库可能引入的良性内容更改来加快执行速度。

执行时间限制:为CrawlPhish的每次强制执行选择一个时间限制,以避免由于长时间运行的脚本(例如,由于繁重的分支或长时间运行的循环)而导致的失败。请注意,此时间限制是在强制执行框架中实现的其他反超时功能的补充。

首先选择300秒的执行限制,通过在抓取的数据集中强制执行2,000个随机选择的钓鱼网站来进行实验,以记录执行时间。发现1.75%的网络钓鱼网站所包含的JavaScript代码超过了时间限制。执行速度最快为12.56秒,中位执行时间为13.82秒,平均执行时间为29.96秒,标准差为54.89秒。根据此实验,选择了195秒的最终执行限制(高于平均值的三个标准差),以便CrawlPhish可以有效地分析大多数钓鱼网站。

特征提取:为了便于检测(存在)伪装和对伪装类型进行分类,CrawlPhish从每个网络钓鱼网站中提取视觉和代码结构特征。每个网络钓鱼网站的视觉功能均包含在强制执行探索了每种可能的执行路径之后捕获的所有网页屏幕快照集(在实施中,分辨率为2495×1,576像素)。在数据集中,每个网站平均生成46.3个屏幕截图。

CrawlPhish将一个网站中每个执行路径的屏幕快照与原始屏幕快照进行比较,以检测是否存在伪装,因为伪装的存在会导致视觉布局发生重大变化。代码结构功能包括Web API调用,Web事件处理程序和AST,它们可以表征不同类型的伪装技术,并揭示如何实现伪装技术。使用强制执行,即使混淆了代码,CrawlPhish仍可以显示和提取每个代码块中包含的Web API和事件。然后,CrawlPhish可以使用代码结构功能对网站中的伪装类型进行分类。

使用的代码结构功能:根据通过手动检查数据集中的网络钓鱼网站样本中的伪装技术进行的初步分析,不同的客户端伪装技术各自具有实质上不同的功能。例如,一种检查鼠标移动的伪装技术会等待onmousemove事件,然后执行DOM替换或重定向。但是,一种检查屏幕大小的伪装技术将首先访问screen.height属性。因此,当CrawlPhish通过强制执行执行代码块时,它会记录Web API和在代码块中调用的事件。

另外,发现相同的语义类型的客户端伪装技术具有许多不同的实现。 CrawlPhish通过比较AST来区分每种伪装技术的不同实现。即使JavaScript代码经常被混淆,但AST功能仍然有用,因为大多数网络钓鱼网站都是使用网络钓鱼套件部署的,因此具有相同网络钓鱼套件来源的相应网站共享相同的源代码结构。此外,通过计算AST相似度,可以通过在网上诱骗页面的较早位置找到相似的实现方式来跟踪伪装技术的起源。

C.伪装检测

CrawlPhish检查强制执行的屏幕截图与未修改版本的WebKitGTK +中渲染的网站的屏幕截图(即正常浏览器访问时所显示的)之间的视觉相似性,以检测是否存在伪装。由于网络钓鱼者实施JavaScript伪装技术来逃避反网络钓鱼系统的检测,因此它们会删除网站(例如登录表单)中的可疑属性或直接重定向到良性网站。因此,当不满足伪装条件时显示的视觉内容将与恶意页面明显不同。

1600152191939

例如,考虑一个钓鱼网站,该网站要求访问者在显示钓鱼内容之前单击弹出窗口中的按钮。强制执行后,两个不同的执行路径会产生两个不同的屏幕截图:一个是初始外观良好的页面(上图a),另一个是带有网络钓鱼内容的屏幕截图(上图b)。因此,如果强制执行期间截取的任何屏幕截图与原始屏幕截然不同,则认为钓鱼网站是伪装的。
CrawlPhish还可以揭示隐藏在多层伪装层后面的网络钓鱼内容。考虑一个具有伪装技术的网络钓鱼网站,该技术(1)检测鼠标的移动,(2)检查引荐来源,以便仅在满足两个要求的情况下才会出现恶意内容。 CrawlPhish将探索通过强制执行来显示恶意内容的执行路径,而不管分支条件如何。因此,在将每个屏幕截图与原始页面的屏幕截图进行比较之后,CrawlPhish确定存在一种伪装技术,因为其中一个屏幕截图会有所不同。

强制执行后删除空白页:由强制执行的路径渲染的页面的屏幕截图可能是空白的,这可能是由于(1)伪装技术(例如鼠标移动检测)中需要用户输入的负分支或(2)完成路径所需时间更长而导致的。在后一种情况下,如果将初始屏幕截图与未完成的执行路径导致的空白页进行比较,则CrawlPhish会将网站标记为伪装的网站。例如,如果网络钓鱼者识别出访问来自反网络钓鱼系统,则可能触发无限循环。

在这种情况下,CrawlPhish无法完成强制执行,因此屏幕截图保持空白。因此,CrawlPhish的当前局限性在于它无法检测到执行时间非常长的伪装网站。但是根据评估,这种情况很少发生:仅在考虑的网站的1.75%中。

检测算法:为了在屏幕截图之间执行视觉相似性检查,实现了pHash算法,该算法将视觉相似性与鲁棒性和良好的辨别力进行了比较。计算原始屏幕快照与每个路径完成执行后捕获的屏幕快照之间的pHash分数:

1600181649720

在公式1中,S表示每个屏幕截图,n是从强制执行捕获的屏幕截图数量。如果pHash分数小于根据1,000个网络钓鱼网站上的初步测试结果所设置的阈值(5.0),认为两个屏幕截图相似(无伪装)。不同的屏幕截图得分为5.0或更高。下图a显示了用于选择视觉相似性阈值的ROC曲线。选择的阈值可提供92.00%的真阳性率和6.77%的假阳性率。注意到评估表明,与ROC曲线阈值所指示的相比,CrawlPhish具有更高的检测准确度(98.25%)和更低的假阳性率1.45%。

1600152141006

D.伪装分类

一旦CrawlPhish检测到网页上存在伪装,就可以对特定类型的伪装进行分类,从而能够衡量和了解网络钓鱼者使用的各种高级客户端伪装技术的普遍性。为了促进这种分类,CrawlPhish维护了一个伪装技术数据库,该数据库包含每个伪装实例的代码结构功能,并带有相应的伪装语义。使用该数据库,CrawlPhish不仅可以识别已知的伪装类型,而且还可以提供有关新兴伪装技术的详细信息。

初始数据库:首先获得了1,000个伪装网络钓鱼网站(真实),然后使用CrawlPhish来确定客户端伪装网站的存在。然后,手动检查了网络钓鱼网站的源代码,以标记相应的伪装技术,还将代码结构特征记录为基准。

例如,如果记录的代码功能具有onmousemove事件并使用该窗口,则将一种伪装技术标记为“鼠标检测”和使用window. location.href API。随着时间的流逝,随着CrawlPhish的执行,如果在网站上检测到伪装的存在,但是代码功能与数据库中的任何记录都没有足够紧密地匹配,则会将该网站标记为手动审核,以使缺少的功能(可能则填充新的伪装类型。否则,该网站将自动标记为相应的伪装类型。在抓取的数据集中,填充初始数据库后,几乎不需要手动操作。因此,此要求不会妨碍框架的自动化操作。

分类算法:CrawlPhish使用汉明距离(HD)算法来计算API调用和网络事件的相似性。为此使用数组数据结构,该数组数据结构由Mozilla MDN定义的4,012种Web API调用或事件中的每个位置都有一个位置,这些文档记录了当前可用的Web API。在数组中的每个位置 ,会存储CrawlPhish观察到的相应的API调用或事件的数量。然后,将此数组转换为固定长度的字符串(例如,string [0]是代码块中ActiveXObject的数量,string [1]存储Date API调用的数量),以便可以应用HD算法。因此,HD算法在一对字符串上的结果表示两个代码块之间的Web API和事件的相似性。 HD值越低表示相似度越高。

还利用JSInspect [4]基于AST查找结构相似的代码段,这将根据AST节点类型(例如BlockStatement,VariableDeclaration和ObjectExpression)来标识结构相似的代码。结合使用这些方法来克服仅基于AST或API调用的代码相似性检查器的局限性。因此,通过将所有可疑代码块的代码结构相似性与数据库中的记录进行比较,可以在一个网站中识别所有已知的伪装类型(即使存在多种类型)。如果可疑代码块的功能与数据库中的任何记录不够相似,将手动对其进行检查,标记伪装类型,然后将其添加到数据库中,这是在CrawlPhish中唯一需要手动工作的过程框架。

与视觉相似性检查类似,根据对1000个伪装的网络钓鱼网站的初步手动分析,根据经验为代码相似性检查设置阈值。仅考虑两类来找到阈值:正确标记的伪装类型和标记错误的伪装类型。根据前图b,选择了一个代码结构阈值,其真阳性率为95.83%,假阳性率为0.79%。当CrawlPhish将新的网络钓鱼网站的代码结构特征与数据库中的网络钓鱼网站的代码结构特征进行比较时,AST相似度得分必须大于0.74,Web API和事件的汉明距离必须在34以内,以便将新网站标记为已知伪装技术的类型。

 

0x05 Evaluation: Detection of Cloaked Phishing Websites

在本节中,评估CrawlPhish的客户端伪装检测精度。在此实验中,首先随机抽样并手动标记了2000个不包含JavaScript伪装技术的网络钓鱼网站,以及2,000个具有各种客户端伪装类型的网络钓鱼网站。然后,运行CrawlPhish来检测是否存在客户端伪装。最后将自动伪装检测结果与手动标记的真实数据集进行了比较,以计算检测精度。

1600152170748

上表显示了CrawlPhish检测的矩阵。在4,000个网络钓鱼网站中,CrawlPhish正确地检测到1,965个网络钓鱼网站为伪装的,1,971个网络钓鱼网站为未伪装的,假阴性率为1.75%(35),假阳性率为1.45%(29)。请注意,不同于一般的网络钓鱼检测工具应将误报优先于误报,CrawlPhish中的客户端伪装检测组件并不需要这样做,因为检测目标是研究客户端的性质-伪装,而不是检测网络钓鱼攻击。

29个假阳性中的每一个都是由两个错误之一引起的。第一个错误是由于加载原始网络钓鱼页面的未修改浏览器的开销所致。 WebKitGTK +是在CrawlPhish框架中使用的网络浏览器,由于该网站包含大量CSS和JavaScript文件,因此未能在指定的时间内呈现原始网站。结果,每个网站的原始屏幕截图都是空白的,但是强制执行后的屏幕截图不是空白的,因此CrawlPhish将相应的网站误贴为伪装标签,因为强制执行前后的屏幕截图有所不同。第二个错误是由于图像相似性检查不准确而引起的。图像相似性检查模块错误地区分了相同页面的屏幕快照,这是由于在强制执行和不强制执行的情况下,浏览器生成的页面布局略有变化。

就误报而言,发现35个网站中有32个是由于伪造的钓鱼网站的执行时间较长(类似于误报的第一个原因)。如果执行路径花费的时间过长而无法完成执行,则不执行强制执行的屏幕截图。为每个执行路径使用了195秒的执行时间窗口。但是,CrawlPhish由于超时而无法执行的路径可能包含伪装技术实现。没有这些屏幕截图,CrawlPhish无法检测到伪装技术,因此它将相应的网站误贴为未伪装。

在极少数情况下,由于页面对比度较低,真实的网络钓鱼网站几乎显得空白。例如,如果网络钓鱼网站的背景为白色且带有浅色文本,则CrawlPhish不会区分相应的屏幕截图和空白屏幕截图。手动检查了这些情况,发现这些网站中缺少CSS包含内容(即,爬虫工具无法检索到)。

客户端伪装发生统计:在112,005个网络钓鱼网站数据集中,CrawlPhish发现,共有35,067(31.31%)个网络钓鱼网站实施了客户端伪装技术:2018年为23.32%(6,024),2019年为33.70%(29,043)。注意到网络钓鱼中的伪装实现2019年增长显着。假设网络钓鱼者之所以利用这种伪装,是因为伪装会增加其获利能力,或者是因为改进的检测系统使得有必要进行高级规避,或者两者兼而有之。

 

0x06 Evaluation: Cloaking Categorization

在本节中将详细介绍CrawlPhish检测到的八种客户端伪装技术,还将评估CrawlPhish伪装分类的准确性,跟踪这些伪装技术的不同实现的部署和演进趋势,并分析其使用频率。

A.伪装类型的分类

1600152191939

用户交互—弹出窗口(User Interaction: Pop-up):使用此技术,网络钓鱼内容保持伪装,直到单击弹出窗口中的按钮。具体来说,JavaScript代码侦听onclick事件,以逃避反网络钓鱼机器人。上图显示了实施此技术的网络钓鱼网站的示例。图a中的网站最初显示了一个针对反网络钓鱼机器人或真实用户的警报窗口。因此,该网页仿冒网站寻求避开反网页仿冒机器人的检测,因为在页面上发现了网页仿冒内容或典型属性(例如合法组织的登录形式徽标),但是CrawlPhish揭示了伪装在弹出窗口后面的网页仿冒内容,如上图所示在图b中。

1600152206195

上图显示了CrawlPhish检测到的弹出式伪装技术的更高级版本。由于可以通过常见的浏览器自动化框架(例如Selenium或Katalon)轻松关闭警报窗口,因此某些网络钓鱼者改为使用Web Notification API 。注意到由于技术限制,顶级自动化框架当前不支持与Web通知的交互。这些自动浏览器选择禁用通知窗口,以避免此类交互。但是,网络钓鱼者仅允许实际单击“允许”按钮的访问者访问网络钓鱼内容。因此,由于网络钓鱼网站在访问者单击通知窗口中的“允许”按钮之前不会显示任何网络钓鱼内容,因此可以逃避检测。网络钓鱼者使用欺骗性的网页,要求访问者单击通知窗口上的按钮,如图所示。作为攻击者的附加好处,通过使用通知窗口,伪装的钓鱼网站也可以通过其浏览器直接向访问者发送垃圾邮件(不评估此类滥用的程度)。通过这种方式,表明犯罪分子正在使用尖端的浏览器功能来逃避现有的检测系统。

用户交互—鼠标检测(User Interaction:Mouse Detection):这种伪装类型试图通过在显示网络钓鱼内容之前等待鼠标移动来识别网站访问者是人还是反网络钓鱼机器人。具体来说,伪装代码侦听onmousemove,onmouseenter或onmouseleave事件。网络钓鱼者经常使用此技术,并且占所有伪装技术实现的16.53%,因为大多数人习惯在网站在浏览器中渲染时移动鼠标。

用户交互—单击直通(User Interaction: Click Through):一些网络钓鱼网站要求访问者在显示网络钓鱼内容之前先单击页面上的特定位置。这种伪装技术的简单变体要求访问者单击页面上的按钮,因此类似于警报伪装。但是,更复杂的变体会显示伪造的验证码,与Google reCAPTCHA的外观非常相似。鉴于合法网站普遍使用reCAPTCHA,因此带有伪造验证码的网络钓鱼网站使潜在受害者很难识别出他们是伪造的。如果反网络钓鱼系统由于使用该技术而无法访问网络钓鱼内容,则它们可能无法将网站标记为网络钓鱼。

僵尸行为—定时(Bot Behavior: Timing):一些网络钓鱼网站仅在特定时间显示网络钓鱼内容,或者通过使用setTimeout()或Date.getTime()API故意使渲染速度变慢。如果网络钓鱼网站的呈现时间比检测系统设置的阈值更长,则此类网站可以逃避检测。但是,实际的访问者可能会等待网页渲染的完成。

僵尸行为—随机化(Bot Behavior: Randomization):一些网络钓鱼者试图通过使用不确定性机制来逃避检测:此类网络钓鱼网站在呈现页面之前会生成一个随机数,并且仅在满足特定阈值时才会显示网络钓鱼内容。如果反钓鱼网站或人类检查人员最初显示的是良性内容,则不得再次访问该网站。因此,该技术可能是逃避反网络钓鱼系统检测的“愚蠢”方法。但是,其在野的使用表明它可能是值得的:怀疑使用此技术的网络钓鱼者已经意识到了反网络钓鱼实体检测的条件,并试图以一种非确定性的方法来欺骗反网络钓鱼机器人。

1600152287621

指纹识别—Cookie(Fingerprinting: Cookie):与服务器端伪装技术类似,客户端伪装技术也可以检查访问者的请求属性以对其进行指纹识别。上图展示了一个仿冒网站,该网站通过检查浏览器中是否禁用了cookie来识别访问者是人还是反仿冒机器人。禁用cookie后,网络钓鱼网站将显示良性内容,如上图a所示。一些反网络钓鱼的爬网程序会禁用Cookie,以避免绑定到单个会话。但是,CrawlPhish检测到伪装的网络钓鱼内容,如上图b所示。同样,这种伪装技术也可以测试是否启用了浏览器缓存。

指纹识别—来源网址(Fingerprinting: Referrer):网络钓鱼网站可以检查传入的流量是否来自网络钓鱼者的诱饵或其他有害来源。因此,某些网络钓鱼网站会使用空白的引荐来源网址向访问者显示良性内容,这可能表明直接键入了URL。类似地,可以阻止来自搜索引擎或已知安全域的引荐。

指纹识别—用户代理(Fingerprinting: User-agent):一些网络钓鱼网站试图根据其用户代理字符串来识别反网络钓鱼的爬虫。 navigator.userAgent属性以关于浏览器和操作系统的形式存储(例如Mozilla / 5.0(X11; Linux x86 64))。因此,可以阻止反网络钓鱼机器人(例如Googlebot),因为它们的userAgent属性是已知值。

伪装技术的组合:网络钓鱼网站有时会同时使用多种客户端伪装技术,因为这样做可能会进一步增加规避性。例如,CrawlPhish发现503个Click Through和Referrer实例一起使用。此外,在476个伪装的网上诱骗网站中发现了Timing和Cookie。

B.伪装分类的准确性

为了评估CrawlPhish伪装类型分类的准确性,选择了相同的2,000个伪装式钓鱼网站(该集合包含所有三种客户端伪装技术),并根据其代码结构特征手动标记了正确的伪装类型。然后,通过CrawlPhish的特征提取(2)和伪装检测(3)阶段发送这些网站,以定位实现每种伪装技术的代码块。 CrawlPhish检查了部署过程中所填充的代码结构特征相似性(4)。CrawlPhish将第3步标记的所有代码段的代码结构特征与数据库中的记录进行比较,以发现给定网络钓鱼网站中所有可能的伪装技术。

发现CrawlPhish以100%的准确度正确分类了伪装类型。如此高的准确性部分源于所检查代码段的代码结构特征与数据库中任何现有记录都不匹配时所涉及的手动检查。因此得出结论,即使底层实现有所不同,Web API调用,Web事件和AST也足以区分不同的伪装类型。

C.实施分组

由于网络钓鱼工具包可直接实现网络钓鱼攻击的可扩展性,并且可通过地下市场轻松获得,因此跟踪工具包的部署和演变可以帮助研究人员和调查人员查明威胁行为者(即工具包的作者或犯罪集团) )在一系列网上诱骗网站后面,并确定可归因于同一作者的网络钓鱼盛行率。 CrawlPhish收集的网页源代码适用于此目的,因为实际上可以从任何网络钓鱼URL获取此类源代码,这与服务器端代码不同。

随着时间的流逝,通过比较网络钓鱼网站所伪装的JavaScript代码段之间的代码相似性,可以将相关的网络钓鱼技术实现方式(即归因于同一来源的实施方式)组合在一起。具体来说,使用JSInspect比较伪装技术实现代码块之间的AST相似性,以找到匹配项(利用相同的技术来检查代码结构的相似性)。在下表中概述了在APWG数据集和公共数据集内为每种伪装技术发现的实现组的数量。此外,比较了两个数据集之间的组重叠,并确定了观察到每种技术的最早日期。

1600152264960

APWG数据集中的实施组:发现每种伪装类型的最早实现是在2018年。此外,有1128个群组占CrawlPhish检测到的35067个伪装网络钓鱼网站。下图显示了APWG数据集中唯一实现组的累积分布函数(CDF):20%的唯一伪装实现组占所有网络钓鱼网站的74.65%。这表明少量的网络钓鱼工具可能是造成大量复杂的网络钓鱼网站的原因。Timing伪装类型在所有伪装类型中具有最多的组(394)。由于根据发现,这种伪装技术不那么受欢迎,因此怀疑著名的网络钓鱼套件开发人员不会部署它,尽管个别犯罪分子可能仍想利用它。在最大的组中,观察到一组Click Through代码占代码变体的16.45%(1,275)。多达18.67%(284)的通知窗口出现在单个组中。

1600152306747

公共数据集中的实施组:还比较了公开数据集中的伪装组,这些数据集来自OpenPhish,PhishTank ,PhishStats 和其他网络钓鱼URL档案。使用此附加数据集,可以验证APWG数据集是否代表生态系统,并评估APWG数据集中可能没有的其他伪装技术。前表显示了有关两个数据集之间的伪装组分布的详细统计信息。从两个数据集中为每种伪装类型找到的组数相似。 Timing和Alert伪装技术仍然具有最高的组总数,与APWG数据集的发现相匹配。但是,Click Through的组数量从51个增加到了105个。怀疑利用这种伪装匿技术,不同的网络钓鱼者正在开发更多的网络钓鱼套件,因为他们意识到可以有效地避开反网络钓鱼系统的检测。

此外,通过比较公共数据集和APWG数据集之间实现组的AST相似性,发现两个数据集中存在相同的伪装技术组类型。 APWG数据集中17个不同的Notifification伪装技术组中的11个也出现在公共数据集中。此外,Timing和Alert伪装技术在两个数据集之间具有最相同的组。此结果表明利用客户端伪装技术的网络钓鱼工具包已被广泛使用。

伪装组随时间的演变:由于从APWG提要中抓取了2018年和2019年的网络钓鱼数据,因此该数据集能够跟踪每种伪装类型的来源。从2018年6月开始,网络钓鱼网站中首先使用了Timing,Alert和Mouse Detection伪装技术。 (更高级的)Notifification技术于2018年11月首次出现。这些逃避方法的早期出现提醒人们,网络钓鱼者正试图在反网络钓鱼生态系统之前保持领先一步。尽管研究人员和反网络钓鱼实体正在努力减轻服务器端伪装技术的危害,但这些攻击者已经将重点转移到了实现客户端逃避方法上。怀疑这些客户端伪装技术可能早在2018年6月(开始爬虫工作的日期)之前就已被采用。

还从混淆的角度观察了伪装技术的发展,从爬虫过程中,发现网络钓鱼网站的代码混淆率从2018年的20.79%增加到2019年的24.04%。例如,对于Pop-up伪装技术,最早的变种是2018年6月未被混淆。逐渐地,网络钓鱼者开始对他们的伪装技术实现进行混淆:在2018年10月,他们添加了一种编码算法,而AST结构仍然与未混淆的实现高度相似。后来,网络钓鱼者开始对称地加密客户端伪装技术(例如,通过使用AES),并且仅将解密密钥作为请求参数。在这种情况下,相同伪装技术的AST与现有的组可能会有所不同,因此将它们放在新的组中。但是,通过CrawlPhish,仍然可以找到类似的Web API调用,因此认为该组是先前组(其起源)的演变。从这一发现中,可以直观地看出,网络犯罪分子正在改进网络钓鱼中的客户端伪装技术,从而使最新的实施更加难以分析。

D.伪装使用的趋势

1600152377106

上表显示了CrawlPhish检测到的每种客户端伪装技术类型的流行程度。请注意,由于某些网络钓鱼网站实施了多种伪装技术,因此每种伪装技术的总和可能超过100%。在该表中,“ 2018”,“ 2019”和“总计”列下的百分比代表在各自时间段内每种JavaScript伪装技术实现类别的份额。共享列下的百分比是指检测到的所有伪装式网络钓鱼网站中每种伪装式技术的百分比。

根据APWG数据集和公共数据集对网络钓鱼网站中的伪装类型进行分类。如上表所示,在APWG数据集中的网络钓鱼网站中,用户交互伪装类别的实现最多。 2018年,有2,416个网络钓鱼网站(40.11%)利用了用户交互类别中的伪装功能,而在2019年,用户交互伪装的使用率增长到61.23%。两年来,指纹类别中的伪装技术的使用率几乎相同。在“僵尸行为”类别中,使用率从40.29%大幅下降至21.14%。发现网络钓鱼网站比其他网站更依赖于用户交互类别中的伪装技术。认为,这是因为反网络钓鱼的爬虫要冒充人类的行为要比绕过其他类型的伪装更加困难。

1600152391934

上表演示了从公共数据集中检测到的每种伪装类型CrawlPhish的用法。正如从APWG数据集的2019年部分中观察到的那样,用户交互类别也是公共数据集中最常实现的类别。

1600152405255

如上表所示,在2018年的6,024个伪装的钓鱼网站中,LinkedIn和PayPal是最常被模仿的网站。在2019年,分布发生了变化:苹果和美国银行的钓鱼网站最为普遍。总体而言,2018年排名前五的品牌中的四个也位于2019年的前五个品牌中。但是,由于两年间网络钓鱼格局的变化,关于伪装网络钓鱼网站相对分布的调查结果可能会出现偏差。

 

0x07 Evaluation: Impact of Cloaking Techniques

到目前为止已经表明,网络钓鱼网站广泛使用了客户端伪装技术。为了证明这种伪装对用户构成了重大威胁,进行了两次实验,以验证这些技术可以真正逃避反网络钓鱼系统的检测,并且通常不会阻碍受害者的访问-这是增加攻击者返回的两个关键因素-投资回报。

A.对抗反网络钓鱼实体的有效性

评估了客户端伪装技术相对于实际的反网络钓鱼系统的有效性。使用测试平台来根据经验测量反网络钓鱼黑名单,首先使用新的和以前看不见的域名部署了150个经过精心控制的人工仿PayPal网络钓鱼网站:对于在网站上发现的前三种用户交互伪装类型中的每一种,则有50种在野(使用伪造的验证码单击并通过鼠标检测)。然后,同时将网址报告给整个生态系统中的主要反网络钓鱼实体(Google安全浏览,PhishTank,Netcraft,APWG,PayPal和US CERT ),以评估生态系统是否可以集体检测到伪装的网站。最后,在7天的时间内监控了主要Web浏览器(Google Chrome,Opera和Microsoft Edge,每种均由不同的检测后端提供支持)中网站的检测状态(即黑名单)。

在这些实验结束时,发现没有一个网络钓鱼网站在任何浏览器中都被列入黑名单,但“点击访问”网站除外,其中21个网站(42%)在Microsoft Edge中被阻止,在报告它们后的3个小时内。发生检测是因为Microsoft SmartScreen将JavaScript源代码中的混淆分类为恶意软件,而不是因为它能够绕过伪装技术本身。许多网站在经过7天的访问后仍保持不变的事实表明,客户端逃避方法确实可以有效地逃避现代反网络钓鱼系统的检测。

某些反网络钓鱼实体使用手动检查。自动化系统无法检测到的重复出现的可疑网站应进行人工检查以进行进一步分析。经专家检查,其中的任何恶意网站均应标记为网络钓鱼并列入黑名单,以保护用户。但是观察表明,测试网络钓鱼网站可能只是被反网络钓鱼系统归类为良性网站,而从未发送给人工审核。认为这是当前反网络钓鱼缓解措施的明显局限。因此,对于整个反网络钓鱼生态系统来说,了解复杂网络钓鱼网站所使用的客户端伪装技术的性质和普遍性至关重要,尤其是当考虑此类网站的增长时。

B.妨碍受害者用户访问

为了验证“用户交互”类别中的客户端伪装技术不会明显阻止用户暴露于伪装的仿冒网站上的钓鱼内容,通过Amazon Mechanical Turk进行了IRB批准的用户研究。使用免费的托管服务提供商,生成了三个网站:一个与上一节中所述的三种相同类型的伪装(Notifification,带有伪造的验证码的Click Through和Mouse Detection),相同。但是,不是将钓鱼内容隐藏在伪装内容后面,而是直接隐藏了“ Hello World”文本。默认情况下,将显示空白页面。然后,在Amazon Mechanical Turk中雇用了1,000名工人,并要求他们报告他们在访问三个网站后看到的一切。选择这三种伪装技术,因为它们对于客户端(而不是服务器端)伪装实现是唯一的,并且因为其他技术已经在服务器端上下文中进行了测试。

1600152430636

上表显示了详细的实验结果。在1,000名员工中,有121名由于技术问题而无法查看网络钓鱼网站:他们的浏览器会在URL的子域前面自动添加“ www”,这可能是较早版本的Web浏览器中出现的情况。因此,有879名工人的回答适合进行分析。

对于Mouse Movement伪装技术,100%的工人看到了“ Hello World”文本,因此,如果他们访问了恶意网站,他们还将看到钓鱼内容。对于Click Through 网站,有97.72%的用户看到了该文字,这表明这种伪装技术对用户也有效。但是,只有42.55%的用户使用Notifification Window伪装技术在网站上看到了文本。几乎所有未看到该文本的用户(94.94%)选择拒绝通知。其余的具有不兼容的浏览器。

尽管其中两种伪装技术并未明显阻止用户查看内容,但发现Notifification Window技术对针对潜在受害者的网络钓鱼成功率具有负面影响。但是,如果这些用户在访问该页面之前被网上诱骗(例如,传达一种紧迫感)成功地欺骗了,相信他们将更可能允许进行通知。此外,考虑到反钓鱼网站生态系统无法检测到具有这种伪装技术的网站,因此仍然认为该技术总体上仍然可行。实际上,尽管在2019年5月首次发现了网络钓鱼URL,但图中所示的网站仍在2020年1月仍然在线。

因此得出的结论是,User Interaction类别中的客户端伪装技术使钓鱼网站可以在更长的使用寿命内保持盈利能力,而通常不会阻止受害者的访问,反过来又使钓鱼者可以伤害更多用户。

C.责任披露

一旦确定了CrawlPhish发现的伪装技术能够逃避反网络钓鱼系统,同时仍然对人类受害者有效,便向主要的反网络钓鱼黑名单运营商Google,Microsoft和Opera披露了本研究的发现以及每种测试技术的相应JavaScript代码。 所有公司都确认收到了本文的披露。

Google随后要求提供有关伪装技术的语义和流行程度的更多信息,并同意本研究发现,即此类技术可能会绕过当前的自动反网络钓鱼系统的检测。

 

0x08 Countering Client-side Cloaking Techniques

正如所观察到的,网络钓鱼者在网络钓鱼攻击中大量使用了复杂的规避技术。客户端伪装技术的独特功能是要求访问者与网站或浏览器进行交互,例如通过单击按钮或移动鼠标。网络钓鱼者之所以采取这种策略,是因为他们认为受害者在访问网站时会表现出这些行为。如果网站正在渲染并显示空白页,则大多数人会下意识地移动鼠标。同样,出于习惯,用户将在弹出窗口或通知窗口中单击按钮以使网页内容显示。期望网络钓鱼者的复杂程度只会继续增长。因此,生态系统应确保现有的检测和缓解系统能够适应这种规避技术。

为了使用客户端伪装技术检测高级网络钓鱼网站,反网络钓鱼爬虫应与复杂网络钓鱼工具包期望的行为相匹配。具体来说,爬虫需要模拟诸如鼠标移动和按钮单击之类的人类行为。为了检查给定的网站,反网络钓鱼系统可以使用自动浏览器来模仿此类行为。此外,正如在分析中所观察到的,Notifification Window技术似乎利用了当前自动浏览器对Web通知缺乏支持的情况。因此,对于反网络钓鱼系统来说,弥合这一差距并确保用于检测的浏览器支持与潜在受害者所使用的功能相同的功能非常重要。

而且,CrawlPhish可以直接合并到现有的反网络钓鱼爬虫中。利用CrawlPhish揭示的隐藏网页内容以及URL之类的传统属性,认为当前的反网络钓鱼系统可以识别出本来可以躲避检测的恶意网站。此外,通过实施CrawlPhish分析,爬虫将能够更准确地分类和指纹识别使用网络钓鱼网站的逃避技术的新变种,甚至发现全新的伪装类型。此类分析对于反击当前无法高度分类的钓鱼网站特别有用。

 

0x09 Conclusion

通过对网络钓鱼网站使用的客户端JavaScript代码进行的首次深入分析,发现了攻击者使用的各种复杂的逃避技术。除了根据其规避语义对此类规避技术进行分类外,本文方法还使能够衡量各种技术在野的普遍性。通过这样做,注意到客户端逃避正变得越来越普遍。

客户端JavaScript使网站开发人员能够在其网站和访问者之间实现复杂的交互。因此,以这种方式实施的规避技术对生态系统构成了特殊的威胁:使用这些规避技术的网站可以有效地区分自动爬虫程序访问和潜在的人类受害者。不幸的是,由于JavaScript代码的动态特性,客户端逃避技术很难分析。 CrawlPhish以可扩展的方式解决了这一难题。除了能够高精度地检测和分类客户端逃避外,本文方法还可以跟踪不同实现的来源。

鉴于复杂的网上诱骗网站的兴起,相信诸如CrawlPhish之类的自动化分析系统对于保持对网络钓鱼者不断演变的策略的理解至关重要。生态系统可以采用类似本研究的方法,以更快,更可靠地检测复杂的网络钓鱼,从而通过不断增强适当的缓解措施,帮助防止用户沦为这些攻击的受害者。

(完)