随着 Android 智能手机的普及和各种功能 APP 的流行,人们已越来越多地依赖智能手机存储处理个人和商务信息,而这也成为了犯罪份子进行信息窃取的隐蔽途径。近日,Palo Alto Networks 公司研究人员发现了一种高级 Android 平台木马恶意软件 SpyDealer,它能从 40 多个流行 APP 中收集个人隐私信息,并可通过滥用安卓辅助功能实现对多种通信 APP 敏感信息窃取。此外,SpyDealer 会利用一款商业 root 软件获取手机 root 权限,以此进行更深入的隐私数据窃取。目前,该恶意软件针对大量中国手机端流行 APP 开发了信息窃取功能。
SpyDealer 具备多种信息窃取功能:
从 40 多种流行 APP 中收集个人隐私信息,这些 APP 包括: 微信、Facebook、WhatsApp、 Skype、Line、Viber、QQ、Tango、Telegram、新浪微博、腾讯微博、安卓原生内置浏览器、火狐浏览器、欧朋浏览器、QQ 邮箱、网易邮箱、淘宝、人人、飞信、遇见、百度网盘 等;
利用安卓辅助服务功能对流行通信和社交 APP 进行敏感消息窃取,包括微信、 Skype, Viber、QQ 等;
利用商业 root 软件 "Baidu Easy Root"root 目标手机,实现持久驻留和感染控制;
收集大量详细个人隐私信息,包括:电话号码、IMEI、IMSI、MMS、短信、通讯录、账户、通话记录、地理信息、连接的 WIFI 信息等;
以其他特定号码自动接收呼入电话;
实现对目标手机的 UDP、TCP 和短信信道远程控制;
全方位对受控手机用户进行监控:
对电话通话和周围环境进行录音录像
利用手机前置后置摄像头进行隐蔽拍照
监控受控手机实时地理位置
截屏
目前,据我们所知,SpyDealer 还未在谷歌应用商店出现过,也还不清楚其具体的感染方式,但有证据显示 SpyDealer 通过被入侵的无线网络热点对中国用户发起攻击感染。由于 SpyDealer 受所利用的 root 工具限制,其完全有效的感染设备只涵盖了 Android2.2 至 4.4 版本手机系统(全球 1/4 安卓使用量),针对之后的安卓版本,虽然 SpyDealer 能窃取大量信息,但不能提权进行更进一步的入侵控制。
2017 年 6 月,我们捕获到了 1046 例 SpyDealer 样本,分析显示 SpyDealer 正处于活跃期,在野生网络环境中它有 1.9.1、1.9.2 和 1.9.3 三个版本。从 1.9.3 版本开始,SpyDealer 中的配置文件内容和字符串常量都被加密和编码,同时加入了一个窃取通信 APP 消息的辅助功能。据分析发现,这些样本都以 app 名称 "GoogleService" 或 "GoogleUpdate" 进行伪装,其样本演变时间从 2015 年 10 月至 2017 年 5 月。另外,我们还发现早在 2015 年 10 月和 2016 年 2 月,就已有受感染用户对该恶意软件发起了一些讨论。下图左右示例分别为英文和中文社区讨论截图:
以下为 Palo Alto Networks 对该恶意软件的技术分析:
SpyDealer 感染设备之后,不会在桌面上出现任何 icon 图标。但其实,它已经注册了两个广播接收器 (Broadcast Receivers) 对设备的启动事件和网络连接进行监听。只要一有此类广播消息,就会触发 SpyDealer 关键服务 AaTService 启动,之后,开始从恶意软件中一个名为 readme.txt 的本地资源文件中检索配置运行信息。
从该文件第一行为一个远程 C2 控制服务器,第二行为移动网络中的恶意行为配置参数,第三行为无线网络中的恶意行为配置参数,这些配置参数也可以由攻击者通过远程 C2 信道进行更改操作。完整 C2 服务器列表参见附件 B。下表描述了部分操作行为:
SpyDealer 利用两种不同的 root 方法进行提权。其 1.9.1 和 1.9.2 版本使用商业 root 软件 Baidu Easy Root 进行提权,具体操作如下:
在恶意程序自身的数据目录中释放一个名为 sux 的 su 文件
检查手机设备 root 状态,如果已是 root 权限,则无需进行 root 提权操作
检查是否存在 / data/data/
把下载的 zip 文件解压释放到恶意程序目录,依次执行所有内含 exploit 尝试进行手机 root 提权
安装 busybox 并重装系统分析,以备以读写权限执行后续的一系列 shell 命令
下载文件 raw.zip 中包含 Baidu Easy Root2.8.3 的 root 提权 exploit,如下图所示:
下表列出了 SpyDealer 滥用的全部 exploit 漏洞。像在 raw.zip 中名为 022d251cf509c2f0 的可执行文件 exploit,在 Baidu Easy Root 中为 gzip 格式且名为 fb_mem_root。
除此之外,SpyDealer 还利用了另外一种 root 提权方法,这种方法仅对 Andriod4.0 到 4.3 有效,且所利用 exploit 未知:
1、从自身安装目录中向手机中释放 sux、getroot、logo.png 和 busybox_g1 文件;
2、拷贝以上释放的 sux、logo.png 和 busybox_g1 到 / data/data/ <package_name>/app_bin 目录下;
3、生成内容如下图所示的 shell 运行脚本 / data/data/<package_name>/app_bin/toor.sh
4、执行 png 和 toor.sh 获得 root 权限,之后,自动删除 logo.png 和 toor.sh。
root 提权之后,SpyDealer 开始实现持久化驻留操作。首先,向自身目录下释放一个名为 powermanager 的原生可执行程序:
该程序负责创建一个恶意软件备份文件 / system/bin/update_1.apk,即使 SpyDealer 被卸载清除,powermanager 将会把 / system/bin/update_1.apk 拷贝为 / system/app/Update.apk,继续以系统 root 权限启动恶意木马进程,同时,SpyDealer 核心服务 AaTService 也将重启执行恶意行为。代码和实现如下图所示:
SpyDealer 能以多种信道与 C2 服务器进行通信和指令接收,这些信道包括短信(SMS)、UDP 和 TCP 连接。我们一一来分析:
SpyDealer 注册了一个在默认消息应用程序之上更高优先级的广播接收器,以对目标手机短信接收指令进行监听,之后,对这些短信指令进行解析处理。每个短信指令都包含了一个指令序列和各种换行符分隔的参数引用。短信指令序列范围从 1 到 5,指令详解如下表所示:
为了获得基于 GSM cell 的地理位置信息,SpyDealer 利用了百度地图接口来进行位置获取。SpyDealer 收集 GSM cell id、地区码和网络运营商,并把这些编码信息发送至百度地图服务获取准确地理位置。利用这种方法,即使被控手机没开启 GPS,但一样可以被攻击者进行定位。以下为 SpyDealer 调用百度地图接口代码:
除利用以上列出的短信指令外,在以下两种条件下,SpyDealer 还可以对远程 C2 服务器 IP 进行更改:
收到的短信指令序列长度大于 4,此时,其指令序列实际上就是远程 C2 服务器 IP
收到的短信内容以字符串 "L112" 开头,远程 C2 服务器 IP 跟随在后
在与 C2 服务器的通讯中,如果 SpyDealer 收到 1 或 2 序列的短信指令,它将不会作出回应。但当它收到 3、4 或 5 序列的指令,它将会向远程 C2 服务器作出回应。如收到指令序列 5,它将会以格式 "msg:repcall|<phone number>" 向远程 C2 服务器发送一条消息。由于所有接收短信都包含了短信指令,也就是说,攻击者可以丢弃这些短信,或设置黑名单进行阻塞拦截。
SpyDealer 通过在受控手机中创建一个监听 39568 端口的 TCP 服务端,等待远程 C2 服务器指令。这些 C2 服务器与受控手机的交流指令如下表所示:
而 SpyDealer 的响应数据将按以下字节格式发出:
{0×35, 0×31, 0×64, 0×11, 0×09, <length of data>, 0×09, <data>}
由于对接收的短信指令无校验机制,这意味着只要知晓受控手机 IP 地址,任何人都可以向其发起连接请求。
除了以上 TCP 服务端被动方式的 C2 通讯外,SpyDealer 还会通过 UDP/TCP 信道主动向远程 C2 服务器请求命令。首先,它从本地配置文件 readme.txt 中读取 C2 IP,利用另一个名为 socket 的本地配置文件进行 UDP/TCP 协议通信,该 socket 文件中包含了 90 多个不同 IP 域名的 C2 服务器(列表详见附件 B)。
C2 服务器向恶意软件端发送的指令数据使用微型加密算法 TEA 进行加密,恶意软件端收到指令后将会解密指令数据,执行深入解析处理。SpyDealer 中的 TEA 加密算法代码:
通过这种 UDP/TCP 协议信道,攻击者可以对感染手机执行多达 45 种操作指令(详见 报告 ),指令行为涵盖个人信息收集、监听监视和远程代码执行等。
恶意软件端向 C2 回送的数据也经 TEA 加密,另外,由于 UDP 的不可靠会话性质,为了解决通讯过程中数据丢失问题,SpyDealer 在 UDP 顶层创建了一个有效会话层,并把所有原始数据分组,每组大小不超过 1000 字节,这些分组数据最终将会轮流重复三次发出。为了让 C2 服务端能识别恢复数据,这些分组数据在开头都添加了一个特殊识别码。各组数据格式如下:
- MulPacket\n < IMEI > \n < UUID > \n < #TotalGroups > \n < CurrentGroupId > \n < Dat
IMEI: 受控手机 IMEI 码
UUID: 包含两部分,第一部分为起始是 0,每次加 1 的传输次数累加,当至 10000000 时重置为 0 重新开始。第三部分为当前的毫秒时间
#TotalGroups: 分组数据数
CurrentGroupId: 从 1 开始的当前分组数据序列
Data: 实际传输数据
如前所述,SpyDealer 结合 root 提权,使用多种方式收集数据,这些数据信息涉及 40 多个流行 APP 中所含的社交通信信息、通讯数据、浏览器信息、移动邮件客户端数据等。以下列出了所有受影响 APP 应用,其中大部分为中国地区移动互联网应用 APP:
为了从以上 APP 中收集隐私数据,SpyDealer 首先向目标 APP 目录中释放一个名为 dealapp 的可执行程序,并利用 root 权限拷贝为 / system/bin/dealapp 文件,之后,该文件就负责在目标 APP 中进行各类信息数据收集。其所收集数据信息,不只限于数据库文件,还包括配置文件和其它特殊文件。具体如下:
C2 服务器可以远程对 dealapp 程序配置信息进行实时更新或修改:
为了保护用户数据信息,越来越多的 APP,尤其是流行的社交类 APP,在数据存储前都会进行加密操作。为了突破这个屏障,SpyDealer 自 1.9.3 版本开始,便加入了一个额外的辅助服务功能,可以直接从手机系统界面获取明文数据。下图为该功能在目标 APP 包名中的相关配置:
本来,该辅助功能一般由用户手动开启,但在 root 提权之后,SpyDealer 可以实现不与用户交互的隐蔽开启。下图为 SpyDealer 的开启命令:
开启该功能后,SpyDealer 主要对 TYPE_NOTIFICATION _STATE_CHANGED 和 CONTENT_CHANGE_TYPE_SUBTREE 两个事件行为进行监听,当有接收消息时,手机将会发布一个通知,而这也将触发 TYPE_NOTIFICATION _STATE_CHANGED 事件。通常,人们会点击通知查看消息,这将触发 CONTENT_CHANGE_TYPE_SUBTREE 事件行为。当有 CONTENT_CHANGE_TYPE_SUBTREE 事件行为时,SpyDealer 将利用当前屏幕获取明文消息。尽管手机界面有消息数限制,但 SpyDealer 持续的监控行为将会获取完整的消息信息。收集动作完成后,SpyDealer 会把这些消息连同受害者手机 IMEI、IMSI、包名和 APP 名等数据一起发回远程 C2 控制服务器。
针对受控手机,SpyDealer 具备多种手段进行实时监控,包括通话监录、周围环境监听录摄、隐蔽拍照、屏幕截图和地埋位置获取。它从 C2 端接收上述描述的各种 C&C 操作指令执行动作。
SpyDealer 注册了一个 PhoneStateListener 程序进行通话状态监控,一旦通话处于激活状态,便会触发录音功能。最终,通话录音数据被压缩成 zip 格式存储于为以下路径文件:
/sdcard/.tmp/audio/<current_time_in_yyyyMMddHHmmss>_<phone_call_num><phone_call_ date>.zip
之后,将会向 C2 端发送形如 "audio\n<IMSI>\n<IMEI>\n<zip_file_path>" 的消息。
除电话监录外, SpyDealer 还具备对周围环境进行特定时间段的音频监听,监听数据最终会被存储为以下路径文件:
/sdcard/.tmp/environmentaudioaudio/<current_time_in_yyyyMMddHHmmss>.zip
超过 7 天以上的监听监录数据会被自动从 /sdcard/.tmp/environmentaudioaudio 目录下删除。
安卓系统中,当用户进行视频录摄时就会进入预览视图模式,为了避免这种情况,SpyDealer 故意设置了一个 3.0dip * 3.0dip 尺寸的非常小的预览视图,不易被用户发现,如下代码实现:
开始录摄后,每段视频录摄时间为 10 秒,最终数据被存储为以下路径文件:
/data/data/<package_name>/files/cameravideo/<current_time_in_yyyyMMddHHmmss>.zip
录摄完成后,如果有可用的网络连接,SpyDealer 将向远程 C2 端发送形如 "cameravideo\n<IMSI>\n<IMEI> \n<zip_file_path>" 格式的消息。
为了像视频录摄一样不引起用户察觉,SpyDealer 设置了一个 0.100000024dip * 0.100000024dip 尺寸的极小预览视图进行隐蔽拍照,攻击者可以远程设置前置摄像头进行拍照。拍照文件最终被存储为以下路径文件:
/data/data/<package_name>/files/camerapic/camera_<current_time_in_millseconds>.jpg
成功拍照之后,将会向远程 C2 端发送形如 "camerapic\n<IMSI>\n<IMEI>\n<picture_path>" 的消息。
SpyDealer 动态注册了一个广播接收器以监视受害者手机屏幕状态,一旦屏幕处于锁屏状态,SpyDealer 便开始通过 GPS 尝试获取手机地理位置信息。另外,SpyDealer 还注册了一个位置监听进程以跟踪设备位置,为了获取移动设备后的实时准确位置,该监听进程每隔 10 秒或 100 米的移动距离就进行一次位置信息获取更新。如果有可用的网络连接,这些位置文件数据会被以如下格式消息发送到远程 C2 端。
LGPS\n<IMEI>\n<IMSI>\n<longitude>\n<latitude>\n<current_time_in_yyyy-MM-dd hh:mm:ss>
如果网络连接不可用,它们将存储在本地设备中以待后续利用可用网络进行传输发送。由于 GPS 状态开启时会在手机屏幕上显示一个提示图标,所以,为了避免用户怀疑,SpyDealer 只会在锁屏状态下利用 GPS。
除了上述强大的功能之外,SpyDealer 还具备自动接听来电和自动加载从远程 C2 服务器中下载的插件。针对电话来电,SpyDealer 能进程远程配置接听,模拟耳机插入状态自动接听来电,让用户无意识错过一些重要来电。其实现代码如下图所示:
SpyDealer 利用恶意业 root 软件进行系统提权并实现持久化驻留感染,它采用多种机制来窃取移动设备中的大量个人隐私信息,并对 40 多个 APP 造成信息泄露影响。另外,其通过三种 C2 信道和 50 多种操作指令对受害手机形成远程控制,危害巨大。
来源: http://www.tuicool.com/articles/BVBbI3b