当前位置: 首页 > 专利查询>厦门大学专利>正文

一种面向静态漏洞检测的第三方库函数摘要构建方法技术

技术编号:37044382 阅读:14 留言:0更新日期:2023-03-29 19:23
本发明专利技术提出了一种面向静态漏洞检测的第三方库函数摘要构建方法,包括:建立程序P摘要为两层摘要(G,S),以及一个漏洞规范(δ

【技术实现步骤摘要】
一种面向静态漏洞检测的第三方库函数摘要构建方法


[0001]本专利技术涉及第三方库安全领域,特别是指一种面向静态漏洞检测的第三方库函数摘要构建方法。

技术介绍

[0002]第三方库使开发者能够集成由其他软件供应商开发的经过预先测试和可重用的软件组件,从而节省开发成本。尽管有这样的好处,但第三方库的使用也会引起人们对软件质量的担忧,并已成为最严重的安全威胁之一,滥用第三方库API也会引起质量甚至是安全问题。且使用传统的静态分析来检测由第三方库API滥用引起的漏洞并非易事。首先,若将全程序分析应用于应用程序和依赖库的代码,很容易引起由于代码膨胀而产生的可扩展性问题。另一方面,若对第三方库API采用激进或保守的假设,将不可避免地使检测结果中充斥着误报或漏报。一个更好的解决方案是以一种自动化的方法生成并持久化第三方库API的离线函数摘要,然后在在线组合静态分析中重新使用这些摘要。然而,当处理第三方库的数百万行代码时,现有研究设计的函数摘要存在一个尚未解决的悖论——高精度的摘要形式导致了难以承受的空间和时间开销,而不精确的摘要则大大削弱了其精度或召回率。

技术实现思路

[0003]本专利技术的主要目的在于克服现有技术中的上述缺陷,提出一种面向静态漏洞检测的第三方库函数摘要构建方法,提出了一种两层摘要设计:一层使用被称为程序依赖图的线性大小的程序中间表示来紧凑地编码路径条件,另一层则编码漏洞特定属性的可达性,本专利技术提供的摘要构建方法能够极大地减少摘要生成的时间和摘要存储的空间,利用本专利技术提出的第三方库函数摘要构建方法,在检测时能够大大提升检测速度,节省检测内存。
[0004]本专利技术采用如下技术方案:
[0005]一种面向静态漏洞检测的第三方库函数摘要构建方法,包括:
[0006]建立程序P摘要为两层摘要(G,S),以及一个漏洞规范(δ
src

sink
),其中G是程序P的程序依赖图PDG,作为通用摘要,S是程序P的漏洞特定摘要,δ
src
和δ
sink
表示source结点和sink结点应该满足的属性。
[0007]具体地,所述程序依赖图,具体为:
[0008]程序P的程序依赖图表示为G=(V,E
d
,E
c
,l
d
,l
c
);
[0009]其中:V包含图的顶点,表示程序中的一条语句,或者等价地,表示该语句所定义的值;
[0010]是一条数据依赖边,表示语句v2使用语句v1定义的值;
[0011]是一条控制依赖边,表示v2是一个if语句,当v2的if条件得到满足时,v1是可达的;l
d
是一个将每个数据依赖边映射到小括号的函数;L
d
(v1→
v2)的值表示在不同的调用地点的函数调用和返回,分别由左括号和右括号描述;对于其他边,l
d
(v1→
v2)=ε;l
c
是一个将每个控制依赖边映射为真或假的函数,分别表示真或假分支。
[0012]具体地,所述程序依赖图,还包括:
[0013]程序P的程序依赖图G=(V,E
d
,E
c
,l
d
,l
c
),数据流路径p:u1→
u2→
...

u
k
是可行的,当且仅当数据流路径p满足:
[0014]路径条件C(p)是满足的;其中路径条件C(p)是对程序值的约束;
[0015]p的标签串属于语言Dyck

CFL集合。
[0016]具体地,所述漏洞特定摘要,具体为:
[0017]漏洞特定摘要S将单个函数中的一对顶点(u1,u2)映射为一组数据流路径,其中其中,和包含函数f的source结点和sink结点,而和分别包含函数f的参数、返回和函数f中的调用语句的输入和输出。
[0018]具体地,所述漏洞特定摘要中,
[0019]作为重用漏洞特定摘要。
[0020]具体地,所述漏洞规范,包括:
[0021]空指针解引用:定义δ
src
确定v是a=NULL或a=malloc(),其中a是一个任意的指针表达式;当且仅当v是访问指针表达式所指向的内存对象的语句,δ
sink
(v)为真;检测空指针解引用,只需检测是否存在一条从v1流向v2的数据流路径,并且满足δ
src
(v1)=true和δ
sink
(v2)=true。
[0022]具体地,所述漏洞规范,还包括:
[0023]内存泄漏:δ
src
(v)是真值当且仅当v是a=malloc(),其中a是一个任意的指针表达式;δ
sink
(v)是真值当且仅当v是free(a);如果存在一条从v1流向v2的数据流路径,并且满足δ
src
(v1)=true和δ
sink
(v2)=false,则可能会发生的内存泄漏。
[0024]具体地,还包括持久化摘要,具体为:
[0025]基于程序依赖分析方法生成给定程序P的PDG,并进一步将PDG存储到磁盘中进行保存;
[0026]本专利技术实施例另一方面提供基于第三方库函数摘要构建的漏洞检测方法,包括:
[0027]根据依赖关系自上而下的处理每个第三方库,并通过检测每个函数中的数据流路径来检测漏洞;具体地,第一情形:检查函数中是否存在source结点,再沿着source结点向下查询sink结点,包括不限于:在库函数中流到sink结点,途径第三方库函数调用以及在程序中流到sink结点;第二情形:检查是否在检测的函数中存在调用函数c,其中函数c的返回值在第三方库中产生的source结点,通过流转流到函数c的返回值,且沿着函数c的返回值在检测函数中或调用中流到sink结点。
[0028]由上述对本专利技术的描述可知,与现有技术相比,本专利技术具有如下有益效果:
[0029](1)本专利技术提出了一种面向静态漏洞检测的第三方库函数摘要构建方法,包括:建立程序P摘要为两层摘要(G,S),以及一个漏洞规范(δ
src

sink
),其中G是程序P的程序依赖图PDG,作为通用摘要,S是程序P的漏洞特定摘要,δ
src
和δ
sonk
表示source结点和sink结点应该满足的属性;提出了一种两层摘要设计:一层使用被称为程序依赖图的线性大小的程序中间表示来紧凑地编码路径条件,另一层则编码漏洞特定属性的可达性,本专利技术提供的摘
要构建方法能够极大地减少摘要生成的时间和摘要存储的空间,利用本专利技术提出的第三方库函数摘要构建方法,在检测时能够大大提升检测速度,节省检测内存。
[0030](2)将本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向静态漏洞检测的第三方库函数摘要构建方法,其特征在于,包括:建立程序P摘要为两层摘要(G,S),以及一个漏洞规范(δ
src
,δ
sink
),其中G是程序P的程序依赖图PDG,作为通用摘要,S是程序P的漏洞特定摘要,δ
src
和δ
sink
表示source结点和sink结点应该满足的属性。2.根据权利要求1所述的一种面向静态漏洞检测的第三方库函数摘要构建方法,其特征在于,所述程序依赖图,具体为:程序P的程序依赖图表示为其中:V包含图的顶点,表示程序中的一条语句,或者等价地,表示该语句所定义的值;是一条数据依赖边,表示语句v2使用语句v1定义的值;是一条控制依赖边,表示v2是一个if语句,当v2的if条件得到满足时,v1是可达的;是一个将每个数据依赖边映射到小括号的函数;的值表示在不同的调用地点的函数调用和返回,分别由左括号和右括号描述;对于其他边,示在不同的调用地点的函数调用和返回,分别由左括号和右括号描述;对于其他边,是一个将每个控制依赖边映射为真或假的函数,分别表示真或假分支。3.根据权利要求2所述的一种面向静态漏洞检测的第三方库函数摘要构建方法,其特征在于,所述程序依赖图,还包括:程序P的程序依赖图数据流路径p:u1→
u2→…→
u
k
是可行的,当且仅当数据流路径p满足:路径条件C(p)是满足的,其中C(p)是对路径p上涉及到的程序值的约束;p的标签串属于语言Dyck

CFL集合。4.根据权利要求1所述的一种面向静态漏洞检测的第三方库函数摘要构建方法,其特征在于,所述漏洞特定摘要,具体为:漏洞特定摘要S将单个函数中的一对顶点(u1,u2)映射为一组数据流路径,其中其中,和包含函数f的source结点和sink结点,而和分别包含函数f的参数、返回和函数f中的调用语句的输入和输出。5.根据权利要求4所述的一种面向静态漏洞检测的第三方库函数摘要构建方法,其特征在于,所述漏洞特定摘要中,作为重用漏洞特...

【专利技术属性】
技术研发人员:吴荣鑫陈姚伶何宇轩
申请(专利权)人:厦门大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1