对恶意软件Anubis的深度分析

  • A+

译文声明
本文是翻译文章,文章原作者Orange Cyber​​defense,文章来源:https://orangecyberdefense.com
原文地址:https://orangecyberdefense.com/uk/blog/uncategorized/reverse-engineering-of-the-anubis-malware/

译文仅供参考,具体内容表达以及含义原文为准

概述

Anubis是一个著名的银行凭据窃取木马,可为攻击者提供RAT后门,并发送垃圾邮件、短信等。您可以在在Google Play商店的许多应用程序中都可以找到它的身影。

介绍

在第一阶段应用程序没有被嵌入任何有效payload,所以在谷歌应用商店内均显示为无害的应用程序。这些应用将作为下载器,成功安装后,将连接C2服务器下载payload,将自身更新为Anubis恶意软件。

为了更好的演示Anubis是如何工作的,我们从Play Store收集了几个应用程序。
::: hljs-center

1.png

:::

第一阶段

我们使用Orange Cyberdefense内部逆向工具,对应用程序进行反编译并研究其Java代码。

应用程序在第一阶段看似合法,但却需要申请一些奇怪的权限,例如Request_install_packages
::: hljs-center

2.png
图1:从manifest恢复的应用程序权限

:::

这个权限应该是为了实现应用程序在后台自动下载更新的,安装Anubis银行特洛伊木马程序。
::: hljs-center

3.png
图2:登录到C&C并下载更新

:::

在用户不知情的情况下,使用接收到的数据包更新自身。
::: hljs-center

4.png
图3:接收更新时执行的源代码

:::

一旦恶意软件下载程序在受害者设备上下载了Anubis银行特洛伊木马程序,它将开始新的“活动”(阶段2)。

为了研究更新后的APK,我们借助ADB(Android调试桥)进行逆向分析。您可以从智能手机上下载它。
::: hljs-center

5.png
图4:用于恢复文件的ADB命令

:::

第二阶段

我们对APK文件进行拆分,该APK包含50多个类和数百个函数。而且在其中包含大量混淆的代码,许多类/变量具有相同的名称,这使得对代码的静态分析工作相当漫长且痛苦。

因此,我们首先查看Android清单,了解在应用程序开始时启动了哪些类。
::: hljs-center

6.png
图5:清单提取

:::

其实这个类并不存在。我们认为该应用程序可以创建包含缺少的类和函数的dex文件(Dalvik虚拟机,APK的编译代码)。

该应用加载了外部dex文件中的类和方法,如果我们不能找到该文件,对APK的静态分析也就无法继续进行。

或许由于恶意软件的创建者的疏忽,恶意应用程序使用了日志记录系统,在仿真器提供所有已启动应用程序的日志。我们在日志中找到了创建.dex文件的位置和时间。
::: hljs-center

7.png
图6:在仿真器日志中搜索dex文件的创建

:::

我们可以看到在目录app_files中创建了一个文件。

我们试图通过ADB恢复该文件,但是手机里找不到该目录。应用程序可能删除了此目录及其文件。

通过对程序执行流进行跟踪,我们找到了删除功能的函数。为了避免文件被删除,我们对该函数进行hook。

为了找到该函数,我们在zygote进程(在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程fork出来的)的ADB Shell中使用了strace命令(Linux工具来跟踪系统调用)。我们成功创建了对正在运行的仿真器的完整执行跟踪。在第二个终端中,我们安装并启动了应用程序。

在日志中,unlink似乎就是我们苦苦寻找的复制删除文件的函数。

我们利用钩子可以阻止恶意软件删除这个文件。有几种方法是可行的,我们最终选用了Frida工具(https://github.com/frida).
::: hljs-center

8.png
图7:Frida脚本,用简单的日志替换了unlik调用

:::

这样,我们就可以直接通过智能手机通过ADB下载缺失的dex文件。

注意:如果您使用的模拟器运行的Android版本早于25,您将得到一个.odex和一个.vdex文件,而不是一个.dex文件。

方案一

通过静态分析可以得到dex文件。我们可以在APK看到一个编码的数据文件,这可能就是我们正在寻找的dex文件。为了找到字符串解密函数,我在代码中搜索可能用于解密的字符如’255’或’^’。搜索结果如下,它们都在一个类中。
::: hljs-center

9.png

:::

详细代码如下(已从该函数中删除了未使用的代码及变量):
::: hljs-center

10.png

图8:包含xor函数的反编译源代码的摘录

:::

我们可以看到,这个函数是对两个变量进行异或运算,更像是一个RC4加密函数(更确切地说是伪随机生成算法)。

因此,我们需要寻找密钥调度算法以查找密钥(在没有与C&C进行通信的情况下,密钥肯定在应用程序中进行了硬编码)。

在同一个类中,我们发现了这个函数:
::: hljs-center

11.png

图9:置换矩阵生成的源代码

:::

函数在这里被调用:
::: hljs-center

12.png
图10:密钥初始化的源代码

:::

我们对初始密钥进行序列化,将其转换为有序字节流,以便使用python脚本解码dex文件。

至此,我们已经解密出第二个dex文件。

通解

Anubis的7个样本(包括另一个恶意软件的3个样本)都具有相同的体系结构。我们可以构建一个python脚本实现自动化,该脚本可以自动解密出输入APK中相应的dex文件。

解密脚本中还附有解压功能,可以将APK文件解缩并进行反编译,然后搜索密钥。

密钥一般具有以下结构:
::: hljs-center

13.png
图11:在源代码中初始化密钥的示例

:::

以下正则表达式将匹配所有可能的键值:
::: hljs-center

14.png
图12:Python正则表达式查找密钥

:::

获取的密钥后,脚本将尝试解码在APK资源中找到的任何数据文件。如果正确解码,dex文件将会有一个Zip头('PK')。

第三阶段

在准备工作完成后,Anubis恶意软件漏出了真面目。这款APP在安卓的辅助功能菜单(Android accessibility menu )中骗取受害者的授权后,可以监视受害者手机上所有用户操作并读取窗口信息。
::: hljs-center

15.png

:::

虽然这个阶段的代码也被混淆,但是并不是dead code (死代码 无作用的代码),具有可读性。

这是恶意软件的最后阶段,在分析其恶意功能之前,我们需要先清它是如何与C&C服务器进行通信的。

与C&C进行通信

我们尝试在Java类中搜索所有的HTTP HTTPS和PHP表达式,我们发现了如下方法:
::: hljs-center

16.png

:::

起初,我们以为这个恶意软件获取命令的方法。但是对代码进行深入研究后,这实际上就是恶意软件获取C&C地址的方式。

C&C服务器的地址经过Base64编码的,我们需要先找到解码后的结果。这是使用自定义函数和Base64.decode函数的解码函数:
::: hljs-center

17.png

:::

服务器名称存储在SharedPreferences文件夹中(SharedPreferences是android的一种数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。)。而且软件对变量名进行了编码,我们还需要找到解码函数。
::: hljs-center

18.png

:::

我们用python模拟构建了这两个函数:
::: hljs-center

19.png

:::

在与C&C服务器进行第一次通信时,恶意软件将发送已安装程序包的列表,以便C&C知道手机上是否安装可利用的应用程序(例如银行应用程序)或准备更复杂的社会工程计划。

设置权限

由于之前恶意软件诱骗用户给予授权(android.permission RECEIVE_BOOT_COMPLETED),恶意软件可以用户不知情的情况下,实现开机自启。

当我们尝试卸载该应用时,会弹出“ 无法删除系统应用程序 ”的对话框。
::: hljs-center

20.png

:::

我们也无法开启Google Play Protect提供安全服务
::: hljs-center

22.png

:::

也无法重置系统。
::: hljs-center

23.png

:::

实现这些操作并不难,因为恶意软件可以跟踪用户的行为。如果它检测到我们尝试了上述三个操作,它将启动一个新的activity,在您可以更改任何内容之前,在主屏幕上显示一个警报对话框。

在SDK版本> 23中,Android会为了电池优化而杀死在后台运行时间过长的应用程序。恶意软件可以通过为恶意应用程序创建异常来绕过此问题。

窃取凭据

恶意软件会搜索硬编码的应用程序/程序包(大约有100多个应用程序,大部分是银行应用程序或加密钱包)。
::: hljs-center

24.png

:::

如果在在手机中搜索到了目标,恶意软件会等待它启动,随后会显示一个相应的页面,诱骗用户提供其凭证。

实现这一操作也不难,因为我们在不知情的情况下已经授予软件PACKAGE_USAGE_STATS权限。恶意软件可以获取智能手机上当前正在运行的所有应用程序,C&C服务器进行匹配,回显相应的界面。

如下图所示,左侧是真正的EBay应用程序登录菜单,右边是恶意程序模拟的。
::: hljs-center

25.png

:::

键盘记录器

键盘记录器主要跟踪三个事件事件:“单击事件”,“焦点事件”和“文本事件”。记录的对象是手机上所示的应用程序。

TYPE_VIEW_CLICKED(eventType = 1)
表示单击事件(如Button、CompoundButton等)。
TYPE_VIEW_FOCUSED(eventType = 8)
表示设置视图的输入焦点的事件。
TYPE_VIEW_TEXT_CHANGED(eventType = 16)
表示更改EditText文本的事件。

默认情况下,键盘记录器处于禁用状态,但可以通过C&C服务器发送的命令启用。
::: hljs-center

26.png

:::

加解密文件

该恶意软件还可以找到特定文件(或整个目录),使用RC4算法对其进行加密,然后将其发送给C&C。
::: hljs-center

27.png

:::

拦截短信或电话

恶意软件还能读取手机信息,还要求成为默认的SMS应用程序或进行SMS /呼叫转发。
::: hljs-center

28.png

:::

获取电话簿

该恶意软件可以通过CONTENT_URI字段从Android电话簿中获取通讯录列表。
::: hljs-center

29.png

:::

发送短信

获取电话簿后,恶意软件可以向所有联系人或特定联系人发送短信。

短信内容从C&C服务器接收。
::: hljs-center

30.png

:::

恶意软件仅向符合以下条件的号码发送短信:
::: hljs-center

31.png

:::

命令列表(不详尽)
::: hljs-center

32.png

:::

总结

关于对银行恶意软件Anubis的分析到此结束。我们识别并详尽分析了感染的不同阶段,并通过脚本恢复了payload。通过对payload代码的审计,我们理清了恶意软件的功能。我们将此恶意软件通告给我们的合作伙伴,帮助他们更好地防御此攻击。

相关推荐: 潜藏在PHP安全的边缘——浅谈PHP反序列化漏洞

潜藏在PHP安全的边缘——浅谈PHP反序列化漏洞 注意事项: 1.本篇文章由复眼小组的瞳话原创,未经允许禁止转载 2.本文一共1376字,8张图,预计阅读时间6分钟 3.本文比较基础,请大佬酌情观看,如果有其他的骚思路,欢迎和我们交流 0x00.前言 最近在研…