当前位置: 华文世界 > 手机

剖析Android端SpyNote恶意软件技术

2023-12-05手机

介绍

Android 威胁环境充满了各种类型的恶意软件,每种恶意软件都为该领域带来了自己的独创性。尽管每种 Android 恶意软件都有其自己的恶意议程,但大多数情况下的典型目标是窃取用户数据,尤其是可用于恶意目的甚至稍后出售的个人数据。仅根据议程,某些恶意软件可以归类为间谍软件,因为它们的唯一目标是通过窃取尽可能多的用户数据来监视用户,并在保持隐藏的情况下尽可能长时间地窃取。这与信息窃取者的目标略有不同——信息窃取者通常是窃取用户凭据和信用卡信息以进行转售。

在值得注意的间谍软件中,最近备受关注的一款是 SpyNote。该间谍软件应用程序通过短信(即恶意短信)进行传播,敦促受害者从提供的链接安装该应用程序。当然,托管和下载发生在官方 Play 商店应用程序之外,以防止 Google Play 商店进行的安全评估阻止该间谍软件的传播。

在本文中,我们根据最近的分析描述了该恶意软件应用程序的一些突出功能。这些功能是间谍软件的典型特征(包括跟踪软件,其具有不同的传播机制 - 这是另一篇文章的主题)。

SpyNote 功能

我们使用 sha256 分析了 SpyNote 样本 – bad77dca600dc7569db4de97806a66fa969b55b77c24e3a7eb2c49e009c1f216(包名称:Glasgow.pl.Dimension)

清单文件

与典型的 Android 恶意软件分析一样,我们通过查看 AndroidManifest.xml 文件开始分析。图 1 显示了 Manifest 文件的快照。尽管 SpyNote 请求的权限列表不是很详尽,但我们确实看到了一些可疑的权限请求。其中包括 READ_SMS、PROCESS_OUTGOING_CALLS、CAMERA、RECORD_AUDIO、WRITE_EXTERNAL_STORAGE 和 BIND_ACCESSIBILITY_SERVICE。尽管对这些权限的请求并不总是表明存在恶意行为,但这些是间谍软件请求的典型权限。

图 1. SpyNote 请求的可疑权限

入口点

根据(一篇)

Android 文献, 有多种方法可以为您的应用程序创建入口点:

  • 处理 MAIN 和 LAUNCHER 类型意图的启动器活动。
  • 服务在后台运行。
  • 当系统发送应用程序期望的广播之一时调用的广播接收器。
  • Application中定义的attachBaseContext方法的声明
  • 对于我们的分析,下一个逻辑步骤是识别这个可疑间谍软件应用程序的入口点,并找到 SpyNote 使用的方法。第一次检查时,我们发现 AndroidManifest.xml 中使用的几个方法可以作为「入口点」。为了获得更多理解,我们在 Android 设备上安装 SpyNote 并观察其行为。这有助于将手机上观察到的行为与代码关联起来。

    隐藏的应用程序

    安装后,我们注意到应用程序启动器中看不到该应用程序。然而,在「电话设置」->「应用程序」菜单中进行简单检查即可显示该应用程序已成功安装。我们可以推断该应用程序正在隐藏以避免被发现。

    对于间谍软件来说,隐藏的原因是为了避免被发现,并尽可能长时间地继续其窃取用户数据的目标。间谍软件可以使用多种方法来实现此隐藏功能:
    • 使用 setComponentEnabledSetting 在运行时隐藏应用程序
    • 在 AndroidManifest.xml 中不提供启动器活动类别 (CATEGORY_LAUNCHER)(对应于包含 ACTION_MAIN 的意图)

    如图 2 所示,SpyNote 中的启动器活动缺少 CATEGORY_LAUNCHER 类别。这使得该应用程序隐藏在手机上。图 2 还显示了主要活动的类名。

    图 2. 缺少「启动器」类别导致应用程序隐藏

    从「最近」中排除

    除了隐藏自身之外,SpyNote 还采取了额外的步骤来隐藏其活动,使其不显示在「最近使用的应用程序」屏幕(显示最近使用的应用程序的屏幕)中。它通过在 Androidmanifest.xml 中定义属性android:excludeFromRecents并将其设置为「true」来实现此目的。

    根据 Android 文档,「最近屏幕」是一个系统级 UI,列出了最近访问的活动和任务。用户可以浏览列表,选择要恢复的任务,或者通过滑动来从列表中删除任务」。通常通过点击屏幕底部的汉堡菜单或从底部滑动屏幕来访问此功能。

    启动隐藏的应用程序

    图 3.「最近」屏幕

    间谍软件应用程序可通过多种方式启动隐藏的应用程序:

    • 攻击者通过短信发送命令。间谍软件应用程序接收「收到短信」的广播,然后取消隐藏应用程序图标。

    • 收到外部触发后启动应用程序:

    – 接收拨出电话的广播并触发应用程序

    – 在清单文件中添加针对特定 URL 的意图过滤器。每当受害者浏览到该 URL 时,恶意软件就会启动。例如,可以通过发送短信等方式说服受害者访问该 URL。

    • 使用单独的启动器应用程序,仅将所需的意图发送到恶意软件应用程序,恶意软件应用程序在收到此意图后启动。

    对于间谍软件来说,保持隐藏至关重要。然而,这提出了一个问题:「受害者将如何启动间谍软件应用程序以窃取数据」?

    SpyNote 恶意软件应用程序可以通过外部触发器启动。我们创建了一个简约的「Hello World」风格的 Android 应用程序(如图 4 所示),它仅发送必要的意图(执行操作的「意图」)。收到意图后,恶意软件应用程序将启动主要活动。

    图 4. 启动隐藏恶意软件的外部触发器应用程序

    权限

    启动后,SpyNote 主要请求 BIND_ACCESSIBILITY_SERVICE 权限,一旦受害者授予该权限,恶意软件就会向自己授予多个其他所需权限(android.permission.PROCESS_OUTGOING_CALLS、android.permission.RECORD_AUDIO、android.permission.WRITE_EXTRENAL 等,如图 1 所示)。 1)

    图 5. 使用辅助服务自行授予权限

    数字。图5显示了受害者授予BIND_ACCESSIBILITY_SERVICE权限后的步骤:

    1. 间谍软件应用程序一一请求清单文件中提到的所有权限,并且
    2. 它不是等待受害者授予这些权限,而是生成一个「点击」笔画来复制用户的点击,从而自行授予所有请求的权限。

    顽固服务

    启动 SpyNote 后,我们可以从手机设置中验证它是否使用模糊的服务名称运行两个服务。然而,根据 AndroidManifest.xml,我们可以确认这些是在名为 C71 和 C38 的两个类中实现的。

    对代码的进一步调查表明,这些服务就是我们所说的「顽固服务」。顽固服务的主要目标是让受害者或 Android 系统本身很难关闭恶意软件应用程序。

    SpyNote 通过注册一个名为「RestartSensor」的广播接收器(一个允许您注册系统或应用程序事件的 Android 组件)来实现此功能。该广播接收器是独一无二的,因为系统上没有其他接收器能够处理 SpyNote 在即将关闭时生成的特定广播。

    每当 SpyNote 服务即将关闭时,该服务的 onDestroy 方法就会被调用。onDestroy 方法本身会生成一个「RestartSensor」广播。这是特定于该应用程序的广播,不能由系统上的任何其他应用程序生成。收到此广播后,广播处理程序(即先前注册的唯一接收器)将重新启动服务。图6展示了这个过程。

    图 6. Diehard 服务 – 自行重启

    图 7. 通过代码屏幕截图显示了此过程。间谍软件应用首先在 AndroidManifest.xml 文件中声明一个广播接收器。每当尝试关闭以销毁恶意服务时,onDestroy 方法都会生成「RestartSensor」广播。然后广播接收器重新启动服务。

    图 7. SpyNote 为防止终止其服务而采取的步骤

    C2通讯

    正如典型的间谍软件一样,被盗数据只有在发送回威胁行为者时才有用。这种渗透是通过与攻击者的命令和控制 (C2) 服务器建立连接来发生的。识别此类 C2 服务器并阻止与其通信可以帮助防止任何个人数据泄露。

    在我们正在分析的 SpyNote 示例中,C2 通信是作为间谍软件服务初始化的一部分立即建立的。简单地搜索「connect」调用,就会发现 C2 通信的存在。C2 IP 和端口采用 base64 编码,如图 8 所示。

    图 8. C2 通信

    电话录音

    SpyNote 将间谍活动更进一步,甚至将受害者的来电记录为 .wav 文件,并将这些文件发送到 C2 服务器。它通过首先授予自己「 READ_CALL_LOG 」权限(这要归功于之前授予的 ACCESSIBILITY_SERVICE 权限)来实现此目的,并另外为系统广播意图「 PHONE_STATE 」定义广播接收器。

    当受害者接到来电时,电话状态会发生变化,并触发广播接收器。广播接收器中的代码检查受害者是否已接听电话,一旦确认,就开始录制音频。图 9 显示了执行此恶意活动的代码片段。

    图 9. 电话录音

    图像捕捉/屏幕截图

    该间谍软件使用MediaProjection API 来捕获受害者手机的图像。

    MediaProjection API 允许应用程序捕获可以录制或投射到其他设备(例如电视)的设备内容。内容始终是从真实的显示设备捕获的。然后将捕获的内容渲染到中间「虚拟显示器」,这是媒体投影的核心。最后,Surface 是所捕获图像的消费者。它从「虚拟显示器」获取这些图像并渲染它们。

    为了实现这一点,SpyNote 注册了一个 onImageAvailableListener,只要有新图像可用,就会调用此侦听器。然后,恶意软件应用程序直接将捕获的图像数据作为 JPG 文件发送到 C2 服务器。所有这些如图 10 所示。

    图 10. 间谍软件使用 ImageReader 截取屏幕截图

    记录和窃取数据

    间谍、记录和泄露用户数据是任何间谍软件的一些核心「功能」。SpyNote 也不例外。成功启动后,它会创建一个新的日志文件,并开始记录受害者执行的各种操作。

    按键记录是 SpyNote 的另一个核心功能,恶意软件应用程序会将受害者输入的所有按键记录为 Base64 字符串在其自己的日志文件中。由于其自己的日志文件,间谍软件应用程序可以直接保存侦听的用户数据(例如凭据)。例如,我们在解锁需要输入密码的设备屏幕后检查了 SpyNote 的日志文件。图 11 显示了 SpyNote 创建的日志文件以及其中捕获的屏幕解锁密码。

    图 11. 间谍软件信息记录器

    捕获的动作的其他一些示例包括屏幕开/关、屏幕解锁密码、主屏幕上显示的应用程序列表、移动手势等。

    卸载困难

    所有间谍软件的目标都是最大限度地在受害者设备上停留,并提取尽可能多的信息。SpyNote 作为隐藏应用程序启动其活动,还通过使卸载过程变得困难来确保更长的持久性。

    由于该应用程序是隐藏的,受害者无法「长按」应用程序图标并将其卸载。受害者卸载应用程序的下一个选项是转到「设置」→「应用程序」并卸载。

    然而,只要受害者通过「设置」导航到应用程序,SpyNote 就会通过关闭菜单屏幕来防止这种情况发生。这是可能的,因为间谍软件获取了 BIND_ACCESSIBILITY_SERVICE 权限。

    受害者也无法通过开发人员选项停止该间谍软件的服务,因为如前所述,该恶意软件在设备上运行着「顽固服务」。受害者最终只能选择恢复出厂设置,从而在此过程中丢失所有数据。

    概括

    SpyNote 样本是一种间谍软件,它会记录和窃取各种信息,包括击键、通话记录、已安装应用程序的信息等。它隐藏在受害者的设备上,因此很难被注意到。这也使得卸载变得极其棘手。受害者剩下的唯一选择是执行恢复出厂设置以删除恶意软件。

    F-Secure 将此样本检测为「Malware.Android/Bankbot.FLJI.Gen」。

    翻译自:https://blog.f-secure.com/take-a-note-of-spynote/