基于GCN的安卓恶意软件检测模型
来源:用户上传
作者:
摘 要:函数调用图存在规模过大、无关信息过多等缺陷。为实现函数调用图的高效分析,对安卓恶意软件的恶意代码模式进行挖掘,提出一种基于图卷积神经网络(GCN)的敏感API调用模式,并设计相应的函数调用图精简方法,以及敏感API权重评价方法,有效降低了函数调用图规模,实现对敏感API调用模式的挖掘。检测模型综合了安卓恶意软件操作码特征、敏感权限特征、敏感函数调用频度特征,构建了基于多特征融合的安卓恶意软件检测系统,进一步提升了检测精度。数据集测试验证了API调用模式特征以及集成检测模型的有效性。
关键词:图嵌入;图卷积神经网络;恶意软件检测;多特征
DOI:10. 11907/rjdk. 192427 开放科学(资源服务)标识码(OSID):
中图分类号:TP309 文献标识码:A 文章编号:1672-7800(2020)007-0187-07
GCN-based Android Malware Detection Model
ZHANG Xue-tao, WANG Jin-shuang, SUN Meng
(Command & Control Engineering College, Army Engineering University of PLA, Nanjing 210007, China)
Abstract:The function call graph (FCG) of the APK is too large and carries redundant information. To achieve efficient analysis of the FCG, and represent the calling mode of sensitive APIs, we propose a sensitive API call mode feature. A function call graph reduction method and a sensitive API weight evaluation method are proposed, which effectively reduces the size of the FCG and realizes the mining of the calling mode of the sensitive API. Besides, opcode frequency feature, sensitive permission feature and API frequency feature are introduced for further detection model improvement. Experiment results show that the API call model feature and integrated detection model are effective.
Key Words:graph embedding; graph convolutional networks; malware detection; multi-feature
0 引言
受經济利益驱使,针对智能手机平台的攻击行为不断增长,恶意软件则是攻击行为的重要载体[1]。相关研究报告显示,Android平台是最大的移动智能设备终端系统平台,全球已经有超过10亿台安卓设备售出,GooglePlay应用商店下载量累计超过650亿次[2]。随着Android平台应用数量的快速增长,针对Android设备的恶意软件也在快速扩充。McAfee的年度报告显示,安卓平台累计检测到了1 200万个恶意软件样本,每年恶意软件增加250万[3]。随着安卓平台恶意软件数量不断增长,基于机器学习的安卓恶意软件检测技术应运而生。
现阶段安卓恶意软件获取多通过将恶意代码或广告等恶意模块植入良性软件产生。在安卓恶意软件产业链中已出现了例如TDKs的安卓勒索软件批量生成工具。Zhou等[4]指出,超过86%的安卓恶意软件由重打包产生,故多数同类型安卓恶意软件虽基于不同载体软件重打包获得,但同类型恶意软件之间多存在相同或相似的恶意代码执行模式。而基于敏感权限频度特征、操作码频度特征的检测方法,侧重于对恶意软件整体进行特征提取,无法准确对恶意软件中的恶意代码进行定位,导致面对大量待检测样本时无法有针对性地提取特征,且检测模型泛化性较差,存在误报率和漏报率较高的问题。
为对恶意代码模块的执行方式进行分析,准确获取恶意APK的关键特征,提升检测精度与效率,本文提出一种基于函数调用图(FCG)的敏感API调用模式特征。该方法首先提取待检测样本的FCG,通过本文提出的图精简方法对其中的低敏感度API节点进行删减,以降低数据处理负荷;基于图卷积神经网络(GCN)对精简后的函数调用图进行分析,提取特征,获取图中每个API节点的嵌入表示。敏感API节点在函数调用图中的嵌入表示携带了恶意代码模块的调用结构信息。实验证明该特征可有效表示程序的恶意代码部分结构信息,从而实现高效检测安卓恶意软件。基于多种特征集成判定提升检测模型性能。
为验证敏感API调用模式特征,以及多特征集成判定模型的有效性,本文基于4 780个良性样本以及5 600个恶意样本对单特征,在多特征情况下评估检测性能,测试结果显示本模型拥有优异的检测性能。本文主要贡献如下:①提出一种基于GCN的安卓恶意软件敏感API调用模式,使用图嵌入实现对恶意代码部分的函数调用结构信息挖掘;②提出图精简以及敏感API权重计算方法,有效降低检测系统的数据复杂度,提升了检测系统效率;③提出多元特征融合的安卓恶意软件检测模型,综合多种特征对安卓恶意软件进行判定,有效提升系统性能;④基于大量良性以及恶意安卓软件样本,对单个分类器、分类器联合、特征有效性等进行详尽的验证测试。 1 基础概念与相关工作
基于机器学习的安卓恶意软件检测方法,按照特征类型分为动态检测与静态检测。其中静态监测特征提取开销较小,但易混淆受干扰;动态检测特征提取开销较大。由smali中提取出的函数调用图特征属于静态特征的一种。
1.1 静态检测
静态检测主要对APK文件进行特征提取,在程序非运行状态下进行恶意程序的特征提取与匹配工作。常用的静态特征包括操作码序列、操作码频度、程序流图等。Huang等[5]对基于权限特征进行安卓恶意软件检测进行了全面评估,实验结果证明权限特征与安卓恶意软件间存在一定的相关性;Milosevic等 [6]基于APK源代码以及权限信息进行安卓恶意软件检测,取得了良好的检测效果;Wang等[7]基于恶意程序权限、程序意图等特征进行安卓恶意软件检测,基于集成检测的方法进一步提升了检测精度;Arp等[1]在其检测工作中 使用了APK中所有网络地址作为特征进行恶意软件检测,获得了94%的检测准确率;Sanz等[8]在基于权限的检测工作中融入字符串作为辅助特征,有效提升了模型检测性能。
1.2 动态检测
动态檢测需针对指定的恶意软件样本构造模拟运行环境进行测试与记录。面对海量的恶意程序,该种检测方法开销较大,导致应用场景受限,但可对经过混淆的恶意软件进行特征提取。常用的动态特征包括API调用、流量、系统运行分析等。Onwuzurike等 [9]基于马尔科夫链,对安卓恶意软件的API调用进行研究,测试结果证明其检测系统可根据API调用序列中的前后关系对未知恶意软件作出预测;Jung 等 [10]基于专家经验对API类别进行细分,进一步提升了基于API调用特征的安卓恶意软件检测系统精度;Saracino等 [11]基于系统调用、用户行为等动态特征,搭建Madam安卓恶意软件检测系统,在大规模数据测试中检测准确率达到96%以上。动态与静态特征结合可有效提升检测精度,如Idrees等[12]基于权限、程序意图等特征,对多种分类器集成方式进行实验,有效提升了系统检测精度;Coronado-De-Alba等 [13]基于随机森林以及决策树构建集成检测模型,同样获得了良好的检测效果。
1.3 图卷积神经网络及函数调用图
安卓恶意软件开发者常将恶意代码插入正常APK并进行重打包以获取恶意应用。安卓恶意软件在执行危险操作时,常依赖于特定的API函数,如在获取设备号码时常使用getVoiceMailNumber()函数,并搭配相应的API进行敏感信息传输。同类型的安卓恶意软件中常含有类似结构的恶意代码,故可通过对函数调用图中的恶意代码部分进行发掘,从而实现安卓恶意软件的检测。
1.3.1 函数调用图
函数调用图是控制流图的一种,用于反映程序中各个函数之间的调用关系。函数调用图可表示为:
其中,V表示图中所有顶点的结合,在APK的函数调用图中,每个顶点对应一个Android API;E表示函数之间的调用关系。通过APK-Tool或Androguard工具对APK进行反编译后,可从samli代码中提取API及调用关系,从而形成APK的函数调用图。
1.3.2 图卷积神经网络及图嵌入
图卷积神经网络(GCN)概念最早由Kipf等[14]于2016年提出。与卷积神经网络(CNN)仅适用于处理维度规则的数据相对应,GCN可以对任意结构化的数据进行处理,例如社交网络、知识图谱等,并对结构化数据的空间特征进行提取。
FCG可使用函数间的调用关系用拓扑图的形式对软件进行表征,而通过重打包获得的安卓恶意软件通常具有相同或相似的恶意代码结构,故可基于GCN对恶意代码部分的调用模式进行挖掘与表征。
图嵌入可以使用低维向量,表示图中各个节点的邻居节点情况与相对位置信息。在APK的函数调用图中,由于恶意代码执行逻辑相似,故对应的敏感API在图中有相近似的上下文调用关系。常用的图嵌入方法有DeepWalk、Node2vec、Walklets、基于GCN的图嵌入等。由于APK的函数调用图通常具有较大特征,因此GCN的图卷积方法基于迭代计算,可以使用较小的计算代价获取节点的嵌入表示。
2 基于敏感API调用模式特征的检测模型
本文检测模型主要使用敏感API调用模式特征作为主要特征,同时辅助Opcode频度信息、敏感权限特征以及API调用频度特征作为辅助特征。将所有特征合并送入分类器中以实现高精度的安卓恶意软件检测。检测模型整体结构如图1所示。
本检测系统基于opcode频度、敏感权限、API调用频度、敏感API调用模式4种特征进行安卓恶意软件检测,前3种特征常用于安卓恶意软件检测,拥有较强的适应性,但由于精度有限,故作为辅助特征。基于GCN的敏感API调用模式特征为本文提出的一种新型恶意软件特征,将在下文着重介绍。
2.1 API调用模式特征
为有效处理函数调用图并获取敏感API节点的嵌入表示,提取对应特征,实现恶意软件检测,本文提出函数调用图精简及敏感API嵌入计算方法,以最终获取敏感API的调用模式特征。
调用模式特征提取过程如图2所示。首先对APK进行解包,并从samli代码中提取调用关系,形成函数调用图,对函数调用图进行精简后,基于DGL计算每个节点的嵌入表示。
2.1.1 基于敏感API的函数调用图精简
由于现阶段APK规模较大,其函数调用图常包含数量庞大的API节点,其中多数为程序运行必需的普通节点,在引入无效信息的同时增加了检测系统的数据复杂度,降低了检测效率。为提升运行效率,检测系统首先对非敏感API节点进行初步删减。其中敏感API列表来自Rasthofe等[15]对于敏感API的分析工作,包含敏感API共 26 322个。 为在精简函数调用图的同时保留敏感API的原始调用结构,避免函数调用图精简过程中对有效数据造成破坏,本文提出一种半保留式精简方法。精简算法的API节点删减规则为:若某一节点为非敏感API节点,并且其邻居节点中不含有敏感API节点,则对该节点进行删除;若某一函数节点为非敏感API节点,其邻居节点中含有敏感API,则保留该节点。
以图3所示函数调用图为例,深色节点为敏感API节点,浅色节点代表一般API函数。左侧图形为原始函数调用图,按照上述函数调用图精简规则:由于4号节点是非敏感API节点,且其邻居节点中不含有敏感API节点,故在精简过程中4号节点及其相邻的边都被删除。精简后的示例函数调用图如图3右侧所示。
伪代码如下:
Function FCG Slim
1: Function FCG Slim:
2: Graph←Read gml file
3: List←Read Sensitive API List
4: For i From Graph.nodes
5: If i NOT IN List Then
6: If i.neighbor NOT IN List Then
7: Delete i
8: End
该算法可有效保证恶意代码部分敏感API函数以及相关函数的调用结构不被删减。经过精简的函数调用图可有效降低节点数量,提升处理效率。示例APK经过精简前后的函数调用图如图4所示。
如图4所示,经过精简后的函数调用图包含的节点数量明显减少,可有效降低对大规模函数调用图进行分析造成的计算资源消耗。
2.1.2 基于GCN的敏感API图嵌入
APK的函数调用图通常拥有复杂的网络结构,图形嵌入算法可作为降维算法的一种,将复杂高维空间中的图结构映射到低维空间中。GCN与CNN相似,在图结构上定义了卷积算子,可在迭代过程中不断扩大节点嵌入向量所包含的节点信息,计算过程如图5所示。
图5中,n0 ~ n4 表示函数调用图中5个API节点,每个API节点对应其状态向量h0 ~ h4(状态向量即API节点在函数调用图中的嵌入表示)。在嵌入计算过程中,对各节点的状态向量h进行随机初始化,以获取n0节点的新的嵌入表示h0new为例,f为非线性变换函数,计算方法如下:
图卷积神经网络中API嵌入表示过程就是信息在节点之间不断传播聚合再传播的过程,每个节点的嵌入表示均会获取邻居节点信息并进行更新;在下轮迭代中,携带了远端节点信息的嵌入表示会不断随着节点之间的连接进行传播。以图5为例,n0节点为敏感API节点,在迭代更新过程中该节点的嵌入表示将会携带其邻居节点信息,即敏感API在函数调用图中的嵌入表示将会携带一定的调用关系信息。对于API嵌入表示的有效性将在实验部分进行验证。
2.1.3 敏感API嵌入权重分配
由于所有APK样本中所包含的敏感API種类及数目不同,本检测系统基于TF-IDF方法对API函数的敏感程度进行衡量,并在测试中分别选取前10、15、20、 25、 30、35个敏感API函数的嵌入表示作为API调用模式特征,以确定最优的API数量。将特征送入分类器进行训练,以达成恶意软件检测目的。通过计算,敏感程度排名前30的API如表1所示。
2.2 辅助判定特征
(1)Opcode频度特征。Opcode是对编译后的安卓应用程序基于助记符的表示方法,由于其包含了程序的大量原始信息,常用于安卓恶意软件检测。本检测模型使用opcode频度作为子特征之一。首先对APK进行反汇编,并从所有smali文件中提取对应种类opcode数量。本方法以词袋模型为基础,共统计了256类opcode数量并将其表示为[α={α1,α2,α3,…,α256}, α∈N ]的特征向量。
(2)敏感权限特征。安卓恶意程序在执行恶意操作时需要申请对应的敏感权限,本方法基于AndroidManifest.xml文件提取APK安装时申请的权限列表作为特征,其中纳入统计范围的共120个权限项目,将其表示为长度为120的特征向量:[P={p1,p2,p3,?,p120}, p∈{0,1} ]。表示方法采用one-hot形式,当该APK申请了对应权限时,P取值为1,无对应权限申请时,取值为0。
(3)API调用频度特征。由于Android平台API数量众多,且部分API为APK在正常运行时的必选项,故本检测系统在API频度特征提取中,仅对部分敏感API进行频度统计,敏感API项基于TF-IDF计算得出权重排名的前200项。基于Androguard对APK进行解包后获取samli文件,统计相应敏感API项目的调用次数,并将其归一化为频度特征。
2.3 特征及分类器结构
本检测方法对4种恶意软件特征进行合并,形成调整矩阵,并使用基于CNN的分类模型对APK特征数据进行学习训练,最终获得恶意软件检测模型。
敏感API项由TF-IDF计算权重排名得出,并选取前n项敏感API的嵌入表示作为特征数据来源,每个API调用模式特征由10维向量表示,对每个待检测样本,特征可被表示为[napi×10]的特征矩阵。API频度特征、操作码频度特征、敏感权限频度3种辅助特征,经过PCA降维后附于API调用模式特征矩阵之后。
如图6所示,敏感API调用模式特征可表示为图左侧矩阵,辅助判定特征附于API调用模式特征后,构成整体特征矩阵。卷积核进行一维卷积操作提取特征向量,并进行后续运算。 分类模型如图7所示。
基于CNN的子分类层由三层一维卷积层构成,每个卷积层具有不同卷积核深度,以提取不同粒度的API调用模式特征,Drop Out层用于防止模型过拟合,模型最终判定结果通过全连接层输出。
3 实验测试与结果分析
首先基于可视化方法对API调用模式特征之间的区分度进行实验观察,随后使用上文提出的特征提取方法以及检测模型进行检测器训练与测试。
3.1 评价标准
模型的评价指标有准确率Precision、召回率Recall、F-score三个参数,参数计算方法如下:
式中TP为真阳率,FP为假阳率,TN为真阴率,FN为假阳率。在上式计算的参数中,漏报率越接近0说明检测效果越好,反之Recall越接近1则说明模型分类性能越强。
3.2 数据集及相关环境
多特征融合检测模型的运行及测试环境为CPU Intel(R) E5,16GB内存,GPU为GTX1080,120GB SSD+4TB HDD,基于Ubuntu16.04操作系统。实验数据集中恶意APK应用来自于VirusShare[16]病毒数据库以及Drebin安卓恶意软件检测数据集[1],良性样本由小米应用商城爬取并经过VirusTotal检测,保证良性样本数据集不包含其它类型样本。良性样本共计4 780个,恶意样本共计5 600个,样本总量为10 380。将其按照9∶1的比例随机划分为训练集和测试集。
3.3 测试方法
实验验证环节主要对分类器的判定精度等参数进行测试。首先基于数据分析方法对API调用模式特征进行可视化分析,对良性、恶意样本的API调用模式特征之间的区分度进行观察。实验测试中分别选取前20、25、30、35、40项敏感API的嵌入数据作为特征进行模型训练与测试,记录判定结果。
测试重点为本文提出的API调用模式特征的有效性验证,通过与其它工作进行性能对比,验证本多特征融合检测模型的有效性。
3.4 API调用模式特征有效性分析
为验证本文提出的API调用模式特征的有效性,并对基于该特征进行安卓恶意软件检测的可行性进行验证,本文首先从良性/恶意软件中提取API调用模式特征进行可视化,从三维空间对API调用模式之间的相似性进行分析,并基于API调用模式特征进行安卓恶意软件检测,进一步验证其有效性。
3.4.1 敏感API调用模式特征可视化分析
为验证API调用模式特征的有效性,本文首先对TF-IDF计算得出权重较高的部分API调用模式进行可视化,在三维空间中对良性/恶意样本的同一API调用模式进行观察,可视化结果如图8所示。
敏感API调用模式特征基于图嵌入,将每个API在函数调用图中的调用模式映射为5维向量。为方便在三维空间中进行可视化,本文基于PCA对API调用模式特征进行降维处理,并将其绘制于三维空间中。
图8中蓝色样本点代表良性样本API调用模式特征在三维空间中的映射,红色点代表恶意样本对应API的调用模式,每个子图均对应一种敏感API项。API调用模式特征在三维空间中的映射分布,可清晰体现出良性与恶意样本之间对同一敏感API存在不同的调用模式,且同一类别APK的API调用模式之间存在相似性。
但由于同一API可能存在多个调用模式,故可能出现如图8“setvalue()”API项特征对应的API调用模式分布:蓝色色块分多个区域聚集,说明对于该敏感API项,其在良性样本中存在多种调用模式。故在可视化后,在三维空间中存在分区域聚集特性。
3.4.2 基于敏感API调用模式特征的恶意软件检测
为验证基于敏感API调用模式特征的有效性,本文基于该特征实现了安卓恶意软件检测。实验环节分别选取权重排名前20、25、30、35、40的敏感API项目,并基于敏感API调用模式特征进行安卓恶意软件检测。对Precision,recall以及F-score参数指标进行记录,测试结果见表2。
将测试数据绘制于图9中。
测试结果显示,基于敏感API调用模式特征的安卓恶意软件检测子模型,可有效对良性/恶意软件进行区分,最佳检测精度可达到97.6%。随着采取敏感API数目的不断增长,其检测精度及其它性能均随之提升。采取的敏感API数目在30~35时,检测模型性能有所下降。经分析,检测模型性能下降是由于过多的API项目引入了过多无关API调用模式特征,且对应API项在良性/恶意APK中存在相同或相似的调用模式,给检测模型带来了过多的无关信息,从而对检测模型性能产生了负面影响。
实验结果显示,基于敏感API调用模式特征的安卓恶意软件检测模型,最佳API数目应在30项左右,且种类应与表1中所列项目相同或相似。
3.5 综合辅助特征的检测测试
上述测试环节仅适用于API调用模式特征作为检测依据。为进一步提升检测器性能,本文综合了操作码频度、敏感权限频度、敏感API调用频度3种辅助特征,并将其添加至特征矩阵中。对检测模型进行测试,测试结果如表3所示。
表3 集成检测性能
[分类器\&Precision\&Recall\&F-score\&集成检测模型\&0.993\&1.0\&0.996\&]
為客观评估本文提出的多特征集成检测模型,本文在相同数据集上对其它安卓恶意软件检测工作进行复现,以对比性能差异。Niall McLaughlin等[17]提出一种基于APK二进制数据的恶意软件检测方法,在测试中获得了良好的检测结果。Drebin是Daniel Arp等提出的多特征安卓恶意软件检测框架。与上述工作进行性能对比,模型测试数据如表4所示。 與相关安卓恶意软件检测工作进行对比,本文多特征安卓恶意软件检测模型拥有更高的检测精度,且F-score相较于其它工作最高,说明拥有更高的综合检测性能。
4 结语
本文提出了一种新型敏感API调用模式特征,该特征基于GCN对函数调用图进行API节点的嵌入计算,实现对API节点在函数调用图中的调用模式表征;针对函数调用图规模较大的问题,提出一种半保留式的函数调用图精简方法,有效降低了对函数调用图进行分析时的数据复杂度;基于卷积神经网络搭建了对应的子分类器,有效实现了安卓恶意软件检测。分析与实验测试结果显示,敏感API调用模式特征可有效对APK中的函数调用模式进行表征,在采用权重排序前30的敏感API项的调用模式作为特征时,可获得97.6%的检测精度,相较于其它频度特征可携带更多有效信息,实现高效的安卓恶意软件检测。
本检测模型联合了Opcode频度特征、API频度特征、敏感权限特征,将所有特征集成至同一特征矩阵中,进一步提升了检测模型性能,检测精度达到99%。与同类工作进行比较,本文拥有更优的检测性能,验证了基于多种特征融合的安卓恶意软件检测模型的有效性。
未来可对本检测模型中的敏感API检测机制进行升级,进一步细化API的挑选机制,从而减少待分析的API数目,达到提升检测效率的目的。
参考文献:
[1] ARP D, SPREITZENBARTH M, HUBNER M, et al. DREBIN: effective and explainable detection of android malware in your pocket[C]. Network and Distributed System Security Symposium,2016.
[2] SMARTPHONE O S. Available martphone-operating-systems[EB/OL]. https://www.statista.com/statistics/263453/global-market-share- held.
[3] MCAFEE LABS. Threat predictions report[R]. SantaClara:McAfeeLabs,2016.
[4] ZHOU Y,JIANG X. Dissecting Android malware: characterization and evolution[J]. Proceedings of IEEE Security and Privacy, 2012(5):95-109.
[5] HUANG CY, TSAI YT, HSU CH. Performance evaluation on permission-based detection for Android malware[J]. Advances in Intelligent Systems and Applications, 2017(9): 111-120.
[6] MILOSEVIC N,DEHGHANTANHA A,CHOO K K R. Machine learning aided Android malware classification[J]. Computers & Electrical Engineering,2017,61(7):266-274.
[7] WANG W,LI Y,WANG X, et al. Detecting Android malicious APPs and categorizing benign APPs with ensemble of classifiers[J]. Future Generation Computer Systems, 2017,78(1):987-994.
[8] SANZ B,SANTOS I,LAORDEN C,et al. PUMA: permission usage to de- tect malware in Android[M]. Berlin: Springer,2013.
[9] ONWUZURIKE L, MARICONTI E, ANDRIOTIS P, et al. Mamadroid: detecting android malware by building Markov chains of behavioral models[C]. Network and Distributed System Security Symposium,2016:1-15.
[10] JUNG J,KIM H,SHIN D,et al. Android malware detection based on useful API calls and machine learning[C]. IEEE First International Conference on Artificial Intelligence and Knowledge Engineering,2018:175-178.
[11] SARACINO A,SGANDURRA D,DINI G,et al. MADAM: effective and efficient behavior-based Android malware detection and prevention[J]. IEEE Transactions on Dependable & Secure Computing, 2018 (99):1-11. [12] IDREES F,RAJARAJAN M, CONTI M, et al.PIndroid: a novel android malware detection system using ensemble learning methods[J]. Computer and Security, 2017,68(7):36-46.
[13] CORONADO DE ALBA L D, RODRIGUEZ-MOTA A, ESCAMILLA-AMBROSIO P J.Feature selection and ensemble of classifiers for Android malware detection[C]?2016 8th IEEE Latin-American Conference on Communications, 2016(11): 1-6.
[14] KIP F,THOMAS N, WELLING M. Semi-supervised classification with graph convolutional networks[DB/OL]. https://arxiv.org/pdf/1609.02907.pdf.
[15] RASTHOFER S,ARZT S,BODDEN E. A machine-learning approach for classifying and categorizing Android sources and sinks[C]. Proceedings of Network and Distributed System Security, 2014:1-15.
[16] MENG Q Q. Virusshare apk[EB/OL]. https://virusshare.com/. Accessed 2018.
[17] MCLAUGHLIN N, RINCON J M D, KANG B J, et al. Deep android malware detection[C]. ACM on Conference on Data & Application Security & Privacy. 2017:301-308.
(責任编辑:杜能钢)
转载注明来源:https://www.xzbu.com/8/view-15285573.htm