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

文档序号:9579543阅读:来源:国知局

[0080] 第四步:敏感行为(UIFun,SenAPI,SenData)还不能直接作为应用的特征,我们所 关注的是UI组件本身所表达的意图与其所触发的敏感API是否一致,为此我们需要提取 UI组件上的文本。由第一步中所得到的layout,xml文件,我们可以获取UI组件上的文本 UIText,将其替换掉UIFun,我们可以得到敏感行为(UIText,SenAPI,SenData)。
[0081] 第五步:为了控制训练数据集的规模以及稀疏程度,我们还需要对敏感行为 (UIText,SenAPI,SenData)进行一定处理。
[0082] 首先,我们主要关注按钮以及跳出对话框的文本,这些文本字符数量相对较少,针 对UIText中字符数量较多的文本,我们将其替换为"Long"。
[0083] 其次,敏感API数量较多,但绝大多数都可以分到几大类中。我们不需要知道敏感 API具体行为,只需要知晓其功能即可。根据SenAPI所属的操作种类,将SenAPI替换为所属 的SenAct,SenAct包含以下几种:SendMessage(发信息)、Call(打电话)、Internet(上 网)、Install(安装应用)、UseDevice(使用诸如摄像头、GPS等外设)。除上网这种SenAct外,其它敏感动作所处理的敏感数据类型均确定,我们将其所对应的SenData设为 "DEFAULT" ;而针对上网这种敏感动作,根据其对应的SenData所属的数据类型,将其替换 为Message(信息)、AddressBook(通讯录)、UserAccount(用户账户信息)、Sensitive File(私密文件)等。经过以上处理我们可以得到敏感行为(UIText,SenAct,SenData)。
[0084] 第六步:通过分析已知安全性的应用,我们可以得知其具有哪些敏感行为 (UIText,SenAct,SenData),将应用是否具有某种敏感行为(UIText,SenAct,SenData)作 为特征之一。若具有该种敏感行为,则该特征的特征值为"1",否则为"0"。由第一步中所 得Mainifest.xml中我们可以获取应用的允许请求列表,将应用是否具有某种允许请求也 作为特征之一。若具有该种允许请求,则该特征的特征值为"1",否则为"0"。另外将应用 的安全性作为应用的标签,并赋予应用唯一标识码,这样就构成了训练数据集的一条数据。 最终训练数据集的数据结构如图2所示。
[0085] 第七步:对已知安全性的应用进行特征提取后,我们需要对未知安全性的应用也 进行特征提取操作,但由于这些应用的安全性未知,我们只可以获取其敏感行为特征及允 许请求特征。然后我们开始分析预测未知安全性的安卓应用,具体方法是使用支持向量机 对训练数据集进行训练,有了训练结果后,就可以通过应用的其它特征来预测其安全性。
[0086] 下面结合国内著名安卓市场豌豆荚的APK安装文件对本发明的特征提取过程作 具体实施说明。本发明不仅适用于该例。对该应用提取特征的具体过程如下:
[0087] 第一步:将从互联网上所获取的豌豆荚安装文件apk后缀名更改为zip,解压后获 得关键文件classes,dex、AndroidManifest.xml和位于res文件夹下的layout文件。对 其作相应处理,我们可以得到应用的Java代码和可阅读的XML文件。
[0088] 第二步:运用工具WALA,分析Java代码,得到函数调用关系图。例如,通过分析如 下代码片段,我们可以得到如图3所示的函数调用关系图。
[0089] 代码片段:
[0090]
[0091]
/"A.: …来rh
[0092]
[0093]
[0094] 第三步:通过分析函数调用图,我们可以找出所关注的敏感API和函数调用关系。 如图3所示的函数调用关系,其中的有用信息用Datalog语言表示如下。
[0095] hasSenAPI(Fn(),openStream(),20);
[0096] directlnvoke(Fm(),Fm+1(),16);directInvoke(Fm+1(),Fm+2(),X);;
[0097] directlnvoke(Fm+n-m-l(),Fn(),Y);
[0098] directlnvoke(onClick(),Fm(),09);
[0099] 第四步:从这些有用信息中我们需要找到应用的敏感行为,即何种UI控件会触发 敏感API,从以上代码片段中找出敏感行为的过程用Datalog语言所表示如下。
[0100]根据推导规则R1 :Invoke(Fm〇,Fm+iO,]^)dnvokeCFm+iO,Fm+2(),X);…-directlnvoke(Fm (),F^O, 16) ;directInvoke(F^ (),Fm+2 (),X) ; ···;
[0101]根据推导规则R1:Invoke(Fm+nm! (),Fn(),Y):-directInvoke(Fm+n-m!(),Fn(),Y);
[0102] 根据推导规则R1:Invoke(onClick(),Fm(),09):_directInvoke(onClick(), Fn(),09);
[0103]根据推导规则M:Invoke(Fm(),Fn(),16)「Invoke^C^Fm+iO,!6#Invoke(FA(),Fm+2 (),X) &…&Invoke(Fm+nm !(),Fn (),Y);
[0104] 根据推导规则R5:hasSenAction(Fn(),openStream(),NULL, 20):_hasSenApi(Fn(),openStream(),20);
[0105]根据推导规则R4:Invoke(onClick(),Fn(),09):_Invoke(onClick(),Fm(), O^&InvokeCF^),?^),^);
[0106] 根据推导规则R6:hasSenAction(onClick(),openStream〇,NULL, 09):_hasSenAction(Fn(),openStream(),NULL,20)&Invoke(onClick(),Fn(),09);
[0107] 我们可以得到该应用包含敏感行为(onClickO,openStream(),NULL)。该例中敏 感API未对敏感数据进行操作,所以敏感数据设为NULL。
[0108] 第五步:对第四步中得到的敏感行为,我们需要将其中UI控件替换为UI上的文 本。在本例的代码片段中,我们可以找到该按钮的id为2131296347,将其转换为16进制数 7F09005B。在第一步中所得layout文件中可以找到该按钮id,并且得到该按钮上的文本 为"查看详细页面"。由此我们得到敏感行为("查看详细页面",openStream(),NULL),将 其中的API改为其所属类型,最终得到该应用包含敏感行为("查看详细页面",Internet, NULL)。所举代码片段情况较为简单,若文本较长或者敏感数据存在,还需作相应处理。
[0109] 第六步:从第一步中所得的AndroidManifest.xml文件中我们可以得到应用所包 含的允许请求列表,将是否包含某种请求作为应用的特征之一。同时将应用是否包含某种 敏感行为作为应用的特征之一。本例中应用的特征值如下所示。
[0110] 应用名:wdj
[0111] 是否包含敏感行为("查看详细页面",Internet,NULL) :1
[0112] 是否包含敏感行为("确定",Internet,UserAccount) :1
[0113] 是否包含敏感行为("安装",Install,NULL) :1
[0114] 是否包含敏感行为("发送",SendMessage,Message) :0
[0115] 是否包含敏感行为("同步通讯录",Internet,AddressBook) :1
[0116] 是否包含允许请求〃android,permission.ACCESS_WIFI_STATE" :1
[0117] 是否包含允许请求〃android,permission.READ_PH0NE_STATE" :1
[0118] 是否包含允许请求〃android,permission.ACCESS+NETWORI^STATE" :1
[0119] 是否包含允许请求〃android,permission.INTERNET" :1
[0120] 是否包含允许请求〃android,permission.GET_ACC0UNTS" :1
[0121] 是否包含允许请求〃android,permission.READ_C0NTACTS" :1
[0122] 是否包含允许请求〃android,permission.SENS0R_ENABLE" :0
[0123] 是否包含允许请求〃android,permission.READ_SMS" :1
[0124] 是否包含允许请求〃android,permission.RECEIVE_SMS" :1
[0125] 是否包含允许请求〃android,permission.WAKE_L0CK〃: 1
[0126] 将η个已知安全性的应用进行如上的特征提取后,将它们综合为一个特征矩阵, 即可得到我们所需训练数据集。
[0127] 第七步:使用支持向量机算法,判断安卓应用的安全性。支持向量机算法首 先将向量映射到一个高维空间,然后再在这个空间中求广义最优分类面。公式如下, /(X) = <ρ(ωτ
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1