另一个[几乎]无法删除的Android木马

去年年底,我们的一些用户使用了系统区域中的更改检测功能,在系统文件/system/lib/libc.so中记录了更改。 这是基于Linux的操作系统的主要库之一,负责系统调用和基本功能。 对该案例进行的详细检查显示, Android.Xiny木马家族的新示例自2015年以来一直为我们所知。

第一次,我们在其代表的文件上看到了“ 不变 ”属性的安装,这使从设备中删除特洛伊木马变得非常复杂。

它看起来很有趣:将指定的属性放在已安装的应用程序的apk文件中,尝试删除该应用程序的尝试看起来很成功,其数据已删除,但apk文件本身仍然保留。 重新启动设备后,应用程序再次“出现”。 我们在2016年讨论了其中一种木马。 为了应对此类威胁,我们在防病毒软件中添加了文件重置属性,该属性在用户已授予防病毒软件根特权的情况下起作用。

在本文中,我们将考虑另一种有趣的自卫方法,供新版本的Android.Xiny使用。

Android 5.1? 在2019年?



本文中考虑的特洛伊木马程序可在最高包含5.1版(含)的Android OS下使用。 为此类“古老” Android版本设计的恶意软件仍然活跃(2015年发布了5.1版),这似乎很奇怪。 尽管年代久远,但仍然使用较旧的版本。 根据Google的数据,截至2019年5月7日,25.2%的设备运行的是Android 5.1及更低版本。 我们用户的统计数字略大-约为26%。 这意味着所有Android设备中约有四分之一是潜在目标,但规模并不小。 鉴于这些设备容易受到永远无法修复的漏洞的影响,因此病毒编写者仍然对较早版本的Android OS感兴趣仍然不足为奇。 确实,可以通过利用提到的漏洞获得的根权限释放了病毒编写者的手-在他们的帮助下,您可以在设备上执行任何操作。 尽管最常见的原因是应用程序的平庸安装。

木马的主要功能


从最早的版本开始,Android.Xiny Trojan的主要功能是在未经用户许可的情况下在设备上安装任意应用程序。 因此,攻击者可以通过参加为安装付费的联盟计划来赚钱。 据人们判断,这是这个家庭创造者的主要收入来源之一。 启动它的某些代表后,您将在几分钟内得到一个实际上无法使用的设备,在该设备上将安装并启动许多无害但不必要的用户应用程序。 此外,这些木马还可以安装恶意软件-这完全取决于从管理服务器收到的命令。

引发新版本Android.Xiny Trojan的最有趣的事情是防止删除。 这由两个部分负责。 让我们更详细地考虑它们。

安装程序


sha1:f9f87a2d2f4d91cd450aa9734e09534929170c6c
检测:Android.Xiny.5261

该组件在获得root特权后启动。 它会替换系统文件/ system / bin / debuggerd和/ system / bin / ddddexe以确保其自动启动,并使用后缀_server将原始文件保存在名称下,就像经典的伴随病毒一样。 它还将从命令行参数中传递的文件夹中再复制几个可执行文件到系统分区。 此外,如果您使用特殊参数运行特洛伊木马并指定新版本所在的文件夹,则该特洛伊木马可以更新它在系统分区中安装的组件。

Android.Xiny.5261包含令人印象深刻的文件删除列表。 它包括家族中较年长的成员以及系统分区中安装的特洛伊木马家族的路径。 例如,Triada。



此外,Android.Xiny.5261会删除一些预装的应用程序-可能会释放空间。 最后,它删除了著名的根权限管理应用程序,例如SuperSU,KingRoot等。 因此,它剥夺了用户使用root权限的能力,因此,删除了安装在系统分区中的Trojan组件。

修改后的系统库libc.so


sha1:171dba383d562bec235156f101879223bf7b32c7
检测:Android.Xiny.5260

这个文件对我们最感兴趣,而这项研究始于它。 在hiew中快速浏览它可以发现.data节结尾处附近存在可执行代码,这是可疑的。





在IDA中打开文件,查看它是哪种代码。

事实证明,此库中已更改了以下功能:mount,execve,execv,execvp,execle,execl,execlp。

修改后的挂载功能代码:
int __fastcall挂载 const char * source const char * target const char * filesystemtype unsigned int mountflags const void * data
{
无符号 __int8 systemPath [ 19 ] ; // [sp + 18h] [bp-1Ch]
布尔收到了MagicFlags ; // [sp + 2Bh] [bp-9h]
int v13 ; // [sp + 2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS // 0x7A3DC594
receiveMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
如果 mountflags == MAGIC_MOUNTFLAGS
mountflags = 0x20 ; // MS_REMOUNT
如果 receiveMagicFlags
返回 call_real_mount 目标文件系统类型 mountflags 数据 ;
if mountflags 1 // MS_RDONLY
返回 call_real_mount 目标文件系统类型 mountflags 数据 ;
if getuid_ //不是root
返回 call_real_mount 目标文件系统类型 mountflags 数据 ;
memCopy systemPath unsigned __int8 * off_73210 + 471424,8 ; // /系统
解密 systemPath 8 ;
if memCompare unsigned __int8 * target systemPath 8 || isBootCompete
返回 call_real_mount 目标文件系统类型 mountflags 数据 ;
* _DWORD * errno_ = 13 ;
返回 -1 ;
}

首先,检查mountflags参数是否存在“魔术”值0x7A3DC594。 如果将此值传递给函数,则控制将立即转移到实装函数。 接下来,检查是否尝试重新挂载/系统分区以进行写入以及OS引导是否完成。 如果满足这些条件,则不调用实装函数,并返回错误。 因此,特洛伊木马修改的安装功能不允许任何人重新挂载系统分区以进行写入,但特洛伊木马本身除外,后者使用“ magic”参数调用它。

修改后的execve函数的代码(在exec *函数的其余部分中,所有内容都相同):
int __fastcall execve const char *文件名 char * const argv [ ] char * const envp [ ]
{
诠释 v3 ; // r3
if targetInDataOrSdcard filename > = 0 //如果为true则返回-1
{
sub_7383C ;
v3 = call_real_execve 文件名 argv envp ;
}
别的
{
* _DWORD * errno_ = 13 ;
v3 = -1 ;
}
返回 v3 ;
}

int __fastcall targetInDataOrSdcard const char * path
{
char buf [ 516 ] ; // [sp + 8h] [bp-204h]
如果 isDataOrSdcard path
返回 -1 ;
如果 * path == '。' && getcwd_ buf 0x200u && isDataOrSdcard buf
返回 -1 ;
返回 0 ;
}

在此检查启动文件的路径是否以“ / data /”开头,以及是否包含“ / sdcard”。 如果满足其中一个条件,则启动将被阻止。 回想一下,路径/ data / data /是应用程序目录。 这会阻止常规应用程序可以在其中创建文件的所有目录中执行可执行文件。

对libc.so系统库所做的更改会破坏旨在获得root特权的应用程序。 由于exec *功能的变化,此类应用程序将无法启动漏洞利用以增加系统特权,因为通常漏洞利用是从网络下载到应用程序目录并运行的可执行文件。 如果仍然成功提升特权,则更改后的挂载功能将不允许您重新挂载系统分区以进行写入,这意味着它将不会对其进行任何更改。

结果,该木马的自卫包括两个部分:其安装程序卸载用于管理根权限的应用程序,并且修改后的libc.so库阻止再次安装它。 此外,此保护还对“竞争者”有效-其他获得根特权并安装在系统分区中的木马,因为它们的工作原理与“良好”根特权应用程序相同。

如何处理这种木马?


要摆脱Android.Xiny.5260的影响,可以对该设备进行刷新-前提是该设备具有开放式访问固件。 但是是否可以通过其他方式删除恶意软件? 困难但可行-有几种方法。 要获得root特权,您可以使用so-libraries形式的漏洞利用。 与可执行文件不同,该木马不会阻止其下载。 您也可以使用Trojan本身的组件,该组件旨在为其他部分提供根权限。 它通过套接字沿路径/ dev / socket / hs_linux_work201908091350接收命令(该路径在不同的修改中可能有所不同)。 至于绕过安装锁,您可以使用mountflags参数的“ magic”值,或直接调用相应的syscall。

当然,我不会实现这一点。

如果您的设备选择了这种木马,我们建议使用操作系统的官方映像进行刷新。 但是,请不要忘记这将删除所有用户文件和程序,因此请提前创建备份。

Source: https://habr.com/ru/post/zh-CN484664/


All Articles