首页> 中国专利> 一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法

一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法

摘要

本发明涉一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法,属于信息安全技术领域,步骤为:反编译Android APK,生成APK的函数调用关系图;根据节点中的代码对节点进行分类、添加标签值;拆分多属性节点;在图中添加隐式调用边;删除无害节点,得到裁剪后的函数调用图;对经过裁剪后的函数调用图进行可视化设置;利用可视化软件与函数调用图帮助安全人员分析程序。本发明在可视化界面中帮助安全人员快速识别已知的、未知的恶意代码,精准发现代码中包含的恶意行为。

著录项

  • 公开/公告号CN106897620A

    专利类型发明专利

  • 公开/公告日2017-06-27

    原文格式PDF

  • 申请/专利权人 中国科学院信息工程研究所;

    申请/专利号CN201710075113.1

  • 发明设计人 张妍;彭贵;王雅哲;

    申请日2017-02-13

  • 分类号G06F21/56(20130101);

  • 代理机构11251 北京科迪生专利代理有限责任公司;

  • 代理人杨学明;顾炜

  • 地址 100093 北京市海淀区闵庄路甲89号

  • 入库时间 2023-06-19 02:40:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-15

    授权

    授权

  • 2017-07-21

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20170213

    实质审查的生效

  • 2017-06-27

    公开

    公开

说明书

技术领域

本发明涉及一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法,属于信息安全技术领域。

背景技术

根据德国网络安全公司G DATA最新公布的一份调查报告显示,2015年Android恶意软件样本数量达到了2333777个。形象点来描述就是差不多每隔11秒就会出现一个新的Android恶意样本。Android恶意软件增长速度极快,该数值同比2014年增长了50%。而在2015年第四季度,新出现的Android恶意软件数量达到了758133个,同比2014年第四季度增长了32%。目前Android系统与我们的工作生活息息相关,如何快速识别新型的Android恶意软件对于信息安全人员是一个严峻的挑战。

近年来,研究人员已经采用了多种自动化Android恶意软件分析技术来帮助识别恶意软件。虽然在Android恶意软件分析领域已经有了不少有效的方法,但是在恶意软件可视化方面仍有很多需要研究的地方。

现有的恶意软件分析方法可以大致分为静态分析、动态分析和机器学习。但是这些方法和流行的反病毒引擎都存在不小的漏报率和误报率,人工分析的准确率依然优于机器分析。

对于已有的、新出现的恶意软件,安全分析人员和研究人员都会想深入了解它们包含的具体的恶意行为以帮助日后的研究工作,可是这些信息很难从网络上获取。

现有的Androguard技术可以在java代码层生成Android软件的基本的调用图和控制流图。但是它的调用图规模庞大且调用链通常是不完整的,也不能给出不同的类之间调用的相关性。

发明内容

针对现有技术的缺陷,本发明的目的是实现一种先自动化分析Android软件再将其可视化的辅助人工恶意软件分析的方法。本方法在极大程度的缩小函数调用关系图的规模的同时保存恶意软件中包含的核心恶意行为,另外还可以完整的显示恶意行为触发过程的调用链。本方法还可以帮助人工分析提高恶意软件分析的效率及准确率。

为了实现上述目的,本发明采用了如下技术方案:一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法,包括如下步骤。

一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法,其特征在于包括如下步骤。

(1)生成函数调用关系图:反编译Android APK,用节点表示基本代码块,节点间的有向调用边表示控制流路径,生成APK的函数调用关系图,即Call Graph(CG);对函数调用关系图中的节点,根据节点中的类名、方法名、代码以及分类规则为节点分类并添加标签值,得到一张新图称之为添加标签值的函数调用关系图。该图中节点共有9种分类,第1类为普通,第2类为活动Activity,第3类为服务Service,第4类为广播接收器BroadcastReceiver,第5类为用户行为user-behavior,第6类为事件event,第7类为额外的被调用者callee-extra,第8类为调用者caller,第9类为危险接口riskyapi,其中第2、3、4、7类统称为被调用者callee;每个节点可能属于其中一种或者多种分类,只属于2至9类中一类的节点为单属性节点,属于2至9类中两种及以上分类的节点为多属性节点;

(2)拆分多属性节点:将步骤(1)所得的添加标签值的函数调用关系图中多属性节点拆分为多个节点,使得每个节点只包含原多属性节点的一个标签值;将所有多属性节点拆分后,得到一张新图称之为经过拆分的函数调用关系图;

(3)添加隐式调用边:在步骤(2)所得的经过拆分的函数调用关系图中,为存在隐式调用关系的节点之间添加调用边;得到一张新图称之为添加隐式调用边的函数调用关系图;这种根据隐式调用关系添加的调用边称之为隐式调用边;

(4)裁剪:对步骤(3)所得的添加隐式调用边的函数调用关系图进行裁剪,删除不直接或者间接调用riskyapi类节点的非riskyapi类节点,得到一张新图称之为经过裁剪的函数调用关系图;

(5)添加颜色和尺寸:为步骤(4)所得的经过裁剪的函数调用关系图中的节点根据节点类型设置尺寸和颜色,得到经过裁剪及自定义设置的函数调用关系图,即PMCG;

(6)采用现有或自开发的可视化界面,利用可视化软件打开PMCG中的文件,可视化展示PMCG,协助用户分析判断是否存在恶意行为。

所述步骤(1)中,根据节点中的类名、方法名、代码以及分类规则为节点分类并添加标签值,具体如下:

J.第1类为普通节点,分类规则为:2至9类以外的节点,没有标签值;

K.第2类为活动Activity节点,分类规则为:节点中代码的类继承于Activity,方法名为OnCreate,标签值为:Activity;

L.第3类为服务Service节点,分类规则为:节点中代码的类继承于Service,方法名为OnCreate,标签值为:Service;

M.第4类为广播接收器Broadcast Receiver节点,分类规则为:节点中代码的类继承于BroadcastReceiver,方法名为OnReceive,标签值为:Broadcast Receiver&这个广播接收器监听的广播;

N.第5类为用户行为user-behavior节点,分类规则为:节点中代码属于用户触发的事件,标签值为:该节点的方法名;

O.第6类为事件event节点,分类规则为:节点中代码属于用户触发事件以外的事件,标签值为:该节点的方法名;

P.第7类为额外的被调用者callee-extra节点,分类规则为:节点中代码的方法名属于用户自定义的(caller,callee)对列表中callee类中的方法名,标签值为:该节点的方法名;

Q.第8类为调用者caller节点,分类规则为:包含调用callee类节点函数的节点,调用callee类节点的函数集合可以根据Android操作系统变化以及用户自定义(caller,callee)对列表进行调整,标签值为:调用callee类节点所用到的函数名;

R.第9类为危险接口riskyapi节点,分类规则为:节点中代码使用了用户自定义的敏感应用程序编程接口API列表中的API,敏感API列表用户可以根据自身需要进行定义,标签值为:代码中的敏感API。

所述步骤(2)中,多属性节点拆分为多个节点的方法为:

对每个多属性节点执行以下步骤:

E.设多属性节点属于n个类;

F.生成n-1个新节点,为新节点设置编号;

G.n-1个新节点与原多属性节点每个节点不重复的保存原多属性节点的一个分类及该分类对应的标签值;

H.添加原多属性节点到这n-1个新节点的双向边。

所述步骤(3)中,为存在隐式调用关系的节点之间添加调用边的方法为:

I.对于每一个代码中包含启动活动Activity的函数的节点,它属于caller,查找到它启动的Activity节点。被启动的Activity节点为该caller节点对应的callee节点,为该caller节点与其对应的callee节点之间添加一条调用边;

J.对于每一个代码中包含启动服务Service的函数的节点,它属于caller,查找到它启动的Service节点。被启动的Service节点为该caller节点对应的callee节点,为该caller节点与其对应的callee节点之间添加一条调用边;

K.对于每一个代码中包含注册Broadcast Receiver的函数的节点,它属于caller,查找到它注册的Broadcast Receiver,被注册的Broadcast Receiver节点为该caller节点对应的callee节点,为该caller节点与其对应的callee节点之间添加一条调用边;

L.对于每一个代码中包含发送广播函数的节点,它属于caller,查找到接收该caller节点发送的广播的Broadcast Receiver节点。接收该caller节点发送的广播的Broadcast Receiver节点为该caller节点对应的callee节点,为该caller节点与其对应的callee节点之间添加一条调用边;

M.对于每一个callee-extra类节点,它属于callee,找到它的方法名,节点中代码的方法名是这个方法名对应的caller的节点是这个callee节点对应的caller节点,为该caller节点与其对应的callee节点之间添加一条调用边。

N.为在同一个Android组件的生命周期内,状态转换的节点对之间添加一条调用边。

O.为触发user-behavior和event的节点与被其触发的节点之间添加一条调用边。

P.为发送消息到消息队列和从消息队列中接收消息的节点对之间添加一条调用边。

所述步骤(4)中,裁剪,删除不直接或者间接调用riskyapi类节点的非riskyapi类节点的方法为:

F.定义所得的新图中所有节点的集合为N,有向调用边的集合为E,在集合N上定义一个用来判断是否存在从一个节点到另一个节点有向路径的函数Dpath,对于N中任意两个节点n1,n2

如果Dpath(n1,n2)=1,则说明存在从n1到n2有向路径,反之不存在;

G.定义所有要被删除的节点集合TN={ni|ni∈N且对于任意一个riskyapi类节点c,Dpath(ni,c)=0};

H.定义所有要被删除的有向调用边集合TE={ej|ej∈E且ej的源节点或者目标节点属于集合TN};

I.将所得的添加隐式调用边的函数调用关系图中属于集合TN的节点删除;

J.将所得的添加隐式调用边的函数调用关系图中属于集合TE的边删除。

所述步骤(5)中,根据节点类型设置尺寸和颜色的方法为:

D.为类型1至9分别定义对应的尺寸;

E.为类型1至9分别定义对应的颜色;

F.根据节点的类型,找到该属性值对应的尺寸和颜色,为该节点设置尺寸和颜色。

所述步骤(6)中,利用可视化软件打开PMCG文件,可视化展示PMCG图,协助用户分析判断是否存在恶意行为的方法如下:

C.调用可视化软件如Gephi打开PIMCG的文件;

D.用户根据PIMCG图中节点函数代码、节点之间的调用关系以及riskyapi类节点包含的敏感API信息,判断程序中是否存在隐私窃取、远程控制、恶意传播、资费消耗、系统破坏、诱骗欺诈、恶意扣费以及流氓行为这些恶意行为。

本发明与现有技术相比的优点在于:

(1)本发明通过裁剪无害节点可以极大的缩小函数调用关系图的规模,平均可以缩小至原先的三十分之一。

(2)本发明虽然对函数调用关系图进行了裁剪但是依然保存了APK中核心的恶意行为。

(3)本发明通过为(caller,callee)对之间添加有向调用边,可以完整的显示大部分恶意行为及其触发过程。

(4)本发明将函数调用关系图可视化展现辅助人工分析,使得软件分析过程更加简便,分析效率及准确率得到提高。

附图说明

图1为本发明的方法实现流程图;

图2为本发明的可视化操作界面;

图3为实施例1的PMCG图。

具体实施方式

下面选取文件hash值为4E850BF087512F14A7AEA84909982569的一款APK软件作为实例结合附图对本发明作进一步描述:

如图1所示,本发明具体实现步骤为:

第一步,反编译APK,生成APK的函数调用关系图CG。每个节点所包含的信息结构如下:

(1)该节点的编号;

(2)该节点的类名;

(3)该节点的方法名;

(4)该节点的代码段。

每条有向调用边包含的信息结构如下:

(1)该边的编号;

(2)该边的源节点;

(3)该边的目标节点。

第二步,为函数调用关系图中的节点添加分类属性,添加分类属性可以便于分析人员按类型查看节点。添加了分类属性后节点信息结构如下:

(1)该节点的编号;

(2)该节点的类名;

(3)该节点的方法名;

(4)该节点的代码段;

(5)该节点的分类以及标签值列表;

第三步,将第二步所得的添加标签值的函数调用关系图图中多属性节点拆分为多个节点,拆分多属性节点可以将单个节点包含的多种信息分散到多个节点,便于分析人员查看,拆分多属性节点后节点信息结构如下:

(1)该节点的编号;

(2)该节点的类名;

(3)该节点的方法名;

(4)该节点的代码段;

(5)该节点的分类;

(6)该节点的标签值。

第四步,为第三步所得的经过拆分的函数调用关系图添加隐式调用边,添加隐式调用边可以将原本分散的节点根据Android内部调用机制联系起来,使得调用链更加完整。这个经过拆分的函数调用关系图中(3,4)、(2,4)、(6,7)、(15,16)满足设定的(caller,callee)对。比如3号节点调用了startService()函数,它启动的Service的类名为Sgter,4号节点的类名为Sgter,方法名为onCreate(),4号节点是3号节点启动的Service,满足设定的(caller,callee)对匹配规则。为每一个(caller,callee)对添加由调用者指向被调用者的有向调用边。

第五步,对添加隐式调用边的函数调用关系图进行裁剪,裁剪过程在保存APK恶意行为的基础上大幅度的缩小节点规模,删除冗余信息,使得调用关系图更加便于分析。裁剪前的节点数为:810,裁剪后节点数为:20,节点数目缩小到了原始的大概四十分之一;裁剪前的边数为:1522,裁剪后边数为:23,边数缩小到了原始的大概六十六分之一。

第六步,为经过裁剪的函数调用关系图中的节点设置尺寸和颜色,设置尺寸和颜色后节点信息结构如下:

(1)该节点的编号;

(2)该节点的类名;

(3)该节点的方法名;

(4)该节点的代码段;

(5)该节点的分类;

(6)该节点的分类标签值。

(7)该节点的尺寸;

(8)该节点的颜色。

第七步,在可视化操作界面(如图2所示)中调用可视化软件打开PMCG文件,得到该APK的PMCG图(如图3所示)。图2的左上部分显示的是APK的PMCG图(本例详图见图3),右上部分显示的是APK的基本信息,最下面显示的每个节点的信息。图3是本例的PMCG图,图中的圆圈表示节点,图中的单向箭头表示调用关系,多属性节点与其拆分得到的节点之间是双向边,圆圈下边的字符串是该节点的编号以及标签值。接下来协助用户根据PMCG图中节点的分类、分类依据值以及调用关系分析该APK是否包含恶意行为。

提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号