首页 >> 网络安全 >>漏洞分析 >> Android Rootnik恶意软件:深入研究 第一部分
详细内容

Android Rootnik恶意软件:深入研究 第一部分

时间:2020-07-21     作者:FortiGuard【转载】   阅读

2017年6月初,FortiGuard实验室发现了一个新的Android rootnik恶意软件变种,伪装成合法应用程序。然后,它使用开源的Android根漏洞利用工具来获取Android设备上的根访问权限。


需要明确的是,未在Google Play中找到此恶意软件。恶意软件应用程序的开发人员从Google Play重新包装了一个合法应用程序,并将恶意代码插入其中。此应用的合法版本和重新打包的版本均使用相同的程序包名称“ net.gotsun.android.wifi_configuration”。结果,这种伪装甚至可以欺骗细心的用户。此外,该恶意软件还使用高级防调试技术来防止其被反向工程。


在Android设备上成功获得root特权后,该恶意软件即可执行多项恶意操作,包括应用程序和广告促销,静默应用程序安装,推送通知,发送SMS消息等。在此博客中,我将对此恶意软件变体。


快速了解恶意软件

恶意软件应用是名为“ Wi-Fi自动连接”的应用的重新打包版本,该应用是wifi实用工具。此应用的合法,未感染版本仍可在Google Play上使用。

1.png

图1.恶意软件应用程序图标

2.png

图2. Google Play中的合法应用

我们将恶意软件的APK文件的反编译结构与合法应用程序的APK文件进行了比较,如图3所示。

image.png

图3.恶意软件应用程序与合法应用程序之间反编译结构的比较

然后,我们在两个示例中都比较了AndroidManifest.xml。

3.png

图4.合法应用程序的AndroidManifest.xml

4.png


图5.恶意软件应用程序的AndroidManifest.xml

如图4和5所示,我们可以看到这两个软件包的名称均为“ net.gotsun.android.wifi_configuration”。我们还可以看到,恶意软件应用程序的AndroidManifest.xml文件包含合法应用程序的AndroidManifest.xml的副本。此外,它还包含大量其他支持其恶意活动的Android组件。


如图3所示,我们在恶意软件应用程序中找不到合法应用程序APK的结构。这意味着该恶意软件应用已打包。因此,我们需要先将其解压缩以获得恶意软件应用程序的真实DEX文件。然后,我们可以分析实际的DEX文件。


如何解压恶意软件应用程序

以下是恶意软件应用的APK文件中的文件结构。

5.png

图6.恶意软件应用的APK文件中的文件结构

如图6所示,我们可以看到com.tencent.StubShell.TxAppEntry是恶意软件应用程序的条目。以下是com.tencent.StubShell.TxAppEntry类中的函数attachBaseContext()。

6.png


图7. com.tencent.StubShell.TxAppEntry类的函数attachBaseContext()

在此功能中,恶意软件会加载库libshella-2.10.3.1.so,然后调用用于解密隐藏在classes.dex中的数据的本机方法加载,以获取并加载实际的DEX。


执行函数attachBaseContext()之后,可以执行函数onCreate()。

7.png

图8. com.tencent.StubShell.TxAppEntry类的函数onCreate()

可以调用本机方法runCreate()来运行实际应用程序。 


接下来,我们开始分析和调试libshella-2.10.3.1.so。ELF文件libshella-2.10.3.1.so的小节标题已修改。当我们进行静态分析时,这会导致IDA Pro无法正确识别和解析它。这意味着我们需要使用IDA Pro动态调试它。


在libshella_2.10.3.1.so的.init_array段中,有两个函数地址。


以下是执行.init_array之前libshella_2.10.3.1.so的段。

8.png

图9.执行.init_array之前的libshella_2.10.3.1.so段

第二个函数是sub_19C0()。以下是函数sub_19C0()中的键控代码段。

9.png


图10.函数sub_19C0中的键代码片段

函数sub_CED4()用于完成一些反调试工作。

10.png

图11.函数sub_ CED4()

我们在libshella_2.10.3.1.so的段中的偏移量0x221C处设置了一个断点。这允许在此地址调用反调试功能sub_CED4()。为了绕过反调试,我们仅将指令存储器修改为| 00 00 A0 E1 |(mov r0,r0)。

11.png

图12.防调试功能

12.png

图13.绕过反调试代码

现在,让我们看一下libshella_2.10.3.1.so的段。我们发现libshella_2.10.3.1.so还有两个段。调用防调试功能sub_CED4()之前的代码将libshella_2.10.3.1.so中的数据从0x4000解密到0xCF68,然后以RX模式将解密后的数据重新映射到内存段中。实际上,函数JNI_Onload就位于该内存中。

13.png

图14. libshella_2.10.3.1.so的另外两个段

接下来,我们在函数JNI_Onload()处设置一个断点。其偏移量为0x99EC。它可以在偏移量0x9F44处调用函数sub_4BDC()。执行功能sub_4BDC()之后的Android日志如下所示。

14.png

图15.执行功能sub_4BDC()之后的Android日志

15.png

图16.调用函数sub_4BDC()

16.png

图17.执行函数sub_4BDC()之后

如图17所示,我们可以看到在执行功能sub_4BDC()之后创建了一个新的代码段debug102。

接下来,我们继续在libshella_2.10.3.1.so中的偏移量0xa0a8处设置断点。

17.png

图18.在libshella_2.10.3.1.so中的偏移量0xa0a8处触发断点

在偏移量0xA0C4,它可以在段debug102中跳转功能地址偏移量0x590C。

接下来,我们在段debug102中的偏移量0x58AC处设置一个断点。程序在偏移量0x58AC处调用函数registerNatives以动态注册五个本地方法,这些方法是:“ load”,“ runCreate”,“ changeEnv”,“ reciver”和“ txEntries”。它们的偏移量分别为0xcd51、0x8f5d,0x8b71、0x52b1、0x8a85。

18.png

图19.调用函数registerNatives来注册五个本地方法

然后,我们专注于本机函数加载。它在段debug102中的偏移量0xcd51处。该函数用于解密隐藏在classes.dex中的数据,以便获取真实的DEX并加载它。以下是函数加载的C代码:

19.png

图20.本机函数加载

在函数中,它可以为Dalvik模式调用函数sub_C1DC()。以下是函数sub_C1DC()的键控代码段。

20.png

图21.函数sub_C1DC()的键代码片段

以下是关键代码段的说明。

  1. 获取odex文件的基本地址data @ app @ net.gotsun.android.wifi_configuration-1.apk @ classes.dex。

  2. 通过DEX标头中的data_size和data_off字段获取实际DEX的偏移量。data_size为233944,data_off为38588。通过计算((0x42894 + 0x1000)>> 12)<< 12,偏移量为0x43000。

  3. 将具有实际DEX长度224的DEX标头数据复制到新分配的内存中。实际DEX的起始地址等于classes.dex的基地址,再加上0x43000,再加上0x28。

  4. 解密实际DEX的DEX标头数据。

以下是解密函数sub_ F3D8()的C代码。

21.png

图22. DEX标头的解密功能

到目前为止,我们已经获得了DEX头的解密算法。同时,我开发了一个离线解压工具来获取真实的DEX文件。以下是classes.dex(ODEX格式)中加密的DEX头数据。

22.png

图23. classes.dex中的加密的DEX头数据

真实DEX的解密DEX标头如下所示。

23.png

图24.真实DEX的解密的DEX头

实际的DEX文件的反编译结构如下所示。

24.png

图25.恶意软件应用程序的真实DEX文件

至此,我们已经完成了对本机层的分析,并获得了恶意软件应用程序的真实DEX文件。在本博客的第二部分中,我们将分析DEX文件。


FortiGuard实验室

Fortinet Antivirus签名Android / Rootnik.AE!tr检测到该恶意软件样本。可以通过Fortinet IPS签名Android.Rootnik.Malware.C2和Web筛选器检测与远程C2服务器通信的流量。


ots网络logo

OTS网络安全门户主要提供网络信息安全教程、文章、工具,让更多的小伙伴加入我们的社区一起学习。

技术支持: 建站ABC | 管理登录