一种基于敏感行为识别的安卓应用安全性分析方法_2

文档序号:9579543阅读:来源:国知局
SenAct的值不为Internet,则将其对应的SenData设为 "DEFAULT";如若SenAct的值为Internet,根据其对应的SenData所属的数据类型,将其替换 为Message(信息)、AddressBook(通讯录)、UserAccount(用户账户信息)、Sensitive File(私密文件)等。
[0042] 5)特征值的选取
[0043] 分别从GooglePlay、豌豆荚、恶意应用收集网站上获取安卓应用,分析这些应用所 包含的敏感行为以及manifest,xml文件中所包含的允许请求。将安卓应用是否存在某种 敏感行为(UIText,SenAct,SenData)作为特征之一:若存在该种敏感行为,则特征值设为 "1",否则设为"0" ;将mainifest文件中是否存在某种permission请求也作为特征之一: 若存在该种permission请求,则特征值设为" 1",否则设为"0"。
[0044] 因此,可以将安卓应用的特征表示为:敏感行为特征1,敏感行为特征2,……, permission请求特征 1,permission请求特征 2,......。
[0045] 6)训练数据集的构成
[0046] 为已知安全性的安卓应用的特征数据添加安全性标签:若为恶意应用,则安全性 标签设为"〇",否则设为"1"。
[0047] 最终得到的一行数据包括如下信息:安卓应用名称,唯一标识码,敏感行为特征 1,敏感行为特征2,......,permission请求特征l,permission请求特征2,......,安全性。 训练数据集则由N行这样的数据构成(N为所搜集已知安全性安卓应用的数量)。
[0048] 7)安全性的分析
[0049] 对已知安全性的应用数据集进行训练,将这些数据视为η维空间中的点(其中η 为应用所有特征的数量),使用支持向量机算法,并结合应用的安全性标签,可以得到一个 判断应用是否为恶意应用的超平面。在此基础上,根据未知安全性安卓应用的特征值,将其 视为η维空间中的一个点,观察该点与超平面的相对位置,判断该应用的安全性。
[0050] 本发明采用以上技术方案,具有以下优点:
[0051] 1、有效提高检测安卓恶意应用的准确率:现今的安卓恶意应用检测方法中,静态 分析方法没有很好地结合机器学习方法,机器学习方法中静态分析的应用又很浅显。我们 的方法结合了程序分析方法和机器学习理论,通过对代码进行一定的静态分析而得到特 征,将这些特征作为支持向量机算法的输入,可以有效提高检测安卓恶意应用的准确率。
[0052] 2、提高了对仅包含Internet这类敏感行为的恶意应用的检测准确率:大部分安 卓恶意应用仅包含Internet类的敏感行为,常规方法很难判断出这样的恶意应用是否恶 意,通过分析UI文本、敏感API以及敏感数据间的关系,能够更有效地检测该类恶意应用。
[0053] 3、高效:事前完成数据集的训练后,任何未知安全性的安卓应用进入到分析系统 后,只需简短的分析即可得到其特征值,从而分析出该应用的安全性。
【附图说明】
[0054] 图1为本发明的结构流程图。
[0055] 图2为训练数据集的数据结构图。
[0056] 图3为豌豆荚代码片段所对应的函数调用关系图。
【具体实施方式】
[0057] 本发明的流程如图1所示,主体部分是使用敏感行为分析方法的特征提取,所要 做的是通过分析安卓应用的安装文件APK,得到可供支持向量机算法所使用的数据。针对已 知安全性的安卓应用,通过分析得到其特征,将其组织为训练数据集;针对未知安全性的安 卓应用,通过特征分析可以得到除安全性以外的特征,使用这些特征并结合数据训练结果, 预测得到其安全性。
[0058] 第一步: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文件。
[0059] 第二步:获得安卓应用的代码后,使用WALA工具(http://sourceforge.net/ projects/wala/)得到控制流图CFG以及函数调用关系图,进一步提取与敏感API、敏感数 据及其相关的行为。由于我们主要关注安卓应用中何种敏感API对何种敏感数据进行操 作,我们定义了如下谓词,寻找代码中的敏感API和敏感数据,用Datalog语言表示。
[0060] 是否存在敏感API,hasSenAPI(F,SenAPI,L):程序L行处存在函数F,F中调用了 敏感API-(SenAPI)。
[0061] 是否存在敏感数据,hasSenData(L,SenData):程序L行处对敏感数据SenData进 行了操作。
[0062] 找到了代码中的敏感API后,我们需要知道这两者在应用中如何传递、何种函数 会触发敏感API对敏感数据进行操作,因此定义如下谓词,以指明函数间的调用关系。
[0063]直接函数调用关系,directlnvoke(F*,F',L):在程序L行处,函数F*直接调用 了函数F'。
[0064] 间接函数调用关系,indirectlnvoke(F*,F'):在事件驱动的环境下,函数F'是 F*的最终目标。
[0065] 在安卓中组件之间可以使用ICC(InterComponentCommunication)机制来进行 函数调用,我们定义以下谓词来完整表达使用ICC机制进行函数调用的过程。
[0066] 是否是Intent,islntent(Ll,X):程序L1行处定义的参数X的类型是Intent。
[0067]Intent的初始化,intentlnitial(L2,X,Y):在程序L2行处进行了参数X的初始 化,且初始化的第一个真实参数为Y。
[0068] 使用ICC机制的函数调用,iccInvoke(F*,L,X):在程序L行处,函数F使用了 Intent类型的参数调用了其它函数。
[0069] 是否在某组件内,inComponent(F',Y):函数F'在组件Y内。
[0070] 以下通过代码来具体说明使用ICC机制进行函数调用的一种情况。
[0071]
[0072] 上述代码表明:在函数F*中定义了初始化参数为Y和url的Intent类型的参数 X,在语句"startActivity(X); "中启动X,会调用Y中的函数P,即函数F*通过ICC机 制调用了函数F'。
[0073] 第三步:获取以上步骤所得到的由Datalog语言所表达的谓词后,我们定义了 同样由Datalog语言所表示的推导规则,将所得到的谓词表达作为输入,可以得到所关注 的敏感行为一一UI组件触发了某种敏感API对敏感数据进行了操作,可表示为(UIFun, SenAPI,SenData)。推导规则表示如下。
[0074]推导规则R1,函数间的调用(直接调用关系)invoke(F*,F', L):-directInvoke(F*,F',L):由F*在程序L行处直接调用了F',可以推导出F*在程序 L行处调用了F'。
[0075] 推导规则R2,函数间的调用(使用icc机制的函数调用关系)invoke(F*, F' ,L):_islntent(LI,X) &intentlnitial(L2,X,Y) &icclnvoke(F*,L,X) & inComponent(P,Y):此条规则基于安卓应用中的Intent传递机制,F*在程序L行处使用 了Intent类型的参数X来进行组件内的通讯,X的类型在程序L1行处定义为Intent,X在 程序L2行进行初始化,初始化的第一个真实参数为Y,同时组件Y中包含函数F',由此可推 导出F*在程序L行处调用了程序F'。
[0076]推导规则R3,函数调用的传递性(调用关系与间接调用关系),invoke(F*,F', L) :_invoke(F*,F,L)&indirectInvoke(F,F'):由F* 在程序L行处调用了F及F不直 接调用F',推导出F*在程序L行处调用了F'。
[0077] 推导规则R4,函数调用的传递性(调用关系与调用关系),invoke(F*,F, L):-invoke(F*,F,L)&invoke(F,F',L'):由F* 在程序L行处调用了F及F在程序L' 行调用了F',推导出F*在程序L行处调用了F'。
[0078]推导规则R5,是否存在敏感行为,hasSenAction(F*,SenApi,SenData, L) :_hasSenAPI(F*,SenAPI,L)&hasSenData(L,SenData):由F* 在程序L行处存在SenAPI 以及在程序L行处存在SenData推导出在程序L行处F*使用SenAPI对SenData进行了相 关操作。
[0079] 推导规则R6,敏感行为在函数间的传递,hasSenAction(F*,SenAPI,SenData, L):_hasSenAction(F',SenAPI,SenData,L' ) &invoke(F*,F',L):由在程序L'行处 P使用SenAPI对SenData进行了相关操作以及F*在程序L行处调用P,推导出在程序 L行处F*使用SenAPI对SenData进行了相关操作。
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1