freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

高度复杂的间谍软件Mandrake
2020-07-08 11:26:14

概述

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层远控框架

功能列表:

  • 短信操作:收集并上传所有SMS消息到服务器、将接收的SMS短信转发到指定的号码、隐藏传入SMS消息不显示给用户、发送指定SMS消息内容给指定号码
  • 电话操作:监听用户电话将来电号码发送到服务器、降低音量并阻止来电、启动对电话号码的呼叫、收集并将联系人列表上传至服务器
  • 应用程序操作:收集并上传应用程序列表、安装其他组件或恶意应用程序、卸载应用程序
  • 设备和帐户操作:收集并上传用户设备所有注册帐户、收集设备信息(Android版本、电池级别、设备型号、ISO国家码,SIM运营商等) 
  • 间谍技术: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代码进行网络钓鱼攻击,窃取目标应用程序的账户信息。

图1-23 加载网页

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

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

4.第二阶段加载

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

图2-1 显示google服务通知

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

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

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

图2-3 更改应用图标

有效负载功能列表:

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

5.第三阶段加载

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

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

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

1.授予可访问性权限

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

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

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

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

该应用构建的视图中“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

 

美国

 

MD5

01f54e3f381fa74ea6202a0eede3336c

769c2f941deb6ebce0ea67d4445ae686

097ba092ecb90bfe3de50ee0d296e079

79780744c5366fa31c5473d57341d6b5

0ba9a201cb420f67d2411c16e72551ff

7c36d69856ad51b9644e4de02e7ef12b

0c33df55396c7302e825e4cdf9d71963

7d3d1aed89bcbf3a6283c7afd5fffe68

102fa3c42f49e76739330c207eb74764

854fe13515a5e16f725ad581bc42a3ca

130678c900e987dc864656675719947a

85eb7327fd01a993aee0e5d830cb04f1

134a27b776651dbe4aeec86067e715c0

86958a2fde23133447f8e5a05d7219d7

139f0b8de9e5829177e7faf5ce626f10

89c35d03187db85247bb2602eceeb186

1437bd4e45ea57cb68599554a2c9ad6d

9b37458884e0d031ed779f1e666a8aee

参考链接

bitdefender

# 间谍软件
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者