ANTSdroid:安卓恶意软件家族行为分析

ANTSdroid:面向安卓应用的自动恶意软件家族行为生成与分析

摘要

恶意软件开发者经常使用各种混淆技术来生成多态性和变种的恶意软件版本。及时跟上新变种并为每个个体创建签名一直是杀毒公司面临的重要问题,但这项工作十分繁琐。这促使我们提出了不再与变种周旋的想法。本文旨在直接找出与恶意软件家族意图密切相关的主要特征操作。我们提出了全局执行序列对齐与分割算法,以生成恶意软件家族的执行阶段图,该图表简明直观地展示了生命周期以及各个变种在不同阶段执行的共性与差异操作。我们还提出了一种自动化的动态Android恶意软件画像与家族安全分析系统,重点关注恶意软件家族变种中敏感及权限相关API调用的执行序列,即所谓的模体。为实现这一目标,我们对安卓调试桥(ADB)工具进行了改进,增加了若干新功能,包括支持记录API调用的参数和返回值、支持基于UID的画像以捕获所有进程和线程,从而全面理解目标恶意软件应用的行为,以及实现每线程跟踪生成。最后,我们使用真实世界数据集验证了所提出的系统和方法。生成的家族阶段图和模体可为安全分析师提供关于恶意软件家族设计与实现方式的语义丰富的理解。恶意软件家族的主要特征API调用序列未来可用作签名,以实现高效且有效的恶意软件检测。

关键词

Android恶意软件家族行为分析,执行序列对齐与分割,Dynamic分析,安卓安全

1 引言

智能手机已成为我们生活中不可或缺的一部分。近期报告显示,按安装付费(PPI)模式下的商业行为导致了不需要的软件安装量日益增加,软件开发者在安装过程中捆绑第三方应用程序以获取报酬[1]。因此,许多恶意软件,如木马、后门和激进的广告软件被下载到用户的设备中。与此同时,我们观察到恶意软件开发者经常使用各种混淆技术来生成多态和变种的恶意软件版本。因此,同一恶意软件家族的变种通常表现出相似的行为。最重要的是,它们具备某些共同的核心代码,以实现相同的设计目的。

本文提出了一种新颖的自动动态Android恶意软件画像与家族安全分析系统,该系统聚焦于恶意软件家族变种的敏感及权限相关API调用的执行序列,即所谓的模体。我们提出了一种全局执行序列比对算法和一种用于恶意软件家族行为分析的分割算法,以发现该家族的共性及主要特征模体。

过去,研究人员提出了多种恶意软件行为分析方法。基本可分为两类:静态分析和动态分析。在静态分析中,研究对象主要是APK文件、DEX文件、AndroidManifest.xml文件以及应用程序所使用的权限。通过分析嵌入在这些文件中的信息(例如所使用的权限[2–6]和污染信息[7, 8]),研究人员可以评估应用程序的威胁程度。另一方面,动态分析工具在受控环境中收集运行时执行信息(例如系统调用和API调用)[9–13],以刻画和检查应用程序的行为。与这些工作不同,本文聚焦于从Android恶意软件家族变种的过滤后的执行轨迹中,自动生成其共同且主要的与安全相关的特征API调用序列。所生成的恶意软件家族的共性或特征API调用序列,未来可作为签名用于有效恶意软件检测。

我们的贡献包括:(1)设计并实现了一个针对安卓应用的自动化分析及恶意软件家族行为分析系统;(2)修改安卓调试桥(ADB)工具,新增功能,包括支持记录API调用的参数和返回值、支持基于UID的分析模式以捕获从主进程派生的所有进程和线程,从而全面理解目标恶意软件应用的活动,以及每线程跟踪生成;(3)整理了一套敏感及与权限相关的API集合,用于捕获应用的安全相关活动;(4)设计并实现了一种全局执行序列比对算法和一种分段算法,以生成恶意软件家族的执行阶段图,该图简洁直观地展示了生命周期以及各个阶段中各变种的共性与差异操作;(5)使用真实数据集验证所提出的系统,识别恶意软件家族的共性和主要特征操作(API调用序列),以用于高效检测。

本文的其余部分组织如下。在第2节中,我们简要回顾了安卓恶意软件行为分析的相关工作。在第3节中,我们描述了ANTSdroid:自动恶意软件家族行为生成797所提出的自动化分析和家族行为分析系统的设计与实现。在第4节中,我们采用一个安卓恶意软件数据集来验证所提出的系统和算法。最后,第5节给出结论。

2 相关工作

Barrera等人[3]使用自组织映射来分析安卓的基于权限的安全模型。PScout[4]讨论了权限与Java API之间的关系。VetDroid[5]是一个动态分析平台,能够揭示应用程序如何使用权限访问敏感系统资源,以及这些获取的资源如何被应用程序进一步利用。AppsPlayground[6]在安卓模拟器中进行动态分析,基于对隐私敏感信息的污点追踪、敏感API监控和内核级跟踪,以识别已知漏洞和不期望的功能。Apposcopy[7]专注于组件间调用图的静态污点分析,用于恶意软件家族分类。TaintDroid[8]采用污点分析技术,提供一个全系统动态污点追踪系统,能够追踪多个敏感数据源。

Peiravian等人[9]使用静态分析来提取安卓应用的权限和API调用,并应用机器学习技术来检测恶意安卓应用。DroidAPIMiner[10]在API级别提取恶意软件特征,并采用机器学习方法对恶意应用和良性应用以及通用应用所使用的API进行分类。Droidmat[11]也在应用的清单文件和API调用特征上应用机器学习算法,以区分安卓恶意软件。DroidScope[12]采用虚拟机自省(VMI)技术在虚拟机中检查安卓应用。在CopperDroid[13]中,作者同样应用VMI技术执行以系统调用为中心的分析,并生成详细的行为配置文件,将大量的低级系统调用抽象为简洁的高级语义。然而,这些工作并未像我们一样关注应用的线程结构和Java API调用序列。

3 系统设计

在我们提出的恶意软件动态分析与家族行为分析系统中,第一步是对目标恶意软件应用的执行过程进行分析。这里的主要问题是确定需要记录哪些信息,以便执行轨迹包含足够详细的信息,且不遗漏任何可疑或恶意操作。同时,我们也希望避免记录过多细节而引入大量不必要的噪声。图1展示了所提出的分析与家族行为分析系统的架构。该分析与家族行为分析过程包括三个阶段。

3.1 为每个线程生成所有APIs执行轨迹

我们首先利用安卓SDK命令“am profile”来获取应用的初始跟踪信息。然而,该命令仅提供类名、方法名和线程名称和参数类型。我们修改了安卓调试桥(ADB)的代码,增加了几项新功能:(a)启用对API调用的参数和返回值的记录;(b)将基于PID的分析模式更改为基于UID,以捕获从主进程派生的所有进程和线程,从而全面了解目标应用的活动情况;(c)按线程分离并生成API调用轨迹。

广播消息:触发恶意软件行为。在动态分析中,如何尽可能触发目标恶意软件行为是一个问题。为此,我们在分析系统中实现了广播消息机制,以确保尽可能多地触发恶意软件APK的行为。在实验中,49个恶意软件家族中有29个监控BOOT_COMPLETED事件,21个家族监听_SMS_RECEIVED事件。还观察到大多数恶意软件应用注册了多个事件。通过这种方式,我们在实验中将服务组件的激活率从0.009提高到了0.74。

3.2 敏感和权限相关API的过滤

从第一阶段获得的执行轨迹包含应用程序执行过程中调用的所有API。由于并非所有API都与可疑或恶意活动相关,因此我们重点关注需要用户权限才能调用的API以及与敏感操作相关的API。

需要权限的API 。由于谷歌未提供所有API权限要求的官方规范文档,为了找出需要权限的API,我们编写了一个程序,于2016年4月爬取Android开发者网站[14],共发现4382个类、35033个API和135项权限。其中265个API需要权限,仅有36个在网站上公开,其余通常被称为未公开API。在PScout[4]中,作者开发了一种工具,从四个版本的Android操作系统源代码(2.2至4.0)中提取权限规范,并整理出权限-API映射列表。从中我们重点关注了包含40项不同权限的2456个API。

敏感API 。除了需要权限的API外,我们还识别出530个无需权限但常被恶意软件调用的API[10, 15]。它们被分为九个使用类别,如表1所示。这些API共计2986个,在本研究中作为敏感及与权限相关的API集合,用于过滤第一阶段执行轨迹中无关的API。生成的轨迹称为执行配置文件。

示意图0

表1. 敏感API集合

类别(API数量) 无需权限的API
文件管理(440) java/io/File、DataOutputStream、DataInputStream等
Java反射(3) java/lang/Class.getName,forName,getMethod
执行命令(2) java/lang/Runtime.exec, getRuntime
加密/解密(3) javax/crypto/Cipher.getInstance, doFinal
代码加载(3) dalvik/system/DexClassLoader.loadClass, PathClassLoader。
字符串操作(4) *java/lang/StringBuffer.append, subString, java/lang/StringBuilder.append, subString
数据库查询(65) android/content/CursorWrapper(40),android/content/ContentProvider(24)
常用网络库 & 网络相关的API(4) org/apache/http/impl/client/AbstractHttpClient.execute,org/apache/http/client/utils/URLEncodedUtils.encode
共享偏好文件(6) android/content/ContextWrapper.getSharedPreference
## 3.3 恶意软件家族全局执行序列对齐与分割及阶段图生成
在获得一个恶意软件家族各变种的执行配置文件后,我们希望找到该家族的公共且具有特征性的模体(执行片段)。考虑一个恶意软件家族 FM,其变种为 {v1,v2,…, vN},对应的执行配置文件为 {P1, P2,… PN}。我们设计并开发了一种称为API_GSA的全局API调用序列比对算法。在该算法中,我们首先随机选择一个执行配置文件作为基线,记为 P(B)。然后对每个执行配置文件与该基线进行成对全局序列比对。该算法旨在对每个执行配置文件中的每一条API调用进行对齐,以寻找最佳匹配,从而优化两个配置文件之间的相似性。我们还开发了一种分段算法,用于将对齐的API调用序列矩阵划分为多个阶段,并生成家族执行阶段图。通过该图,我们现在可以全面了解各个变种在每个阶段的行为。最重要的是,可以从图中轻松识别出所有变种都具有相同模体的公共阶段,即执行相同的调用序列。通过连接所有公共阶段的模体,我们便可得到该家族的公共执行序列。

4 评估

我们的自动化安卓恶意软件应用分析与家族行为分析系统基于QEMU和KVM构建。物理机器配置为英特尔i7‐3770S 3.1 GHz四核CPU,8 GB内存,运行Ubuntu 14.04操作系统。我们采用Drebin项目中的一个包含十个家族共2568个恶意软件样本的数据集[16]。然而,在实验中,并非所有样本都可运行。

特征安全API序列分析

首先,我们证明所选的敏感且与权限相关的API集合足以揭示恶意软件家族的主要特征活动。由于篇幅限制,我们以恶意软件家族ADRD为例进行说明。ADRD是一个木马家族,其主要特征行为之一是窃取设备信息并定期将数据发送出去。在Drebin数据集中,有25个标记为ADRD家族的可运行变种样本。这些样本共创建了64个进程(每个样本可能除主进程外还生成零到三个子进程)以及94个线程。我们应用UPGMA这一凝聚层次聚类方法对它们的操作进行粗略分类,然后运行所提出的全局执行序列对齐与分割算法,对每个簇进行深入的特征行为分析。图2展示了其中一个簇生成的执行阶段图。在表2中,我们列出了ADRD家族的技术描述与其家族行为分析中识别出的主要特征API调用之间的映射关系。诸如获取IMSI和IMEI等主要特征出现在大多数变种中。一个有趣的发现是通过使用“设置应用程序的激活日期和时间”以及“oldtime”和更新_flag.xml并配置警报来定期激活后台组件。

示意图1

表2. ADRD家族主要特征行为摘要

特征活动 代码序列
加密与认证 java/lang/Class.forName( “com.adroid.org.conscrypt.KeyManagerFactryImpl”, true, ,) java/lang/Class.forName( “com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std”, true, ,) java/lang/Class.forName( “com.android.org.conscrypt.TrustManagerFactoryImpl”, true, ,) java/lang/Class.forName( “com.android.org.conscrypt.TrustedCertificateKeyStoreSpi”, true, ,) java/lang/Class.forName( “com.android.org.bouncycastle.jce.provider.PKIXCertPathValidto‐Spi”, true, ,)
发送HTTP请求 ava/net/URI.parseURI( ““,)
java/net/URL.openConnection()
java/net/URI.解析URI( “http://sd.3g.qq.com/g/softdown/util/apkskin.jsp”, false,)
org/apache/http/impl/client/AbstractHttpClient.execute( , ,)
org/apache/http/impl/client/AbstractHttpClient.execute( , ,)
获取IMSI、IMEI android/content/ContextWrapper.获取系统服务 ( “电话”,)
android/telephony/TelephonyManager.getDeviceId()
android/telephony/TelephonyManager.getSubscriberId()
检查互联网连接 android/content/ContextWrapper.获取系统服务( “connectivity”,)
android/net/ConnectivityManager.getActiveNetworkInfo()
激活日期和时间 android/content/ContextWrapper.getSharedPreferences ( “update_flag”, 0,)
激活日期和时间 android/app/SharedPreferencesImpl.getLong ( “oldtime”, 0,)
java/util/Date.getTime();
android/app/SharedPreferencesImpl.edit()
配置警报以定期激活后台组件 android/content/ContextWrapper.getSystemService(
“alarm”,)
android/content/Intent.setAction( “com.lz.myservicestart”,)
android/app/PendingIntent.getBroadcast( , 0, , 0,)
android/content/Intent.writeToParcel ( , 0,)
android/app/AlarmManager.set()

5 结论与未来工作

恶意软件变种的激增使得为每个个体及时创建签名的方法变得低效且成本高昂。这促使我们提出了不再与变种“共舞”的理念。不同于以往的动态恶意软件分析工作和工具,本文专注于从恶意软件变种的过滤后执行轨迹中,自动生成Android恶意软件家族共有的主要特征性与安全相关的API调用序列。我们修改了ADB的源代码,以实现记录API调用的参数和返回值,并支持基于UID的分析模式,从而捕获从主进程中派生出的所有进程和线程,全面理解目标恶意软件应用的行为,并为每个线程生成执行轨迹。我们还提出了全局执行序列对齐与分割算法,用于生成恶意软件家族的执行阶段图,该图简明直观地展示了恶意软件家族生命周期中各个阶段的共同操作和不同操作。该家族执行阶段图以及模体也为安全分析师提供了关于恶意软件家族设计与实现方式的语义丰富的理解。我们的系统及生成的恶意软件家族特征API调用序列,未来可用作签名,实现高效且有效的恶意软件检测。

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值拟手段深入研究光子晶波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心块,能够有效分析光在90度弯曲波导中的传输效率、式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真型展开研究,基于Simulink平台构建了完整的电机控制系统仿真型,涵盖电机本、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Subversion,即 SVN,是一种在软件开发行业中普遍应用的版本管理工具。它支持团队成员之间的协作,用于管理和监控项目文件的历史版本,并保证多人同时编辑时的数据一致性。本指南将深入讲解 SVN 的核心概念、主要目录的权限设置、用户身份验证方式以及基础操作步骤,是初学者入门的理想学习资料。 一、SVN概述 SVN的中心是版本库,它负责存储所有文件和目录,并构建成文件树的结构。版本库能够允许多个客户端进行连接,执行数据的读取或写入。用户可以通过写操作将自己的修改同步至版本库,而其他用户则可以通过读操作来查看这些变更。这种集中式的版本管理机制使团队协作更加高效和有序。 二、SVN的访问权限配置 在 SVN 系统中,不同的用户或用户团队会被分配不同的访问权限。以质量管理部门的 SVN 实例为例: - 主管朱猛、张凯峰、吕鑫、张颂、马凌具备读写权限。 - 员工陈玲及其他成员仅拥有读权限。 - 项毓毅享有读写权限,主管团队则只有读权限。 - 张凯峰同样拥有读写权限,而其他同事仅能进行读取操作。 三、登录凭证 用户在访问 SVN 时,需要使用基于姓名拼音的用户名和符合特定规则的密码。例如,用户张三的登录名设定为"zhangs",密码为"zhangs#123",这样的设置旨在简化记忆和管理工作。 四、基础操作指南 1. 安装 SVN 客户端:本教程推荐采用 TortoiseSVN 进行安装,可以从指定的 FTP 地址获取安装包。 2. 读取操作: - 项毓毅和管理团队可以直接检出到"质量管理部"目录。 - 其他员工需要分别检出到"部门财富库"和"产品线管理"子目录,因为他们无法访问"部...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值