【技术实现步骤摘要】
一种基于切片代码依赖图语义学习的漏洞识别方法
[0001]本专利技术涉及漏洞检测
,具体是一种基于切片代码依赖图语义学习的漏洞识别方法。
技术介绍
[0002]当今大多数安全事件的发生主要源于系统或软件中存在的大量安全漏洞。但是,分析目标的源代码经常难以被直接访问。例如,一些公司购买二进制格式的固件来集成到其产品的硬件中;软件公司利用第三方代码和库来增强其专有代码,而这些库通常不包含源代码;航空航天、军事和银行等特殊生产系统中遗留的程序为二进制格式。在这些场景中,如果要检测错误或分析软件系统的安全性,可执行二进制代码是有关程序内容和行为的唯一信息来源。二进制代码是计算机可以直接解析的编程数据的基本形式,是由流(指令流或字节流)构成的。相比针对源代码的漏洞识别,二进制代码漏洞识别会面临一些更为复杂的挑战,如编译器的影响、反汇编困难、语义信息和符号信息的缺失等。
[0003]现有针对二进制代码的漏洞识别主要分为动态方法和静态方法。动态方法只能对程序中的部分代码进行测试,这往往会导致较高的漏报率。不仅如此,动态检测方 ...
【技术保护点】
【技术特征摘要】
1.一种基于切片代码依赖图语义学习的漏洞识别方法,其特征在于,所述方法包括:步骤S1:输入一个可执行的二进制程序,利用反编译技术获得二进制程序中每个函数的伪代码;步骤S2:对每个伪代码函数中的危险library/API函数调用执行过程内和过程间的数据依赖分析和控制依赖分析,提取只与危险library/API函数调用相关的细粒度伪代码片段,并以此构建切片代码依赖图;步骤S3:将得到的与危险library/API函数调用相关的细粒度切片代码依赖图中的伪代码语句进行向量化表征,并采用多场景策略实现图数据的预处理;步骤S4:将所述向量化的切片代码依赖图输入预训练的语义学习模型中进行检测,以检测所述待检测代码片段是否包含漏洞,以及识别漏洞的类型。2.根据权利要求1所述的一种基于切片代码依赖图语义学习的漏洞识别方法,其特征在于,所述步骤S1中采用一个函数f
i
(1≤i≤n)是由一个输入一个可执行的二进制程序P={f1,...,f
n
},利用反编译技术获得二进制程序P中每个函数{f1,...,f
n
}的伪代码有序的代码语句组成,定义为f
i
={s
i,1
,...,s
i,m
};一条语句s
i,j
(1≤i≤n,1≤j≤m)是由一个有序的token序列集合组成,定义为s
i,j
={t
i,j,1
,...,t
i,j,z
}。3.根据权利要求2所述的一种基于切片代码依赖图语义学习的漏洞识别方法,其特征在于,所述步骤S2的详细步骤如下:步骤S2.1:为程序P中的每个函数f
i
(1≤i≤n)构建抽象语法树;步骤S2.2:为程序P中的每个函数f
i
(1≤i≤n)构建程序依赖图;步骤S2.3:定义程序切片的位置和对象,切片位置由一个危险library/API函数集合L=(l1,l2,l3,...,l
n
)来确定,其中l
z
表示由于使用不当而容易导致漏洞的library/API函数;步骤S2.4:对步骤S2.3中对构建的切片准则集合Y中的每个切片准则{t
i,j,k
,A
t,k
}∈Y生成一个过程间向前切片fs
i,j,k
和一个过程间向后切片bs
i,j,k
;(i)对于每个参数a
e,v
∈A
t,k
,通过PDG
i
获得t
i,j,k
所在节点n的后继节点,然后识别后继节点中数据依赖于a
e,v
或控制依赖于n的节点;递归上述过程,直到节点n的后继节点全部判断完毕,所有包含依赖关系的节点都聚合为前向切片;(ii)对于每个参数a
e,v
∈A
t,k
,通过PDG
i
获取t
i,j,k
所在节点n的前驱节点,然后识别前驱节点中被a
e,v
数据依赖或n控制依赖的节点;递归上述过程,直到节点n的每个前驱节点被判断完成,所有包含依赖关系的节点被聚合成向后切片;(iii)循环前面的步骤,直到切片点t
i,j,k
中的所有参数完成(i)和(ii);在切片点t
i,j,k
中,每个参数的前向切片被聚合为前向切片fs
i,j,k
,每个参数的后向切片被聚合为后向切片bs
i,j,k
;步骤S2.5:将步骤S2.4中获得的cfs
i,j,k
和cbs
i,j,k
合并为程序切片ps
i,j,k
,合并规则如下:保留这些语句在f
i
中的顺序并删除重复语句的方式提取出属于函数f
i
并出现在ps
i,j,k
中的语句;提取出属于不同函数且出现在ps
i,j,k
中的语句,提取不同函数的语句时,语句的组合顺
序如下:如果函数f
i
调用函数f
q
(1≤q≤n,且i≠q),则函数f
i
中的语句s
i,j
出现在函数f
q
中的语句s
q,w
之前;否则,函数f
q
中的语句s
q,w
将出现在函数f
i
中的语句s
i,j
之前;步骤S2.6:将程序切片ps
i,j,k
中的每条语句表示为单独的节点,依据每条语句之间的数据依赖关系和控制依赖关系构建两类边,以此构建一个切片代码依赖图,表示为SDG
i
=<V
i
,E
i
>,其中V
i
表示节点集合,每个节点表示一个切片代码的伪代码语句或控制谓词,E
i
表示每个节点之间的控制依赖关系或数据依赖关系。4.根据权利要求3所述的一种基于切片代码依赖图语义学习的漏洞识别方法,其特征在于,所述步骤2.3中,函数集合L中包括66个危险library/API函数:access、alloca、assert、calloc、close、connect、execl、execlp、fclose、fgets、fopen、fprintf、fputc、fread、free、freopen、fscanf、fwrite、getenv、gets、listen、malloc、memcpy、memmove、memset、mkstemp、mktemp、open、popen、printf、putc、putchar、putenv、puts、rand、RAND32、RAND64、realloc、remove、rename、scanf、setsockopt、snprintf、sprintf、sqr...
【专利技术属性】
技术研发人员:王炎,许少年,范永陈,邓凯,潘艺宁,钱奂奂,王晓楠,
申请(专利权)人:天翼云科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。