一种基于图卷积的恶意软件API调用序列检测方法与流程

专利2022-06-29  111


本发明涉及网络安全技术领域,更具体地,涉及一种基于图卷积的恶意软件api调用序列检测方法。



背景技术:

现有的恶意软件检测技术主要包括静态检测与动态检测,其中静态检测主要是指在不运行软件的条件下,分析程序的二进制文件内容从而实现恶意软件检测,其主要技术包括汇编代码分析、文件头分析、文件图像分析等,一般可以给出恶意软件的特征码用于后续检测;动态检测则通过对软件运行时的行为进行监测和记录,分析并识别其中的异常行为实现恶意软件检测的目的,能够很好地抵抗代码混淆等静态保护措施。

目前主流的分析恶意软件方法为动态检测,而现有的基于深度学习的恶意行为检测方法大多以api函数名序列作为分析对象,然而这些方法并不能充分地利用api调用序列中的信息。目前现有的基于深度学习的恶意行为检测方法仅仅将api函数名序列作为序列进行建模,没有考虑api调用之间的各种关系;此外,现有的基于深度学习的恶意行为检测方法仅仅把文件名、注册表项等参数作为普通字符串进行处理,不能很好地利用这些文件和注册表项本身的性质。



技术实现要素:

本发明为克服上述现有技术所述的没有考虑api调用之间的各种关系、无法充分利用api参数的缺陷,提供一种基于图卷积的恶意软件api调用序列检测方法。

为解决上述技术问题,本发明的技术方案如下:

一种基于图卷积的恶意软件api调用序列检测方法,包括以下步骤:

s1:采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,其中,所述api调用序列信息包括api函数和api参数;

s2:对所述api调用序列信息进行向量化处理;

s3:根据所述经过向量化处理的api调用序列信息,抽取所述api函数的参数关系、依赖关系以及顺序关系;

s4:根据所述经过向量化处理的api调用序列信息以及所述抽取的依赖关系建立api调用图;

s5:将所述api调用图输入到图卷积神经网络中进行训练,得到恶意软件检测网络模型;

s6:将待检测的可执行文件运行时的进程及子进程的api调用序列信息进行采集,执行s2~s4步骤得到所述待检测的可执行文件的api调用图,然后将所述待检测的可执行文件的api调用图输入所述恶意软件检测网络模型中,若所述恶意软件检测网络模型的输出结果为1,则表示判定结果为恶意软件;若所述恶意软件检测网络模型的输出结果为0,则表示判定结果为正常软件。

本技术方案中,采用将api调用访问的文件和注册表项编码作为向量,同时结合api之间的依赖关系为将api调用序列建立api调用图,利用图卷积网络构建恶意软件监测模型,并将api调用图及其标签作为输入对所述恶意软件检测模型进行训练,得到完成训练的恶意软件检测模型应用于恶意软件api调用序列检测。

优选地,所述s1步骤中,采用动态分析工具采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,通过反病毒引擎或人工分析得到所述软件样本的标签并记录。

优选地,所述api调用序列信息中的api函数包括但不仅限于函数名、进程id、调用时间、线程id、返回值;所述api调用序列信息中的api参数包括但不仅限于访问的文件名、访问的注册表路径、访问的动态链接库名、文件/注册表句柄、指针。

优选地,所述s2步骤中,对所述api调用序列信息进行向量化处理的具体步骤包括:

s21:采用word2vec算法对所述api调用序列信息中的函数名进行向量化,得到各函数名的向量化表示;

s22:采用metapath2vec算法对所述api调用序列信息中的访问的文件名进行向量化,得到文件名的向量化表示;

s23:采用metapath2vec算法对所述api调用序列信息中的访问的注册表路径进行向量化,得到注册表路径的向量化表示。

优选地,所述s21步骤中,其具体步骤包括:对所述api调用序列信息进行处理,提取所述api调用序列信息中的函数名,并将所述函数名根据调用时间进行排序,获得函数名序列,然后采用word2vec算法对所述函数名序列进行向量化处理,得到所述函数名序列中各函数名的向量化表示。

优选地,所述s22步骤中,其具体步骤包括:对所述调用序列信息进行统计,获得所有访问的文件名集合sf;以所述文件名集合sf中的文件名以及软件作为节点,以软件与文件访问关系作为边,建立文件访问关系图,然后在所述文件访问关系图上采用metapath2vec算法进行节点嵌入,得到文件名的向量化表示。

优选地,所述s23步骤中,其具体步骤包括:对所述调用序列信息进行统计,获得所有访问的注册表路径集合sreg;以所述注册表路径集合sreg中的注册表项和软件作为节点,以所述注册表路径集合sreg中的软件与注册表的访问关系作为边,建立注册表访问关系图,然后在所述注册表访问关系图上采用metapath2vec算法进行节点嵌入,获得注册表路径的向量化表示。

优选地,所述s3步骤中,抽取所述api函数的参数关系、依赖关系以及顺序关系的具体步骤包括:

s31:抽取所述api函数的参数关系:若某个api调用使用了文件名或注册表作为参数,则表示api调用与该文件或注册表存在参数关系;

s32:抽取所述api函数的参数依赖关系:对每一个api调用序列,遍历其中api调用参数中的指针或句柄,若api调用apia时使用了由api调用apia返回或修改的指针或句柄作为参数,则表示调用apib在参数上依赖于调用apia,存在依赖关系;

s33:抽取所述api函数的参数顺序关系:在同一程序中,若api调用apib在api调用apia之后调用,则表示调用apib在参数上与调用apia存在顺序关系;

其中,apia和apib表示api函数。

优选地,所述s4步骤中,建立api调用图的具体步骤包括:

s41:对于每个所述api调用序列信息,将api调用的函数名、访问的文件名、访问的注册表路径作为节点,并在每个节点上附加相应的向量化表示;

s42:在所述节点的基础上,根据所述api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边,并为每条有向边附加一个表示关系类型的向量

优选地,所述s42步骤中,根据所述api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边的具体步骤包括:

1)根据所述api函数的参数关系,由api的函数名节点向相应的存在参数关系的参数节点连接一条有向边;

2)根据所述api函数的参数依赖关系,由存在参数依赖关系的apia的函数名节点向apib的函数名节点连接一条有向边;

3)根据所述api函数的参数顺序关系,由存在顺序关系的apia的函数名节点向apib的函数名节点连接一条有向边。

与现有技术相比,本发明技术方案的有益效果是:采用将api调用访问的文件和注册表项编码为向量的方法,同时结合api调用之间的参数关系、时序关系以及依赖关系,将api调用序列建模为api调用图,输入到图卷积神经网络中训练,构建恶意软件检测模型,能够结合更全面的信息,且信息的组织结构更加灵活,能够有效提高恶意软件api调用序列检测的准确率。

附图说明

图1为本发明的基于图卷积的恶意软件api调用序列检测方法的流程图。

图2为实施例1的文件访问图。

图3为实施例1的注册表访问图。

图4为实施例1的api调用图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;

对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

本实施例提出一种基于图卷积的恶意软件api调用序列检测方法,如图1所示,为本实施例的基于图卷积的恶意软件api调用序列检测方法的流程图。

本实施例提出的基于图卷积的恶意软件api调用序列检测方法中,包括以下步骤:

s1:采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,其中,api调用序列信息包括api函数和api参数。

本实施例中,采用动态分析工具采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,通过反病毒引擎或人工分析得到软件样本的标签并记录。其中,调用序列信息中的api函数包括函数名、进程id、调用时间、线程id、返回值,api参数包括访问的文件名、访问的注册表路径、访问的动态链接库名、文件/注册表句柄、指针。

s2:对api调用序列信息进行向量化处理;其具体步骤如下:

s21:采用word2vec算法对api调用序列信息中的函数名进行向量化,得到各函数名的向量化表示,具体的,提取所述api调用序列信息中的函数名,并将函数名根据调用时间进行排序,获得函数名序列,然后采用word2vec算法对所述函数名序列进行向量化处理,得到函数名序列中各函数名的向量化表示;

s22:采用metapath2vec算法对api调用序列信息中的访问的文件名进行向量化,得到文件名的向量化表示,具体的,对调用序列信息进行统计,获得所有访问的文件名集合sf,以文件名集合sf中的文件名以及软件作为节点,以软件与文件访问关系作为边,建立文件访问关系图,然后在所述文件访问关系图上采用metapath2vec算法进行节点嵌入,得到文件名的向量化表示;

s23:采用metapath2vec算法对api调用序列信息中的访问的注册表路径进行向量化,得到注册表路径的向量化表示,具体的,获得所有访问的注册表路径集合sreg,以注册表路径集合sreg中的注册表项和软件作为节点,以所述注册表路径集合sreg中的软件与注册表的访问关系作为边,建立注册表访问关系图,然后在注册表访问关系图上采用metapath2vec算法进行节点嵌入,获得注册表路径的向量化表示。

s3:根据经过向量化处理的api调用序列信息,抽取api函数的参数关系、依赖关系以及顺序关系;其具体步骤如下:

s31:抽取api函数的参数关系:若某个api调用使用了文件名或注册表作为参数,则表示api调用与该文件或注册表存在参数关系;

s32:抽取api函数的参数依赖关系:对每一个api调用序列,遍历其中api调用参数中的指针或句柄,若api调用apia时使用了由api调用apia返回或修改的指针或句柄作为参数,则表示调用apib在参数上依赖于调用apia,存在依赖关系;

s33:抽取api函数的参数顺序关系:在同一程序中,若api调用apib在api调用apia之后调用,则表示调用apib在参数上与调用apia存在顺序关系;

其中,apia和apib表示api函数。

s4:根据经过向量化处理的api调用序列信息以及抽取的依赖关系建立api调用图;其具体步骤如下:

s41:对于每个api调用序列信息,将api调用的函数名、访问的文件名、访问的注册表路径作为节点,并在每个节点上附加相应的向量化表示;

s42:在节点的基础上,根据api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边,并为每条有向边附加一个表示关系类型的向量

s5:将api调用图以及通过反病毒引擎或人工分析得到软件样本的标签输入到图卷积神经网络中进行训练,得到恶意软件检测网络模型;

s6:将待检测的可执行文件运行时的进程及子进程的api调用序列信息进行采集,执行s2~s4步骤得到待检测的可执行文件的api调用图,然后将待检测的可执行文件的api调用图输入恶意软件检测网络模型中,若恶意软件检测网络模型的输出结果为1,则表示判定结果为恶意软件;若恶意软件检测网络模型的输出结果为0,则表示判定结果为正常软件。

在具体实施过程中,首先,采用各种动态分析软件如沙箱、代码插桩工具对大量软件样本运行时产生的api调用信息进行收集,并通过反病毒引擎或人工分析得到软件样本的标签并记录,其中,api调用信息包括软件样本自身的调用信息及其子进程的调用信息。

本实施例中进行了6个api调用,对于每一个次api调用,都会有一个对应的字典存储api调用的函数名、调用时间、进程id、线程id以及参数等信息。

然后,对所采集的api调用序列信息进行向量化处理,此步骤主要对函数名、文件名以及注册表项进行向量化操作。对于函数名,本实施例将从api调用序列中提取函数名序列,并利用word2vec算法实现函数名的向量化。对于文件和注册表,本实施例将利用程序与它们之间的访问关系以及他们自身的路径来构建图表示,然后利用metapath2vec算法实现对文件与注册表的向量化。

本实施例中,对每个程序的api调用序列进行遍历,抽取出其中每个api调用的函数名,得到api函数名序列。对于api调用序列,我们将得到的api函数名序列为s1=["ntopenkey","ntqueryvaluekey","ntclose","ntcreatefile","ntwritefile","ntclose"],然后利用所有api函数名序列中出现过的函数名构建api函数名集合dict,将dict集合中的每个元素进行one-hot编码,并将函数名序列中的函数名替换为对应的one-hot编码,获得编码后的函数名序列,对此序列应用word2vec算法,为每一个api函数名生成函数名的向量化表示。

对于文件路径,本实施例对每个程序的api调用序列进行统计分析,提取出每个文件读写过的文件路径集合。对于api调用序列,当发现该程序对一个文件进行了读写操作,因此该程序访问的文件路径集合为:

f={"c:\\users\\weilong\\appdata\\local\\temp\\06ea48657f7e9f20bb7a3099f073b9fbe54d4f46c9829024ffd2ebbd066e060f.dll"},

将文件路径按照路径关系组织为一个树状结构,树状结构的内部节点代表目录,叶节点代表相应的文件。同时将每个可执行程序也作为节点加入到图中,如果程序在运行过程中读写过某个文件,那么在程序节点与文件节点之间连接一条无向边。这样可以构建一个由磁盘文件、目录以及可执行程序组成的无向图,该无向图不仅保留了各个文件的路径,而且还保留了程序对文件的读写关系。例如,若我们对三个可执行文件的api调用序列进行分析,得到它们的文件访问集合并构建文件访问图,其集合具体如下:

f1={"c:\\windows\\system32\\mscoree.dll.local","c:\\windows\\microsoft.net\\framework\\v2.0.50727\\mscoreei.dll","c:\\windows\\microsoft.net\\framework\\upgrades.2.0.50727\\mscoreei.dll"};

f2={"c:\\users\\weilong\\appdata\\local\\temp\\config.json"};

f3={"c:\\windows\\globalization\\sorting\\sortdefault.nls","c:\\users\\user1\\appdata\\local\\temp\\crypt32.dll"},

如图2所示,为本实施例中由上述三个集合构建的文件访问图,然后选取一种metapath模式,对获得的文件访问图应用metapath2vec算法,获得每个文件和路径的向量表示。

对于注册表路径,对每个程序的api调用序列进行统计分析,提取出每个程序访问或修改过的注册表路径。例如,对于图1中的api调用序列进行分析,获得的注册表路径集合为:

reg={"hkey_current_user\\controlpanel\\desktop\\preferreduilanguages","hkey_current_user\\controlpanel\\desktop"},

然后将注册表路径按照路径关系组织为一个树状结构,树状结构中的内部节点代表一个目录,各节点代表相应的注册表项。同时将每个程序也作为节点加入到图中,如果该程序在运行过程中访问过某个注册表项,那么在程序与注册表之间连接一条无向边。这样就可以构建一个由注册表、注册表目录以及可执行程序组成的、包含了可执行程序与注册表之间访问关系的无向图。当我们对三个api调用序列进行分析,得到的api访问集合如下:

reg1={"hkey_current_user\\software\\borland\\locales","hkey_current_user\\software\\embarcadero\\locales"};

reg2={"hkey_local_machine\\software\\microsoft\\windowsnt\\currentversion\\gre_initialize","hkey_local_machine\\software\\microsoft\\windowsnt\\currentversion\\gre_initialize\\disablemetafiles"};

reg3={"key_local_machine\\software\\microsoft\\oleaut"}。

如图3所示,为本实施例中由上述三个集合构建的注册表访问图,然后选取一种metapath模式,对上述获得的注册表访问图应用metapath2vec算法,获得每个注册表项的向量化表示。

对于api调用序列中出现的函数,抽取api函数之间、函数与参数之间依赖关系。其中,若某个api调用使用了文件名或者注册表作为参数,则称api调用与该文件或注册表存在参数关系;若在同一程序中,api调用b在api调用a之后紧接着被调用,则称调用a与调用b之间存在顺序关系;对每一个api调用序列,遍历其中api调用参数中的句柄与地址,如果调用a对句柄或地址的内容进行了修改,且调用b使用该句柄或地址,则称调用b在参数上依赖于调用a。

完成api函数的参数关系、依赖关系以及顺序关系的抽取后,根据经过向量化处理的api调用序列信息以及抽取的依赖关系建立api调用图,其中,对于每个api调用序列,将api调用的函数名、访问的文件以及访问的注册表作为节点,并在每个节点上附加相应的向量表示;在节点的基础上,根据api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边,并为每条有向边附加一个表示关系类型的向量完成api调用图的构建。如图4所示,为本实施例中根据上述api调用序列生成的api调用图。

将api调用图及其标签输入到现有的图卷积神经网络中进行训练,得到最终的恶意软件检测模型。在实际应用中,将待检测的可执行文件运行时的进程及子进程的api调用序列信息进行采集,构建待检测的可执行文件的api调用图,然后将待检测的可执行文件的api调用图输入上述完成训练的恶意软件检测网络模型中,若恶意软件检测网络模型的输出结果为1,则表示判定结果为恶意软件;若恶意软件检测网络模型的输出结果为0,则表示判定结果为正常软件。

本实施例中,采用将api调用访问的文件和注册表项编码为向量的方法,同时结合api调用之间的参数关系、时序关系以及依赖关系,将api调用序列建模为api调用图,输入到图卷积神经网络中训练,构建恶意软件检测模型,能够结合更全面的信息,且信息的组织结构更加灵活,能够有效提高恶意软件api调用序列检测的准确率。此外,结合图卷积神经网络进行模型构建,其采用的图卷积算法中的卷积操作可以并行进行,能够有效减少训练时间。

相同或相似的标号对应相同或相似的部件;

附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。


技术特征:

1.一种基于图卷积的恶意软件api调用序列检测方法,其特征在于,包括以下步骤:

s1:采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,其中,所述api调用序列信息包括api函数和api参数;

s2:对所述api调用序列信息进行向量化处理;

s3:根据所述经过向量化处理的api调用序列信息,抽取所述api函数的参数关系、依赖关系以及顺序关系;

s4:根据所述经过向量化处理的api调用序列信息以及所述抽取的依赖关系建立api调用图;

s5:将所述api调用图输入到图卷积神经网络中进行训练,得到恶意软件检测网络模型;

s6:将待检测的可执行文件运行时的进程及子进程的api调用序列信息进行采集,执行s2~s4步骤得到所述待检测的可执行文件的api调用图,然后将所述待检测的可执行文件的api调用图输入所述恶意软件检测网络模型中,若所述恶意软件检测网络模型的输出结果为1,则表示判定结果为恶意软件;若所述恶意软件检测网络模型的输出结果为0,则表示判定结果为正常软件。

2.根据权利要求1所述的恶意软件api调用序列检测方法,其特征在于:所述s1步骤中,采用动态分析工具采集并记录大量软件样本运行时的进程及子进程的api调用序列信息,通过反病毒引擎或人工分析得到所述软件样本的标签并记录。

3.根据权利要求2所述的恶意软件api调用序列检测方法,其特征在于:所述api调用序列信息中的api函数包括但不仅限于函数名、进程id、调用时间、线程id、返回值;所述api调用序列信息中的api参数包括但不仅限于访问的文件名、访问的注册表路径、访问的动态链接库名、文件/注册表句柄、指针。

4.根据权利要求3所述的恶意软件api调用序列检测方法,其特征在于:所述s2步骤中,对所述api调用序列信息进行向量化处理的具体步骤包括:

s21:采用word2vec算法对所述api调用序列信息中的函数名进行向量化,得到各函数名的向量化表示;

s22:采用metapath2vec算法对所述api调用序列信息中的访问的文件名进行向量化,得到文件名的向量化表示;

s23:采用metapath2vec算法对所述api调用序列信息中的访问的注册表路径进行向量化,得到注册表路径的向量化表示。

5.根据权利要求4所述的恶意软件api调用序列检测方法,其特征在于:所述s21步骤中,其具体步骤包括:对所述api调用序列信息进行处理,提取所述api调用序列信息中的函数名,并将所述函数名根据调用时间进行排序,获得函数名序列,然后采用word2vec算法对所述函数名序列进行向量化处理,得到所述函数名序列中各函数名的向量化表示。

6.根据权利要求4所述的恶意软件api调用序列检测方法,其特征在于:所述s22步骤中,其具体步骤包括:对所述调用序列信息进行统计,获得所有访问的文件名集合sf;以所述文件名集合sf中的文件名以及软件作为节点,以软件与文件访问关系作为边,建立文件访问关系图,然后在所述文件访问关系图上采用metapath2vec算法进行节点嵌入,得到文件名的向量化表示。

7.根据权利要求4所述的恶意软件api调用序列检测方法,其特征在于:所述s23步骤中,其具体步骤包括:对所述调用序列信息进行统计,获得所有访问的注册表路径集合sreg;以所述注册表路径集合sreg中的注册表项和软件作为节点,以所述注册表路径集合sreg中的软件与注册表的访问关系作为边,建立注册表访问关系图,然后在所述注册表访问关系图上采用metapath2vec算法进行节点嵌入,获得注册表路径的向量化表示。

8.根据权利要求3所述的恶意软件api调用序列检测方法,其特征在于:所述s3步骤中,抽取所述api函数的参数关系、依赖关系以及顺序关系的具体步骤包括:

s31:抽取所述api函数的参数关系:若某个api调用使用了文件名或注册表作为参数,则表示api调用与该文件或注册表存在参数关系;

s32:抽取所述api函数的参数依赖关系:对每一个api调用序列,遍历其中api调用参数中的指针或句柄,若api调用apia时使用了由api调用apia返回或修改的指针或句柄作为参数,则表示调用apib在参数上依赖于调用apia,存在依赖关系;

s33:抽取所述api函数的参数顺序关系:在同一程序中,若api调用apib在api调用apia之后调用,则表示调用apib在参数上与调用apia存在顺序关系;

其中,apia和apib表示api函数。

9.根据权利要求8所述的恶意软件api调用序列检测方法,其特征在于:所述s4步骤中,建立api调用图的具体步骤包括:

s41:对于每个所述api调用序列信息,将api调用的函数名、访问的文件名、访问的注册表路径作为节点,并在每个节点上附加相应的向量化表示;

s42:在所述节点的基础上,根据所述api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边,并为每条有向边附加一个表示关系类型的向量

10.根据权利要求9所述的恶意软件api调用序列检测方法,其特征在于:所述s42步骤中,根据所述api函数的参数关系、依赖关系以及顺序关系添加节点之间的有向边的具体步骤包括:

1)根据所述api函数的参数关系,由api的函数名节点向相应的存在参数关系的参数节点连接一条有向边;

2)根据所述api函数的参数依赖关系,由存在参数依赖关系的apia的函数名节点向apib的函数名节点连接一条有向边;

3)根据所述api函数的参数顺序关系,由存在顺序关系的apia的函数名节点向apib的函数名节点连接一条有向边。

技术总结
本发明提出一种基于图卷积的恶意软件API调用序列检测方法,包括以下步骤:采集并记录大量软件样本运行时的进程及子进程的API调用序列信息;对API调用序列信息进行向量化处理;抽取API函数的参数关系、依赖关系以及顺序关系;建立API调用图;将API调用图输入到图卷积神经网络中进行训练,得到恶意软件检测网络模型;将待检测的可执行文件运行时的进程及子进程的API调用序列信息进行采集,构建待检测的可执行文件的API调用图,然后将待检测的可执行文件的API调用图输入恶意软件检测网络模型中,若恶意软件检测网络模型的输出结果为1,则表示判定结果为恶意软件;若恶意软件检测网络模型的输出结果为0,则表示判定结果为正常软件。

技术研发人员:金舒原;李维龙
受保护的技术使用者:中山大学
技术研发日:2020.01.09
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-22139.html

最新回复(0)