查看原文
其他

详解神秘的Monokle 手机监控软件:无 root 权限,也能极其有效地提取数据

Lookout 代码卫士 2022-04-06

 聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

安全公司 Lookout 发布报告指出,很可能为俄罗斯政府效力、曾被美国因干涉美国2016年总统大选而受制裁的国防承包商特别技术中心有限公司 (STC) 开发了一款具有高度针对性的手机恶意软件 MonokleMonokle 的独特之处在于,它能够创新地使用现有方法,即使在没有 root 访问权限的情况下极其有效地盗取数据。比如,它大量使用安卓可访问性 (accessibility) 服务从第三方应用程序中提取数据并使用可预测性文本字典了解目标感兴趣的主题。它还试图在屏幕解锁事件过程中记录屏幕,以便攻陷用户 PIN 码、模式或密码。STC 公司因生产无人机和射频测量设备而为人所知。

关键发现


Lookout 发现新的手机监控软件 Monokle。

  • Monokle 是一款复杂的具有远程访问木马功能、先进的数据提取技术以及在受感染设备上的可信证书上安装攻击者指定证书从而触发中间人攻击的手机监控软件。

  • 从2016年3月起,Lookout 已在野外发现多个样本。从2018年上半年来看,虽然攻击活动看似规模小但具有一致性。

  • Monokle 大量使用安卓可访问性服务通过在任意节点读取设备屏幕上文本的方式从第三方应用提取数据。

  • 有证据表明,Monokle iOS 版本正在开发过程中。目前尚未发现活跃的 iOS 感染活动。

  • Monokle 可能已经被用于攻击高加索地区的个体以及对叙利亚自由军感兴趣的个体等。

STC 公司正在开发集进攻和防御为一体的安卓安全软件。

  • 安全研究员发现了STC 公司此前未知的手机软件开发和监控能力,表明它正在致力于开发兼具进攻和防守功能的移动工具。

  • STC 开发的安卓反病毒解决方案被称为 “Defender”,其手机监控软件被称为 “Monokle”。正是从这两者之间的关系,研究人员认为 STC 是 Monokle 工具的开发者。

  • 研究人员发现了将 STC 安卓软件开发操作和 Monokle IOC 联系在一起的强大证据。

  • 研究人员发现STC开发的合法和非法安卓应用程序共享命令和控制基础设施。

  • 据一名 STC 开发人员指出,Defender 应用和相关软件是“为政府客户”开发。

  • 研究人员发现该工具依然还在部署。

Lookout 公布了80 多个妥协指标(IOC)。

  • 57个 SHA-128 哈希和安卓恶意软件 IOCs的一个 YARA 规则。

  • 22个域名和IP地址。

  • 攻击者使用四个俄罗斯手机号码控制 Monokle。

详细分析

第二阶段的 DEX 加密文件

Monokle 后期样本的核心恶意功能被迁移到assets 文件夹中的 XOR 混淆 DEX 文件中。Data.d 文件是第二阶段的DEX加密文件,虽然 data.e 是一组512字节,它是 data.d 中的每个连续的512个字节的异或。未经模糊处理时,第二阶段的 DEX 文件有时候以无效的 DEX 签名开头,导致流行的工具 dex2jar 在尝试将其转换为 JAR 文件时抛出错误。但尽管存在这个问题,DEX 文件仍然能被安卓正确地加载。

隐藏在这个 DEX 文件中的功能包含在开源库spongycastle中实现的所有加密功能、多种电子邮件协议、数据提取和盗取、使用 Thrift 协议的数据序列化和反序列化,以及 rooting 和 hooking 功能。

配置文件

在老旧样本中,配置存储在加密文件 assets/config8261.lmt 中。更新的变体当前从 assets/config2.acf 中加载初始配置。配置已被更改为通过使用 Thrift 压缩协议和异或加密而序列化的一个 Java 对象。

加载初始配置外,其它设置群组可通过命令和控制服务器或通过 SMS 进行配置,而最初从配置文件检索的值可被修改。这些设置被写入files/setts7465。Lmt 使用 Java 序列化和相同的 XOR 加密方案。写入新文件后,在应用程序启动时,初始配置文件被忽略。

从配置文件在Monokle样本的生命周期内的更改可看出 Monokle 家族在去年的演变过程。Monokle 样本中的配置文件似乎随着时间的变化变得更加详细,增加了更多的功能,而且目前可使攻击者和受 Monokle感染的设备更灵活地进行交互。

目前,初始配置文件存储的设置如下:

设置

描述

agentId

代理连接到 C2  收到的 ID。

period

客户端应该等待使用蜂窝数据信号传输到 C2 的大致时间间隔(单位:秒)。

wifiPeriod

客户端应该等待经由  WiFi 信号传输到 C2的大致时间间隔(单位:秒)。

socketAddr

存储 C2  IP 的对象、客户端应该连接的端口以及用于 TLS 证书固定的证书。

emailAddr

电子邮件通信使用的凭证、POP3  和  SMTP 服务器 IP 和端口、以及电子邮件地址。

controlPhones

发送站外  SMS 通信的电话号码列表。

controlPhrases

识别站内  SMS 控制信息的短语列表。

communicationMode

配置客户端以使用套接字协议或电子邮件进行通信。

usbTunnelPort

UsbSocketThread 将监听的本地端口。

needActivation

如启用,客户端必须在传输给 C2  前经由  SMS 予以激活。

transportCrypto

存储用于解密/加密通过网络传输的数据的  AES 密钥的对象。

fileCrypto

控制文件如录音、图片和截屏是否应该被加密,以及 RSA 密钥是否用于加密。

dataStore

文件如录音、图片和截屏将被存储的路径。

 

通过反混淆处理来自恶意软件家族的多个配置文件样本,我们发现他们依赖于至少22个不同的命令和控制服务器,拥有使用俄罗斯国家代码 +7 的控制电话,以及使用 CN 字段值为 thron-ca 的证书固定。

包含Xposed 模块

Xposed 框架允许安卓设备用户将扩展(模块)应用于安卓设备的 ROM。Xposed 模块通常修改安卓系统,而这样做要求 root 设备。最近的多款 Monokle 应用绑定了包含hooking 功能以及隐藏在进程列表中的 Xposed 模块。

通信和序列化协议

概览

客户端应用可被 SMS 信息控制、进站 TCP 连接至监听线程、出站传输至 TCP 连接到命令和控制、通过 POP3 和 SMTP 传输的邮件信息以及通过来电进行控制。在最近的应用样本中,出站流量似乎总是经由 TLS 被挖掘出来。

从最近的样本来看,三种信息被当做序列化的 Java 对象在客户端和 C2 服务器之间进行交换:AgentRegistration、ServerCommand 和 AgentResponse。

对于出站连接而言,客户端最初发送一个 AgentRegistration 对象,然后调查服务器以获取 ServerCommand 对象,其中包含一个任务类型字段,用于确定客户端要运行的命令。ServerCommand 中的其它字段可以填充,具体取决于正在发送的命令。

代理响应命令时,可能将序列化的AgentResponse 对象传输至服务器,一个或多个字段以所请求的数据。

对电子邮件的控制的运作方式相同,但 SMTP 和 POP3 用于通过使用由 app 配置指定的服务器和凭证交换信息。

除了信标(beaconing) 行为外,在某些样本中,单独线程还能够监听本地端口(取决于配置)入站连接。建立连接后,这款 app 将发送 AgentRegistration 信息、进程 ServerCommand 信息并发送所需 AgentResponse 信息。同样的命令处理逻辑用于入站和出站连接。可以扫描收听 Monokle 应用程序、接受连接但需要连接到设备的合适端口并正确地解析 AgentRegistration 信息。

通过 SMS 控制该应用程序的方式有两种。第一种是通过包含带有查询字符串参数p的 URL 的 SMS 信息,它包含base64编码的ServerCommand。它使用相同的任务处理逻辑作为通过 TCP 发送的命令,而且也具有特殊功能通过 SMS 传回位置数据。

经由 SMS实施控制的另外一种方法是通过从受控电话号码发送的配置控制短语。这些短语能够触发如下六种动作中的其中一种:

  • 卸载 app

  • 通过 SMS 发送 GPS 位置

  • 设置 C2 地址和端口

  • 激活代理

  • 配置电子邮件通信设置

  • 开启音频记录

也可通过电话通话来触发某些功能。这些应用程序旨在应答来自某些特定电话号码的通话并从通话日志中删除这些通话。由于这些通话能够触发耳机断开,因此这可能是为了在互联网不可用时监听环境音频。这些应用程序也可以配置为从特定电话号码接听电话时拍照。

信息交换

Monokle 网络库中存在四种主要的组件:Protocol 类、NetConnector 类、SessionManager 及其嵌套类和 StreamHelper 实用程序类。

  • NetConnector 负责抽象所有的 C2 通信和连接管理。它支持 TLS 1.2 使用 SSLSocket与C2以电子邮件信息的方式进行通信。

  • Protocol 序列化和反序列化从C2发送或发送到 C2 的消息。

  • StreamHelper 负责解密来自服务器的信息并且在发送信息前进行加密(注册信息例外)。

AgentRegistration

该消息类型总是首先交换的消息。它是唯一一种通过 TLS 连接发送但未加密的消息类型。

 在 payload 中,设备 ID 通过 TCompactProtocol.writeString(String) 编写,其次是使用 TCompactProtocol.write132(int) 的代理ID,其次是至少一个其它字段。

通过 AES,它被解密为:

其中,bytes指的是Thrift压缩协议格式的Thrift 消息。该消息被反序列化到一个 ServerCommand 对象中。

AgentResponse

发送至服务器的响应被编码为:

之后使用 AES 进行加密:

 服务器命令和响应

定义的任务类型共有78个,其中61个在最近的样本中实现。任何未实现的命令都会归于将 TErrorType.NOT_SUPPORTED 错误返回给服务器的方法。任何命令都可以通过SMS、电子邮件和进站/出站 TCP 连接接收。

除了对位置数据的请求外,发送的响应并非通过 SMS。(具体任务类型可见原文链接报告。

完整报告请见原文链接。



推荐阅读

黑客利用WhatsApp 0day 漏洞秘密安装手机监控软件

神秘消失的意大利政府安卓监控软件 Exodus 到底长什么样?



原文链接

https://www.lookout.com/documents/threat-reports/lookout-discovers-monokle-threat-report.pdf




题图:Pixabay License




本文由奇安信代码卫士编译,不代表奇安信观点,转载请注明“转自奇安信代码卫士 www.codesafe.cn”。



奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存