趋势科技的研究人员跟踪了CopperStealer幕后组织的最新部署,这次是通过基于Chromium的恶意浏览器扩展程序窃取加密货币和用户的钱包帐户信息。
趋势科技最近发布了关于CopperStealer通过滥用浏览器窃取程序、广告软件浏览器扩展程序或远程桌面等各种组件传播恶意软件的分析。跟踪网络犯罪集团的最新活动,研究人员发现了一个恶意浏览器扩展,当受害者登录到一个主要的加密货币交易网站时,该扩展能够创建和窃取受感染设备的API密钥。这些API密钥允许扩展程序执行交易并将加密货币从受害者的钱包发送到攻击者的钱包。
与以前的攻击类似,这个新组件通过fake crack (也称为warez)网站传播。该组件通常与浏览器窃取程序一起分布在一个释放器中,并与其他不相关的恶意软件捆绑在一起。这个捆绑包被压缩成一个受密码保护的档案,自7月以来一直在野外传播。
滴管/扩展安装程序
该组件在第一阶段使用之前文章中描述的相同加密器,然后是第二阶段,其中解密的DLL是UltimatePackerExecutables-(UPX)打包的。解密和解包后,我们注意到一个名为CRX的资源目录,其中包含一个7-Zip压缩文件。恶意Chrome浏览器扩展通常以这种方式打包。
名为CRX的扩展安装程序,包含一个7-Zip压缩文件
该压缩文件包含一个带有设置的JSON文件和另一个带有扩展安装程序本身代码的7-Zip压缩文件。
CRX的解压内容
扩展安装程序首先修改文件首选项和安全首选项在chrome浏览器的用户数据目录。这个名为Preferences的文件是JSON格式,包含个人用户设置。扩展安装程序关闭浏览器通知。
同时,名为SecurePreferences的文件也是JSON格式,包含已安装扩展的设置。对于新安装的扩展,crx.json文件的内容将插入到此安全首选项设置文件中。新安装的扩展也会添加到位于注册表中的扩展安装允许列表中。
扩展分析
安装扩展程序后,我们还注意到chrome://extensions/中新安装了以下扩展程序。
安装的恶意扩展
扩展清单定义了两个Java脚本。后台脚本名为background.js,并且只在一个实例中运行在扩展本身内部。同时,内容脚本称为content.js,并在coinbase.com上下文中运行,如扩展清单中的代码片段所示。
在扩展清单中指定的内容脚本的设置
脚本混淆
这两个Javascript文件都被严重混淆。在第一个混淆步骤中,所有字符串被拆分为子字符串,存储在单个数组中,通过调用多个带有5个十六进制整数参数的十六进制命名函数来实现对数组的访问。
第一层混淆
看看第二个混淆步骤,所有字符串、逻辑操作符(+、-、*、/)、函数调用等都被插入到对象数组中。每个对象都有一个随机字符串作为名称,或者另一个字符串或函数作为值。在我们分析的示例中,_0x1f27e3['PFPYr']对应字符串" set ", _0x1f27e3['LYLfc'](0,1)对应逻辑表达式0!=1。
第二层混淆
这两个混淆步骤都可以通过使用自定义自动化脚本来反混淆。
后台脚本分析
通过分析脚本,本节分析了攻击者如何能够窃取合法加密货币钱包用户的账户信息。当扩展启动时,后台脚本进行两个查询。第一个是对http:///traffic/chrome的GET请求,可能是出于统计目的。
对于ETH地址,脚本硬编码了大约170个额外的基于ERC20的代币。之后,扩展启动onMessage侦听器以侦听来自扩展进程或内容脚本发送的消息。该消息采用JSON格式,其中一个name-value pair 称为method。后台脚本侦听以下方法:
· Method “homeStart”
这个方法试图从Chrome的本地存储获取API密钥(apiKey)和API秘密(apiSecret),如果这些密钥和秘密对是之前获得并保存的。以下步骤需要这些参数:
1.使用API通过请求/api/v2/accounts获取有关钱包、地址和余额的信息。此请求的结果也被泄露到http://
2.如果请求成功,API会向内容脚本发送“okApi”消息并开始解析钱包信息。如果钱包余额不为零,它会尝试将85%的可用资金发送到攻击者控制的钱包。
寻找余额不为零的钱包
窃取85%的可用资金
交易请求的结果也会被泄露
1.如果不成功,API会向内容脚本发送“errorApi”消息。CSRF令牌作为一个参数,以及对新API密钥创建请求的响应。
2.Method “createApi”。
此消息是从内容脚本接收的,并包含一个双因素身份验证(2FA)代码作为参数之一。此代码用于打开新的模式窗口以创建API密钥。通常,当你在CoinbaseAPI设置中点击“+NewAPIKey”时,会请求一个2FA代码,如果代码正确,就会出现模式窗口。
在创建新API的第二步中,需要选择钱包及其权限。恶意扩展请求所有帐户的所有可用权限。
选择所有帐户和权限
之后,需要再插入一个身份验证代码,然后就会显示一个带有新生成的API密钥的表单。如果成功,后台脚本然后继续从“API Key details”表单提取两个API密钥(API Key和API Secret),将它们保存到Chromium的本地存储以供以后使用。如果API身份验证不成功,将向内容脚本发送一条“retryApi”消息。
内容脚本分析
我们进一步研究了内容脚本,以分析负责从受害者那里窃取2FA密码的进程。内容脚本包含以下语言的消息列表:
· 英语(en)
· 德语(de)
· 西班牙语(es)
· 法语(fr)
· 日语(jp)
· 印度尼西亚(身份证)
· 意大利语(它)
· 波兰语(pl)
· 葡萄牙语(pt)
· 俄语(ru)
· 泰语(日)
· 土耳其语(tr)
每条消息都包含电话和身份验证器的标题、描述和错误消息。
对于“phone”,显示的英文信息显示为:
· “title”:“请输入手机验证码。”
· “description”:“输入手机短信提供的两步验证码。”
· “message”:“该代码无效。请再试一次。”
对于“authenticator”,显示的英文消息如下所示:
· “title”:“请输入验证器的验证码。”
· “description”:“输入你的身份验证应用程序提供的两步验证码。”
· “message”:“该代码无效。请再试一次。”
内容脚本最初向/api/v3/brokerage/user_configuration发出请求,以查看用户是否已登录。然后脚本向后台脚本发送一个“homeStart”消息,并开始使用onMessage侦听类似于后台脚本进程的“method”属性。如果它接收到一个方法属性等于“okApi”的消息,它会隐藏代码加载器并移除模式窗口。如果它接收到一个方法属性等于“errorApi”的消息,它就会创建一个模式窗口。
显示要求输入身份验证代码的模式窗口
模式窗口有输入框并侦听oninput事件。如果每个输入框都包含一个数字,则将它们连接成一个“tfa”(2FA)变量,并作为“createApi”消息的参数发送到后台脚本。代码加载器也会显示出来。
模式窗口有六个输入框,需要输入六位数,这是在使用验证器时提供的。如果受害者通过短信使用身份验证,那么身份验证代码有7位数字,模式窗口将多一个输入框。此逻辑在模式窗口代码中实现。收到的方法属性等于“retryApi”的消息会删除所有插入的数字,并以红色显示错误消息。
输入验证码后,出现错误信息
总结
CopperStealer的幕后攻击者会经常发起攻击,研究人员将继续监控他们的部署,因为攻击者找到了更多针对不知情的受害者的方法。在分析此进程时,研究人员发现此扩展程序与之前报告的恶意软件组件之间存在多个相似之处,其中之一是恶意扩展程序和CopperStealer是从之前记录的同一个dropper和相同的传输载体传播的。
另一个惊人的相似之处是恶意扩展的命令和控制(C&C)域具有与域生成算法(DGA)域相同的格式,这些域被追溯为属于先前版本的CopperStealer。格式是由16个十六进制字符组成的字符串。此外,他们的两个C&C服务器都是使用PHP框架“CodeIgniter”构建的。这些属性向我们暗示,恶意软件和扩展程序背后的开发人员或运营商可能存在关联。
建议用户和组织从官方平台下载他们的软件、应用程序和更新,以缓解CopperStealer等恶意软件带来的风险和威胁。