导语:Roaming Mantis恶意软件通过劫持路由器的DNS设定来将用户重定向到恶意网站,向用户推送含有木马的浏览器更新,最终达到感染安卓手机的目的。

2018年3月,日本媒体曝光称,黑客劫持日本路由器的DNS设定将用户重定向到恶意IP地址。重定向导致含有安卓木马Trojan-Banker的应用安装,包括名为facebook.apk和chrome.apk的木马应用。根据telemetry的数据,恶意软件已经被检测到超过6000次。检测到的超过一半攻击目标是亚洲地区。

在研究人员调查该攻击事件时,每天有上千次与C2基础设施的连接,而大多数的受害者设备位于韩国。因为之前没有监测到类似的恶意软件行为,加上该恶意软件通过安卓手机roaming在wifi网络之间传播,所以研究人员将其命名为Roaming Mantis。

传播

Roaming Mantis恶意软件设计之初就是通过一个非常简单但是有效的技巧进行传播,这个技巧就是DNS劫持。当用户尝试通过一个被入侵的路由器去访问网站,就会被重定到恶意的web站点。因为浏览器显示的URL还是原来要访问的,所以用户会认为这个网站上真实的,实际上这个网站与原来想要访问的网站没有一点关系。被重定向的这个web页会展示给用户弹窗消息:“To better experience the browsing, update to the latest chrome version(更新浏览器提醒)”。

从这个恶意web页的HTML代码可以看出,支持5种地域(语言),分别是韩语,繁体中文,简体中文,日语和英语。

在仔细研究了HTML代码后,研究人员发现实际上只支持4种地域(语言),分别是韩语,简体中文,日语和英语,而且是基于安卓设备的。如上图所示,HTML源码中简体中文和繁体中文含有的信息是系统的。

分析chrome.apk

其中一个推送给用户的应用就是安卓版chrome浏览器。Kaspersky实验室2018年4月获得了chrome.apk的副本(md5:f3ca571b2d1f0ecff371fb82119d1afe)。该安卓应用包结构如下:

包中含有classes.dex,是Dalvik VM可执行文件。该文件的主要作用是读取/assets/db的文件。会在Base64解码器中解码数据,生成另外一个明文test.dex的Dalvik VM 可执行文件:

提取的test.dex文件含有主要的恶意payload。Base64编码技术可能是用来绕过基于签名的检测。

AndroidManifest.xml含有包中的一个重要部分——应用中安装时向设备请求的权限。

180413-android-malware-5.png

根据上面的xml文件,看起来Roaming Mantis请求的权限有设备启动时通知、使用网络、收集账户信息、管理SMS/MMS和打电话、录音、控制外部存储、检查包、写入文件系统等。所有的这些请求都是通过test.dex中的恶意函数支持完成的。

比如,安装完成后,恶意软件会弹窗覆盖所有的窗口:“Account No.exists risks, use after certification”。然后,恶意软件会在设备上打开web服务器,在127.0.0.1上生成一个虚假的谷歌认证页面。

180413-android-malware-6.png

该页面利用从受感染的设备上获取的Google账户名来要求设备拥所有者(用户)输入name和date of birth,这些信息可以被用来访问用户帐户。在用户输入了name和date of birth后,浏览器会被重定向到一个空页面http://127.0.0.1:${random_port}/submit

在分析test.dex文件时,研究人员发现下面的一段代码:

180413-android-malware-7.png

恶意软件也支持4种地域(语言),分别是韩语,繁体中文,日语和英语。上面的代码取自英文环境下的Google认证页面(研究人员也不清楚为什么会出现3行韩文)。

· I have an anomaly on my Google account. For voice verification, enter your verification number to verify your Google account. //구글 계정이 이상이 있습니다.음성검증을 들어 인증번호를 입력하여 구글 계정을 검증하도록합니다.

· 谷歌账号出现异常,输入验证码来验证google账号。

· Verification Number. //인증번호验证码

· Please enter your verification number. //인증번호를 입력하세요请输入验证码

从这些字符串可以看出,犯罪分子(攻击者)在尝试获取双因子认证的验证码。出现韩文可能是系统bug或者设计失误。

receive/read/write/send SMS/MMS的权限和录音权限允许恶意软件运营者窃取双因子认证的验证码。

第二,恶意软件含有韩国流行的安卓应用ID引用,大多数与手机银行和游戏账户相关联。

180413-android-malware-8.png

下面是从恶意软件中提取出的硬编码的字符串:

· wooribank.pib.smart

· kbstar.kbbank

· ibk.neobanking

· sc.danb.scbankapp

· shinhan.sbanking

· hanabank.ebk.channel.android.hananbank

· smart

· epost.psf.sdsi

· kftc.kjbsmb

· smg.spbs

· webzen.muorigin.google

· ncsoft.lineagem19

· ncsoft.lineagem

· co.neople.neopleotp

· co.happymoney.android.happymoney

· nexon.axe

· nexon.nxplay

· atsolution.android.uotp2

另一段代码是负责验证/system/bin/, /system/xbin/, /system/sbin/, sbin/,/vendor/bin/中的su。

180413-android-malware-9.png

常见的安卓设备商没有su的,如果有su说明设备被root过了。对攻击者来说,这台设备商被一个高级权限的用户拥有,也就是说可以利用root权限来获取整个系统的访问权限。

C2

Kaspersk实验室研究人员在恶意应用的恶意控制中发现了硬编码的URL模板(http://my.tv.sohu.com/user/%s)。my.tv.sohu.com是一个合法的站点,用户个人资料页面上的一些内容是所有者去控制的。

180413-android-malware-10.png

恶意软件中含有的一些被|分割的用户账号包括“329505231|329505325|329505338”。

180413-android-malware-11-e1523622221846.png

在获取了sohu.com页面的内容后,恶意软件会从HTML代码的特定部分提取中文字符串。比如,恶意应用会接受到页面 http://my.tv.sohu.com/user/329505338的内容。

180413-android-malware-12.png

之后,使用硬编码的表达式 “<p>([\u4e00-\u9fa5]+?)</p>\s+</div>”来提取特定位置的中文字符串。每个字符都是减0x4E00来解码的,也就是右移3比特,然后用beg作为密钥进行XOR运算。

5.png

得到的结果就是真实的C2地址,恶意软件会用web socket去连接。研究人员通过被感染设备的debug日志来追踪和分析这些活动。

180413-android-malware-14-e1523622331768.png

另外一个样本是(MD5:4d9a7e425f8c8b02d598ef0a0a776a58),连接的协议,包括硬编码的合法站点,账户和提取下一阶段C2的表达式都被改变了。

image.png

除此之外, \assets\db文件名变成了\assets\data.sql,编码算法也从Base64变成了Base64+zlib。恶意软件的作者看起来会经常更新代码。

研究人员后来开发出下面的python脚本来解码真实的C2服务器,并以此来追踪Roaming Mantis。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import re
page = open(sys.argv[1],“rb”).read()
#pattern = u’&lt;p&gt;([\u4e00-\u9fa5]+?)&lt;/p&gt;\s+&lt;/div&gt;’ # my.tv.sohu.com
pattern = u‘公司&lt;/span&gt;([\u4e00-\u9fa5]+?)&lt;’ # baidu.com
match = re.search(pattern, page.decode(“utf-8”))
ext = match.group(1)
dec = ”
j = 0
for i in range(len(ext)):
dec = dec + chr((ord(ext[i]) – 0x4e00) &gt;&gt; 3 ^ ord(‘beg’[j]))
j = (j+1) %3
print(dec)

输出结果示例:

$ python dec_facebook_apk.py my.tv.sohu.com_329505338.html
220.136.76[.]200:8844
$ python dec_facebook_apk.py www.baidu.com_p_wokaixin158998_detail.html
220.136.179[.]5:28833

更有趣的是,恶意软件被植入了一个新的特征,通过邮件协议与C2进行通信。发送的数据含有语言、电话号码、访问信息、与C2的ping结果。

恶意软件检测统计

Kaspersky实验室检测到Roaming Mantis的恶意apk文件,即Trojan-Banker.AndroidOS.Wroba。2018年2月9日到4月9日共2个月的检测数据如下:

180413-android-malware-15.png

一共有超过150个用户的超过6000次检测。受影响最多的国家有韩国,孟加拉国和日本。基于恶意软件的设计和检测到的数据量来看,恶意软件主要在亚洲国家传播。监测数据显示,每天大约有3000次与C2服务器的连接。每次连接后,恶意软件会发送被入侵的设备的信息给C2,包括系统地域等。其中98%的受感染设备好像位于韩国。

下图是基于地域的统计图:

9.png

剩下的2%的感染设备系统分别是en_GB,en_us,zh_CN, ja_JP等。

结论

Kaspersky实验室研究人员发现了Roaming Mantis安卓恶意应用通过DNS劫持技术和被入侵的路由器进行传播。恶意软件的目的主要是窃取用户双因子认证的凭证等信息,并给攻击者完全控制被入侵安卓设备的权限。

从目前的线索来看,攻击行为可能是出于经济目的,所以研究人员判断此次攻击活动的背后是网络犯罪黑客。该恶意软件主要在韩国比较流行,而韩语也是HTML和test.dex文件中的第一语言。基于这些发现,研究人员认为恶意应用最初在韩国传播,之后攻击者又增加了对繁体中文,英文和日文的支持,攻击目标范围也扩展到亚洲区域。

但是黑客是如何劫持路由器的DNS设定的呢?目前还不清楚。但研究人员建议,更改路由器的默认用户名和密码,不要安装来自非可信第三方的固件,定期更新路由器固件防止未来出现相似的攻击。

通过调查和HTML代码中的一些线索,研究人员认为犯罪分子(攻击者)对简体中文和韩语都很熟悉。攻击活动背后的攻击者目前非常活跃,每天都会更新恶意软件。

Kaspersky实验室检测到的恶意软件:HEUR:Trojan-Banker.AndroidOS.Wroba

源链接

Hacking more

...