当前位置:首页 期刊杂志

安卓恶意代码及软件检测方法研究

时间:2024-05-04

王晨光 宋继红

摘要:Android系统作为现阶段社会广泛使用的移动端操作系统,虽然给社会带来了很多便利,但是随着Android系统上恶意软件的滋生和传播,也给用户造成了巨大的安全威胁。文章从安卓的安全机制进行分析,针对各种可能对Android操作系统造成安全威胁的漏洞进行提炼和分析,通过静态分析的方式对反编译后的smali文件中的信息进行提炼和总结,根据组件、权限、url和所对应的敏感api进行语义分析,总结App可能对用户产生的安全威胁。

关键词:静态分析;恶意软件检测;敏感API;Smali;Soot

中图分类号:TP393        文献标识码:A

文章编号:1009-3044(2022)06-0031-03

开放科学(资源服务)标识码(OSID):

Android是由Google公司与开放手机联盟开发的一款基于Linux内核的操作系统,已经过多年,至今Android应用市场已形成较大的规模,例如官方的Google应用市场,第三方安卓应用市场应用宝等,虽然大量的移动应用的出现给人们的生活带来了很多便利,但与此同时,由于其系统的开源性也导致很多恶意应用乘虚而入,破坏Android系统的安全性,根据360烽火实验室2019年报告[1]指出,中国平均每天都会拦截手机的恶意程序攻击259.2万次,其中在移动金融行业,移动流量产业和移动社交领域都出现了对于经济效益的攻击。根据奇安信 2020年报告[2]指出,现在黑色产业链仍然活跃并相比2019年的攻击方式,又多了很多新型攻击手段,对于用户隐私和财产安全威胁严重,其中山寨网贷、刷量广告、棋牌私彩等黑色产业链最为突出,对于用户的隐私信息和经济利益会造成巨大的威胁,所以对于Android的安全性治理应该随着现代的发展进行进一步的更新以及深入。

1 Android安全机制

Android系统在Linux原有的安全机制的基础上结合移动端特性,设计了进程沙箱隔离机制、应用程序签名机制和权限机制等安全机制,保证应用程序的安全性[3]。

1.1 进程沙箱隔离机制

Android应用程序移植Linux操作系统的多用户隔离机制,让应用程序在安装时被赋予独特的用户标识(UID),并永久保持;应用程序及其运行的Dalvik虚拟机运行于独立的Linux进程空间,与UID不同的应用程序完全隔离。虽然是隔离的,但在用户要共享资源时,同时提供共享资源的方式,保证资源的共享顺利完成。这种安全机制,在发现恶意软件的时候,可以将恶意软件隔离在一个单独的空间,保证其他应用程序的安全。

1.2 应用程序签名机制

Android应用程序的签名对每一个应用程序都必不可少。为了标志代码作者和监测应用程序的改变,开发者需要拥有私有密钥,从而可以在应用程序之间安全地共享资源。不同的应用程序通过相同的签名可以相互授权访问API[4]。

1.3 权限机制

Android权限机制是指在应用程序成功运行时所需要的权限,在Android 6.0之后,具体权限在AndroidManifest.xml文件中<uses-permisson>标签中通过android:protectionLevel属性进行设置分为4类,Normal类:低风险权限,任何应用都可以申请,在安装应用时系统默认授权;Dangerous类:高风险权限,在安装时需要用户确认才可以使用;Signature类:仅当申请该权限的应用程序与声明该权限的程序使用相同的签名时,才能赋予该权限;SignatureOrSystem类:仅当申请该权限的应用程序位于相同的Android系统镜像中,或申请该权限的应用程序与声明该权限的程序使用相同的签名时,才赋予该权限。

2 Android漏洞分析

2.1 恶意软件

Android的恶意软件是各种各样的,并且有很多种分类的方法。其中按照传统进行分析,卿思汉[5]等人表示可以分为木马类、病毒类、后门类、僵尸类、间谍软件类、恐吓软件类、勒索软件类、广告软件类和跟踪软件类等。另一种是按照恶意软件特征进行分类,Zhou[6]等人认为可以分为恶意软件安装、恶意软件运行、恶意负载、权限使用等。在其中360官方2020年报告[7]显示指出,其中恶意软件行为主要为恶意扣费、资源消耗、流氓行为,所以直接可以看出,恶意软件的目的直接和经济联系到一起,为谋取利益而进行恶意行为。

2.2 Android敏感权限

Android 6.0 版本以后,Android官方加强了对权限的管理,其中Android的敏感权限都放在了Dangerous权限类中,在Dangerous权限的类中分为9个大类包含24个敏感权限,在Androidapp运行的时候对于安全级别为dangerous的服务进行授权时,需要用户的授权同意,才可以获得授权,其中还有与危险权限不同的特殊权限,SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 特别敏感对系统进行操作,因此大多数应用不应该使用这两个权限,如果某应用需要其中一种权限,必须在清单中声明该权限,并且发送请求用户授权的 intent。這样可以通过用户的操作,提高Android系统安全性。

2.3 第三方SDK漏洞

SDK全称:Software Development Kit,通常是指专业公司提供的第三方服务,以jar包/so库的形式集成到应用中,封装了很多功能。对于开发者而言属于黑盒,无法知晓其中是否安全。所以由于这个原因,很多第三方公司对此进行利用,导致很多漏洞的出现,包括绕过沙盒限制、访问应用私有组件、推送恶意消息、诱导访问钓鱼网站、访问用户隐私数据等。

3 Android漏洞分析方法

3.1 恶意数据集收集

Android的恶意软件检测离不开数据集的支持,但是由于Android应用更新较快,所以数据集的收集也成为当前一个非常困难的事情,当前最常用的有两类,一类是恶意样本的共享网站,例如VirusShare[8]等;另一类是具有家族信息的数据集,例如Drebin[9]数据集、开源DroidBench[10]数据集等。

3.2 Androidapp介绍

Androidapp是一个被打包的Apk文件,而Apk文件同时也是一个压缩文件,通过解压可以看到每一个Apk文件的基本组成结构,如表1所示。

其中最为重要也是需要进行重点分析的是AndroidManifest.xml文件和classes.dex文件,AndroidManifest.xml文件中主要存储Android四大组件,其中Activity是用户操作的可视化页面,它为用户提供了一个完成操作指令的窗口。Service是用作后台处理耗时的逻辑,Content Provider一个应用程序指定数据集提供给其他程序,实现数据共享。 BroadcastReceiver运用在应用程序之间的传输信息的机制,对发送出来的广播进行过滤并响应。Androidapp的四大组件之间通过一个运行绑定机制——Intent机制将四大组件联系起来,进行通信以及程序之间的交互。

3.3 Androidapp逆向工程

1) Apk反编译

通过Apktool工具反编译Apk得到以下文件结构,如表2所示。

其中最关键的是通过Smali文件夹中的以.smali文件结尾的文件获取信息。在smali文件中,可以通过指定的读取smali文件的方法提取文件的信息。

2) smali文件

Smali是用于Dalvik(Android虚拟机)的反汇编程序实现,一个smali文件相对应一个java的.class文件,如果java有内部类的格式,则写为ClassName$InnerClassA表示,所以smali文件个数要比对应的class的文件个数数量多。

(1) 在smali文件中存放了很多和java文件所对应的指令代码,在smali文件中的指令都是以“.”开始,对应java文件的常用指令如表3所示。

(2) smali文件中的也有属于自己的数据类型,它的类型是和java文件中的数据类型一一对应的,例如smali文件中的“I”表示java文件中的int,具体常用的类型如表4所示。

通过对于smali文件的解析可以得到每个class的详细信息,如下部分smali文件代码所示:

.class public Lmiui/app/ActivityOptionsHelper;//指定包名和类名

.super Ljava/lang/Object;//父类名

.source "SourceFile"// 源文件名称

.method private constructor <init>()V// 函数的名称

.locals 0// 寄存器个数

.line 1// 行数

invoke-direct {p0}, Ljava/lang/Object;→<init>()V// 方法调用一个参数

return-void// 返回值

.end method// 结束任务

在上述代码中可以通过前三行代码判断这个文件的类关系,“.method”为函数的开始,随后可知函数的名称,在函数中“invoke”的字符,后面也会有调用函数的名称,可以得到调用函数的关系,在搜索到“.end method”中,代表此函数的结束,通过遍历文件的这个方法可以提取所有Apk信息中所调用的api,经过以上步骤可以通过这种方式获取所有静态特征。

在得到想要的信息后,可以和Virustutal[11]提供的官方分析工具给出分析信息并比较,查看是否存在问题,从而增加得到数据的准确性。

3.4 Android静态分析

静态分析法通过对恶意软件本身二进制文件、可执行文件或者通过反编译文件提取到的应用程序组件、权限、API等静态特征进行分析[12],对比恶意软件与正常软件的静态特征的异同来发现恶意软件。静态检测的优点是检测速度快、可以上传Apk到服务端进行检测,缺点是无法有效识別利用Android系统漏洞和静态检测对抗技术的恶意应用识别[3]。

1) Soot框架

Soot[13]是Mc Gill大学的Sable研究小组所研发的一种Java优化框架,现在被世界各地的研究人员用来对Java工程和Android应用进行分析。其中最关键的是其中定义的五种数据结构,分别是Scene、SootClass、SootMethod、SootField、Body。这些数据结构使用面向对象技术来实现,所以可以被轻易使用。通过Soot对于Apk的静态分析可以得到Apk的详细信息例如权限,Android四大组件信息以及Intent的调用信息。

通过Soot框架进行的某app调用权限以及组件部分信息的情况图,可以通得出结果,如图1所示。

在将权限收集完成后,与官方所给出的风险提示相比较,得出所含有的风险类型以及风险详细描述,如发现第三方所需要的权限与数据库内容不相符,则加入数据库中并产生提示,在后续的维护中,进行第三方权限的补充收集工作。在通过代码获取四大组件的部分信息如图2所示。

通过简单的逻辑代码可以提取在权限文件中所属的四大组件使用Intent-filter便签的信息,例如<action name="miui.intent.calculator.FLOAT_WINDOW_SERVICE">,属于service组件中使用intent-filter进行标注的组件,其他三大组件和此方法的提取方式一致,通过算法实现对intent-filter中action和category信息进行提取。

通过对Android中四大组件信息的收集,可以分析出 exported 属性是否为私有或者公有,通过判断是否存在intent filter 和 android:exported的设置,对于结果进行收集,通过权限的设置和上述属性的配置,判断在四大组件中是否存在组件暴露的风险特征,如果出现了风险,则进行组件判断,判断是由哪个组件的产生的风险,跟踪组件信息,從而定位准确位置。

2) 语义分析

通过在各大应用市场的Apk收集和上文所提到的恶意软件数据集的提取,将其中的权限作为语义分析的特征之一,其中提取第三方权限和官方权限信息1800余条并分类。再通过Psout所提供的数据集,将其中敏感的权限取出保存至txt文件中。依据所提取到的权限与已提取到的数据进行数据匹配得到敏感Api,作为语义分析的第二特征。将所有提取到的特征利用集合进行存储,再将所得到结果的集合组合,生成最终的数据集文件,利用weka进行所得到特征的数据集分析,通过决策树,贝叶斯分类器算法进行训练,根据训练所得的比率,设定阈值从而预测App是否属于恶意软件。

4 结论

通过对于Androidapp的逆向工程以及反编译知识,了解到在Androidapp背后所产生的种种安全。在对于权限分析和第三方SDK的分析中,可能会因为版本的变换以及权限对应Api的改变导致分析的不正确产生偏差,所以在后续的研究中要加强对于出现问题的解决能力。随着5G时代的到来,安全的信息化建设更是重中之重,在对于移动端的安全保证方面,还需要更加努力地继续深入研究。

参考文献:

[1] 2019年Android恶意软件专题报告 - 360 核心安全技术博客[EB/OL]. [2021/12/1]. https://blogs.360.cn/post/review_android_malware_of_2019.html.

[2] 2020Android平台安全乱象:超230万恶意程序被截获[EB/OL].[2021/12/1].https://baijiahao.baidu.com/s?id=169519861 2017629671.

[3] 王思远,张仰森,曾健荣,等.Android恶意软件检测方法综述[J].计算机应用与软件,2021,38(9):1-9.

[4] 张琳.Android安全技术分析[J].电子技术与软件工程,2016(18):211.

[5] 卿斯汉.Android安全研究进展[J].软件学报,2016,27(1):45-71.

[6] Zhou Y J,Jiang X X.Dissectingandroid malware:characterization and evolution[J].2012 IEEE Symposium on Security andPrivacy,2012:95-109.

[7] 你的Android手机安全吗?这份报告惊呆你!-安全资讯-360官网[EB/OL]. [2021/12/1]. https://www.360.cn/n/11558.html.

[8] VirusShare.com. https://virusshare.com/.

[9] The Drebin Dataset. https://www.sec.tu-bs.de/~danarp/drebin/.

[10] DroidBench. https://github.com/secure-software-engineering/DroidBench/.

[11] VirusTotal. https://www.virustotal.com/gui/.

[12] 蒋煦,张长胜,戴大蒙,等.Android平台恶意应用程序静态检测方法[J].计算机系统应用,2016,25(4):1-7.

[13] Soot - A Java optimization framework. https://github.com/soot-oss/soot.

【通联编辑:代影】

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!