近日,卡巴斯基实验室针对近来最为活跃的Rotexy木马家族进行了深入分析。在2018年8月到10月这三个月里,该木累计发动了7万多次攻击,受害者主要是位于俄罗斯的安卓用户。
该木马家族具有一个独有的特点,即同时使用三个命令源:
- Google云消息(GCM)服务-用于通过Google服务器将JSON格式的短消息发送到移动设备;
- 恶意C&C服务器;
- 传入的SMS短信。
这种“多才多艺”在Rotexy的第一个版本中就已经体现出来,并且成为该木马家族后续变种的一个代表性特点。卡巴斯基实验室,该木马家族是从2014年10月首次发现的SMS短信间谍软件发展而来的。在当时,它被检测为Trojan-Spy.AndroidOS.SmsThief,但后续版本被归类为了另一个家族——Trojan-Banker.AndroidOS.Rotexy。
值得注意的是,最近发布的Rotexy版本结合了银行木马和勒索软件的功能。它以文件名“AvitoPay.apk(或类似文件名)”进行传播,并通过名称类似于youla9d6h.tk、prodam8n9.tk、prodamfkz.ml、avitoe0ys.tk这样的网站下载。这些网站的名称是根据一种具有明确定义的算法生成的:前几个字母代表的是一些流行的分类广告服务,随后是随机字符串,最后是两个字母的顶级域名。
Rotexy的演变
2014-2015
自2014年该恶意软件被检测到以来,Rotexy的主要功能和传播方法并没有发生改变:通过网络钓鱼短信中的链接进行传播,提示用户安装一个app。在启动时,会请求设备管理员权限,然后开始与其C&C服务器通信。
Rotexy木马DEX文件中的典型类列表
直到2015年年中,Rotexy一直使用纯文本JSON格式与其C&C服务器进行通信。C&C服务器地址在其代码中指定,并且没有经过加密处理:
在某些版本中,一个动态生成的底层域名被用作C&C服务器地址:
在初次通信中,Rotexy会将受感染设备的IMEI发送给C&C服务器。作为回复,它会收到一组用来处理传入的短信(电话号码、关键字和正则表达式)的规则——这些规则主要适用于来自银行、支付系统和移动网络运营商的短信。例如,Rotexy可以自动回复短信并立即将其删除。
发送给C&C的消息(请求短信处理规则),以及服务器的回复
随后,Rotexy会将有关智能手机的相关信息发送给C&C服务器,包括手机型号、号码、移动网络运营商名称、操作系统版本和IMEI。
对于每一个后续请求,Rotexy都会生成一个新的子域名(用于生成底层域名的算法硬编码在Rotexy的代码中)。
此外,Rotexy还会在Google云消息(GCM)服务中注册,这意味着它可以通过该服务来接收命令。Rotexy的命令列表在其整个生命周期中几乎保持不变,这一点将在后面详细介绍。
Rotexy的assets文件夹包含文件data.db,其中包含PAGE指令(用于下载指定的网页)所对应的User-Agent字段值。如果该字段值未能从C&C服务器接收到,那么Rotexy则会使用伪随机数算法从文件data.db中选择一个值。
data.db的内容
2015-2016
从2015年年中开始,Rotexy开始使用AES算法来加密受感染设备与C&C之间的通信数据:
同样从这个版本开始,相关数据会通过一个POST请求发送到格式为“/[number]”(一个使用伪随数算法生成的数字,范围在0-9999之内)的相对地址。
从2016年1月份开始,在一些样本中,Rotexy还实现了一种算法,能够从assets文件夹中解压缩经过加密处理的DEX可执行文件。而在这个Rotexy版本中,动态生成的底层域名没有被使用。
2016
从2016年年中开始,攻击者重新启用了动态生成的底层域名。但在Rotexy的网络行为方面,没有出现其他重大变化。
Rotexy向C&C发出的请求
在2016年年末,出现了assets/www文件夹中包含card.html网络钓鱼页面的Rotexy版本。这个页面旨在窃取用户的银行卡详细信息:
2017–2018
从2017年年初开始,HTML网络钓鱼页面bank.html、update.html和extortionist.html开始出现在assets文件夹中。此外,在某些Rotexy版本中,网络钓鱼页面文件名是随机字符串。
在2018年,使用其IP地址与C&C服务器进行联系的Rotexy版本开始出现。随之出现的还有“一次性”域名,它由随机字符串和数字组成,并且使用了类似于.cf、.ga、.gq、.ml或.tk这样的顶级域名。
此外,Rotexy也开始积极使用不同的混淆方法。例如,DEX文件包含大量垃圾字符串,其中包含一个用于从APK中解密主可执行文件密钥。
最新版本(2018)
现在让我们回到当前,详细介绍Rotexy家族的一个代表性版本(SHA256:ba4beb97f5d4ba33162f769f43ec8e7d1ae501acdade792a4a577cd6449e1a84)的功能。
应用程序启动
在首次启动时,Rotexy会检查它是否是在仿真环境中启动,以及在哪个国家/地区启动。如果设备位于俄罗斯境外或仿真环境,那么应用程序将会显示如下页面:
对于本文分析的样本,木马的日志包含一些俄语记录,但存在语法错误和拼写错误:
如果检查通过,Rotexy将向GCM注册并启动SuperService,以跟踪其是否具有设备管理员权限。SuperService还会跟踪自己的状态,如果被停止运行,则重新启动。特权检查会每秒钟执行一次, 如果没有被授予设备管理员权限,Rotexy则向用户反复不断地发出请求:
如果用户同意并授予应用程序所请求的权限,那么它则会显示另一个页面,并隐藏自己的图标:
如果Rotexy检测到试图撤销其管理员权限的尝试,那么它则会关闭手机屏幕,以阻止用户的操作。如果权限被成功撤销,那么Rotexy则会重新启动,并重新向用户反复不断地发出授予管理员权限的请求。
在某些情况下,当Rotexy检测到试图撤销其管理员权限的尝试时,SuperService不会关闭屏幕,而是会试图警告用户:
在运行时,Rotexy会跟踪以下内容:
- 手机的开/关和重启;
- 其运行的终止-对于本文分析的样本,它将重新启动;
- 通过应用程序发送短信-对于本文分析的样本,手机将会切换到静音模式。
C&C通信
默认的C&C服务器地址硬编码在Rotexy的代码中:
Rotexy使用伪随机数算法来生成相对地址,并将信息发送到该地址。对于某些Rotexy版本而言,它们还可以使用动态生成的子域名。
在这个Rotexy样本中,Plugs.DynamicSubDomain的值为false,因此不会生成子域名
另一方面,Rotexy将与C&C服务器有关的信息以及从受感染设备收集的数据存储在本地的SQLite数据库中。
首先,Rotexy会在管理面板中注册,并从C&C服务器接收操作所需的信息(即短信拦截规则和将在HTML页面上显示的文本):
Rotexy会拦截所有传入的短信,并根据从C&C服务器收到的规则来处理它们。此外,当收到短信时,Rotexy会将手机设置为静音模式并关闭屏幕,以便用户不会注意到已收到的短信。在需要时,Rotexy还会将拦截的短信发送到指定的电话号码(在拦截规则中指定是否必须发送回复信息,以及应将哪个文本发送到哪个地址)。如果Rotexy没有收到有关如何处理短信的规则,则只会将所有短信保存到本地数据库,并将它们上传到C&C服务器。
除了有关受感染设备的一般信息之外,Rotexy还会将所有正在运行的进程和已安装的应用程序的列表发送给C&C服务器。攻击者可能会使用该列表来查找正在运行的防病毒或银行应用程序。
Rotexy在收到相应的命令后会执行进一步的操作:
- START, STOP, RESTART -启动、停止和重启SuperService。
- URL -更新C&C地址。
- MESSAGE-将包含特定文本的短信发送到指定号码。
- UPDATE_PATTERNS -在管理面板中重新注册。
- UNBLOCK -取消对手机的锁定(撤消应用程序中的设备管理员权限)。
- UPDATE-从C&C服务器下载并安装APK文件。该命令不仅可用来更新应用程序,还可以用来在受感染设备上安装任何其他软件。
- CONTACTS-将从C&C服务器收到的文本发送给受感染设备上的所有联系人。这很可能是Rotexy的一种传播方式。
- CONTACTS_PRO -从地址簿中请求与某个联系人所对应的特定消息文本。
- PAGE-使用从C&C服务器或本地数据库中的User-Agent值,以便从C&C服务器接收URL。
- ALLMSG-向C&C服务器发送用户收到和发送的所有短信,也包括存储在手机内存中的所有短信。
- ALLCONTACTS-将手机内存中的所有联系人发送到C&C服务器。
- ONLINE-将有关木马当前状态的信息发送给C&C服务器,如是否具有设备管理员权限、当前显示的HTML页面、屏幕处于打开还是关闭状态等。
- NEWMSG-将短信写入设备存储器,其中包含从C&C服务器发送的文本和发件人号码。
- CHANGE_GCM_ID -更改GSM ID。
- BLOCKER_BANKING_START -显示用于输入银行卡详细信息的网络钓鱼HTML页面。
- BLOCKER_EXTORTIONIST_START-显示勒索软件的HTML页面。
- BLOCKER_UPDATE_START-显示伪装成更新页面的HTML页面。
- BLOCKER_STOP - 阻止显示所有HTML页面。
Rotexy的C&C服务器不仅可以由Web服务器来担任,还可以由任何可以发送短信的设备来担任。Rote会拦截所有传入的短信,并可以从这些短信中接收以下命令:
- “3458” -撤消应用程序的设备管理员权限;
- “hi”, “ask”-启用、禁用移动互联网;
- “privet”, “ru”-启用、禁用Wi-Fi;
- “check”-将install: *[device IMEI]*文本发送到发送该短信的电话号码;
- “stop_blocker”-停止显示所有已阻止的HTML页面;
- “393838” -将C&C服务器地址更改为短信中指定的地址。
与Rotexy所执行操作相关的信息均记录在本地数据库中,并会发送到C&C服务器。随后,服务器会返回响应数据,其中包含有关下一步将要执行的操作的说明。
显示HTML页面
现在,让我们来看看Rotexy会显示的HTML页面,以及它会使用这些页面执行哪些操作。
1、Rotexy会显示一个虚假的HTML更新页面(update.html),它会占用设备的屏幕很长一段时间。
2、Rotexy会显示一个勒索页面(extortionist.html),并要求用户支付勒索赎金以解除对设备的锁定。
3、Rotexy会显示一个网络钓鱼页面(bank.html),提示用户输入银行卡详细信息。该页面伪装成合法的银行页面,并占用设备屏幕,直到用户输入所有信息为止。Rotexy甚至拥有自己的软键盘,以示可以保护用户不会受到键盘记录器的侵害。
在{text}标记的区域中,Rotexy会显示它从C&C服务器接收到的文本。通常,这是一条消息,声称用户收到了一笔汇款,但必须输入银行卡详细信息,才能将钱转移到他们的帐户中。
随后,Rotexy会检查用户输入的数据,以及根据C&C服务器命令中发送的数据来检查银行卡号的最后四位数字。具体可能会涉及以下这种情况:根据收到的短信处理规则,Rotexy会拦截来自银行的短信,该短信包含与用户电话号码绑定的银行卡的最后四位数字。Rotexy会将这些数字发送给C&C服务器,C&C服务器则会返回命令,以显示用来检查这四位数字的虚假输入窗口。如果用户提供的是另一张银行卡的信息,则会显示以下窗口:
图中显示的消息大致可翻译为“您输入的银行卡不正确,请输入尾号为1234的银行卡”
由于应用程序没有提供其他的选项,因此用户似乎只能输入正确的卡号。事实上,Rotexy的这一行为就是为了将用户输入的卡号与攻击者之前接收到的银行卡信息进行核对。
当所有银行卡信息被输入并通过检查之后,Rotexy会将它们全都上传到C&C服务器。
如何解锁手机
在这里,卡巴斯基实验室给我们带来了一个好消息——Rotexy并不具备一个设计精良的模块,用来处理包含在短信中命令。 这意味着在某些情况下,当手机被上述HTML页面锁定时,解除锁定状态是可能的。首先,我们需要发送短信“3458”到受感染设备,这将撤销Rotexy的设备管理员权限。然后,我们还需要通过短信将文本“stop_blocker”发送到相同的号码,这将禁止设备显示勒索HTML页面。不过,Rotexy可能会再次向用户反复不断地发出授予设备管理员权限的请求。在这种情况下,请以安全模式重启设备并删除恶意应用程序。
但是,如果攻击者能够对尝试删除Rotexy的行为做出快速响应,那么上述方法可能无法奏效。在这种情况下,你首先需要通过短信将文本“393838”发送到受感染设备,然后重复上述操作。这条短信会将C&C服务器地址更改为“://”,这样一来手机将不再接收来自实际C&C服务器的命令。
请注意,这些解锁指令只适用于当前版本的Rotexy,而在Rotexy的后续版本中,这些命令集可能会发生变化。
Rotexy攻击的地理位置分布
根据卡巴斯基实验室的数据,98%的Rotexy攻击针对的都是位于俄罗斯的用户。实际上,这个木马明确针对的就是以俄语为母语的用户。除此之外,位于乌克兰、德国、土耳其和其他几个国家的用户也受到了影响。
声明:本文来自黑客视界,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。