更新[01-27-2020]:在这篇博客发表后不久,我们注意到这篇博客背后的很大一部分基础设施被拆除了。负责重定向的恶意服务器不再响应,我们也没有观察到从这个2年前的活动中有任何新的活动。

在早期,几乎所有技术支持诈骗者都会通过在YouTube和其他社交媒体网站上做一些业余SEO中毒和关键字来获得自己的潜在客户。然后,他们会利用他们的锅炉空间来回答来自受害者的来电。

今天,这些做法继续,但我们看到更先进的业务,在铅生成和实际呼叫履行之间明确分离。正如大家所知道的活动而从被泄露的网站到浏览器储物柜页面的重定向则由经验丰富的网络流量供应商拥有和操作。

有一个特殊的浏览器锁(browlock)活动已经逃避了我们一段时间。它与众不同,多次出现在知名网站上,比如微软的Edge Start页面,但却没有被捕获。此外,据我们所知,浏览器储物柜页面被构建为具有惟一的、时间敏感的会话令牌的短暂性。

2019年11月,我们开始致力于调查这一运动的时间,但直到12月,我们终于能够了解其传播机制。在此博客中,我们通过记录我们的调查结果,记录威胁演员如何使用目标流量过滤耦合隐写术创建最新的浏览器储物柜流量方案到日期。

一个记录良好的历史

有很多关于这方面的公开报道技术支持的骗局用相同的红屏模板影响用户。与一些人在网上发布的相反,这不是恶意软件,电脑也没有被感染。它就是我们所说的浏览器锁,或者简称为browlock社会工程技术这给人一种电脑病毒的错觉,吓得人们打免费电话寻求帮助。下面是一些例子:

一个漫长而史诗般的论坛线程在微软的论坛上描述了这个“棕锁”活动是如何折磨微软Edge的开始页面,甚至离开了微软的工程师困惑至于它到底是从哪里来的:

我们做了相当多的工作来扫描我们从交易所获得的广告,但某些用户的行为与我们扫描时的行为是不同的。在未来,请继续提交反馈,这样我们就可以缩小我们的扫描范围,并可能再次复制并一次性删除它。

这是值得注意的几个原因:首先,它相当大胆地把你的棕色在微软自己的开始页面。其次,技术支持诈骗的目标受众中有很大一部分是使用Windows默认浏览器和启动页面的用户。时至今日,这项活动仍活跃在MSN门户网站上。

图1:技术支持诈骗活动的生命周期

在许多其他大型网站上也发现了这种棕色,包括一些在线报纸门户网站。如此广泛的分布和如此长的时间是前所未闻的,至少在浏览器储物柜方面是这样。

猫捉老鼠的游戏

我们收到的每个受害者报告都是或多或少相同的。用户将打开MSN主页或可能是浏览一个流行的技术门户,当所有突然间屏幕都会变为红色并显示类似于下面所示的警告消息:

图2:受害者所见的阵风

正如我们要手动检查页面,我们将被打击“404未找到”错误消息,就像它已经消失一样。出于这个原因,我们开始致电这个活动“404browlock”。当受害者也不成功时,尝试通过访问相同的门户来重播浏览器储物柜重定向。

图3:相同的browlock URL,但现在不可用

大多数(如果不是全部的话)browlock url可以被重新访问,而无需任何特殊的用户代理或地理位置技巧。事实上,棕色头发本身并不复杂;它们唯一的优势是,它们可以遍历数百个或数千个不同的域名,比将它们列入黑名单的速度更快。

映射浏览器储物柜战役基础设施

尽管每次都是空的,但我们开始创建一个妥协指标(IOCs)列表,并做了一些复古搜索,以更好地了解这场战役的规模。

大多数域名都是在. xyz顶级域名上注册的(尽管其他一些顶级域名已经并仍在使用),并使用按字母顺序获取的字典单词来命名。

2019-12-06, transfiltration。xyz, 158.69.0(。]190, as 16276 (ovh sas)
2019-12-06, transmutational。xyz, 158.69.0(。]190, as 16276 (ovh sas)
2019-12-06, tricotyledonous。xyz, 158.69.0(。]190, as 16276 (ovh sas)
2019-12-06,三乙醇胺。xyz, 158.69.0(。]190, as 16276 (ovh sas)
2019-12-06,三角。xyz, 158.69.0(。]190, as 16276 (ovh sas)
2019-12-06, trithiocarbonic。xyz, 158.69.0(。]190, as 16276 (ovh sas)

威胁参与者平均在每个VPS服务器上托管6个域,然后在它们被烧毁时转到新的域。在2019年6月的复古搜索之后,我们收集了400多个独特的IP地址。

图4:此活动的域和服务器的图形视图

看看其他的数据源,我们可以看到浏览器储物柜运动至少开始于2017年12月.当时,基础设施位于不同的托管提供商和域使用。win TLD。

图5:已知最早的褐发实例

即使在那个时候,直接访问browlock URL(没有正确的重定向)也会导致一个404页面。

图6:爬虫扫描的未完成的browlock

只有一个藏物,一个音频文件(help.mp3)索引通过VirusTotal,可以在下面玩:

同样基于开源数据,我们创建了一个威胁行为者滥用的基础设施的粗略时间表——从他们在圣彼得堡互联网上第一次被发现的地方到2019年1月30日确定在OVH之前短暂转移到DigitalOcean。

图7:时间轴显示托管提供商的更改

隐写隐藏重定向机制

鉴于我们无法确定这只褐发犬是如何传播的,我们认为它一定使用了一种非常规的手段。

许多受害者报告褐发发生时上过的网站都有视频,所以我们认为一个可能的载体是视频广告形式的恶意比传统的恶意横幅更先进,因为它使骗子能够隐藏他们在媒体内容中的有效载荷。

再一次地,我们花了相当多的时间在视频广告上,但仍然无法确定切入点。我们将搜索转向另一种媒介,但后来在确认视频广告感染载体时,我们分享了证据。

巧合的是,我们刚刚在研究一些有趣的东西新发展带有在线信用卡扫描程序,恶意代码嵌入到图像文件中。这种技术被称为隐写术,是一种巧妙的方法来隐藏文物不被人类和扫描仪发现。

在开发识别这些流氓图像的工具时,我们遇到了我们认为可能是确凿证据的东西。我们发现了一个包含模糊数据的PNG文件。

不过,这一次,如果骗子确实使用了隐写术,他们肯定没有让它显而易见。我们发现了一个畸形的PNG文件,在它的文件标记结束后包含了额外的数据,看起来很可疑。

图8:隐藏数据的小图像(browlock URL)

不像前面提到的信用卡扫描器,它可以清晰地看到和识别明显的字符串,这个看起来像编码。很明显,如果没有额外的代码加载每个受害者的唯一密钥来解密,图像本身是不可能被武器化的。

防弹和交通过滤

与PNG图像交互的JavaScript代码使用了一些灯十六进制混淆和随机变量命名来隐藏其意图。

图9:JavaScript用于指纹用户和解码PNG

十六串\ x57 \ x45 \×\开发\ x4c x47解码WEBGL,通过对混淆变量的其余部分进行解码,我们可以看到该脚本正在使用WEBGL_debug_renderer_infoAPI收集受害者的视频卡属性。这允许威胁参与者从爬虫或甚至虚拟机中对真实浏览器(因此真实的人)进行排序,这不会显示预期的硬件信息。这2018年1月,在Confiant网站上,Jerome Dangu披露了该集团大规模的反广告业务,也使用同样的API过滤流量。

但也许这个JavaScript代码段中最有趣的函数是在隐写术后处理实际PNG图像的函数。这_Nux函数通过使用函数解析图像数据@ # @小分公司(如上图所示)并将其存储在内_oieq.多变的。

图10:负责PNG数据解密的核心函数

如果用户被检测为bot或不感兴趣的流量,则PNG文件标记的IEND结束后不包含额外的数据,因此_oieq.变量将为空。

图11:干净/诱饵PNG(非目标)

函数仍然尝试解析PNG,但在eval,不会生成browlock URL。没有被认为是合适的候选者的用户将不会被重定向,甚至不会意识到刚刚发生的指纹识别。

图12:当PNG不包含任何额外的数据时,不会返回browlock URL

这种过滤是不常见的(除了先进的恶意操作),这也是为什么如此多的受害者都经历过这种褐发,但人们对它知之甚少的原因之一。

Anti-replay机制

下一个规避技术是为安全人员和那些试图排除这些恶意重定向故障的人准备的。网络流量捕获(SAZ, HAR)必须包括恶意的JavaScript,以及隐写PNG和褐锁本身。

图13:显示重定向背后元素的网络流量

类似于我们之前仅在利用工具包中观察到的技术,威胁行动者使用一次性令牌来防止重定向机制的“人工”重放。如果没有提供正确的会话密钥,那么对PNG数据的解密将无法生成browlock URL。

图14:当提供了错误的键时,代码无法生成browlock URL

再一次,我们必须暂停一下,并注意到这种复杂性对于浏览器储物柜之类的东西是闻所未闻的。虽然隐形技术很常见,但这是迄今为止我们所见过的最隐蔽的转向褐发的方法。

其他交通工具链

在我们发现PNG重定向机制之后,我们将我们的调查结果与安全公司分享Confiant.他们知道域Api.imageCloudsedo [。] com,但在不同的广告系列中看到它。由于代码中找到的相同名称的字符串,昵称昵称。

图15:2019年9月Confiant识别的WOOF脚本

此外,谷歌通过Confiant的中介,分享了另一个例子,解释了我们所看到的报纸网站的重定向数量。WOOf脚本的第二个实例是通过视频小部件加载的。

数字媒体通信一位专门从事ADS转换为网络的小部件的公司,显然几个月前妥协了。根据Internet存档收集的数据,他们的脚本之一托管widgets.digitalmediacommunications com/chosen/chosen.jquery.min.js。注射了2019年8月13日,

图16:通过互联网档案捕获的篡改证据

许多网站,其中许多新闻门户,加载此小部件,因此不知不觉地曝光他们的访问者,因为受损库随后从API.ImageCloudsedo [。] COM重新启动到BowLock页面之前检索恶意PNG。

图17:带有妥协小部件的在线报纸站点

虽然我们怀疑使用的方法与我们所知道的方法相似,但很有可能还有其他第三方的折衷方案尚未被发现。

检查浏览器储物柜页面

下图描述了在经过几层验证之后,为了让受害者重定向到浏览器锁页面,需要做些什么。

图18:显示到Browlock页面的重定向机制的流程

最终,前面分析的功能将到达eval部分代码和返回代码来启动眉头。

上面。URL = '[browlock URL]';

这一小段代码将当前浏览器页面重定向到新的URL。事实上,它是最常用技巧恶意广告将用户重定向到诈骗页面。我们认为威胁者很可能在其他的恶意广告活动中使用同样的伎俩。

图19:谷歌Chrome的browlock模板

此浏览器储物柜清洁并包含在其源代码中,并且具有很少的外部依赖项,例如库。我们可以看到它使用了邪恶的光标,这是一个漏洞,犯罪分子可以制造一个假光标,诱骗用户在关闭browlock时点击错误的区域。

图20:显示用于干扰的假光标的源代码

虽然Chrome和Edge用户可以在一定程度上删除冒犯页面,但在火狐上,这是真正的“browlock”,导致浏览器最终崩溃。

图21:用户无法在Firefox中关闭browlock

用于冻结浏览器的代码被复制了足够多的时间,使浏览器变得无用。在下面的图像中,我们看到相同的函数带有略微不同的参数。

图22:负责browlock效果的代码

如果我们去模糊化任何一个函数,我们就能认出历史.Pushstate()方法,我们报道回到2016年,大多数浏览器仍然不能很好地处理这个问题。这个bug引起了Mozilla的注意三年前,最近有人报道相同的404brocloL:

图23:用户向Mozilla报告相同的眉头

浏览器储物柜很难修复,因为它们经常使用完全合法的代码。浏览器供应商经常不得不同时兼顾性能和兼容性问题。

把受害者交给技术支持骗子

浏览器寄存柜的最终目标是让人们寻求帮助来解决(不存在的)计算机问题。这是由第三方通过欺诈性呼叫中心处理的。流量重定向和browlock背后的威胁行动者将获得每一个成功的线索的报酬。

为了迷惑受害者,假冒的微软代理会告诉你运行一些命令,只是为了打开一个浏览器窗口。

图24:Scammer指示受害者运行命令

在那里,他们会要求你下载并运行一个远程协助程序,使他们能够控制你的电脑。几分钟后,他们会使用他们最喜欢的工具,记事本,开始起草发票:

图25:修复此browlock的发票

当机器仍然被认为是受感染的时候,他们只需浏览到一个网站来收取1年、3年或5年的费用,分别为195美元、245美元和345美元。

我们将何去何从?

考虑到这次行动的复杂程度,我们可以预料到威胁行动者将他们的流量多样化从而有某种冗余。

我们希望我们公开这个方案的努力将帮助其他人在他们的网络中识别browlock重定向。尽管我们一再试图报告这些滥用职权的行为,但它们仍未得到纠正。我们仍然愿意与OVH进行更密切的合作,以结束这场运动。

为了最好的保护这个和其他browlocks,我们建议使用我们的免费浏览器扩展,浏览器警卫.它不仅可以从我们的域名和IP黑名单中受益,但它还可以通过可义的技术来检测和阻止BROWLOCKS和其他技术支持诈骗。

确认

我们要感谢Confiant用于共享关于恶意脚本(_Woof变体)的其他情况的附加数据。

多亏了@prsecurity_通过RC4使用脚本中找到的唯一密钥解密PNG数据,指出检索browlock URL的更快方法。

妥协指标(IOC)

只有太多的IOC可以放在这里,所以我们已经上传了浏览域和IP地址作为一个stix2文件到我们的GitHub页面。其中包括2019年6月的数据,基于我们通过复古狩猎收集的指标。请注意,根据我们收集到的数据,这只是本次活动的一部分。

妥协的图书馆

widgets.digitalmediacommunications com/chosen/chosen.jquery.min.js。

隐写重定向器

api.imagecloudsedo。com
141.98.81 [。] 198

Regex来标识browlock url

搜索= \ \ / en \ \ ? w ? (% (\ w_(~){1 4}){10 20}列表= | null) 00000 ([0 - 9]