本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/

摘    要

  • 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉及的逃逸技术主要为网络入侵逃逸技术,病毒分析领域涉及到的逃逸技术主要包括针对静态分析、动态分析的木马逃逸技术。
  • 本文介绍的Android木马逃逸技术研究了针对用户感知、杀软查杀、沙箱动态养殖和人工分析的各种逃逸技术。
  • 大多数Android木马的作恶途径是长期留存用户终端,通过持续性作恶获取收益。
  • 为达到稳定留存的目的,大多数Android木马使用的逃逸技术多为复杂的组合技术,并且通过木马的自更新技术不断升级逃逸技术。
  • 总结了Android木马逃逸模型来描述Android木马逃逸的一般性原理。
  • 我们将Android木马生命周期内的每个环节串联起来,形成了Android木马逃逸链,而对应的感知元素串联起来即Android木马的(被)感知链。
  • Android木马的逃逸技术具有明显的针对性,按照其针对的目标可以分为杀软逃逸技术、沙箱逃逸技术、对抗分析工具的逃逸技术、针对用户感官的逃逸技术和反追踪逃逸技术五个大类。
  • 杀软逃逸技术主要涵盖针对杀毒引擎规则和安全软件的一系列逃逸技术。从长期的分析工作中,我们发现木马更加偏向使用多种逃逸技术组合,以增强其自身的逃逸能力。
  • 沙箱逃逸技术涵盖了针对沙箱环境和沙箱规则的逃逸技术。针对沙箱环境的检测包括系统属性、硬件属性和网络环境等方面,针对沙箱规则的逃逸涉及网络请求、触发条件、词法分析等方面。
  • 针对分析工具的逃逸技术主要包括针对静态分析工具、动态分析工具和抓包工具的逃逸技术,以及高级对抗方式——加固。
  • 针对用户感官的逃逸技术主要针对用户视觉和听觉进行伪装和欺骗,或骗取用户点击运行木马,或掩盖木马运行后的痕迹。
  • 反追踪技术针对分析师或网络执法人员的分析追踪。木马投放者通过隐蔽的传播手法投放木马,试图隐藏木马的来源。
  • 我们相信安全技术共享是安全技术进步强有力的推动力,我们通过报告的形式共享安全技术以期望能够推动国内移动安全技术的进步,我们也希望各友商都能够参与到安全技术共享的活动中来,联手将Android生态环境治理的更好。

关键词:Android木马、逃逸技术、沙箱逃逸、反追踪

第一章    引言

一、       传统逃逸技术简介

传统逃逸技术涉及网络攻防和病毒分析两大领域。网络攻防领域涉及的逃逸技术主要为网络入侵逃逸技术,如IPS[1]入侵逃逸技术和AET[2];病毒分析领域涉及到的逃逸技术主要包括针对静态分析、动态分析(如动态调试和沙箱养殖)的木马逃逸技术。

二、       网络入侵逃逸技术

(一) 网络入侵逃逸的基本定义

所谓入侵逃逸技术就是对原有的攻击载荷进行变换或处理的技术,以便能够逃脱入侵检测防御系统的检测,达到入侵后端服务器的目的。现有的入侵逃逸技术主要从网络层和应用层两个层次进行研究[3]。

网络层逃逸技术主要利用 IP 分组的分片重组机制、TCP 流的组装机制等实施逃逸,主要包括碎片化、分片重叠、分片覆盖和分片超时。

应用层逃逸技术借助应用及协议所支持的各种变换能力来达到对畸形特征的隐藏,主要包括编解码、载荷变换、应用或协议特性。

(二) IPS入侵逃逸技术

入侵预防系统(Intrusion Prevention System,缩写为IPS),又称为入侵侦测与预防系统(intrusion detection and prevention systems,缩写为IDPS),是计算机网络安全设施,是对防病毒软件(Antivirus Softwares)[4]和防火墙的补充[1]。

入侵行为的实质就是利用了目标系统设计或编码中存在的问题而形成的漏洞。攻击者通过特定的攻击报文(攻击报文或在内容结构上、或在出现的时序上、或在流量的大小上进行精心构造),然后通过目标系统的漏洞,使目标系统或应用处于无法正确处理的状态,从而达到攻击目的。基于这种攻击原理,IPS系统可以提取出这种利用漏洞的各种攻击报文在内容结构上、出现时序上等等的特征,并对网络数据流进行检测匹配,从而阻断攻击报文[5]。

IPS入侵逃逸技术是针对IPS的逃逸技术。

(三) AET

高级逃逸技术AET( Advanced Evasion Technique),也称高级隐遁技术、攻击躲避技术。AET技术的目标是躲避开安全设备的监测,建立一条通往目标系统的“绿色”通道。常见的AET类型包括如下三类[6]:

  • 利用通讯协议参数的变换,或者是不同开发者理解上的差异,造成安全设备与目标系统的理解不一致。
  • 利用协议分片传送技术,主要是安全设备重组与目标重组的不同,对协议理解上的差异,或者是造成重组时的紊乱,甚至无法重组。
  • 混淆不同的字符集,躲避IPS/WAF的特征匹配。

三、       木马逃逸技术

传统木马逃逸技术包含静态(Static)逃逸和动态(Dynamic)逃逸两个层面。静态层面的逃逸技术主要针对签名规则和静态反编译工具,常见的逃逸技术包括Polymorphism、Metamorphism和Packing等;动态层面的逃逸技术主要针对沙箱养殖、动态调试和API调用监控,常见的逃逸技术如Red Pills、ScoopyNG、Anti Debugging Traps和Run under conditions等。

图1.1     木马逃逸技术[7]

四、       Android木马逃逸技术简介

本文介绍的Android木马逃逸技术与传统的网络入侵逃逸技术和木马逃逸技术略有不同,其范围远远超出了上述各种类型的逃逸技术。本文对Android木马逃逸技术的描述不遵从严格的学术定义,旨在研究Android木马的逃逸周期,汇总周期内各个环节现已出现的各种逃逸技术,以供业内人士和安全厂商参考,助其升级查杀策略。

本文介绍的Android木马逃逸技术研究了针对用户感知、杀软查杀、沙箱动态养殖和人工分析的各种逃逸技术,从利用用户感官的逃逸到躲避杀软规则的逃逸,不论技术深浅,一律进行了收录,因为在Android平台上,逃逸技术的深浅层度与其逃逸成功与否没有必然的关系。

第二章    Android木马逃逸技术概述

在长期反病毒工作中,我们总结了Android木马的如下两个特点:

  • 大多数Android木马的作恶途径是长期留存用户终端(除少数一次性使用的木马外,如Android勒索软件),通过持续性作恶获取收益;
  • 为达到稳定留存的目的,大多数Android木马使用的逃逸技术多为复杂的组合技术,并且通过木马的自更新技术不断升级逃逸技术。

Android木马的如上两个特点无疑是对安全软件厂商检出能力的持续性挑战,更重要的是这种持续性挑战构成了对Android手机用户的持续性威胁,如果安全软件厂商无法应对这种挑战,将导致用户利益严重受损。所以,我们觉得有必要对Android木马的逃逸技术进行系统深入的分析,以帮助其他安全厂商应对这种威胁。

一、       Android木马逃逸模型

我们总结了如下图所示的Android木马逃逸模型来描述Android木马逃逸的一般性原理。采用常规手法(即不采用任何逃逸技术)容易被用户感知或被安全软件厂商拦截,使其无法在用户终端稳定留存;如果使用逃逸技术,则有可能躲避用户和安全软件厂商的查杀,以达到长期留存用户终端的目的。

图2.1     Android木马逃逸模型

二、       Android木马逃逸链与感知链

针对Android木马的感知元素贯穿了Android木马的整个生命周期,所以Android木马生命周期内的每个环节都催生了相应的逃逸技术,我们将Android木马生命周期内的每个环节串联起来,形成了Android木马逃逸链,而对应的感知元素串联起来即Android木马的(被)感知链。

图2.2     Android木马逃逸链与感知链模型

  • 木马投递

即黑客传播木马的过程和手段,常见的手段包括上传应用市场、通过社交平台传播以及ROM预置等。在此过程中,木马需要获取用户信任并躲避杀毒引擎的扫描。安全意识较高的用户可能对论坛或应用市场上的应用保持警惕,所以木马需要通过伪装自身以获取用户的信任。部分应用市场通过接入安全厂商的查杀接口进行安检,查杀接口的实际功能由杀毒引擎提供,所以木马在投递环节也需要躲避引擎扫描。如果黑客通过生成的木马下载链接传播木马,当下载链接被用户点击时,还会面临网盾、网络病毒监控系统对URL进行查杀。

  • 到达用户

即木马在用户终端上着陆的过程,一般而言杀软会在木马下载完成时开启扫描功能,即这个过程中用户和杀软同时接触到木马,但是我们为了叙述方便将其看作模型中的两个环节,此外还存在如下先到达用户的场景:如果是用户主动下载,木马先到达用户,并且在这种情况下用户可能忽略杀软的风险提示;在用户没有安装杀软的情况下,木马先到达用户,如果用户感知到木马的存在,继而可能会使用杀软;对于ROM预置类木马,如果用户手机没有预装安全软件,木马先到达用户。

  • 到达杀软

到达杀软有两种场景:安装扫描与用户主动扫描。安装扫描需要获取Root权限,杀软在系统安装APK之前对该APK样本进行安全性扫描,如果发现危险则会提示用户;用户主动扫描是用户通过杀软发起的快速或全盘扫描,快速扫描一般扫描已安装的应用,全盘扫描则包含SD卡存储的应用安装包。在此环节中,木马需要对抗杀毒引擎的静态规则和云引擎规则。

  • 到达沙箱

杀软未识别的样本会被投入到沙箱进行动态养殖,动态养殖的原理是将样本投入虚拟化运行环境中运行,通过模拟点击和虚拟广播事件触发样本的行为,进而通过动态规则匹配样本行为进行检出。木马在此环节运用沙箱逃逸技术躲避沙箱规则的检出,一般做法是根据沙箱特有的属性或文件检测当前运行环境是否可能为沙箱环境,如果是则不触发任何恶意行为。

  • 到达分析师

当引擎和沙箱均无法识别木马时,该木马就会进入分析师的视野,分析师使用静态反编译工具和动态调试工具对木马进行分析。为对抗分析师的分析,木马大量使用对抗反编译工具和调试工具的技术,这些技术大多建立在深入研究反编译工具和调试工具工作原理的基础之上,通过工具的缺陷或漏洞构造特殊的APK样本,使静态工具解析失败或中断动态调试器的调试连接。另外,对代码的混淆和加密也可以在一定层度上增加分析师的逆向难度以及提取引擎规则的难度,并间接影响引擎规则的质量。

  • 稳定留存

当木马成功地躲过了前五个环节之后,其将开始在用户手机上长期留存并作恶。在长期留存的过程中,木马依然面临着病毒库升级、主动防御和用户感知带来的压力,所以在躲过了前面所有环节之后,其依然需要通过对逃逸技术的持续改进和自我更新来确保其能应对查杀,这一过程同时促进了逃逸和查杀技术的进一步发展。

三、       Android木马逃逸技术

Android木马的逃逸技术具有明显的针对性,按照其针对的目标可以分为杀软逃逸技术、沙箱逃逸技术、对抗分析工具的逃逸技术、针对用户感官的逃逸技术和反追踪逃逸技术五个大类,五类逃逸技术涵盖了Android木马逃逸链上的各个环节,也构成了Android逃逸技术的整个技术体系。

图2.3     Android木马逃逸技术

第三章    杀软逃逸技术

本章介绍的杀软逃逸技术,主要涵盖了针对杀毒引擎规则和安全软件(杀软手机客户端)的一系列逃逸技术。从长期的分析工作中,我们发现木马更加偏向使用多种逃逸技术组合,以增强其自身的逃逸能力。

一、       字符串加密

  • 逃逸原理

字符串加密技术是一种成本较低的逃逸技术,其主要目的是对抗传统静态引擎的检测,也能够在一定程层度上对抗分析师的静态分析。字符串规则是传统静态引擎使用的一种有效检出规则,因此针对该规则的逃逸技术在Android木马中相当常见。

  • 代表家族——Android.Obad[8]

图3.1     Obad字符串加密

二、       Java反射

  • 逃逸原理

Java反射机制为Java应用程序提供检查或修改运行时行为的方法,Java反射在使用上有如下特点:将类名标识符和方法名标识符转换成字符串变量的形式,由于字符串变量可以进行加解密变换,所以可以使用加密字符串的形式替换原本的类名标识符或方法标识符;将调用序列碎片化,打乱了原始的调用序列。正因为Java反射机制的如上特点,使其能够有效地躲避传统静态引擎的字符串规则以及基于方法调用序列的规则。

  • 代表家族——Android.Obad[8]

图3.2     Obad反射

三、       畸形包

  • 逃逸原理

Android应用程序包(APK)格式为标准的ZIP压缩文件格式。木马利用安全软件解析APK过程中的缺陷构造特殊格式的ZIP文件,从而躲避安全软件的扫描。

一种典型的技术为构造多级空目。安全软件出于优化用户体验的目的,可能会设置扫描目录上限,即不对ZIP包中深层次目录进行扫描。Android木马利用安全软件这种设计上的缺陷,构造多级目录,然后将核心代码置于该多级目录的最深一层目录下,以躲避安全软件的扫描。

  • 代表样本——89cbb2e60631ef93ad2eba1c07432fb2

图3.3     多级目录畸形包

四、       载荷隐藏

  • 逃逸原理

DexClassLoader[9]为开发者提供了动态加载类的接口,开发者可以通过动态加载子包的方式加载部分受保护的核心代码。利用动态加载机制,木马既可以联网下载攻击载荷(一般为加密的Jar包),也可以通过各种形式本地释放载荷。动态加载机制为木马隐藏载荷创造了条件,最常出现的一种情形是,木马将核心Jar包加密保存到assets目录下,运行时解密释放原始Jar包,并使用动态加载机制加载载荷中的类以实施攻击。

  • 代表家族——“长老木马”三代[10]

图3.4     “长老木马”三代载荷释放过程

图3.5     “长老木马”三代载荷文件

五、       包名占坑

  • 逃逸原理一

包名占坑逃逸的一种原理是利用了Android系统的特性,即Android系统根据包名唯一区分已安装应用,不可以重复安装同包名的应用。木马利用系统这一特性,将自身包名命名为与目标杀软同包名,感染用户手机之后使得用户无法正常安装目标杀软。

  • 代表样本——4b3f03bd8cebf1e24b594b31b8357160
  • 逃逸原理二

包名占坑逃逸的另一种原理是利用杀软的漏洞,一种可能的情况是杀软扫描应用的过程中如果发现某些特定的白包名(比如同属该安全软件厂商的软件包名)便跳过对该应用的扫描,而不验证其证书。木马只需伪装成特定的白包名即可躲过扫描。

图3.6     包名占坑原理

另一种可能的情况是,安全软件启用指定包名的专杀工具时并未校验专杀工具合法性,这一漏洞被木马利用以躲避专杀工具的查杀。顽固木马将自身包名命名为与专杀工具包名完全相同的名称,当杀软试图启用专杀工具时,该木马被启动,而非专杀工具,所以该木马能够成功躲避专杀工具的查杀。

图3.7     包名占坑流程图

  • 代表样本——744e402f9be0ba1a5c11941a39da02a6

六、       混淆

(一) 代码混淆

  • 逃逸原理

传统杀毒引擎的部分规则基于样本中的标识符名称进行检出,混淆标识符名称即可以轻松地躲避检测。

  • 代表家族——FakeTaobao[11]

图3.8     FakeTaobao代码混淆

(二) 签名混淆

  • 逃逸原理

签名可以标识样本的来源。可信来源签名下的样本默认被视为正规软件,除非发现有恶意软件;不可信来源签名下如存在大量恶意软件,则被视为恶意签名。因此,杀软可直接根据签名制定黑规则。恶意软件通过将签名随机化(即签名混淆)来躲避黑签名规则。

  • 代表家族——色情视频类

表3.1     签名混淆

(三) 软件名称混淆

  • 逃逸原理

软件名称是色情视频类恶意软件早期最鲜明的特点之一,杀毒引擎在必要时(如色情视频类恶意软件大规模爆发时)会根据软件名称进行检出,恶意软件通过混淆软件名称来躲避这种检出规则。

  • 代表家族——色情视频类

表3.2     软件名称混淆

七、       载荷变换

(一) 攻击代码底层化

  • 逃逸原理

Android支持使用原生语言C或C++直接开发应用的部分功能。从开发的角度来看,使用Java语言开发比使用原生语言开发要简单高效,因此绝大多数应用的大部分模块都采用Java语言进行开发,杀毒引擎的查杀规则也大多基于Java语言(即针对DEX文件进行查杀);从逆向分析的角度来看,逆向原生语言实现的模块(ELF格式文件)要比逆向Java实现的模块(DEX格式文件)更加困难。基于以上两点原因,木马作者通过使用原生语言实现核心恶意模块可以很好地躲避查杀和分析。

  • 代表家族——“长老木马”三代[10]

图3.9     “长老木马”三代释放恶意APK文件

(二) 载荷碎片化

  • 逃逸原理

传统杀毒引擎的扫描一般针对完整的DEX文件进行,通过将DEX文件变换成字节数组或分割为独立的字符串,破坏静态DEX文件的完整性,运行时动态拼接为DEX文件,可以达到躲避检测的目的。

  • 代表样本——ed925b7ba90f877cf7ba2ef9d99bc330

图3.10    DEX文件字符串化

图3.11    DEX文件字节数组化

八、       规避杀软

  • 逃逸原理

木马启动时检测安全软件是否存在,如果杀软存在则不运行其恶意行为,如此可以规避杀软的查杀。

  • 代表样本——c17717dae0e1f3786f71cccf8a92f9ec

图3.12    规避杀软

九、       Root提权

  • 逃逸原理

部分杀软实现其扫描流程时,考虑到性能和用户体验(因为普通权限的杀软只能扫描但无法卸载系统目录下的应用,可能会给用户带来困扰)等因素,不会对系统目录进行深度扫描。木马通过利用漏洞获取Root权限,并将核心恶意模块释放到系统目录之中,便可以躲避此类杀软的查杀。即便杀软具备深度扫描和查杀的能力,木马获取Root权限之后可以通过部署保护模块或其他方法(比如后文提到的篡改网络配置)来对抗杀软的查杀。

  • 代表家族——“舞毒蛾”[12]

表3.3     “舞毒蛾”使用的提权漏洞

十、       结束杀软

  • 逃逸原理

木马在启动时判断杀软是否存在,如果存在则直接结束杀软,可以避免在其自身生命周期内被杀软查杀。

  • 代表家族——FakeTaobao[11]

图3.13    FakeTaobao结束杀软

十一、    卸载杀软

  • 逃逸原理

具备Root权限的木马可以通过直接卸载安全软件来躲避查杀。

  • 代表家族——“百脑虫”[13]

图3.14    “百脑虫”杀软包名列表

图3.15    “百脑虫”卸载指定杀软

十二、    躲避云查

(一) 篡改杀软数据库

  • 逃逸原理

安全软件通过配置云查过滤规则来提高云查效率,即已知为白应用的样本直接跳过云查,并将这些规则写入本地数据库。然而,部分使用这种规则的杀软将规则信息明文写入数据库之中,使得具备Root权限的安全软件可以直接修改该配置规则,以绕过云查。

  • 代表样本——ccc01fd6d875b95e2af5f270aaf8e842

图3.16    篡改杀软数据库

(二) 篡改网络配置

  • 逃逸原理

Android系统继承了很多Linux特性,其中包括管理网络和数据包流动与传送的Linux内核模块netfilter,以及netfilter的控制应用软件iptables[14]。木马通过执行iptables命令配置网络规则,禁止安全软件联网云查,从而躲避查杀。

  • 代表家族——DwallAv[15]

图3.17    DwallAv配置网络规则

十三、    封装接口

(一) JavaScript接口调用

  • 逃逸原理

Android提供使用JavaScript语言访问Java方法的接口。开发者使用addJavascriptInterface[16]方法即可将指定的Java对象注入到WebView中,通过引用Java对象的名称即可实现对该对象的访问。与直接使用Java实现程序功能相比,使用JavaScript语言访问Java对象包含如下特征:程序的执行环境由Dalvik虚拟机转移到WebKit;相关核心代码由DEX文件转移到HTML文件(或其他可执行网页文件)。如果木马使用JavaScript接口调用替代使用Java实现的功能,便可以躲避原本针对DEX文件的杀毒引擎规则。

  • 代表家族——Android.JSBlack[17]

图3.18    JavaScript接口调用

(二) E4A中文编程

  • 逃逸原理

易安卓[18],以下简称E4A,是一个基于谷歌Simple语言的编程工具,实现通过类似易语言的Basic语法轻松编写Android应用程序。由于E4A使用中文替代了Java语言,使其可以躲避现存的传统杀毒引擎规则。

  • 代表家族——Android.E4aInfoStealer

图3.19    E4A中文编程

(三) Mono框架

  • 逃逸原理

Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。该项目的目标是创建一系列匹配ECMA标准(Ecma-334和Ecma-335)的.NET工具,包括C#编译器和通用语言架构。[19]Mono for Android[20]允许开发者在Android应用程序中使用Mono框架。使用Mono框架的Android应用程序具备如下特点:程序运行环境由Dalvik转移到Mono for Android运行时,在运行过程中通过Mono for Android运行时与Dalvik运行时的通信实现对Android API的调用。使用Mono框架实现的Android应用程序不同于直接使用Java的实现,因而可以躲避现存的传统杀毒引擎规则。

  • 代表样本——7350decd88f7810d6b655f94abe4aac6

图3.20    使用Mono运行时

十四、    高级杀软逃逸技术

(一) 白利用

  • 逃逸原理

“签名混淆”一节曾提到过,对于可信来源签名(白签名)的样本,安全软件厂商一般默认其为安全软件。因此,木马可以使用特殊手段(比如感染开发者机器)使自身具备白签名属性,从而躲避杀软的查杀。

  • 参考案例——疑百度编译机或员工中毒导致百度彩票APP感染病毒代码(发布流程管理不当)[21]

图3.21    被利用的某厂商签名

图3.22    被感染的网页文件

图3.23    网页文件中携带的恶意代码

(二) Masterkey漏洞利用

  • 逃逸原理

Android应用程序包格式为标准的ZIP文件格式。ZIP文件格式允许存在两个或以上完全相同的路径,然而安卓系统没有考虑此类情况。在这种情况下,Android包管理器校验签名取的是最后一个文件的Hash,而运行APK加载的DEX文件却是ZIP文件的第一个dex文件(或者AndroidManifest.xml文件)。该漏洞被称为Masterkey[22]漏洞,木马利用该漏洞可以将恶意的DEX文件打包进正常文件,以躲避查杀。

  • 参考案例——Masterkey漏洞

图3.24    双DEX文件形式

图3.25    双AM文件形式

(三) 隐写术

  • 逃逸原理

隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganographia,该书书名源于希腊语,意为“隐秘书写”[23]。

隐写术也是Android木马进行逃逸的手段之一。木马通过特殊的算法将载荷文件隐写到图片文件之中,运行时通过还原算法将载荷从图片文件中分离,然后动态加载载荷至运行环境中实施攻击。

  • 参考案例——Android.Xiny.19.origin[24]

图3.26    Android.Xiny.19.origin载体图片

第四章    沙箱逃逸技术

沙箱逃逸技术涵盖了针对沙箱环境和沙箱规则的逃逸技术。针对沙箱环境的检测包括系统属性、硬件属性和网络环境等方面,针对沙箱规则的逃逸涉及网络请求、触发条件、词法分析等方面。

一、       检测沙箱环境

  • 逃逸原理

Android沙箱一般通过虚拟化技术实现,其包含很多与真实Android机器不一样的属性和文件。木马通过检测沙箱的特有属性和文件可以粗略判定当前运行环境是否为沙箱环境,如果为沙箱则停止触发恶意行为。

  • 代表样本——cc162960da2f130905b6cd813daf1222

图4.1     模拟器属性检测

图4.2     模拟器文件检测

二、       对抗词法分析

  • 逃逸原理

Android隐私窃取类木马可能盗取用户联系人、短信等信息,并通过短信、邮箱或网络请求的方式回传。沙箱针对这类行为制定基于词法分析的检测规则,而木马则通过字符串操作(加密、分割、替换等)来对抗此类检测规则。

  • 代表家族——FakeTaobao[11]

图4.3     对抗词法分析

三、       载荷名混淆

  • 逃逸原理

Android木马的大部分攻击载荷都会以衍生物的形式释放到本地文件系统。沙箱基于木马的如上行为特点制定根据载荷名称进行检测的规则,而木马则通过混淆载荷名称来对抗此类检测规则。

  • 代表家族——恶意广告类

表4.1     载荷名称混淆

四、       URL混淆

  • 逃逸原理

Android木马的联网动作主要反映在URL上,因此沙箱一般包含对木马URL的监控,将恶意下载或恶意广告相关的URL加入到黑名单。木马通过混淆URL(包含频繁变更域名或混淆服务器路径)来躲避沙箱的这种监控。

  • 代表家族——“道有道”恶意广告家族[25]

表4.2     “道有道”URL混

五、       条件触发

  • 逃逸原理

条件触发一般针对沙箱的动态行为检测,最常见的条件触发为木马设定其恶意行为触发日期为某个日期之后,由于这个日期在木马投入沙箱养殖(沙箱养殖时间一般较短)的时间之后,所以木马不会在养殖期间表现其恶意行为。

  • 代表样本——1b85f1e2a782bb294ddde746a8e90ada

图4.4     定时触发

六、       高级沙箱逃逸技术

  • 逃逸原理

Android木马的绝大多数行为都是基于网络的,几乎每一个Android木马都会申请联网权限。沙箱为了更全面地触发木马的恶意行为,必需接入网络。黑客通过编写探测程序可以获取Google Bouncer[26]或安全厂商沙箱的IP段,然后在恶意程序中植入判断逻辑,如果IP属于安全厂商或Google Bouncer,便不触发任何恶意行为,以此躲避沙箱的检测。

  • 参考案例——BrainTest[27]

研究人员在2015年9月发现了一款名为“BrainTest”的Android木马。该木马通过检测运行环境的IP来判断其是否在Google Bouncer中运行,从而达到躲避Bouncer检测的目的。

图4.5     通过IP检测GoogleBouncer

样本启动时,通过IP信息检测其是否在Google的服务器上运行,如果检测到运行环境的IP符合如下条件之一,则不会运行恶意代码:

IP在209.85.128.0-209.85.255.255, 216.58.192.0-216.58.223.255,173.194.0.0-173.194.255.255,74.125.0.0-74.125.255.255范围内;

IP挂载的域名包含“google”、“android”或“1e100”。

第五章    对抗分析工具

针对分析工具的逃逸技术主要包括针对静态分析工具、动态分析工具和抓包工具的逃逸技术,以及高级对抗方式——加固。

一、       针对静态工具的对抗

(一) 伪加密

  • 逃逸原理

Android系统解析APK文件的流程,与解压缩软件及反编译工具解析ZIP文件的流程存在差异。Android系统解析APK文件时不考虑ZIP文件的加密问题,而解压缩软件和反编译工具需要首先检查ZIP包的加密标志位,检验其是否加密。木马通过仅改变加密标志位,即可骗过解压缩软件和反编译工具,如此即可躲过静态分析工具。

  • 代表样本——45daf4f3eaca42eda83957c6ecea3652

图5.1     伪加密前

图5.2     伪加密后

(二) 资源文件对抗

  • 逃逸原理

2015年8月,研究人员发现一种通过构造特殊格式的资源文件对抗反编译工具Apktool的技术,该技术原理如下图所示。

图5.3     资源文件对抗反编译原理

Apktool解析APK包中的资源文件时,会验证同类型资源里是否包含重名资源,如果包含重名资源则会抛出异常,中断反编译过程。黑客通过在木马中插入重名资源,并且保证在程序运行过程中始终不会调用该资源,则即可保证程序的正常安装与运行,又可对抗Apktool的反编译。

  • 参考案例——《Android应用资源文件格式解析与保护对抗研究》[28]

(三) axml文件对抗

  • 逃逸原理

AndroidManifest.xml文件为axml文件格式[29]。黑客通过在AndroidManifest.xml文件中插入偏移异常(超出文件大小的偏移)的资源以对抗反编译工具的解析,而该资源不会被程序使用,从而也能保证程序的正常安装与运行。

图5.4     axml文件对抗反编译原理

  • 参考案例——《浅谈xaingce apk样本分析》[30]

(四) DEX文件对抗

  • 逃逸原理A

由于Baksmali不支持解析DEX文件的link section,所以黑客通过在DEX文件中构建link section即可使Baksmali工具奔溃。

  • 参考案例——《Android DEX安全攻防战》[31]
  • 逃逸原理B

DEX文件的类定义结构中包含一个source_file_idx项,表示源代码文件的信息。黑客首先向DEX文件中添加一个程序运行时不会使用的类,然后修改对应的source_file_idx,因为程序未使用该类,所以可以成功安装和运行,但反编译工具静态解析DEX文件时,由于找不到source_file_idx对应的值,便会抛出异常,中断反编译过程。

  • 参考案例——《Android-对抗反编译工具的一种方式》[32]

(五) 剥离二进制

  • 逃逸原理

剥离二进制文件,就是将二进制文件的符号表删除,增加病毒分析师调试样本的难度。开发者可以通过添加如下gcc编译选项[33]隐藏符号表。

Gcc编译选项:LOCAL_CFLAGS := -fvisibility=hidden

图5.5     二进制剥离前后对比

  • 参考案例——《Android应用安全开发之源码安全》[34]

(六) 无效指令

  • 逃逸原理

2015年9月,研究人员发现了一种通过在DEX文件中插入无效指令对抗反编译工具Dex2jar的技术,该技术原理如下图所示。

图5.6     构造无效指令对抗Dex2jar

Dex2jar解析DEX文件的过程中会校验每个方法的形参和实参类型,如果形参类型和实参类型不一致则会抛出异常,中断反编译过程。通过插入形参与实参不一致的无效指令即可触发该异常,导致解析失败。

  • 参考案例——《Android程序的反编译对抗研究》 [35]

二、       针对动态调试工具的对抗

(一) 限制调试器连接

  • 逃逸原理

Android使用android:debuggable[36]标签标识应用程序是否可调试,通过将android:debuggable设置为false便可限制调试器连接。

  • 参考案例——《Smalidea无源码调试 android 应用》[37]

(二) 自校验反调试

  • 逃逸原理

按照前一小节中的方法限制调试连接之后,分析人员便无法直接对木马进行调试。只有修改调试标签,经过回编译并重新签名才可以使木马可调试。木马则通过对签名文件的自校验来防止其被重打包,以此间接对抗调试分析。

图5.7     FakeTaobao自校验

  • 代表家族——FakeTaobao[11]

(三) 抢占ptrace

  • 逃逸原理

抢占ptrace的概念继承至Linux系统的ptrace系统调用。ptrace系统调用为开发者提供一种使用一个进程监视、控制另一个进程的执行或检查、改变另一个进程内存和寄存器的方法[38]。ptrace经常被用来实现反调试功能,因为一个进程只能被ptrace一次,如果木马使用ptrace进行自我监控和跟踪,就可以阻止分析人员的调试。

图5.8     抢占ptrace

  • 参考案例——《反调试方法二 – 抢占ptrace》[39]

(四) 检测TracerPid

  • 逃逸原理

Linux进程状态文件利用TracerPid[40]记录调试(跟踪)进程的进程号,如果进程未被调试(跟踪)则该值为0。Android继承了Linux系统的这种特性,所以通过读取进程的/proc/self/status文件,检测TracerPid的值即可判断是否存在调试进程。

图5.9     检测TracerPid值

  • 参考案例——《android-native反调试》[41]

(五) 检测wchan

  • 逃逸原理

Linux使用/pro/pid/wchan[42]文件保存进程正在等待的事件或睡眠状态,如果进程正在运行则该文件为空。根据wchan文件中的关键字(如ptrace_stop、ep_poll等)即可判断进程是否处在被调试状态。

图5.10    检测wchan文件内容

  • 参考案例——《Android应用安全开发之源码安全》[34]

(六) 检测fd

  • 逃逸原理

Linux的进程/proc/self/fd[43]目录包含所有打开文件的fd,当程序被调试器打开时,其对应的进程实际上继承至该调试器进程,即调试器进程是当前运行进程的父进程,并且父进程打开文件的fd也会显示在当前进程(被调试进程)的fd目录下。调试器运行时一般会打开多个进程,所以程序可以通过检测fd目录下文件的个数是否多于正常水平来判断进程是否正被调试。

图5.11    检测fd目录文件个数

  • 参考案例——《Android应用安全开发之源码安全》[34]

(七) 检测父进程

  • 逃逸原理

如前一小节所述,调试器进程是被调试进程的父进程,所以程序通过检测父进程的名称是否包含调试器标识(如gdb)即可简单判断当前进程是否正被某种调试器调试。

图5.12    检测父进程

  • 参考案例——《Android应用安全开发之源码安全》[34]

(八) 检测调试辅助进程

  • 逃逸原理

同检测父进程原理相似,调试过程必须借助一些辅助进程,如android_server[44],所以程序也可以通过判断调试辅助进程是否存在来简单判断其是否处在被调试状态。

图5.13    检测调试辅助进程

  • 参考案例——《Android应用安全开发之源码安全》[34]

(九) 检测时间差

  • 逃逸原理

由于程序在调试时的断点、检查修改内存等操作,运行时间往往要远大于正常运行时间。所以,一旦程序运行时间过长,便可能是由于正在被调试。

  • 参考案例——《Android应用安全开发之源码安全》[34]

(十) 设置单步调试陷阱

  • 逃逸原理

单步调试陷阱是指通过人为设置断点指令并注册信号处理函数,迷惑调试器和分析人员,对抗动态调试。

ARM架构下的调试器对程序设置断点时,会首先保存下断点处的原始指令,并将断点处指令替换为breakpoint机器码。

图5.14    下断点

程序运行至断点处会命中断点,此时程序向系统发送SIGTRAP信号,调试器接收到SIGTRAP信号之后,先将断点处指令替换为原始指令,然后将PC指针退回至断点处。

图5.15    命中断点时的指令执行

如上过程即一般的调试器断点运行原理,需要注意的是,通过Linux信号处理函数signal[45]可以注册单步调试信号——SIGTRAP的回调处理函数,我们可以认为在程序中插入breakpoint机器码,然后通过注册SIGTRAP回调处理函数,在调试器命中breakpoint时将breakpoint机器码替换为nop,这就是单步调试陷阱的运行原理。

图5.16    设置单步调试陷阱

图5.17    单步调试陷阱处的指令执行

  • 参考案例——《Anti-debugging Skills in APK》[46]

(十一)     检测软件断点

  • 逃逸原理

软件断点通过改写断点地址处原始指令的头几字节为breakpoint机器码实现,所以通过遍历ELF文件中可执行段,查找是否存在breakpoint机器码,即可判断软件断点是否存在。

  • 参考案例——《Anti-debugging Skills in APK》[46]

(十二)     检测Dalvik调试字段

  • 逃逸原理

Dalvik虚拟机自带检测调试连接的方法——dvmDbgIsDebuggerConnected,dvmDbgIsDebuggerConnected通过判断DvmGlobals结构体中debuggerActive字段的值来检测调试连接。程序也可以直接获取DvmGlobals结构体中debuggerActive字段的值,以检测调试连接。

  • 参考案例——《Anti-debugging Skills in APK》[46]

(十三)     ARM与THUMB指令识别缺陷

  • 逃逸原理

IDA采用递归下降算法来反汇编指令,该算法最大的缺点在于它无法处理间接代码路径,如利用指针表来查找目标地址的跳转或调用。ARM架构下存在ARM和THUMB两种指令集,两种指令集模式的切换通过带链接的跳转指令完成,IDA在某些情况下无法正确地识别ARM和THUMB指令。如果在指令识别错误的地点写入断点,则有可能使调试器崩溃。

  • 参考案例——《Anti-debugging Skills in APK》[46]

(十四)     Inotify 监控文件

  • 逃逸原理

Inotify函数继承至Linux操作系统。Inotify函数能够监控文件系统事件(打开、读写、删除等),程序可以通过监控/proc/pid/maps、/proc/pid/mem等文件的读写事件,防止分析师动态调试程序时使用内存dump技术dump内存(内存dump是调试分析中常用的脱壳技术)。

  • 参考案例——《Anti-debugging Skills in APK》[46]

三、       针对抓包工具的对抗(HTTPS)

  • 逃逸原理

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,也被称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上[47]。Android木马利用HTTPS进行加密网络通信,对抗分析人员使用抓包工具对其进行分析。

  • 代表样本——58fed8b5b549be7ecbfbc6c63b84a728

四、       高级对抗(加固)

  • 逃逸原理

APK加固是一种对APK文件的数据进行压缩和加密保护,将APK文件压缩成自我解压档案,并能隐藏解压进程。主流的APK加固厂商提供多方面的加固服务,其意图在于保护开发者的软件不被破解,但是由于审核不严或加固厂商安检能力不强等原因,大量恶意软件通过合法的加固渠道进行加固以躲避查杀。

  • 参考案例——请参考国内主流加固厂商

第六章    针对用户感官的逃逸技术

针对用户感官的逃逸技术主要针对用户视觉和听觉进行伪装和欺骗,或骗取用户点击运行木马,或掩盖木马运行后的痕迹。

一、       隐藏图标

  • 逃逸原理

Android提供禁用应用组件的接口,通过调用setComponentEnabledSetting方法,并将第二个参数设置为COMPONENT_ENABLED_STATE_DISABLED即可禁用指定的组件。如果指定的组件为应用的启动界面则可隐藏应用图标,使其消失在用户的视野内。

  • 代表家族——Dendoroid.B[50]

图6.1     Dendoroid隐藏图标

二、       透明图标

  • 逃逸原理

木马使用透明图片作为其应用图标,安装之后给用户造成“该桌面区域内不存在应用”的假象。

  • 代表样本——03d1d8db0e71b07cf29ea4087a334848

图6.2     伪“京东客户端”透明图标

三、       欺骗

(一) 伪造提示

  • 逃逸原理

木马通过将应用名称设置为特殊提示语句(如“为正常系统软件,请点击取消,删除了会造成手机崩溃,请不要删除”),当杀软弹出报毒提示时,使用该语句混淆报毒提示,以欺骗用户。

  • 代表样本——745739d76b8c0b29f5f2bb2810bca8da

图6.3     伪造杀软提示

(二) 伪装正常应用

  • 逃逸原理

伪装正常应用的主要方式是将其自身图标设置成正常应用的图标,以此欺骗用户下载、安装和运行。

  • 代表家族——FakeTaobao [11]

图6.4     FakeTaobao伪装正常应用

(三) 伪造卸载现场

  • 逃逸原理

木马通过监控卸载动作,检测到其正被用户卸载时,弹出伪装的卸载程序供用户选择。一旦用户选择了该卸载程序,则会误以为木马已卸载成功,而实际上该卸载程序并未真正执行卸载。

  • 代表家族——FakeTaobao[11]

图6.5     FakeTaobao监控程序卸载

图6.6     FakeTaobao弹出伪造的卸载程序

四、       后台下载

  • 逃逸原理

Android提供设置下载管理器执行下载任务时是否弹出系统通知的接口,使用setNotificationVisibility[52]方法并将其参数设置为VISIBILITY_HIDDEN即可实现后台下载,让用户感知不到下载事件。

  • 代表样本——03ad8735b6f18849ae2b905059b9aed2

五、       设置响铃模式

  • 逃逸原理

向被控手机拨打电话和发送短信指令是Android木马较为常用的手段,为了不让用户感知到这些恶意行为,木马将用户手机的响铃模式设置为静音。

  • 代表家族——Android.Cokri[53]

图6.7     Cokri设置响铃为静音模式

六、       删除短信

  • 逃逸原理

短信是木马执行隐私窃取和远程控制时的一种常用手段,木马通过向用户手机发送短信指令控制用户手机。木马收发短信之后删除相关内容,以避免用户通过短信应用感知到这种私自收发短信的行为。

  • 代表家族——FakeTaobao[11]

图6.8     FakeTaobao删除短信

七、       预装

  • 逃逸原理

在无线行业中,预装往往指,将产品装在未销售的手机终端ROM中[54]。将木马植入ROM,可以绕过安装环节,即用户对木马的安装过程完全无感知。

  • 代表家族——“万蓝”[55]

第七章    反追踪技术

反追踪技术针对分析师或网络执法人员的分析追踪。木马投放者通过隐蔽的传播手法投放木马,试图隐藏木马的来源。

一、       利用第三方平台生成下载链接

  • 逃逸原理

样本下载源是分析人员和网络执法人员追踪木马来源和木马作者的途径之一,为躲避分析人员和执法人员的追踪,木马作者匿名注册第三方社交账号或应用市场,借助第三方社交平台或者应用市场生成下载链接,然后进行传播。

  • 代表家族——Android勒索软件[51]

图7.1     Android勒索软件借助第三方平台生成下载链接

二、       域名隐私保护

  • 逃逸原理

域名隐私保护服务是一种域名增值服务,即通过一定的技术手段适当保护用户的注册联系人、管理联系人、技术联系人、缴费联系人信息(使用户提交的有关注册信息不在域名whois数据库中公开显示)。 通过此项服务,可以保护您的个人隐私不被公开,减少垃圾邮件和针对个人信息的窃取等[56]。木马作者注册域名时如果使用了域名隐私保护服务,亦可对抗分析人员和网络执法人员的追踪。

  • 参考案例——恶意广告类

图7.2     恶意广告URL使用域名隐私保护

三、       非实名注册

  • 逃逸原理

实名制是一种近年来开始兴起的制度,即在办理和进行某项业务时需要提供有效的能证明个人身份的证件或资料,最初是因为网瘾低龄化而开始试水,而如今随着网络化的不断发展,各种各样虚拟身份的交易日益重要而已经成为一项趋势,其很大程度上带来了安全保障,但另一方面其对个人隐私可能的侵犯也需要人们去探索研究[57]。

非实名注册即绕过实名制注册,从黑市购买伪造的身份信息,进而注册网络虚拟身份、电话号码、银行卡等。非实名注册在网络电信诈骗中应用较为广泛,诈骗者通过黑市购买身份证或银行卡,从而进行转账或洗钱。

  • 参考案例——网络电信诈骗木马[58]

四、       熟人关系传播

  • 逃逸原理

熟人关系传播利用了Android手机用户对于通讯录联系人的信任,使用这种传播方式可以从传播的环节躲避追踪。蝗虫手机木马是Android平台上第一个成功利用熟人关系传播的案例,该木马遍历用户通讯录,并给通讯录联系人发送包含木马下载链接的短信。

  • 代表家族——蝗虫手机木马[59]

图7.3     蝗虫手机木马通过通讯录联系人传播

五、       伪基站

  • 逃逸原理

伪基站利用移动信令监测系统监测移动通讯过程中的各种信令过程,获得手机用户当前的位置信息。伪基站启动后就会干扰和屏蔽一定范围内的运营商信号,之后则会搜索出附近的手机号,并将短信发送到这些号码上。屏蔽运营商的信号可以持续10秒到20秒,短信推送完成后,对方手机才能重新搜索到信号。大部分手机不能自动恢复信号,需要重启。伪基站能把发送号码显示为任意号码,甚至是邮箱号和特服号码。载有伪基站的车行驶速度不高于60公里/小时,可以向周边用户群发短信,因此,伪基站具有一定的流动性[60]。

Android木马投放者通过伪基站向用户发送带有木马下载链接的短信。由于伪基站的流动性,基本上不可能通过用户接收到的短信反向追踪其来源。

  • 参考案例——《“伪中国移动客户端”–伪基站诈骗病毒解析》[61]

六、       虚拟运营商

  • 逃逸原理

虚拟运营商(Virtual Network Operator,VNO)是指没有自己的通讯基础设施,借助传统的电信供应商来实现通讯服务的运营商[62]。

由于分析师无法通过虚拟运营商号码追踪木马来源,木马投放者通过虚拟运营商服务向受害者发送带木马下载链接的短信即可躲避分析师的追踪。

  • 参考案例——《收到莫名短信别点链接 详解木马病毒传送流程》[63]

七、       高级反追踪

(一) 洋葱网络

  • 逃逸原理

洋葱网络是一种在计算机网络上进行匿名通信的技术。通信数据先进行多层加密然后在由若干个被称为洋葱路由器组成的通信线路上被传送。每个洋葱路由器去掉一个加密层,以此得到下一条路由信息,然后将数据继续发往下一个洋葱路由器,不断重复,直到数据到达目的地。这就防止了那些知道数据发送端以及接收端的中间人窃得数据内容[64]。

2014年5月,研究人员发现了第一个以Android为目标的Tor木马[65]。该木马通过修改Tor客户端Orbot实现,并利用 Tor网络的.onion代理服务器隐藏指令控制服务器的位置。木马接收来自匿名服务器的指令并执行一系列任务,包括拦截短信,回传手机型号、系统版本、国家、应用安装列表和IMEI等信息,可用于远程执行代码。

  • 代表家族——Android.Torec

图7.4     Torec家族包含洋葱网络的包结构

(二) 动态域名

  • 逃逸原理

动态域名可以将任意变换的IP地址绑定给一个固定的二级域名。不管这个线路的IP地址怎样变化,因特网用户还是可以使用这个固定的域名,来访问或登录用这个动态域名建立的服务器。[66]。分析人员和网络执法人员主要根据IP地址对木马服务器进行定位,如果木马使用动态域名的方式,即意味着木马服务器的IP地址时刻在改变,由此增加了追踪的难度。

  • 代表家族——潜魔间谍程序[67]

图7.5     潜魔间谍程序使用动态IP

图7.6     潜魔间谍程序使用的动态IP提供商

(三) “跳板”网络

  • 逃逸原理

“跳板”网络的利用主要出现在隐私窃取木马中,木马作者利用第三方网络平台的信誉度以及这种特殊形式的隐蔽性来躲避分析人员和网络执法人员的追踪。木马将用户隐私信息上传至第三方网络平台,比如以日记或日志的形式上传至XX日记、XX空间等,是黑客常用的“跳板”网络形式。

  • 代表家族——FakeTaobao[68]

图7.7     FakeTaobao使用吾志作为跳板网络

结束语

我们通过这篇报告总结了安卓平台目前出现的主流逃逸技术,其中涵盖了超过六十种逃逸技术的原理和参考案例。在搜集案例的过程中,由于精力、时间以及关注范围等原因,可能遗漏了部分特殊的逃逸技术,希望大家发现后能够及时反馈给我们。由于各种逃逸技术在技术上的深浅层度不同,报告中对某些逃逸技术的原理描述可能比较简单,如果大家对报告中的任何细节有疑问都可以联系我们。

现今,Android木马技术更新换代越来越频繁,逃逸技术和攻击技术每天都在升级,Android安全形式极为严峻。严峻的安全形式对安全软件厂商的安全技术提出了更高的要求。我们希望这篇报告能够给安全友商们带来一些启发,以帮助他们增强引擎方法和检出能力。我们相信安全技术共享是安全技术进步强有力的推动力,我们通过报告的形式共享安全技术以期望能够推动国内移动安全技术的进步,我们也希望各友商都能够参与到安全技术共享的活动中来,联手将Android生态环境治理的更好。

我们希望这篇报告也能够给移动安全从业者带来一些启发。目前网络上缺少关于Android木马逃逸技术的系统性介绍文章,甚至找不到关于Android逃逸技术的相关定义,这无疑为相关安全从业人员了解Android逃逸技术设置了一道无形的屏障。本报告系统性地描述了Android木马逃逸技术,并给出了超过六十种逃逸技术原理和案例,可以帮助他们更加系统、全面地认识和研究Android木马逃逸技术,以这篇报告作为移动安全从业者的参考手册。

最后,感谢所有国内外发现并及时公布Android木马逃逸技术的厂商或安全研究人员,希望通过大家的共同努力营造良好的安全技术研究氛围。

附录一:参考文献

[1]. “入侵防御系统”维基百科定义:

https://zh.wikipedia.org/wiki/入侵预防系统

[2]. 《advanced evasion technique (AET)》:

http://searchsecurity.techtarget.com/definition/advanced-evasion-technique-AET

[3]. 王磊, 双锴.入侵逃逸技术综述. 北京:北京邮电大学,2012

[4]. “安全软件”维基百科定义:

https://zh.wikipedia.org/wiki/安全软件

[5]. 《IPS入侵逃逸技术分析与防御》-杨永清

[6]. 《高级逃避技术(AET)是实现APT的重要手段之一》:

http://www.cngate.com.cn/index.php?m=content&c=index&a=show&catid=77&id=202

[7]. 《Malware Evasion Chart》:

http://marcoramilli.blogspot.com/2013/07/malware-evasion-chart.html

[8]. 《The most sophisticated Android Trojan》:

https://securelist.com/blog/research/35929/the-most-sophisticated-android-trojan/

[9]. DexClassLoader开发者文档:

https://developer.android.com/reference/dalvik/system/DexClassLoader.html?hl=zh-cn

[10]. 《“长老木马”三代揪出背后“大毒枭”》:

“长老木马”三代揪出背后“大毒枭”

[11]. 《FakeTaobao家族变种演变》:

FakeTaobao家族变种演变

[12]. 《“舞毒蛾”木马演变报告》:

“舞毒蛾”木马演变报告

[13]. 《“百脑虫”手机病毒分析报告》:

“百脑虫”手机病毒分析报告

[14]. “Iptables”维基百科解释:

https://zh.wikipedia.org/wiki/Iptables

[15]. 《DwallAv木马分析报告》:

DwallAv木马分析报告

[16]. WebView 开发者文档:

https://developer.android.com/reference/android/webkit/WebView.html

[17]. 《国内首个利用JavaScript脚本远控木马的技术分析报告》:

国内首个利用JavaScript脚本远控木马的技术分析报告

[18]. E4A官方站点:

http://www.e4asoft.com

[19]. “Mono”维基百科介绍:

https://zh.wikipedia.org/wiki/Mono

[20]. Mono for Android开发者网站:

http://www.monodevelop.com/archived/download/mono-for-android/

[21]. 《疑百度编译机或员工中毒导致百度彩票APP感染病毒代码(发布流程管理不当)》:

http://bobao.360.cn/snapshot/index?id=83648

[22].《Android uncovers master-key 漏洞分析》:

http://php.ph/wydrops/drops/Android%20uncovers%20master-key%20%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90.pdf

[23]. “隐写术”维基百科定义:

https://zh.wikipedia.org/wiki/隐写术

[24]. 《Trojan targeted dozens of games on Google Play》:

http://news.drweb.com/show/?i=9803&c=9&lng=en&p=0

[25]. 《“道有道”的对抗之路》:

“道有道”的对抗之路

[26]. “Google Bouncer” 维基百科介绍:

https://en.wikipedia.org/wiki/Google_Play#Application_security

[27]. 《BrainTest – A New Level of Sophistication in Mobile Malware》:

BrainTest – A New Level of Sophistication in Mobile Malware

[28]. 《Android应用资源文件格式解析与保护对抗研究》:

http://www.freebuf.com/articles/terminal/75944.html

[29]. 《AndroidManifest Ambiguity方案原理及代码》:

http://www.cnblogs.com/wanyuanchun/p/4084292.html

[30]. 《浅谈xaingce apk样本分析》:

[31]. 《Android DEX安全攻防战》:

http://bbs.pediy.com/showthread.php?t=177114

[32]. 《Android-对抗反编译工具的一种方式》:

http://www.android100.org/html/201502/16/119734.html

[33]. Gcc wiki:

https://gcc.gnu.org/wiki/Visibility

[34]. 《Android应用安全开发之源码安全》:

Android应用安全开发之源码安全

[35]. 《Android程序的反编译对抗研究》:

http://www.freebuf.com/sectool/76884.html

[36]. App Manifest 开发者文档:

https://developer.android.com/guide/topics/manifest/application-element.html

[37]. 《Smalidea无源码调试android应用》:

Smalidea无源码调试 android 应用

[38]. ptrace介绍:

http://linux.die.net/man/2/ptrace

[39]. 《反调试方法二 – 抢占ptrace》:

http://kiya.space/2015/12/18/ptrace-basis/

[40]. Linux Programmer’s Manual :

http://man7.org/linux/man-pages/man5/proc.5.html

[41]. 《android-native反调试》:

http://www.zhaoxiaodan.com/java/android/android-native反调试.html

[42]. POSIX Programmer’s Manual :

http://man7.org/linux/man-pages/man1/ps.1p.html

[43]. “文件描述符”维基百科定义:

https://zh.wikipedia.org/wiki/文件描述符

[44]. 《安卓APP动态调试-IDA实用攻略》:

http://ju.outofmemory.cn/entry/141333

[45]. 《Anti-debugging Skills in APK》:

Anti-debugging Skills in APK

[46]. Linux Programmer’s Manual :

http://man7.org/linux/man-pages/man3/bsd_signal.3.html

[47]. “超文本传输安全协议”维基百科定义:

https://zh.wikipedia.org/wiki/超文本传输安全协议

[48]. 梆梆加固官方站点:

http://www.bangcle.com/

[49]. 爱加密官方站点:

由于博客屏蔽该网址,请自行百度(cnbolgs)

[50]. 《远控木马Dendoroid.B分析报告》:

远控木马Dendoroid.B分析报告

[51]. 《安全预警:勒索软件正成为制马人的新方向》:

安全预警:勒索软件正成为制马人的新方向

[52]. DownloadManager.Request开发者文档:

https://developer.android.com/reference/android/app/DownloadManager.Request.html?hl=zh-cn

[53]. 《揭开勒索软件的真面目》:

http://www.antiy.com/response/ransomware.html

[54]. “预装”360百科定义:

http://baike.so.com/doc/10027189-10375169.html

[55]. 《“万蓝”ROM级手机木马分析报告》:

“万蓝”ROM级手机木马分析报告

[56]. 阿里云域名隐私保护服务:

https://wanwang.aliyun.com/domain/whoisprotect/

[57]. “实名制”360百科定义:

http://baike.so.com/doc/6665498-6879327.html

[58]. 《深入分析跨平台网络电信诈骗》:

深入分析跨平台网络电信诈骗

[59]. 《蝗虫手机木马分析报告》:

蝗虫手机木马分析报告

[60]. “伪基站”维基百科定义:

https://zh.wikipedia.org/wiki/伪基站

[61]. 《“伪中国移动客户端”–伪基站诈骗病毒解析》:

http://www.2cto.com/Article/201406/308395.html

[62]. “虚拟运营商”维基百科定义:

https://zh.wikipedia.org/wiki/虚拟运营商

[63]. 《收到莫名短信别点链接 详解木马病毒传送流程》:

http://news.bandao.cn/news_html/201512/20151219/news_20151219_2595155.shtml

[64]. “洋葱网络”360百科定义:

http://baike.so.com/doc/4317893-4522104.html

[65]. 《The first Tor Trojan for Android》:

https://securelist.com/blog/incidents/58528/the-first-tor-trojan-for-android/

[66]. “动态域名”360百科定义:

http://baike.so.com/doc/5338387-5573827.html

[67]. 《潜魔间谍程序分析报告》:

潜魔间谍程序分析报告

[68]. 《FakeTaobao家族变种演变(二)》:

FakeTaobao家族变种演变(二)

附录二:涉及样本MD5

360烽火实验室

360烽火实验室,致力于Android病毒分析、移动黑产研究、移动威胁预警以及Android漏洞挖掘等移动安全领域及Android安全生态的深度研究。作为全球顶级移动安全生态研究实验室,360烽火实验室在全球范围内首发了多篇具备国际影响力的Android木马分析报告和Android木马黑色产业链研究报告。实验室在为360手机卫士、360手机急救箱、360手机助手等提供核心安全数据和顽固木马清除解决方案的同时,也为上百家国内外厂商、应用商店等合作伙伴提供了移动应用安全检测服务,全方位守护移动安全。

[转载] Android逃逸技术汇编的更多相关文章

  1. [转载]Android开发常用调试技术记录

    ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/ ...

  2. Android官方技术文档翻译——Ant 任务

    本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 由于是抽着时间译的.所以这篇 ...

  3. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  4. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(4)

    最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...

  6. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  7. Android官方技术文档翻译——Gradle 插件用户指南(6)

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  8. Android官方技术文档翻译——IntelliJ 项目迁移

    本文译自Android官方技术文档<Migrating from IntelliJ Projects>,原文地址:http://tools.android.com/tech-docs/ne ...

  9. Android官方技术文档翻译——Eclilpse项目迁移

    本文译自Android官方技术文档<Migrating From Eclipse Projects>,原文地址:http://tools.android.com/tech-docs/new ...

随机推荐

  1. JAVA 编码中文简述

    中文编码问题虽然是个老问题,但对不熟悉的人来说还是不好处理的.不过Java中已经有了一套比较成熟的解决方案. 首先对中文编码格式予以简单介绍:中文编码有三套国标:GB2312,GBK,GB18030, ...

  2. 《C与指针》第二章练习

    本章问题 1.Comments in C do not nest(嵌套).What would be the result of "commenting out" the code ...

  3. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!  http://blog.163.com/jiaoruijun07@126/blog/static/68943278201042064246409/        ...

  4. 20151216Repeater

    Repeater 用法:.绑定数据源 Repeater1.DataSource = context.Info; Repeater1.DataBind(); .造项模版: 头模版:HeaderTempl ...

  5. Sea.js学习4——Sea.js的配置

    可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...

  6. win10-golang环境变量设置

    安装go 打开环境变量 添加GOPATH 添加到path 检验 在命令指示符下->go version or go env 配置 在F:\GOPATH下放置C:\go\bin->新建pkg ...

  7. [Spring MVC] - SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  8. ASP.NET MVC IOC 之AutoFac攻略

    一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofa ...

  9. CPS冥想 - 2 手撸控制流

    原博客链接:http://blogs.msdn.com/b/ericlippert/archive/2010/10/22/continuation-passing-style-revisited-pa ...

  10. javascript的事件

    前戏 今天在博客中看到了javascript的事件机制,就自己试试写一个简单的冒泡捕获测试,但是测试结果出乎了我的意料,主要是自己原来对事件了解不是很清楚,现在写篇博客记录下. 基础 先来看一下我在A ...