CN105335655A - 一种基于敏感行为识别的安卓应用安全性分析方法 - Google Patents
一种基于敏感行为识别的安卓应用安全性分析方法 Download PDFInfo
- Publication number
- CN105335655A CN105335655A CN201510606818.2A CN201510606818A CN105335655A CN 105335655 A CN105335655 A CN 105335655A CN 201510606818 A CN201510606818 A CN 201510606818A CN 105335655 A CN105335655 A CN 105335655A
- Authority
- CN
- China
- Prior art keywords
- program
- android
- application
- sendata
- android application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 34
- 238000012549 training Methods 0.000 claims abstract description 19
- 238000012545 processing Methods 0.000 claims abstract description 3
- 230000006870 function Effects 0.000 claims description 62
- 238000000034 method Methods 0.000 claims description 26
- 230000008569 process Effects 0.000 claims description 17
- 238000009795 derivation Methods 0.000 claims description 16
- 238000012706 support-vector machine Methods 0.000 claims description 13
- 238000013459 approach Methods 0.000 claims description 10
- 230000003542 behavioural effect Effects 0.000 claims description 10
- 230000000694 effects Effects 0.000 claims description 10
- 230000007246 mechanism Effects 0.000 claims description 9
- 238000009434 installation Methods 0.000 claims description 6
- 238000004891 communication Methods 0.000 claims description 4
- 230000002093 peripheral effect Effects 0.000 claims description 4
- 238000013473 artificial intelligence Methods 0.000 claims description 2
- 230000002596 correlated effect Effects 0.000 claims 2
- 238000010276 construction Methods 0.000 claims 1
- 230000001276 controlling effect Effects 0.000 claims 1
- 230000000875 corresponding effect Effects 0.000 claims 1
- 230000006399 behavior Effects 0.000 abstract description 47
- 238000010801 machine learning Methods 0.000 abstract description 9
- 230000003068 static effect Effects 0.000 description 9
- 238000000605 extraction Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 241000894007 species Species 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 244000035744 Hura crepitans Species 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明提供了一种基于安卓应用源代码敏感行为识别的安卓应用安全性分析方法,包括下列步骤:1)源代码的获取与分析;2)敏感行为的获取;3)UI文本的提取;4)敏感行为数据的处理;5)特征值的选取;6)训练数据集的构成;7)安全性的分析。本发明将UI文本和敏感API之间的联系作为机器学习的特征,有效提高了检测安卓平台恶意应用的准确率。
Description
技术领域
本发明属于软件工程领域,采用基于安卓应用敏感行为识别的方法来分析安卓应用的安全性,从源代码出发,能够自动、高效、准确地识别安卓应用中的敏感行为。
背景技术
随着使用智能手机的人群日益增大,智能手机所受的安全威胁也越来越突出。其中,因为安卓平台的开放性以及安卓应用获取渠道更广泛等原因,安卓平台的智能手机所受的安全威胁尤为严重。因此,针对安卓平台的恶意应用检测工作一直是工业界和学术界关注的热点。
恶意应用可能会私自发送收费短信,或未经用户允许安装其它应用,或盗取用户账户信息等,造成用户的隐私泄露、经济损失等问题。已有的恶意应用检测方法主要分为静态分析、动态分析、机器学习三种。
静态分析是在不执行程序的情况下对程序行为进行分析。静态分析适用范围比较广、实现较简单,不受应用运行平台的影响,可以事先得出检测结果,但受制于应用中的动态加载等技术以及隐藏恶意代码的方式不断变化,静态分析存在很多误报或者漏报现象。
动态分析是一种用沙盒或虚拟机模拟程序运行,进而监控、拦截程序运行行为的分析方法。动态分析的优点是绕过了静态方法遇到的代码动态加载和加密等方面的问题,但同时有代码覆盖率低、漏报等缺点。
机器学习方法只抓住了程序代码片段中最直观的特征,未涉及代码背后所隐藏的信息。常用的支持向量机(SupportVectorMachine,简称SVM)方法是一种建立在统计学习理论和结构风险最小原理基础上的机器学习算法。
恶意应用的行为表现多种多样,也可通过多种方式危害用户,但本质上都可概括为违背用户意愿对私密数据进行操作的敏感行为。根据恶意应用的此种特征,融合程序分析和机器学习的方法应该能够更有效、快速地分析出安卓应用的安全性。本发明拟结合软件工程领域中的程序静态分析方法和机器学习领域中的支持向量机方法,通过程序分析得到代码中隐藏的信息,再进行数据挖掘,从而获得最能表征恶意应用的特征及其取值,最终得到安卓应用的安全性评估数据。
发明内容
本发明提供了一种基于安卓应用源代码敏感行为识别的安卓应用安全性分析方法,即:分析应用UI文本所提供的信息、其所触发的敏感行为以及应用的允许请求,将以上信息作为特征,结合支持向量机的方法,分析应用安全性,提升恶意应用检测的准确率。
本发明的技术方案为:事先将安卓应用反编译得到Java代码,根据其Java代码找出代码中的敏感行为,即UI组件会触发何种敏感API对哪些敏感信息进行操作,然后将是否包含某种敏感行为以及是否包含某种允许请求作为该决定安卓应用安全性的特征;分析已知安全性的安卓应用,得到其特征,使用支持向量机算法对数据集进行训练;根据训练结果,由未知安全性的安卓应用的特征值分析该安卓应用的安全性。为表述清楚,首先给出如下定义。
定义1:敏感数据是指能对用户隐私、财产甚至人身安全产生威胁的信息,如手机中的信息、通讯录、账户信息等;
定义2:敏感API是指安卓系统中会对用户敏感信息进行相关操作的API;本专利中主要关注的敏感API包括与信息发送、打电话、网络链接、应用安装、外设使用相关的API,例如SendTextMessage()、包含actionandroid.intent.action.CALL的startActicity()、URL.openConnection()等;
定义3:敏感行为是指用户与操作界面UI进行交互后触发了一些敏感API、对某些敏感数据进行相关操作的行为,表示为一个三元组(UIFun,SenAPI,SenData),其中UIFun表示与用户交互的UI组件(一般为按钮等),SenAPI表示与UI交互后所触发的敏感API,SenData表示敏感API所操作的敏感信息;
本发明技术方案具体包括下列步骤:
1)源代码的获取与分析
步骤1)-1:将安卓应用解压,得到dex文件、manifest文件和与布局相关的xml文件,使用dex2jar工具将dex文件反编译得到jar包,由jar包可获取应用的安卓代码,同时使用apktool工具反编译manifest.xml文件以及与布局相关的xml文件。
步骤1)-2:根据步骤1)-1所得代码,构建CFG控制流图以及函数调用关系图,以便后续的程序分析,具体内容由Datalog语言(Datalog是一种应用在人工智能及程序分析等领域、具有符号处理和逻辑推理能力的计算机程序设计语言)表示如下。
hasSenAPI(F,SenAPI,L):程序L行处存在函数F,F中调用了敏感API(SenAPI);
hasSenData(L,SenData):程序L行处对敏感数据SenData进行了操作;
directInvoke(F*,F′,L):在程序L行处函数F*直接调用了函数F′;
indirectInvoke(F*,F′):在事件驱动的环境下,函数F′是F*的最终目标;
isIntent(L1,X):程序L1行处定义的参数X的类型是Intent;
intentInitial(L2,X,Y):程序L2行处进行了参数X的初始化,且初始化的第一个真实参数为Y;
iccInvoke(F*,L,X):在程序L行处函数F*使用了Intent类型的参数X调用了其它函数;
inComponent(F′,Y):函数F′在组件Y内。
2)敏感行为的获取
根据1)中所得信息,通过以下Datalog语言表示的规则,可获取安卓应用的敏感行为(UIFun,SenAPI,SenData),其中UIFun代表与UI相关的函数。(符号:-表示由符号右边可推导得到符号左边。)
invoke(F*,F′,L):-directInvoke(F*,F′,L):由于F*在程序L行处直接调用了F′,可以推导出F*在程序L行处调用了F′;
invoke(F*,F′,L):-isIntent(L1,X)&intentInitial(L2,X,Y)&iccInvoke(F*,L,X)&inComponent(F′,Y):此条规则基于安卓应用中的Intent传递机制,F*在程序L行处使用了Intent类型的参数X来进行组件内的通讯,X的类型在程序L1行处定义为Intent,X在程序L2行进行初始化,初始化的第一个真实参数为Y,同时组件Y中包含函数F’,由此可推导出F*在程序L行处调用了程序F’;
invoke(F*,F′,L):-invoke(F*,F,L)&indirectInvoke(F,F′):由于F*在程序L行处调用了F且F不直接调用F′,可以推导出F*在程序L行处调用了F′;
invoke(F*,F,L):-invoke(F*,F,L)&invoke(F,F′,L′):由于F*在程序L行处调用了F且F在程序L′行调用了F′,可以推导出F*在程序L行处调用了F′;
以上四条规则为函数之间调用关系的分析。
hasSenAction(F*,SenAPI,SenData,L):-hasSenAPI(F*,SenAPI,L)&hasSenData(L,SenData):由于F*在程序L行处存在SenAPI以及在程序L行处存在SenData,可以推导出在程序L行处F*使用SenAPI对SenData进行了相关操作;
hasSenAction(F*,SenAPI,SenData,L):-hasSenAction(F′,SenAPI,SenData,L′)&invoke(F*,F′,L):由于在程序L′行处F′使用SenAPI对SenData进行了相关操作以及F*在程序L行处调用F′,可以推导出在程序L行处F*使用SenAPI对SenData进行了相关操作;
以上两条规则为函数是否会触发敏感行为的分析。
3)UI文本的提取
根据步骤1)中所得的Java代码和与布局相关的XML文件,可以得到UI组件上的文本信息、UIText,将步骤2)中所得的敏感行为(UIFun,SenAPI,SenData)中的UIFun替换为其组件上的文本UIText。如若其组件上没有文本,则记为“NULL”;如若UIFun本身为NULL,则不进行任何处理。
4)敏感行为数据的处理
由步骤3)中的操作,可以得到安卓应用中存在的敏感行为(UIText,SenAPI,SenData)。但由于原始数据所提供的信息过于琐碎,需要进行以下处理。
步骤4)-1:去除UITxet所包含的标点符号,如若UIText所包含的文本字符数大于L(L为UI按钮上文本的最大字符数),将UIText记为“Long”。
步骤4)-2:根据SenAPI所属的操作种类,将SenAPI替换为所属的SenAct,具体包括:SendMessage(发信息)、Call(打电话)、Intemet(上网)、Install(安装应用)、UseDevice(使用诸如摄像头、GPS等外设)。
步骤4)-3:如若SenAct的值不为Intemet,则将其对应的SenData设为“DEFAULT”;如若SenAct的值为Intemet,根据其对应的SenData所属的数据类型,将其替换为Message(信息)、AddressBook(通讯录)、UserAccount(用户账户信息)、SensitiveFile(私密文件)等。
5)特征值的选取
分别从GooglePlay、豌豆荚、恶意应用收集网站上获取安卓应用,分析这些应用所包含的敏感行为以及manifest.xml文件中所包含的允许请求。将安卓应用是否存在某种敏感行为(UIText,SenAct,SenData)作为特征之一:若存在该种敏感行为,则特征值设为“1”,否则设为“0”;将mainifest文件中是否存在某种permission请求也作为特征之一:若存在该种permission请求,则特征值设为“1”,否则设为“0”。
因此,可以将安卓应用的特征表示为:敏感行为特征1,敏感行为特征2,……,permission请求特征1,permission请求特征2,……。
6)训练数据集的构成
为已知安全性的安卓应用的特征数据添加安全性标签:若为恶意应用,则安全性标签设为“0”,否则设为“1”。
最终得到的一行数据包括如下信息:安卓应用名称,唯一标识码,敏感行为特征1,敏感行为特征2,……,permission请求特征1,permission请求特征2,……,安全性。训练数据集则由N行这样的数据构成(N为所搜集已知安全性安卓应用的数量)。
7)安全性的分析
对已知安全性的应用数据集进行训练,将这些数据视为n维空间中的点(其中n为应用所有特征的数量),使用支持向量机算法,并结合应用的安全性标签,可以得到一个判断应用是否为恶意应用的超平面。在此基础上,根据未知安全性安卓应用的特征值,将其视为n维空间中的一个点,观察该点与超平面的相对位置,判断该应用的安全性。
本发明采用以上技术方案,具有以下优点:
1、有效提高检测安卓恶意应用的准确率:现今的安卓恶意应用检测方法中,静态分析方法没有很好地结合机器学习方法,机器学习方法中静态分析的应用又很浅显。我们的方法结合了程序分析方法和机器学习理论,通过对代码进行一定的静态分析而得到特征,将这些特征作为支持向量机算法的输入,可以有效提高检测安卓恶意应用的准确率。
2、提高了对仅包含Internet这类敏感行为的恶意应用的检测准确率:大部分安卓恶意应用仅包含Internet类的敏感行为,常规方法很难判断出这样的恶意应用是否恶意,通过分析UI文本、敏感API以及敏感数据间的关系,能够更有效地检测该类恶意应用。
3、高效:事前完成数据集的训练后,任何未知安全性的安卓应用进入到分析系统后,只需简短的分析即可得到其特征值,从而分析出该应用的安全性。
附图说明
图1为本发明的结构流程图。
图2为训练数据集的数据结构图。
图3为豌豆荚代码片段所对应的函数调用关系图。
具体实施方式
本发明的流程如图1所示,主体部分是使用敏感行为分析方法的特征提取,所要做的是通过分析安卓应用的安装文件APK,得到可供支持向量机算法所使用的数据。针对已知安全性的安卓应用,通过分析得到其特征,将其组织为训练数据集;针对未知安全性的安卓应用,通过特征分析可以得到除安全性以外的特征,使用这些特征并结合数据训练结果,预测得到其安全性。
第一步:APK文件无法直接分析,需要解压后获取Manifest.xml、class.dex以及与布局相关的layout.xml文件。这些文件无法直接作为下一步分析的输入,需要使用工具dex2jar(http://sourceforge.net/projects/dex2jar/)将class.dex反编译为jar包,从而获得安卓应用的Java代码;同时我们需要使用工具apktooI(http://ibotpeaches.github.io/Apktool/)对XML文件进行解码,获得可读的XML文件。
第二步:获得安卓应用的代码后,使用WALA工具(http://sourceforge.net/projects/wala/)得到控制流图CFG以及函数调用关系图,进一步提取与敏感API、敏感数据及其相关的行为。由于我们主要关注安卓应用中何种敏感API对何种敏感数据进行操作,我们定义了如下谓词,寻找代码中的敏感API和敏感数据,用Datalog语言表示。
是否存在敏感API,hasSenAPI(F,SenAPI,L):程序L行处存在函数F,F中调用了敏感API—(SenAPI)。
是否存在敏感数据,hasSenData(L,SenData):程序L行处对敏感数据SenData进行了操作。
找到了代码中的敏感API后,我们需要知道这两者在应用中如何传递、何种函数会触发敏感API对敏感数据进行操作,因此定义如下谓词,以指明函数间的调用关系。
直接函数调用关系,directInvoke(F*,F′,L):在程序L行处,函数F*直接调用了函数F′。
间接函数调用关系,indirectInvoke(F*,F′):在事件驱动的环境下,函数F′是F*的最终目标。
在安卓中组件之间可以使用ICC(InterComponentCommunication)机制来进行函数调用,我们定义以下谓词来完整表达使用ICC机制进行函数调用的过程。
是否是Intent,isIntent(L1,X):程序L1行处定义的参数X的类型是Intent。
Intent的初始化,intentInitial(L2,X,Y):在程序L2行处进行了参数X的初始化,且初始化的第一个真实参数为Y。
使用ICC机制的函数调用,iccInvoke(F*,L,X):在程序L行处,函数F使用了Intent类型的参数调用了其它函数。
是否在某组件内,inComponent(F′,Y):函数F′在组件Y内。
以下通过代码来具体说明使用ICC机制进行函数调用的一种情况。
上述代码表明:在函数F*中定义了初始化参数为Y和url的Intent类型的参数X,在语句“startActivity(X);”中启动X,会调用Y中的函数F′,即函数F*通过ICC机制调用了函数F′。
第三步:获取以上步骤所得到的由Datalog语言所表达的谓词后,我们定义了同样由Datalog语言所表示的推导规则,将所得到的谓词表达作为输入,可以得到所关注的敏感行为——UI组件触发了某种敏感API对敏感数据进行了操作,可表示为(UIFun,SenAPI,SenData)。推导规则表示如下。
推导规则R1,函数间的调用(直接调用关系)invoke(F*,F′,L):-directInvoke(F*,F′,L):由F*在程序L行处直接调用了F′,可以推导出F*在程序L行处调用了F′。
推导规则R2,函数间的调用(使用icc机制的函数调用关系)invoke(F*,F′,L):-isIntent(L1,X)&intentInitial(L2,X,Y)&iccInvoke(F*,L,X)&inComponent(F′,Y):此条规则基于安卓应用中的Intent传递机制,F*在程序L行处使用了Intent类型的参数X来进行组件内的通讯,X的类型在程序L1行处定义为Intent,X在程序L2行进行初始化,初始化的第一个真实参数为Y,同时组件Y中包含函数F’,由此可推导出F*在程序L行处调用了程序F’。
推导规则R3,函数调用的传递性(调用关系与间接调用关系),invoke(F*,F′,L):-invoke(F*,F,L)&indirectInvoke(F,F′):由F*在程序L行处调用了F及F不直接调用F′,推导出F*在程序L行处调用了F′。
推导规则R4,函数调用的传递性(调用关系与调用关系),invoke(F*,F,L):-invoke(F*,F,L)&invoke(F,F′,L′):由F*在程序L行处调用了F及F在程序L′行调用了F′,推导出F*在程序L行处调用了F′。
推导规则R5,是否存在敏感行为,hasSenAction(F*,SenApi,SenData,L):-hasSenAPI(F*,SenAPI,L)&hasSenData(L,SenData):由F*在程序L行处存在SenAPI以及在程序L行处存在SenData推导出在程序L行处F*使用SenAPI对SenData进行了相关操作。
推导规则R6,敏感行为在函数间的传递,hasSenAction(F*,SenAPI,SenData,L):-hasSenAction(F′,SenAPI,SenData,L′)&invoke(F*,F′,L):由在程序L′行处F′使用SenAPI对SenData进行了相关操作以及F*在程序L行处调用F′,推导出在程序L行处F*使用SenAPI对SenData进行了相关操作。
第四步:敏感行为(UIFun,SenAPI,SenData)还不能直接作为应用的特征,我们所关注的是UI组件本身所表达的意图与其所触发的敏感API是否一致,为此我们需要提取UI组件上的文本。由第一步中所得到的layout.xml文件,我们可以获取UI组件上的文本UIText,将其替换掉UIFun,我们可以得到敏感行为(UIText,SenAPI,SenData)。
第五步:为了控制训练数据集的规模以及稀疏程度,我们还需要对敏感行为(UIText,SenAPI,SenData)进行一定处理。
首先,我们主要关注按钮以及跳出对话框的文本,这些文本字符数量相对较少,针对UIText中字符数量较多的文本,我们将其替换为“Long”。
其次,敏感API数量较多,但绝大多数都可以分到几大类中。我们不需要知道敏感API具体行为,只需要知晓其功能即可。根据SenAPI所属的操作种类,将SenAPI替换为所属的SenAct,SenAct包含以下几种:SendMessage(发信息)、Call(打电话)、Internet(上网)、Install(安装应用)、UseDevice(使用诸如摄像头、GPS等外设)。除上网这种SenAct外,其它敏感动作所处理的敏感数据类型均确定,我们将其所对应的SenData设为“DEFAULT”;而针对上网这种敏感动作,根据其对应的SenData所属的数据类型,将其替换为Message(信息)、AddressBook(通讯录)、UserAccount(用户账户信息)、SensitiveFile(私密文件)等。经过以上处理我们可以得到敏感行为(UIText,SenAct,SenData)。
第六步:通过分析已知安全性的应用,我们可以得知其具有哪些敏感行为(UIText,SenAct,SenData),将应用是否具有某种敏感行为(UIText,SenAct,SenData)作为特征之一。若具有该种敏感行为,则该特征的特征值为“1”,否则为“0”。由第一步中所得Mainifest.xml中我们可以获取应用的允许请求列表,将应用是否具有某种允许请求也作为特征之一。若具有该种允许请求,则该特征的特征值为“1”,否则为“0”。另外将应用的安全性作为应用的标签,并赋予应用唯一标识码,这样就构成了训练数据集的一条数据。最终训练数据集的数据结构如图2所示。
第七步:对已知安全性的应用进行特征提取后,我们需要对未知安全性的应用也进行特征提取操作,但由于这些应用的安全性未知,我们只可以获取其敏感行为特征及允许请求特征。然后我们开始分析预测未知安全性的安卓应用,具体方法是使用支持向量机对训练数据集进行训练,有了训练结果后,就可以通过应用的其它特征来预测其安全性。
下面结合国内著名安卓市场豌豆荚的APK安装文件对本发明的特征提取过程作具体实施说明。本发明不仅适用于该例。对该应用提取特征的具体过程如下:
第一步:将从互联网上所获取的豌豆荚安装文件apk后缀名更改为zip,解压后获得关键文件classes.dex、AndroidManifest.xml和位于res文件夹下的layout文件。对其作相应处理,我们可以得到应用的Java代码和可阅读的XML文件。
第二步:运用工具WALA,分析Java代码,得到函数调用关系图。例如,通过分析如下代码片段,我们可以得到如图3所示的函数调用关系图。
代码片段:
第三步:通过分析函数调用图,我们可以找出所关注的敏感API和函数调用关系。如图3所示的函数调用关系,其中的有用信息用Datalog语言表示如下。
hasSenAPI(Fn(),openStream(),20);
directInvoke(Fm(),Fm+1(),16);directInvoke(Fm+1(),Fm+2(),X);…;
directInvoke(Fm+n-m-1(),Fn(),Y);
directInvoke(onClick(),Fm(),09);
第四步:从这些有用信息中我们需要找到应用的敏感行为,即何种UI控件会触发敏感API,从以上代码片段中找出敏感行为的过程用Datalog语言所表示如下。
根据推导规则R1:Invoke(Fm(),Fm+1(),16);Invoke(Fm+1(),Fm+2(),X);…:-directInvoke(Fm(),Fm+l(),16);directInvoke(Fm+1(),Fm+2(),X);…;
根据推导规则R1:Invoke(Fm+n-m-1(),Fn(),Y):-directInvoke(Fm+n-m-1(),Fn(),Y);
根据推导规则R1:Invoke(onClick(),Fm(),09):-directInvoke(onClick(),Fm(),09);
根据推导规则R4:Invoke(Fm(),Fn(),16):-Invoke(Fm(),Fm+1(),16)&Invoke(Fm+1(),Fm+2(),X)&…&Invoke(Fm+n-m-1(),Fn(),Y);
根据推导规则R5:hasSenAction(Fn(),openStream(),NULL,20):-hasSenApi(Fn(),openStream(),20);
根据推导规则R4:Invoke(onClick(),Fn(),09):-Invoke(onClick(),Fm(),09)&Invoke(Fm(),Fn(),16);
根据推导规则R6:hasSenAction(onClick(),openStream(),NULL,09):-hasSenAction(Fn(),openStream(),NULL,20)&Invoke(onClick(),Fn(),09);
我们可以得到该应用包含敏感行为(onClick(),openStream(),NULL)。该例中敏感API未对敏感数据进行操作,所以敏感数据设为NULL。
第五步:对第四步中得到的敏感行为,我们需要将其中UI控件替换为UI上的文本。在本例的代码片段中,我们可以找到该按钮的id为2131296347,将其转换为16进制数7F09005B。在第一步中所得layout文件中可以找到该按钮id,并且得到该按钮上的文本为“查看详细页面”。由此我们得到敏感行为(″查看详细页面″,openStream(),NULL),将其中的API改为其所属类型,最终得到该应用包含敏感行为(″查看详细页面″,Intemet,NULL)。所举代码片段情况较为简单,若文本较长或者敏感数据存在,还需作相应处理。
第六步:从第一步中所得的AndroidManifest.xml文件中我们可以得到应用所包含的允许请求列表,将是否包含某种请求作为应用的特征之一。同时将应用是否包含某种敏感行为作为应用的特征之一。本例中应用的特征值如下所示。
应用名:wdj
是否包含敏感行为(″查看详细页面″,Intemet,NULL):1
是否包含敏感行为(″确定″,Intemet,UserAccount):1
是否包含敏感行为(″安装″,Install,NULL):1
是否包含敏感行为(″发送″,SendMessage,Message):0
是否包含敏感行为(″同步通讯录″,Internet,AddressBook):l
是否包含允许请求"android.permission.ACCESS_WIFI_STATE":1
是否包含允许请求"android.permission.READ_PHONE_STATE":l
是否包含允许请求"android.permission.ACCESS_NETWORK_STATE":1
是否包含允许请求"android.permission.INTERNET":1
是否包含允许请求"android.permission.GET_ACCOUNTS″:1
是否包含允许请求"android.permission.READ_CONTACTS″:1
是否包含允许请求"android.permission.SENSOR_ENABLE":0
是否包含允许请求"android.permission.READ_SMS″:1
是否包含允许请求"android.permission.RECEIVE_SMS″:1
是否包含允许请求"android.permission.WAKE_LOCK":1
将n个已知安全性的应用进行如上的特征提取后,将它们综合为一个特征矩阵,即可得到我们所需训练数据集。
第七步:使用支持向量机算法,判断安卓应用的安全性。支持向量机算法首先将向量映射到一个高维空间,然后再在这个空间中求广义最优分类面。公式如下,其中ωT用于将向量x映射到高维空间中,向量x为应用的特征向量,(ω)Tx*+b)为通过训练数据集所找到的最优分类面(x*为满足该超平面的特征向量,由训练结果得出)。f(x)为应用的安全标签预测值,若f(x)<t,则应用为恶意应用,若f(x)≥t,则应用不是恶意应用。(t由多组实验结果对比决定,一般情况下将f(x)的值规约到[0,1],t的取值为0.5。)
Claims (7)
1.一种基于安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征在于,先将安卓应用反编译得到Java代码,根据其Java代码找出代码中的敏感行为,即U(UserInterface,用户交互界面)组件会触发何种敏感API对哪些敏感信息进行操作,然后将是否包含某种敏感行为以及是否包含某种允许请求作为决定安卓应用安全性的特征;分析已知安全性的安卓应用,得到其特征,使用支持向量机算法对数据集进行训练;根据训练结果,使用未知安全性的安卓应用的特征值,分析该安卓应用的安全性。
2.根据权利要求1所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征是包括以下步骤:
1)拆分安卓应用安装包APK文件,反编译其中的dex文件、manifest.xml文件及布局相关的xml文件,并分析反编译dex所得的代码来获取其中的敏感操作及函数调用关系;
2)通过分析1)中所得到的敏感操作及函数调用关系,得到敏感行为(UIFun,SenAPI,SenData);
3)从1)中所得的布局相关的xml文件中提取UI函数所对应的文本信息、UIText,用于替换敏感行为中的UIFun,并对敏感行为中的冗余信息进行处理;
4)按照1)到3)的步骤分析数据集内的所有应用(该数据集内应用均从互联网上获取,应用数量约为30000个),得到安卓应用可能包含的所有敏感行为,将是否包含某种敏感行为作为安卓应用的特征之一,同时分析应用的manifest.xml文件,得到安卓应用可能包含的所有允许请求,将是否包含某种允许请求作为安卓应用的特征之一;
5)为已知安全性的安卓应用数据增添安全性标签,将已知安全性的应用数据构成训练数据集,使用支持向量机算法对其进行训练,并由此分析预测安卓应用的安全性。
3.根据权利要求2所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征是步骤1)中,获取源代码并进行分析,具体为:
将安卓应用解压,得到dex文件和manifest文件,将dex文件反编译得到jar包,由jar包可获取应用的安卓代码,同时使用工具反编译manifest.xml文件以及与布局相关的xml文件;根据代码构建CFG控制流图以及函数调用关系图,以便后续的程序分析,具体内容用Datalog语言(Datalog是一种应用在人工智能及程序分析等领域、具有符号处理和逻辑推理能力的计算机程序设计语言)表示如下:
hasSenAPI(F,SenAPI,L):程序L行处存在函数F,F中调用了敏感API(SenAPI);
hasSenData(L,SenData):程序L行处对敏感数据SenData进行了操作;
directInvoke(F*,F′,L):在程序L行处函数F*直接调用了函数F′;
indirectInvoke(F*,F′):在事件驱动的环境下,函数F′是F*的最终目标;
isIntent(L1,X):程序L1行处定义的参数X的类型是Intent;
intentInitial(L2,X,Y):程序L2行处进行了参数X的初始化,且初始化的第一个真实参数为Y;
iccInvoke(F*,L,X):在程序L行处函数F*使用了Intent类型的参数X调用了其它函数;
inComponent(F′,Y):函数F′在组件Y内。
4.根据权利要求1所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征是步骤2)中,根据分析所得的敏感操作和函数调用关系,通过应用以下Datalog语言表示的推导规则,可获取安卓应用的敏感行为(UIFun,SenAPI,SenData),其中UIFun代表与UI相关的函数:
invoke(F*,F′,L):-directInvoke(F*,F′,L):由于F*在程序L行处直接调用了F′,可以推导出F*在程序L行处调用了F′;
invoke(F*,F′,L):-isIntent(L1,X)&intentInitial(L2,X,Y)&iccInvoke(F*,L,X)&inComponent(F′,Y):此条规则基于安卓应用中的Intent传递机制,F*在程序L行处使用了Intent类型的参数X来进行组件内的通讯,X的类型在程序L1行处定义为Intent,X在程序L2行进行初始化,初始化的第一个真实参数为Y,同时组件Y中包含函数F’,由此可推导出F*在程序L行处调用了程序F’;
invoke(F*,F′,L):-invoke(F*,F,L)&indirectInvoke(F,F′):由于F*在程序L行处调用了F且F不直接调用F′,可以推导出F*在程序L行处间接调用了F′;
invoke(F*,F,L):-invoke(F*,F,L)&invoke(F,F′,L′):由于F*在程序L行处调用了F且F在程序L′行调用了F′,可以推导出F*在程序L行处调用了F′;
以上四条规则为函数之间调用关系的分析;
hasSenAction(F*,SenAPI,SenData,L):-hasSenAPI(F*,SenAPI,L)&hasSenData(L,SenData):由于F*在程序L行处存在SenAPI以及在程序L行处存在SenData,可以推导出在程序L行处F*使用SenAPI对SenData进行了相关操作;
hasSenAction(F*,SenAPI,SenData,L):-hasSenAction(F′,SenAPI,SenData,L′)&invoke(F*,F′,L):由于在程序L′行处F′使用SenAPI对SenData进行了相关操作以及F*在程序L行处调用F′,可以推导出在程序L行处F*使用SenAPI对SenData进行了相关操作;
以上两条规则为函数是否会触发敏感行为的分析。
5.根据权利要求1所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征在于步骤3)中,根据反编译所得代码和与布局相关的XML文件,可以得到UI组件上的文本信息UIText,将敏感行为(UIFun,SenAPI,SenData)中的UIFun替换为其组件上的文本UIText,如若其组件上没有文本,则记为“NULL”;如若UIFun本身为NULL,则不进行任何处理;由于原始数据所提供的信息过于琐碎,还需要进行以下处理:去除UITxet所包含的标点符号,如若UIText所包含的文本字符数大于n,将UIText记为“Long”;根据SenAPI所属的操作种类,将SenAPI替换为所属的SenAct,具体包括:SendMessage(发信息)、Call(打电话)、Intemet(上网)、Install(安装应用)、UseDevice(使用诸如摄像头、GPS等外设);如若SenAct的值不为Intemet,则将其对应的SenData设为“DEFAULT”;如若SenAct的值为Intemet,根据其对应的SenData所属的数据类型,将其替换为Message(信息)、AddressBook(通讯录)、UserAccount(用户账户信息)、SensitiveFile(私密文件)等。
6.根据权利要求1所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征在于步骤4)中,分析数据集中的安卓应用所包含的敏感行为,将安卓应用是否存在某种敏感行为(UIText,SenAct,SenData)作为特征之一,若存在该种敏感行为,则特征值设为“1”,否则设为“0”;分析数据集中的安卓应用所包含的允许请求,将mainifest文件中是否存在某种permission请求也作为特征之一:若存在该种permission请求,则特征值设为“1”,否则设为“0”;因此,可以将安卓应用的特征表示为:敏感行为特征1,敏感行为特征2,……,permission请求特征1,permission请求特征2,……;为已知安全性的安卓应用增添安全性标签:若为恶意应用,则安全性标签设为“0”,否则设为“1”;最终得到的一行数据包括如下信息:安卓应用名称,唯一标识码,敏感行为特征1,敏感行为特征2,……,permission请求特征1,permission请求特征2,……,安全性。
7.根据权利要求1所述的安卓应用源代码敏感行为识别的安卓应用安全性分析方法,其特征在于步骤5)中,将所有包含安全性标签的数据集合构成训练数据集,对其进行训练,将这些数据视为n维空间中的点(其中n为应用所有特征的数量),使用支持向量机算法,并结合应用的安全性标签,可以得到一个判断应用是否为恶意应用的超平面。在此基础上,根据未知安全性安卓应用的特征值,将其视为n维空间中的一个点,观察该点与超平面的相对位置,判断该应用的安全性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510606818.2A CN105335655A (zh) | 2015-09-22 | 2015-09-22 | 一种基于敏感行为识别的安卓应用安全性分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510606818.2A CN105335655A (zh) | 2015-09-22 | 2015-09-22 | 一种基于敏感行为识别的安卓应用安全性分析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105335655A true CN105335655A (zh) | 2016-02-17 |
Family
ID=55286174
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510606818.2A Pending CN105335655A (zh) | 2015-09-22 | 2015-09-22 | 一种基于敏感行为识别的安卓应用安全性分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105335655A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106096399A (zh) * | 2016-06-01 | 2016-11-09 | 努比亚技术有限公司 | 应用程序编程接口的检测装置及方法 |
CN106250765A (zh) * | 2016-08-05 | 2016-12-21 | 黄新勇 | 广播系统中的程序监控方法及系统 |
CN106845235A (zh) * | 2017-01-11 | 2017-06-13 | 中科院微电子研究所昆山分所 | 一种基于机器学习方法的安卓平台回调函数检测方法 |
CN107301347A (zh) * | 2017-07-26 | 2017-10-27 | 南京邮电大学 | 一种基于静态分析获取Hbuilder App调用图的方法 |
CN109145600A (zh) * | 2017-06-16 | 2019-01-04 | 卡巴斯基实验室股份制公司 | 使用静态分析元素检测恶意文件的系统和方法 |
CN109145605A (zh) * | 2018-08-23 | 2019-01-04 | 北京理工大学 | 一种基于SinglePass算法的Android恶意软件家族聚类方法 |
CN109639685A (zh) * | 2018-12-17 | 2019-04-16 | 深圳供电局有限公司 | 一种安卓系统恶意应用检测方法及系统 |
CN109766692A (zh) * | 2018-12-07 | 2019-05-17 | 百度在线网络技术(北京)有限公司 | 判断隐私调用合理性的方法和装置及机器可读存储介质 |
CN109902487A (zh) * | 2017-12-08 | 2019-06-18 | 南京理工大学 | 基于应用行为的Android应用恶意性检测方法 |
CN110795734A (zh) * | 2019-10-12 | 2020-02-14 | 南京信息职业技术学院 | 一种恶意移动应用检测方法 |
CN109558304B (zh) * | 2017-09-27 | 2020-10-30 | 北京邮电大学 | 一种组件关联分析方法、装置及电子设备 |
CN112817604A (zh) * | 2021-02-18 | 2021-05-18 | 北京邮电大学 | 安卓系统控件意图识别方法、装置、电子设备及存储介质 |
CN114595465A (zh) * | 2020-12-04 | 2022-06-07 | 成都鼎桥通信技术有限公司 | 数据加密处理方法、装置及电子设备 |
CN114780952A (zh) * | 2022-03-09 | 2022-07-22 | 浙江吉利控股集团有限公司 | 敏感应用调用场景的检测方法、系统及存储介质 |
CN116450533A (zh) * | 2023-06-15 | 2023-07-18 | 中国工商银行股份有限公司 | 用于应用程序的安全检测方法、装置、电子设备和介质 |
EP3918500B1 (en) * | 2019-03-05 | 2024-04-24 | Siemens Industry Software Inc. | Machine learning-based anomaly detections for embedded software applications |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479298A (zh) * | 2010-11-29 | 2012-05-30 | 北京奇虎科技有限公司 | 基于机器学习的程序识别方法及装置 |
CN102799524A (zh) * | 2012-07-03 | 2012-11-28 | 天津大学 | 一种浏览器扩展的缺陷检测方法 |
CN104123500A (zh) * | 2014-07-22 | 2014-10-29 | 卢永强 | 一种基于深度学习的Android平台恶意应用检测方法及装置 |
CN104834858A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种android应用中恶意代码的静态检测方法 |
-
2015
- 2015-09-22 CN CN201510606818.2A patent/CN105335655A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479298A (zh) * | 2010-11-29 | 2012-05-30 | 北京奇虎科技有限公司 | 基于机器学习的程序识别方法及装置 |
CN102799524A (zh) * | 2012-07-03 | 2012-11-28 | 天津大学 | 一种浏览器扩展的缺陷检测方法 |
CN104123500A (zh) * | 2014-07-22 | 2014-10-29 | 卢永强 | 一种基于深度学习的Android平台恶意应用检测方法及装置 |
CN104834858A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种android应用中恶意代码的静态检测方法 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106096399A (zh) * | 2016-06-01 | 2016-11-09 | 努比亚技术有限公司 | 应用程序编程接口的检测装置及方法 |
CN106250765A (zh) * | 2016-08-05 | 2016-12-21 | 黄新勇 | 广播系统中的程序监控方法及系统 |
CN106845235B (zh) * | 2017-01-11 | 2019-09-13 | 中科院微电子研究所昆山分所 | 一种基于机器学习方法的安卓平台回调函数检测方法 |
CN106845235A (zh) * | 2017-01-11 | 2017-06-13 | 中科院微电子研究所昆山分所 | 一种基于机器学习方法的安卓平台回调函数检测方法 |
CN109145600B (zh) * | 2017-06-16 | 2022-02-11 | 卡巴斯基实验室股份制公司 | 使用静态分析元素检测恶意文件的系统和方法 |
CN109145600A (zh) * | 2017-06-16 | 2019-01-04 | 卡巴斯基实验室股份制公司 | 使用静态分析元素检测恶意文件的系统和方法 |
CN107301347A (zh) * | 2017-07-26 | 2017-10-27 | 南京邮电大学 | 一种基于静态分析获取Hbuilder App调用图的方法 |
CN109558304B (zh) * | 2017-09-27 | 2020-10-30 | 北京邮电大学 | 一种组件关联分析方法、装置及电子设备 |
CN109902487A (zh) * | 2017-12-08 | 2019-06-18 | 南京理工大学 | 基于应用行为的Android应用恶意性检测方法 |
CN109902487B (zh) * | 2017-12-08 | 2022-09-13 | 南京理工大学 | 基于应用行为的Android应用恶意性检测方法 |
CN109145605A (zh) * | 2018-08-23 | 2019-01-04 | 北京理工大学 | 一种基于SinglePass算法的Android恶意软件家族聚类方法 |
CN109766692A (zh) * | 2018-12-07 | 2019-05-17 | 百度在线网络技术(北京)有限公司 | 判断隐私调用合理性的方法和装置及机器可读存储介质 |
CN109766692B (zh) * | 2018-12-07 | 2021-07-27 | 百度在线网络技术(北京)有限公司 | 判断隐私调用合理性的方法和装置及机器可读存储介质 |
CN109639685A (zh) * | 2018-12-17 | 2019-04-16 | 深圳供电局有限公司 | 一种安卓系统恶意应用检测方法及系统 |
EP3918500B1 (en) * | 2019-03-05 | 2024-04-24 | Siemens Industry Software Inc. | Machine learning-based anomaly detections for embedded software applications |
CN110795734A (zh) * | 2019-10-12 | 2020-02-14 | 南京信息职业技术学院 | 一种恶意移动应用检测方法 |
CN114595465A (zh) * | 2020-12-04 | 2022-06-07 | 成都鼎桥通信技术有限公司 | 数据加密处理方法、装置及电子设备 |
CN112817604A (zh) * | 2021-02-18 | 2021-05-18 | 北京邮电大学 | 安卓系统控件意图识别方法、装置、电子设备及存储介质 |
CN114780952A (zh) * | 2022-03-09 | 2022-07-22 | 浙江吉利控股集团有限公司 | 敏感应用调用场景的检测方法、系统及存储介质 |
CN116450533A (zh) * | 2023-06-15 | 2023-07-18 | 中国工商银行股份有限公司 | 用于应用程序的安全检测方法、装置、电子设备和介质 |
CN116450533B (zh) * | 2023-06-15 | 2023-09-19 | 中国工商银行股份有限公司 | 用于应用程序的安全检测方法、装置、电子设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105335655A (zh) | 一种基于敏感行为识别的安卓应用安全性分析方法 | |
Lei et al. | EveDroid: Event-aware Android malware detection against model degrading for IoT devices | |
Surendran et al. | A TAN based hybrid model for android malware detection | |
Jung et al. | Ransomware detection method based on context-aware entropy analysis | |
US10033748B1 (en) | System and method employing structured intelligence to verify and contain threats at endpoints | |
US9525706B2 (en) | Apparatus and method for diagnosing malicious applications | |
Wu et al. | A survey of android malware static detection technology based on machine learning | |
KR101720686B1 (ko) | 시각화 유사도 기반 악성 어플리케이션 감지 장치 및 감지 방법 | |
US10445507B2 (en) | Automated security testing for a mobile application or a backend server | |
Ma et al. | Droidetec: Android malware detection and malicious code localization through deep learning | |
CN104834859A (zh) | 一种Android应用中恶意行为的动态检测方法 | |
CN112148305A (zh) | 一种应用检测方法、装置、计算机设备和可读存储介质 | |
CN112817877B (zh) | 异常脚本检测方法、装置、计算机设备和存储介质 | |
Martinelli et al. | Classifying android malware through subgraph mining | |
US10275596B1 (en) | Activating malicious actions within electronic documents | |
KR20170107665A (ko) | 악성코드 분석모듈 및 그 악성코드 분석방법 | |
JP5441043B2 (ja) | プログラム、情報処理装置、及び情報処理方法 | |
Reyhani Hamedani et al. | AndroClass: An effective method to classify Android applications by applying deep neural networks to comprehensive features | |
Cam et al. | NeSeDroid—Android malware detection based on Network Traffic and sensitive resource accessing | |
Nezhadkamali et al. | Android malware detection based on overlapping of static features | |
CN112367336B (zh) | webshell拦截检测方法、装置、设备及可读存储介质 | |
Sharma et al. | A survey of android malware detection strategy and techniques | |
Vaishanav et al. | Behavioural analysis of android malware using machine learning | |
Ahmad et al. | Android mobile malware classification using a tokenization approach | |
CN103514403A (zh) | 在js中主动进行安全保护的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160217 |