转载

高度复杂间谍软件Mandrake

高度复杂间谍软件Mandrake

1.概述

Mandrake间谍软件在野外已潜伏四年,四年间已有数十万用户设备被感染。大多数感染Mandrake受害者分布在澳大利亚、欧洲、美国和加拿大。该间谍软件首先通过伪装成正常的应用潜伏在Googleplay中,除了伪装成合法的应用程序外,这些应用程序还使用其它的技术来避免GooglePlay保护:它们大大延迟了恶意活动,并分阶段工作。藏身于Googleplay中的恶意软件只是整个恶意攻击过程的第一阶段,之后他会诱导用户下载安装第二阶段的有效负荷以及下载更新第三阶段的核心组件。

高度复杂间谍软件Mandrake

图1-1 在googleplay中伪装的合法应用

2.恶意程序加载流程

整个恶意程序执行流程分为三个阶段:用户从google商店下载伪装成正常应用的恶意软件。恶意软件被安装执行后在后台下载有效负荷(伪装成androidsystem)诱导用户安装使用,最后在有效负荷中下载更新核心组件。

高度复杂间谍软件Mandrake

图1-2 恶意程序加载流程

Mandrake间谍软件高度复杂:该间谍软件首次运行便将自身隐藏于后台,所有的界面都是通过动态调用启动。将所有有效字符串加密并在调用时动态在native层解密。将主要函数以及远控命令隐藏于so文件中动态加载,通过java层与native层函数交叉调用执行恶意行为避免被检测引擎检测。Mandrake使攻击者可以访问设备偏好设置,地址簿,消息,屏幕记录,设备使用情况和不活动时间等数据,该恶意软件可以完全控制设备:它可以降低电话的音量并阻止来电,屏蔽用户接收的短信息、窃取用户短信、联系人、账户、登录凭据等隐私数据。通过加载网页并注入特制的JavaScript代码进行网络钓鱼攻击。

高度复杂间谍软件Mandrake

图1-3 程序运行逻辑

3.技术分析

3.1多方面隐藏保护自身

(1)在清单文件中将Activity组件设置为不在最近任务中出现。

高度复杂间谍软件Mandrake

图1-4 设置Activity属性

(2)安装启动后便将自身退到后台,隐藏应用图标。

高度复杂间谍软件Mandrake

图1-5 将自身退到后台

(3)为了让应用程序在后台运行服务,Android操作系统要求应用程序显示永久通知。对于这些情况,Mandrake使用透明通知图标。

高度复杂间谍软件Mandrake

图1-6 红色框内显示透明通知图标

(4)Java层与native层函数交叉调用。

字符串动态解密、客户端与服务器交互、远程命令控制等重要函数放在native层。

高度复杂间谍软件Mandrake

图1-7 so文件中主要函数调用

在native层通过反射调用java层函数。

高度复杂间谍软件Mandrake

图1-8 反射调用java层函数

解密后java层函数:

高度复杂间谍软件Mandrake

图1-9 解密后函数名

(4)将所有效字符串全部加密,运行时动态解密拼接。

这样做不仅可以增加分析人员难度还可避免应用商店以及杀毒软件的检测。

高度复杂间谍软件Mandrake

图1-10 字符串解密函数

解密后部分字符串以及服务器地址:

高度复杂间谍软件Mandrake

图1-11 解密文件名、服务器地址

3.2行为分析

应用启动后便会检测用户设备SIM卡运营商以及国家码ISO,如果满足某些条件,恶意软件将停止运行:它避免在低收入国家、非洲国家、前苏联国家或以阿拉伯语为主的国家运行。它还避免了在没有SIM卡的设备上或在特定运营商发布的SIM上运行。其中排除在SIM卡运营商为“CMCC”(中国移动通信集团公司)的设备上运行。

高度复杂间谍软件Mandrake

图1-12 Sim卡运营商检测

检测应用是否在模拟器虚拟环境中运行:

高度复杂间谍软件Mandrake

图1-13检测应用是否在虚拟环境

通过设备检测后,应用便会调用native层init()函数进行一些字符串解密以及隐私数据收集操作,但在这之前应用会在首次加载的JNI_OnLoad函数中进行一些初始化操作并连接服务器与服务器进行交互。

高度复杂间谍软件Mandrake

高度复杂间谍软件Mandrake

图1-14 客户端与服务器交互

Init()函数中执行获取用户设备应用列表、账户列表、通讯录列表信息,并检测自身是否为设备默认短信程序。

高度复杂间谍软件Mandrake

图1-15 init函数

执行cmd命令获取用户设备应用列表并通过反射调用java层0xJ18函数执行窃取用户设备账户信息、以及联系人信息操作。

高度复杂间谍软件Mandrake

图1-16窃取用户应用列表、联系人列表、账户列表

检测自身是否为默认短信程序,如果不是便会弹出通知弹框请求,当用户拒绝该请求时便通知用户应用已停止运行。当用户授予了该请求应用便会显示自己精心绘制的视图充当短信查看器(恶意软件中最有趣的部分之一是精心绘制的视图、布局、显示和视觉组件扭曲应用程序流程,以欺骗用户授予危险的权限,该方法通过修改屏幕的区域来改变用户所看到的内容,从而在用户点击特定区域时使它们能够获得额外的权限)。

该显示层具有收发短信的功能。之后该应用便可完全接替默认的短信程序,对用户短信数据库具有编辑、删除、更改等权限。

高度复杂间谍软件Mandrake

图1-17 自制作短信收发显示层

监听用户电话状态,降低音量并阻止来电。将来电号码进行对比后执行挂断电话、删除通话记录或录音操作。

高度复杂间谍软件Mandrake

图1-18 监听用户电话

(1)挂断电话。

高度复杂间谍软件Mandrake

图1-19 挂断用户设备接收的电话

(2)删除通话记录:

高度复杂间谍软件Mandrake

图1-20 删除通话记录

3.3远程控制

应用在java层每执行一次操作便会发送一条指令到native层。

高度复杂间谍软件Mandrake

图1-21 java层命令传输

Native层远控整个指令的执行。

高度复杂间谍软件Mandrake

图1-22 native层远控框架

功能列表:

  1. 短信操作:收集并上传所有SMS消息到服务器、将接收的SMS短信转发到指定的号码、隐藏传入SMS消息不显示给用户、发送指定SMS消息内容给指定号码
  2. 电话操作:监听用户电话将来电号码发送到服务器、降低音量并阻止来电、启动对电话号码的呼叫、收集并将联系人列表上传至服务器
  3. 应用程序操作:收集并上传应用程序列表、安装其他组件或恶意应用程序、卸载应用程序
  4. 设备和帐户操作:收集并上传用户设备所有注册帐户、收集设备信息(Android版本、电池级别、设备型号、ISO国家码,SIM运营商等)
  5. 间谍技术:GPS跟踪、任何帐户的证书盗窃(脸书,电子银行账户)通过js脚本注入技术进行网络钓鱼

指令列表:

指令 功能
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代码进行网络钓鱼攻击,窃取目标应用程序的账户信息。

高度复杂间谍软件Mandrake

图1-23 加载网页

恶意软件会将收集到的隐私数据传输到native层并写入文件中,之后便上传到服务器。

高度复杂间谍软件Mandrake

图1-25 保存隐私数据文件

4.第二阶段加载

第二阶段加载程序有效负载时,应用通过使用GooglePlay图标以更新Google服务的标题诱导用户点击。

高度复杂间谍软件Mandrake

图2-1 显示google服务通知

当用户点击假冒的GooglePlay通知消息后,会提示用户安装AndroidSystem应用(伪装成安卓系统应用更有助于隐藏自己),这实际上是第二阶段需要加载的有效负载。

高度复杂间谍软件Mandrake

图2-2 诱导用户安卓有效负载

第二阶段加载程序下载和安装后,有效负载(AndroidSystem)将检测用户设备系统版本,如果系统版本小于10则隐藏图标否则更改其图标为其它应用图标。加载程序将模仿Wi-Fi图标,当点击时,应用打开的确是Wi-Fi菜单。

高度复杂间谍软件Mandrake

图2-3 更改应用图标

有效负载功能列表:

  1. 确定和操纵设备的状态
  2. 确定用户是否是他们的有效攻击目标
  3. GPS定位跟踪
  4. 收集并上传用户设备所有注册帐户信息
  5. 下载核心组件并动态加载它

5.第三阶段加载

核心组件主要用于授予应用敏感权限以及传输命令:

  1. 授予应用设备管理员权限
  2. 授予应用可访问性权限
  3. 授予应用读取通知的权限
  4. 授予应用忽略电池优化的特权
  5. 将自身设置为默认的SMS应用程序。
  6. 禁用谷歌播放保护
  7. 允许自己安装未知的应用

Mandrake拥有一个非常特殊的模块,就如CAD绘图一样用于绘制屏幕的部分,系统警报或其它视觉内容,通过修改屏幕的区域来改变用户所看到的内容,从而在用户点击特定区域时使它们能够获得敏感的权限。如果授权失败,应用将会弹出Toast警示框

1.授予可访问性权限

首先他构造了手机设备上可访问性服务列表初始视图,将“Iagree”复选框定位于自身开启可访问性服务的开关,当用户点击“Iagree” 它们将按下与自身对应的可访问性条目。

高度复杂间谍软件Mandrake

图2-4 诱导授予可访问性权限

2.授予忽略电池优化权限

当用户电量不足系统将会通过杀死后台进程来优化电池寿命,授予应用可访问性权限可以保证应用后台进程不被系统杀死。

该应用构建的视图中“allow”按钮正对应着授予忽略电池优化权限的按钮。当用户按下“allow”按钮便授予了该权限。

高度复杂间谍软件Mandrake

图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 美国

MD5

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

原文  https://www.anquanke.com/post/id/210052
正文到此结束
Loading...