Mandrake间谍软件在野外已潜伏四年,四年间已有数十万用户设备被感染。大多数感染Mandrake受害者分布在澳大利亚、欧洲、美国和加拿大。该间谍软件首先通过伪装成正常的应用潜伏在Googleplay中,除了伪装成合法的应用程序外,这些应用程序还使用其它的技术来避免GooglePlay保护:它们大大延迟了恶意活动,并分阶段工作。藏身于Googleplay中的恶意软件只是整个恶意攻击过程的第一阶段,之后他会诱导用户下载安装第二阶段的有效负荷以及下载更新第三阶段的核心组件。
图1-1 在googleplay中伪装的合法应用
整个恶意程序执行流程分为三个阶段:用户从google商店下载伪装成正常应用的恶意软件。恶意软件被安装执行后在后台下载有效负荷(伪装成androidsystem)诱导用户安装使用,最后在有效负荷中下载更新核心组件。
图1-2 恶意程序加载流程
Mandrake间谍软件高度复杂:该间谍软件首次运行便将自身隐藏于后台,所有的界面都是通过动态调用启动。将所有有效字符串加密并在调用时动态在native层解密。将主要函数以及远控命令隐藏于so文件中动态加载,通过java层与native层函数交叉调用执行恶意行为避免被检测引擎检测。Mandrake使攻击者可以访问设备偏好设置,地址簿,消息,屏幕记录,设备使用情况和不活动时间等数据,该恶意软件可以完全控制设备:它可以降低电话的音量并阻止来电,屏蔽用户接收的短信息、窃取用户短信、联系人、账户、登录凭据等隐私数据。通过加载网页并注入特制的JavaScript代码进行网络钓鱼攻击。
图1-3 程序运行逻辑
(1)在清单文件中将Activity组件设置为不在最近任务中出现。
图1-4 设置Activity属性
(2)安装启动后便将自身退到后台,隐藏应用图标。
图1-5 将自身退到后台
(3)为了让应用程序在后台运行服务,Android操作系统要求应用程序显示永久通知。对于这些情况,Mandrake使用透明通知图标。
图1-6 红色框内显示透明通知图标
(4)Java层与native层函数交叉调用。
字符串动态解密、客户端与服务器交互、远程命令控制等重要函数放在native层。
图1-7 so文件中主要函数调用
在native层通过反射调用java层函数。
图1-8 反射调用java层函数
解密后java层函数:
图1-9 解密后函数名
(4)将所有效字符串全部加密,运行时动态解密拼接。
这样做不仅可以增加分析人员难度还可避免应用商店以及杀毒软件的检测。
图1-10 字符串解密函数
解密后部分字符串以及服务器地址:
图1-11 解密文件名、服务器地址
应用启动后便会检测用户设备SIM卡运营商以及国家码ISO,如果满足某些条件,恶意软件将停止运行:它避免在低收入国家、非洲国家、前苏联国家或以阿拉伯语为主的国家运行。它还避免了在没有SIM卡的设备上或在特定运营商发布的SIM上运行。其中排除在SIM卡运营商为“CMCC”(中国移动通信集团公司)的设备上运行。
图1-12 Sim卡运营商检测
检测应用是否在模拟器虚拟环境中运行:
图1-13检测应用是否在虚拟环境
通过设备检测后,应用便会调用native层init()函数进行一些字符串解密以及隐私数据收集操作,但在这之前应用会在首次加载的JNI_OnLoad函数中进行一些初始化操作并连接服务器与服务器进行交互。
图1-14 客户端与服务器交互
Init()函数中执行获取用户设备应用列表、账户列表、通讯录列表信息,并检测自身是否为设备默认短信程序。
图1-15 init函数
执行cmd命令获取用户设备应用列表并通过反射调用java层0xJ18函数执行窃取用户设备账户信息、以及联系人信息操作。
图1-16窃取用户应用列表、联系人列表、账户列表
检测自身是否为默认短信程序,如果不是便会弹出通知弹框请求,当用户拒绝该请求时便通知用户应用已停止运行。当用户授予了该请求应用便会显示自己精心绘制的视图充当短信查看器(恶意软件中最有趣的部分之一是精心绘制的视图、布局、显示和视觉组件扭曲应用程序流程,以欺骗用户授予危险的权限,该方法通过修改屏幕的区域来改变用户所看到的内容,从而在用户点击特定区域时使它们能够获得额外的权限)。
该显示层具有收发短信的功能。之后该应用便可完全接替默认的短信程序,对用户短信数据库具有编辑、删除、更改等权限。
图1-17 自制作短信收发显示层
监听用户电话状态,降低音量并阻止来电。将来电号码进行对比后执行挂断电话、删除通话记录或录音操作。
图1-18 监听用户电话
(1)挂断电话。
图1-19 挂断用户设备接收的电话
(2)删除通话记录:
图1-20 删除通话记录
应用在java层每执行一次操作便会发送一条指令到native层。
图1-21 java层命令传输
Native层远控整个指令的执行。
图1-22 native层远控框架
功能列表:
指令列表:
指令 | 功能 | |||
1000 | 接收短信:在每次收到短信时,都会向包含短信内容的服务器发出请求 | |||
1001 | 封锁所有收到的短信,不显示给受害者。并将短信内容转发到指定的号码。 | |||
1002 | 每隔一段时间客户端连接服务端 | |||
1003 | 对用户设备安装的应用进行操作,根据不同状态执行不同操作 | |||
1004 | 停止脚本注入 | |||
1005 | 发送用户设备应用列表、账户列表、联系人列表到服务器 | |||
1006 | 将日志文件发送至服务器 | |||
1007 | 更新服务器地址 | |||
1008 | 将Mandrake设置为默认SMS处理程序。 这能够阻止、拦截、中端传入的消息 | |||
1009 | 禁用短信处理功能 | |||
1010 | 更新组件 | |||
1011 | 移除更新的组件 | |||
1012 | 获取到目前为止收到的所有短信并发送到服务器 | |||
1014 | 拨打指定电话号码 | |||
1015 | 设置呼叫阻塞开关 | |||
1016 | 发送指定内容到指定电话号码 | |||
1017 | 发送指定内容到指定电话号码 | |||
1018 | 将对参数中给出的URL进行WebSocket连接 | |||
1019 | 停止控制受害者设备 | |||
1020 | 记录网页活动,注入恶意javascript窃取目标程序表单输入。 | |||
1021 | 停止浏览网页 | |||
1022 | 诱导用户给予可访问性权限 | |||
1023 | 停止命令 | |||
1025 | 启动一个应用 | |||
1026 | 重新启动恶意软件组件 | |||
1028 | 开始录屏 | |||
1029 | 停止录屏 |
通过加载网页并注入特制的JavaScript代码进行网络钓鱼攻击,窃取目标应用程序的账户信息。
图1-23 加载网页
恶意软件会将收集到的隐私数据传输到native层并写入文件中,之后便上传到服务器。
图1-25 保存隐私数据文件
第二阶段加载程序有效负载时,应用通过使用GooglePlay图标以更新Google服务的标题诱导用户点击。
图2-1 显示google服务通知
当用户点击假冒的GooglePlay通知消息后,会提示用户安装AndroidSystem应用(伪装成安卓系统应用更有助于隐藏自己),这实际上是第二阶段需要加载的有效负载。
图2-2 诱导用户安卓有效负载
第二阶段加载程序下载和安装后,有效负载(AndroidSystem)将检测用户设备系统版本,如果系统版本小于10则隐藏图标否则更改其图标为其它应用图标。加载程序将模仿Wi-Fi图标,当点击时,应用打开的确是Wi-Fi菜单。
图2-3 更改应用图标
有效负载功能列表:
核心组件主要用于授予应用敏感权限以及传输命令:
Mandrake拥有一个非常特殊的模块,就如CAD绘图一样用于绘制屏幕的部分,系统警报或其它视觉内容,通过修改屏幕的区域来改变用户所看到的内容,从而在用户点击特定区域时使它们能够获得敏感的权限。如果授权失败,应用将会弹出Toast警示框
首先他构造了手机设备上可访问性服务列表初始视图,将“Iagree”复选框定位于自身开启可访问性服务的开关,当用户点击“Iagree” 它们将按下与自身对应的可访问性条目。
图2-4 诱导授予可访问性权限
当用户电量不足系统将会通过杀死后台进程来优化电池寿命,授予应用可访问性权限可以保证应用后台进程不被系统杀死。
该应用构建的视图中“allow”按钮正对应着授予忽略电池优化权限的按钮。当用户按下“allow”按钮便授予了该权限。
图2-5 诱导授予忽略电池优化权限
域名 | IP地址 | 国家 | |||
Andro****mware.com | 198.54.***.197 | 美国 | |||
nfmm****gflemt.top | 198.54.***.197 | 美国 | |||
xjkbh****thnpl.top | 198.54.***.212 | 美国 | |||
andro****mware.top | 192.64.***.92 | 美国 | |||
androi****mware.cc | |||||
andro****mware.ir | 3.125.***.66 | 美国 |
应用名称 | 针对国家 | |||||
Capital One Canada | 加拿大 | |||||
Desjardins mobile | services | 法国 | ||||
Sparkasse Ihre mobile | Filiale | 德国 | ||||
Postepay | 意大利 | |||||
Mein ELBA-App | 奥地利 | |||||
IKO | 波兰 | |||||
UOB Mighty Singapore | 新加坡 | |||||
ABN AMRO | MobielBankieren | 荷兰 | ||||
Scotiabank Mobile | Banking | 英国 | ||||
Bank of America Mobile | Banking | 美国 |
01f54e3f381fa74ea6202a0eede3336c
769c2f941deb6ebce0ea67d4445ae686
097ba092ecb90bfe3de50ee0d296e079
79780744c5366fa31c5473d57341d6b5
0ba9a201cb420f67d2411c16e72551ff
7c36d69856ad51b9644e4de02e7ef12b
0c33df55396c7302e825e4cdf9d71963
7d3d1aed89bcbf3a6283c7afd5fffe68
102fa3c42f49e76739330c207eb74764
854fe13515a5e16f725ad581bc42a3ca
130678c900e987dc864656675719947a
85eb7327fd01a993aee0e5d830cb04f1
134a27b776651dbe4aeec86067e715c0
86958a2fde23133447f8e5a05d7219d7
139f0b8de9e5829177e7faf5ce626f10
89c35d03187db85247bb2602eceeb186
1437bd4e45ea57cb68599554a2c9ad6d
9b37458884e0d031ed779f1e666a8aee
https://www.bitdefender.com/files/News/CaseStudies/study/329/Bitdefender-PR-Whitepaper-Mandrake-creat4464-en-EN-interactive.pdf