一种基于程序逻辑识别同源攻击的方法、装置及存储设备
技术领域
本发明实施例涉及网络安全领域,尤其涉及一种基于程序逻辑识别同源攻击的方法、装置及存储设备。
背景技术
目前,恶意代码伪装技术发展迅速,规模增长过快,在无法通过ip、域名等方式追溯恶意代码的来源时,人们难以确认该恶意代码的编写者身份,更无法对其进行攻击组织划分,推测其攻击手段和攻击目的。
发明内容
基于上述存在的问题,本发明实施例提供一种基于程序逻辑识别同源攻击的方法、装置及存储设备,用以解决在无法通过IP或者域名等方式追溯恶意代码的来源时,难以对恶意代码编写者进行身份确认及攻击组织划分的问题。
本发明实施例公开一种基于程序逻辑识别同源攻击的方法,包括:
采集恶意代码;
对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;
将恶意代码调用系统API的第一有向图转化成n维向量,并存储;
与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
进一步地,对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图,具体为:判断恶意代码编程语言,得到若干个单一编程语言的恶意代码块;构建若干个恶意代码块调用系统API的第二有向图;将若干个恶意代码块调用系统API的第二有向图拼接,得到完整的恶意代码调用系统API的第一有向图。
进一步地,构建若干个恶意代码块调用系统API的第二有向图,具体为:提取恶意代码块中每个代码自定义函数的逻辑结构,并进行分析;构建每个代码自定义函数的第一数据流转图;将每个代码自定义函数的第一数据流转图拼接,得到完整的恶意代码块运行时的第二数据流转图;利用系统API替换第二数据流转图中的函数节点,将一条链路中相邻的变量节点合并,得到一个恶意代码块调用系统API的第二有向图;其中,数据流转图用以表述代码自定义函数对变量及函数的利用情况。
进一步地,构建每个代码自定义函数的第一数据流转图,具体为:将分析出的语句中的变量及语句中的调用函数作为节点,以逻辑结构为边,构建每个代码自定义函数的第一数据流转图。
进一步地,将每个代码自定义函数的第一数据流转图拼接,具体为:
构建恶意代码块中的最外层自定义函数的第一数据流转图,根据最外层自定义函数对其他函数的调用关系,用其他函数的第一数据流转图替换最外层自定义函数的第一数据流转图中其他函数的节点。
进一步地,利用系统API替换第二数据流转图中的函数节点之前,还包括:
建立函数-系统API映射表。
本发明实施例公开一种基于程序逻辑识别同源攻击的装置,包括存储器和处理器,所述存储器用于存储多条指令,所述处理器用于加载所述存储器中存储的指令以执行:采集恶意代码;对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;将恶意代码调用系统API的第一有向图转化成n维向量,并存储;与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
进一步地,所述处理器还用于加载所述存储器中存储的指令以执行:
对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图,具体为:判断恶意代码编程语言,得到若干个单一编程语言的恶意代码块;构建若干个恶意代码块调用系统API的第二有向图;将若干个恶意代码块调用系统API的第二有向图拼接,得到完整的恶意代码调用系统API的第一有向图。
进一步地,所述处理器还用于加载所述存储器中存储的指令以执行:
构建若干个恶意代码块调用系统API的第二有向图,具体为:提取恶意代码块中每个代码自定义函数的逻辑结构,并进行分析;构建每个代码自定义函数的第一数据流转图;将每个代码自定义函数的第一数据流转图拼接,得到完整的恶意代码块运行时的第二数据流转图;利用系统API替换第二数据流转图中的函数节点,将一条链路中相邻的变量节点合并,得到一个恶意代码块调用系统API的第二有向图;其中,数据流转图用以表述代码自定义函数对变量及函数的利用情况。
进一步地,所述处理器还用于加载所述存储器中存储的指令以执行:
构建每个代码自定义函数的第一数据流转图,具体为:将分析出的语句中的变量及语句中的调用函数作为节点,以逻辑结构为边,构建每个代码自定义函数的第一数据流转图。
进一步地,所述处理器还用于加载所述存储器中存储的指令以执行:
将每个代码自定义函数的第一数据流转图拼接,具体为:
构建恶意代码块中的最外层自定义函数的第一数据流转图,根据最外层自定义函数对其他函数的调用关系,用其他函数的第一数据流转图替换最外层自定义函数的第一数据流转图中其他函数的节点。
进一步地,所述处理器还用于加载所述存储器中存储的指令以执行:
利用系统API替换第二数据流转图中的函数节点之前,还包括:
建立函数-系统API映射表。
本发明实施例同时公开一种基于程序逻辑识别同源攻击的装置,包括:
恶意代码采集模块:用于采集恶意代码;
分析构建模块:用于对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;
转化存储模块:用于将恶意代码调用系统API的第一有向图转化成n维向量,并存储;
判断模块:用于与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
本发明实施例提供了一种存储设备,所述存储设备中存储有多条指令,所述指令适于由处理器加载并执行本发明实施例提供的基于程序逻辑识别同源攻击的方法步骤。
与现有技术相比,本发明提供的一种基于程序逻辑识别同源攻击的方法、装置及存储设备,至少实现了如下的有益效果:
采集恶意代码;对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;将恶意代码调用系统API的第一有向图转化成n维向量,并存储;与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。由于恶意代码执行时都是利用操作系统底层重要API进行攻击,所以相同的编写者编写的恶意代码对系统API的利用逻辑往往会具有一些相似性,因此将恶意代码的代码结构转化成恶意代码执行时对操作系统底层重要API调用的有向图,可以通过调用有向图分析代码编写者对操作系统底层API的调用逻辑,从而挖掘并进一步确定该恶意代码编写者的身份及其所属的攻击组织,有助于推测其攻击手段和攻击目的。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于程序逻辑识别同源攻击的方法流程图;
图2为本发明实施例提供的恶意代码静态分析及构建恶意代码调用系统API的第一有向图的方法流程图;
图3为本发明实施例提供的基于程序逻辑识别同源攻击的装置结构图;
图4为本发明实施例提供的又一基于程序逻辑识别同源攻击的装置结构图。
具体实施方式
为了使本发明的目的,技术方案和优点更加清楚,下面结合附图,对本发明实施例提供的基于程序逻辑识别同源攻击的方法的具体实施方式进行详细地说明。应当理解,下面所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
目前,恶意代码伪装技术发展迅速,规模增长过快,在无法通过ip、域名等方式追溯恶意代码的来源时,人们难以确认该恶意代码的编写者身份,无法对其进行攻击组织划分,推测其攻击手段和攻击目的。由于恶意代码执行时都是利用操作系统底层重要API进行攻击,所以相同的攻击者编写的恶意代码对系统API的利用逻辑往往会具有一些相似性。
基于此,本发明实施例提供了基于程序逻辑识别同源攻击的方法流程图,如图1所示,包括:
步骤11,采集恶意代码;
步骤12,对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;
步骤13,将恶意代码调用系统API的第一有向图转化成n维向量,并存储;
步骤14,与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
对已知恶意代码样本也进行静态分析,构建已知恶意代码样本调用系统API的第一有向图,并转化成n维向量,并存储至恶意代码样本图库中。
其中,对恶意代码进行静态分析及构建恶意代码调用系统API的第一有向图的方法流程图,如图2所示,包括:
步骤121,判断恶意代码编程语言;
步骤122,得到若干个单一编程语言的恶意代码块;
例如,判断获取的恶意代码由python和c语言编写,根据编程语言对恶意代码进行切片,以两种编程语言交汇处为断点进行切割,最后获得若干个单一编程语言的恶意代码块。
步骤123,提取恶意代码块中每个代码自定义函数的逻辑结构,并进行分析;
分析单一编程语言的恶意代码块中的所有自定义函数,并提取出自定义函数的代码逻辑进行后程序切片分析,代码逻辑由顺序结构、分支结构、循环结构以及变量等因素构成。
步骤124,构建每个代码自定义函数的第一数据流转图;
将切片分析出的语句中的变量及语句中的调用函数作为节点,以逻辑结构为边,构建每个代码自定义函数的第一数据流转图,其中,数据流转图用以表述代码自定义函数对变量及函数的利用情况。
步骤125,将每个代码自定义函数的第一数据流转图拼接,得到完整的恶意代码块运行时的第二数据流转图;
其中,拼接过程为:构建恶意代码块中的最外层自定义函数的第一数据流转图,根据最外层自定义函数对其他函数的调用关系,用其他函数的第一数据流转图代替最外层自定义函数的第一数据流转图中其他函数的节点,得到完整的恶意代码块运行时的第二数据流转的图;其中,其他函数是相同编程语言编写的自定义函数和第三方库函数;恶意代码块运行时的第二数据流转图中的节点为变量、基础库自带函数和其他编程语言编写的自定义函数,例如hashlib.md5()、fp.writelines(xxx)等。
步骤126,利用系统API替换第二数据流转图中的函数节点,将一条链路中相邻的变量节点合并,得到一个恶意代码块调用系统API的第二有向图;
根据之前建立的函数-系统API映射表,利用系统API替换第二数据流转图中的函数节点;其中,函数-系统API映射表是根据不同编程语言中基础库自带函数运行时调用的系统API接口的关系,建立编程语言函数与系统API间的调用关系表;恶意代码块调用系统API的第二有向图以变量及系统API函数为节点。
步骤127,将若干个恶意代码块调用系统API的第二有向图拼接,得到完整的恶意代码调用系统API的第一有向图。
采用和步骤125中相似的方法,将若干个恶意代码块调用系统API的第二有向图拼接,得到完整的恶意代码调用系统API的第一有向图。
本发明实施例将恶意代码的代码结构转化成恶意代码执行时对操作系统底层重要API调用的有向图,通过调用有向图分析代码编写这对操作系统底层API的调用逻辑,从而挖掘并进一步确定该恶意代码编写者的身份和攻击组织,有助于推测其攻击手段和攻击目的。
本发明实施例还提供了一种基于程序逻辑识别同源攻击的装置,如图3所示,包括:所述装置包括存储器31和处理器32,所述存储器31用于存储多条指令,所述处理器32用于加载所述存储器31中存储的指令以执行:
采集恶意代码;对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;将恶意代码调用系统API的第一有向图转化成n维向量,并存储;与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
所述处理器32用于加载所述存储器31中存储的指令以执行:
对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图,具体为:判断恶意代码编写语言,得到若干个单一编程语言的恶意代码块;构建若干个所述恶意代码块调用系统API的第二有向图;将若干个所述恶意代码块调用系统API的第二有向图拼接,得到完整的恶意代码调用系统API的第一有向图。
所述处理器32用于加载所述存储器31中存储的指令以执行:
构建若干个所述恶意代码块调用系统API的第二有向图,具体为:提取恶意代码块中每个代码自定义函数的逻辑结构,并进行分析;构建每个代码自定义函数的第一数据流转图;将每个代码自定义函数的第一数据流转图拼接,得到完整的恶意代码块运行时的第二数据流转图;利用系统API替换第二数据流转图中的函数节点,将一条链路中相邻的变量节点合并,得到一个恶意代码块调用系统API的第二有向图;其中,数据流转图用以表述代码自定义函数对变量及函数的利用情况。
所述处理器32用于加载所述存储器31中存储的指令以执行:
构建每个代码自定义函数的第一数据流转图,具体为:将分析出的语句中的变量及语句中的调用函数作为节点,以逻辑结构为边,构建每个代码自定义函数的第一数据流转图。
所述处理器32用于加载所述存储器31中存储的指令以执行:
根据以下步骤判断所述文件路径下是否存在文件,具体为:构建恶意代码块中的最外层自定义函数的第一数据流转图,根据最外层自定义函数对其他函数的调用关系,用其他函数的第一数据流转图代替最外层自定义函数的第一数据流转图中其他函数的节点。
所述处理器32用于加载所述存储器31中存储的指令以执行:
利用系统API替换第二数据流转图中基础库自带函数节点之前,还包括:建立函数-系统API映射表。
本发明实施例同时提供了又一种基于程序逻辑识别同源攻击的装置,如图4所示,包括:
恶意代码采集模块41:用于采集恶意代码;
分析构建模块42:用于对恶意代码进行静态分析,构建恶意代码调用系统API的第一有向图;
转化存储模块43:用于将恶意代码调用系统API的第一有向图转化成n维向量,并存储;
判断模块44:与已知恶意代码样本的n维向量进行对比,计算相似度,判断恶意代码编写者身份。
本发明实施例还提供一种存储设备,所述存储设备中存储有多条指令,所述指令适于由处理器加载并执行本发明实施例提供的基于程序逻辑识别同源攻击的方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。