导语:ESET研究人员发现了一种银行恶意软件,它采用了一种新技术来绕过浏览器的保护措施 。

银行恶意软件(也称为banker)最近几年的攻击活动在减少,其中一个原因是反恶意软件公司和web浏览器开发商不断扩大其防范银行木马攻击的保护机制的范围。这导致传统的银行恶意软件欺诈技术变得更加复杂,所以恶意软件作者将其时间和资源转移到了开发易于制造和更有利可图的其他恶意软件,如勒索软件、密挖矿神器和加密货币窃取程序。

我们发现了一种新的银行恶意软件家族,它使用创新的技术来操控浏览器:恶意软件不是使用复杂的过程注入方法来监视浏览活动,而是钩住关键窗口消息循环事件,以便检查银行活动窗口对象的值。

一旦检测到有银行业务活动,恶意软件就会通过浏览器的JavaScript控制台或直接在地址栏中将JavaScript插入到网页中。所有这些操作都是在用户不知情的情况下完成的。这是一个看似简单的技巧,但却击败了针对复杂攻击的高级浏览器保护机制。

一、简介

早在今年1月,我们就注意到这个银行恶意软件背后的组织正在传播他们早期的项目——其中之一就是恶意软件,它通过替换剪贴板中的钱包地址来窃取加密货币。该组织专注于剪贴板恶意软件几个月,并最终推出了第一版银行恶意软件,在3月13日由ESET检测为Win32 /BackSwap.A。

从后面的流程中可以看出,与以前的项目相比,可以看到检测率急剧上升。作者一直非常活跃地改进banker,并且几乎每天都会推出新版本,只在周末休息。

图1.检测为Win32/BackSwap.A的银行恶意软件及以前相关项目的概述

二、传播和执行

Banker通过恶意垃圾邮件活动进行传播,邮件中附带一个严重混淆的JavaScriptdownloader,来自Nemucod家族。垃圾邮件活动针对波兰用户。

很多时候受害者机器也会被已知的Win32 / TrojanDownloader.Nymaim downloader破坏,这似乎是用类似的方法传播的。在撰写本文时,我们不知道这只是一个巧合,还是这两个家族直接相关。

载荷是合法应用程序的修改版本,由恶意载荷部分覆盖。用作修改版本的应用程序正在定期更改,之前滥用过的应用程序包括TPVCGateway,SQLMon,DbgView,WinRAR Uninstaller,7Zip,OllyDbg,FileZilla Server。应用程序被修改,在其初始化期间跳转到恶意代码。用于实现此目的的技术之一是将指向恶意载荷的指针添加到_initterm()函数表中,该函数表是C运行时库的内部部分,用于初始化所有需要的全局变量和其他在main()函数被调用之前需要初始化的部分。

图2.指向banker shellcode指针的合法应用程序的_initterm指针数组

这种方法可能让人想起“木马化”,但不同之处在于原始应用程序不再有效,一旦控制权转移到恶意软件,它就不会返回到原始代码。因此,其目的不是愚弄用户认为他们正在运行合法应用程序,而是为了增加恶意软件的“隐形性”以防分析和检测。这使分析人员难以发现恶意软件,因为许多反向工程工具(如IDA Pro)会将原始main()函数显示为应用程序代码的合法开头,分析人员乍一看可能没有注意到有任何可疑内容。

有效载荷是一个与位置无关的代码块,其所有数据都嵌入其中。字符串以纯文本形式存储,因为所有必需的Windows API都在运行时通过哈希查找,所以它们占用的空间非常小。恶意软件首先将自身复制到启动文件夹中,以确保持久性,然后继续其银行功能。

三、常规注入方法

为了通过网上银行界面从受害者账户窃取资金,典型的银行恶意软件将自己或其专业银行模块注入到浏览器的进程地址空间。由于很多原因,这不是一件容易的事——首先,如前所述,注入可能会被第三方安全解决方案拦截。注入模块还需要匹配浏览器的位数–32位模块不能注入到64位浏览器进程中,反之亦然。这导致银行木马通常不得不携带两个版本的模块,以支持32位和64位版本的浏览器。

成功注入后,银行模块需要查找浏览器特定的功能并挂钩它们。恶意软件会分别查找负责在加密前和解密后以纯文本格式发送和接收HTTP请求的函数。查找这些功能的难度因浏览器而异。对于Mozilla Firefox,这些函数由nss3.dll导出,并且可以通过广为人知的名称轻松查找它们的地址。另一方面,Google Chrome浏览器和其他基于Chromium的浏览器隐藏了这些函数,并在二进制内实现,这使得它们很难找到。这迫使恶意软件作者提出专门的方法和模式,仅适用于特定版本的浏览器。一旦出现新版本,就必须实施新的方法和模式。

如果找到了正确的函数并且成功安装了钩子(请注意,安全解决方案也可以检测到钩子),银行木马可以开始修改HTTP流量或将受害者重定向到另一个模拟银行的网站,同时伪造合法性的证书。许多类似的技术都被当前活跃的银行特洛伊木马DridexUrsnif, Zbot, Trickbot, Qbot等采用。

四、新的浏览器操控技术

Win32 /BackSwap.A使用了一个完全不同的方法。它通过使用Windows GUI元素和模拟用户输入来处理所有事情。这可能看起来微不足道,但它实际上是一个非常强大的技术,可以解决与传统浏览器注入相关的许多“问题”。首先,恶意软件根本不会在进程级别与浏览器进行交互,这意味着它不需要任何特殊权限并可以绕过浏览器的第三方强化措施(通常会关注传统的注入方法)。攻击者的另一个优点是代码不依赖于浏览器的体系结构或其版本,并且一个代码就适用于所有。

恶意软件通过安装针对Windows消息循环可用的特定范围相关事件的挂钩来监视当前正在访问的URL,例如EVENT_OBJECT_FOCUS,EVENT_OBJECT_SELECTION,EVENT_OBJECT_NAMECHANGE和其他一些事件。钩子将通过在对象中搜索以“https”开头的字符串来查找URL,这些字符串是通过从事件的IAccessible接口调用get_accValue方法检索的。

图3.用于从浏览器中获取当前访问的URL的技术。这些URL通过检查[ht] tp [s]子字符串(红色)来检索。

然后,恶意软件将在浏览器中查找指示受害者即将进行电汇的特定银行的URL和窗口标题。

图4. Banker查找特定的银行字符串,第一个字符串是窗口标题,第二个字符串是URL的一部分

一旦识别出来,banker就从其资源中加载适合相应银行的恶意JavaScript并将其注入浏览器。脚本注入也以简单而有效的方式完成。

在较旧的样本中,恶意软件会将恶意脚本插入剪贴板,并模拟按下用于打开开发人员控制台的组合键(Google Chrome中的CTRL + SHIFT + J,Mozilla Firefox中的CTRL + SHIFT + K),然后按CTRL + V粘贴剪贴板的内容,然后发送ENTER执行控制台的内容。最后,恶意软件再次发送控制台组合键关闭控制台。这个过程对浏览器窗口不可见——对于普通用户来说,看起来好像他们的浏览器只是暂时停下来。

在恶意软件的新变种中,这种方法已经升级——不再与开发者控制台交互,而是通过JavaScript protocol URLs直接从地址栏执行恶意脚本;一个大多数浏览器都支持的很少使用的函数。恶意软件模拟Ctrl + L来选择地址栏,然后按DELETE键清除该字段,然后通过在循环中调用SendMessageA在“javascript:”中“输入”,将恶意脚本与CTRL + V组合。然后按ENTER键执行该脚本。过程结束时,地址栏被清除,以消除任何攻击迹象。

在图5中,我们可以看到一部分控制台注入代码:首先,恶意软件通过检查前景窗口的类名(用蓝色标记)来确定浏览器。恶意JavaScript被复制到剪贴板(用红色标记)。然后,将浏览器窗口的不透明度更改为3,从而将其隐藏(标记为紫色)。绿色标志着ToggleBrowserConsole函数,切换浏览器控制台开启和关闭。

图5.脚本注入技术

Win32/BackSwap.A支持针对谷歌浏览器,Mozilla Firefox的攻击,并且在最新的版本中,其作者还增加了对Internet Explorer的支持。不过,现在大多数浏览器都可以使用这种方法,只要这些浏览器具有JavaScript控制台,或者可以从地址栏执行JavaScript,而这两种方式都是标准浏览器功能。

上述三种支持的浏览器都有一个有趣的保护功能,最初设计的目的是作为对抗Self-XSS攻击的策略:当用户尝试将以“javascript:”开头的文本粘贴到地址栏中时,协议前缀将被删除,用户需要手动将其输入地址栏执行脚本。在粘贴恶意脚本之前,Win32 /BackSwap.A通过模拟在地址栏中逐字母键入前缀的方式绕过这种对策。

Mozilla Firefox实施的另一个策略在默认情况下不允许将脚本粘贴到控制台,而是显示一条警告用户有关潜在风险的消息,强制他们先输入“允许粘贴”。通过执行图6所示的shell命令,恶意软件绕过了这一点,该命令修改了prefs.js配置文件并删除了此策略。

图6.用于删除Firefox脚本控制台粘贴保护的shell命令

五、恶意JavaScript

Banker为每个目标银行实施特定的脚本,因为每个银行网站都不同,并且具有不同的源代码和变量。这些脚本被注入到恶意软件识别为发起电汇请求的页面,例如支付公用事业帐户。注入的脚本用另一个秘密帐号替换接收者的银行帐号,当受害者决定发送电汇时,钱将被发送给攻击者。任何防止未授权付款的安全措施(例如双因素认证)在这种情况下都无济于事,因为帐户所有者自愿发送电汇。

Win32/BackSwap.A的恶意脚本总共针对五家波兰银行——PKO Bank Polski,Bank Zachodni WBK S.A.,mBank,ING和Pekao。它的作者有时会从目标列表中删除一些银行,例如,在最新版本中只剩下三家银行——PKO BP,mBank和ING。在旧版本中,攻击者从入侵的WordPress网站上托管的C&C服务器上检索收款银行帐号。在最新的版本中,他们将这些帐号直接存储在恶意脚本中。恶意的银行账号变化非常频繁,几乎每一次行动都有新的变化。

正如我们在下图中看到的,如果电汇金额在一定范围内,banker只会偷钱——他们通常以10,000到20,000 PLN为目标,约为2,800至5,600美元。该脚本替换了原始的收件人银行账户,并且还用显示原始银行账户的方式替换了该号码的输入字段,这样用户看到的是有效的号码,因此不太可能引起怀疑。

图7.恶意JavaScript的一部分。红色区域显示检查电汇金额并更换收款人的银行帐号

六、总结

Win32/BackSwap.A表明,在安全行业和银行恶意软件作者之间的持续战斗中,新的恶意技术不一定需要高度复杂才能有效。我们认为,随着浏览器越来越受到传统代码注入的保护,恶意软件作者将以不同的方式攻击浏览器,而Win32/BackSwap.A可能只是向我们展示了其中一种可能性。

IoCs

1.png

源链接

Hacking more

...