导语: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含有包中的一个重要部分——应用中安装时向设备请求的权限。
根据上面的xml文件,看起来Roaming Mantis请求的权限有设备启动时通知、使用网络、收集账户信息、管理SMS/MMS和打电话、录音、控制外部存储、检查包、写入文件系统等。所有的这些请求都是通过test.dex中的恶意函数支持完成的。
比如,安装完成后,恶意软件会弹窗覆盖所有的窗口:“Account No.exists risks, use after certification”。然后,恶意软件会在设备上打开web服务器,在127.0.0.1上生成一个虚假的谷歌认证页面。
该页面利用从受感染的设备上获取的Google账户名来要求设备拥所有者(用户)输入name和date of birth,这些信息可以被用来访问用户帐户。在用户输入了name和date of birth后,浏览器会被重定向到一个空页面http://127.0.0.1:${random_port}/submit。
在分析test.dex文件时,研究人员发现下面的一段代码:
恶意软件也支持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引用,大多数与手机银行和游戏账户相关联。
下面是从恶意软件中提取出的硬编码的字符串:
· 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。
常见的安卓设备商没有su的,如果有su说明设备被root过了。对攻击者来说,这台设备商被一个高级权限的用户拥有,也就是说可以利用root权限来获取整个系统的访问权限。
C2
Kaspersk实验室研究人员在恶意应用的恶意控制中发现了硬编码的URL模板(http://my.tv.sohu.com/user/%s)。my.tv.sohu.com是一个合法的站点,用户个人资料页面上的一些内容是所有者去控制的。
恶意软件中含有的一些被|分割的用户账号包括“329505231|329505325|329505338”。
在获取了sohu.com页面的内容后,恶意软件会从HTML代码的特定部分提取中文字符串。比如,恶意应用会接受到页面 http://my.tv.sohu.com/user/329505338的内容。
之后,使用硬编码的表达式 “<p>([\u4e00-\u9fa5]+?)</p>\s+</div>”来提取特定位置的中文字符串。每个字符都是减0x4E00来解码的,也就是右移3比特,然后用beg作为密钥进行XOR运算。
得到的结果就是真实的C2地址,恶意软件会用web socket去连接。研究人员通过被感染设备的debug日志来追踪和分析这些活动。
另外一个样本是(MD5:4d9a7e425f8c8b02d598ef0a0a776a58),连接的协议,包括硬编码的合法站点,账户和提取下一阶段C2的表达式都被改变了。
除此之外, \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’<p>([\u4e00-\u9fa5]+?)</p>\s+</div>’ # my.tv.sohu.com pattern = u‘公司</span>([\u4e00-\u9fa5]+?)<’ # 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) >> 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个月的检测数据如下:
一共有超过150个用户的超过6000次检测。受影响最多的国家有韩国,孟加拉国和日本。基于恶意软件的设计和检测到的数据量来看,恶意软件主要在亚洲国家传播。监测数据显示,每天大约有3000次与C2服务器的连接。每次连接后,恶意软件会发送被入侵的设备的信息给C2,包括系统地域等。其中98%的受感染设备好像位于韩国。
下图是基于地域的统计图:
剩下的2%的感染设备系统分别是en_GB,en_us,zh_CN, ja_JP等。
结论
Kaspersky实验室研究人员发现了Roaming Mantis安卓恶意应用通过DNS劫持技术和被入侵的路由器进行传播。恶意软件的目的主要是窃取用户双因子认证的凭证等信息,并给攻击者完全控制被入侵安卓设备的权限。
从目前的线索来看,攻击行为可能是出于经济目的,所以研究人员判断此次攻击活动的背后是网络犯罪黑客。该恶意软件主要在韩国比较流行,而韩语也是HTML和test.dex文件中的第一语言。基于这些发现,研究人员认为恶意应用最初在韩国传播,之后攻击者又增加了对繁体中文,英文和日文的支持,攻击目标范围也扩展到亚洲区域。
但是黑客是如何劫持路由器的DNS设定的呢?目前还不清楚。但研究人员建议,更改路由器的默认用户名和密码,不要安装来自非可信第三方的固件,定期更新路由器固件防止未来出现相似的攻击。
通过调查和HTML代码中的一些线索,研究人员认为犯罪分子(攻击者)对简体中文和韩语都很熟悉。攻击活动背后的攻击者目前非常活跃,每天都会更新恶意软件。
Kaspersky实验室检测到的恶意软件:HEUR:Trojan-Banker.AndroidOS.Wroba