一种代码漏洞检测方法、装置、介质及设备制造方法及图纸

技术编号:22364410 阅读:29 留言:0更新日期:2019-10-23 04:47
本发明专利技术属于计算机技术领域,提供一种代码漏洞检测方法、装置、介质及设备,本发明专利技术提供的技术方案中,获取待检测程序代码以及预设污点数据规则;提取待检测程序代码中的线程;针对提取的每个线程,生成该线程的数据流图;根据预设污点数据规则以及该线程的数据流图,确定该线程的代码中的污点数据;将提取的各个线程的代码中的污点数据保存至污点数据集合;判断提取的各个线程中是否包括多个线程对污点数据集合中的同一污点数据进行了指定操作;若是,确定待检测程序代码中存在线程间释放后重用漏洞。本发明专利技术结合静态代码分析技术以及释放后重用漏洞的污点数据规则,可以确定线程间释放后重用漏洞。

【技术实现步骤摘要】
一种代码漏洞检测方法、装置、介质及设备
本申请涉及计算机
,尤其涉及一种代码漏洞检测方法、装置、介质及设备。
技术介绍
代码漏洞是在软件开发过程中进行程序代码编辑时有意或无意产生的代码缺陷。代码漏洞的存在会威胁开发出的软件的安全稳定运行。因此,需要对代码漏洞进行检测,以保证相应软件的稳定运行。代码漏洞可以包括单线程对应的代码中的释放后重用漏洞(以下简称线程内释放后重用漏洞)和多个线程之间的释放后重用漏洞(以下简称线程间释放后重用漏洞)等漏洞。其中,线程间释放后重用漏洞会导致内存信息的泄露、代码执行异常以及线程所在的软件崩溃等问题。因此,如何检测出程序代码中的线程间释放后重用漏洞是一个需要考虑的问题。
技术实现思路
本申请提供一种代码漏洞检测方法、装置、介质及设备,用于解决现有技术中存在的无法检测程序代码中多个线程之间的释放后重用漏洞的问题。一方面,本申请实施例提供一种代码漏洞检测方法,包括:获取待检测程序代码以及预设污点数据规则,所述预设污点数据规则用于识别线程的代码中针对释放后重用漏洞的污点数据;提取所述待检测程序代码中的线程;针对提取的每个线程,生成该线程的数据流图;根据所述预设污点数据规则以及该线程的数据流图,确定该线程的代码中的污点数据;将提取的各个线程的代码中的污点数据保存至污点数据集合;判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作;若是,确定所述待检测程序代码中存在线程间释放后重用漏洞。利用本实施例,可确定该程序代码存在线程间释放后重用漏洞,从而结合静态代码分析技术以及释放后重用漏洞的污点数据规则,实现了线程间释放后重用漏洞的确定。另一方面,本申请实施例提供一种代码漏洞检测装置,包括:获取模块,用于获取待检测程序代码以及预设污点数据规则,所述预设污点数据规则用于识别线程的代码中针对释放后重用漏洞的污点数据;提取模块,用于提取所述待检测程序代码中的线程;生成模块,用于针对提取的每个线程,生成该线程的数据流图;第一确定模块,用于根据所述预设污点数据规则以及该线程的数据流图,确定该线程的代码中的污点数据;保存模块,用于将提取的各个线程的代码中的污点数据保存至污点数据集合;判断模块,用于判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作;第二确定模块,用于在所述判断模块判断是的情况下,确定所述待检测程序代码中存在线程间释放后重用漏洞。再一方面,本申请实施例提供一种非易失性计算机存储介质,所述计算机存储介质存储有可执行程序,该可执行程序被处理器执行实现上述实施例提供的任一代码漏洞检测方法的步骤。又一方面,本申请实施例提供一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述程序时实现上述实施例提供的任一代码漏洞检测方法的步骤。本申请实施例提供的代码漏洞检测方法、装置、介质及设备,生成待检测程序代码中每个线程的数据流图,并根据该数据流图和预先设定的污点数据规则,确定相应线程中针对释放后重用漏洞的污点数据以及将待检测程度代码的各个线程中的污点数据保存至污点数据集合,若待检测程序代码中包括多个线程对污点数据集合中的同一污点数据进行了指定的操作,则确定该待检测程序代码中存在线程间释放后重用漏洞,从而结合静态代码分析技术以及预设的污点数据规则,实现了线程间释放后重用漏洞的检测。。附图说明通过参考附图阅读下文的详细描述,本申请示例性实施例的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本申请的若干实施方式,其中:图1为本申请实施例提供的代码漏洞检测方法的应用场景示意图;图2为本申请实施例提供的代码漏洞检测方法的流程示意图;图3为本申请实施例提供的确定线程的代码中的污点数据的方法流程示意图;图4为本申请实施例提供的将污点数据保存至污点数据集合的方法流程示意图;图5为本申请实施例提供的生成线程的数据流图的方法流程示意图;图6为本申请实施例提供的代码漏洞检测方法的具体实施过程的流程示意图;图7为本申请实施例提供的利用静态分析工具进行代码漏洞确定的示意图;图8为本申请实施例提供的代码漏洞检测装置结构示意图;图9为本申请实施例提供的计算机设备的硬件结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。为了方便理解,下面对本申请实施例中涉及的名词进行解释。静态代码分析技术:在不运行程序代码的情况下,通过词法分析、语法分析、控制流分析、数据流分析等技术对程序代码进行扫描,验证程序代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。函数调用图:用于表示程序代码中各个函数之间的调用关系。控制流分析:基于函数调用图,对各个函数内部代码的执行路径进行分析。控制流图:控制流分析产生的结果,为有向图,该图中的节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环。数据流分析:对控制流图进行遍历,对代码在不同路径上的执行过程中,数据的赋值和存储、内存的读和写过程进行分析。数据流图:数据流分析产生的结果,记录了代码在不同路径上的执行过程中,数据的赋值和存储、内存的读和写过程。线程:是操作系统能够进行运算调度的最小单位,是进程中的实际运作单位。一个线程是进程中的一个单一顺序的控制流,一个进程中可以并发多个线程,各线程可并行执行相应的任务。释放后重用(Use-After-Free,UAF)漏洞:仍对已释放的数据仍进行操作,包括线程内释放后重用漏洞和线程间释放后重用漏洞,其中,线程内释放后重用漏洞为该线程对其已释放的数据进行操作;线程间释放后重用漏洞为其中一个线程释放数据后,其它线程仍对已释放的数据进行操作,其中,数据可以包括程序代码中的变量、指针等,比如,线程A释放内存A后,线程B仍对内存A的指针进行调用,以对内存A的指针指向的内存区域进行读或写操作。污点数据:已释放的数据以及与该已释放的数据具有关联关系的共享数据。污点数据规则:用于判定代码中的污点数据,可根据代码漏洞的特征设置相应的污点数据规则。互斥机制:针对共享数据而设置,每次只允许一个线程访问该共享数据的机制。若一个线程正在访问一个设置了互斥机制的共享数据,则其它线程必须等待该线程对该共享数据访问完毕后,才可去访问该共享数据。竞争条件:多个线程在同时运行的情况下对未设置互斥机制的共享数据进行读或写操作的状态,即在共享数据没有互斥机制保护的情况下,多个线程对该共享数据进行读/写操作,则认为该多个线程存在竞争条件。目前,程序的代码中通常会涉及多线程并行执行的技术。当并行执行的多个线程需要访问同一共享数据时,需要针对该共享数据设置互斥机制,以避免出现多个线程对该共享数据进行竞争的现象。然而,在代码本文档来自技高网...

【技术保护点】
1.一种代码漏洞检测方法,其特征在于,包括:获取待检测程序代码以及预设污点数据规则,所述预设污点数据规则用于识别线程的代码中针对释放后重用漏洞的污点数据;提取所述待检测程序代码中的线程;针对提取的每个线程,生成该线程的数据流图;根据所述预设污点数据规则以及该线程的数据流图,确定该线程的代码中的污点数据;将提取的各个线程的代码中的污点数据保存至污点数据集合;判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作;若是,确定所述待检测程序代码中存在线程间释放后重用漏洞。

【技术特征摘要】
1.一种代码漏洞检测方法,其特征在于,包括:获取待检测程序代码以及预设污点数据规则,所述预设污点数据规则用于识别线程的代码中针对释放后重用漏洞的污点数据;提取所述待检测程序代码中的线程;针对提取的每个线程,生成该线程的数据流图;根据所述预设污点数据规则以及该线程的数据流图,确定该线程的代码中的污点数据;将提取的各个线程的代码中的污点数据保存至污点数据集合;判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作;若是,确定所述待检测程序代码中存在线程间释放后重用漏洞。2.根据权利要求1所述的方法,其特征在于,将各个线程的代码中的污点数据保存至污点数据集合,具体包括:提取各个线程的代码中未设置互斥机制的污点数据;将各个线程的代码中互不重复且未设置互斥机制的污点数据保存至所述污点数据集合。3.根据权利要求1所述的方法,其特征在于,生成该线程的数据流图,具体包括:将该线程的入口函数作为起始函数,生成该线程的函数调用图;根据所述函数调用图,生成该线程的函数间控制流图;根据所述函数间控制流图,生成该线程的函数间数据流图。4.根据权利要求1所述的方法,其特征在于,还包括:若所述待检测程序代码中仅包括一个线程对该污点数据进行指定操作,则确定所述待检测程序代码中存在线程内释放后重用漏洞。5.根据权利要求1~4任一所述的方法,其特征在于,所述确定该线程的代码中的污点数据,具体包括:将该线程的代码中已释放的数据确定为源污点数据;遍历该线程的代码中将所述源污点数据传递给线程间共享数据的语句,并将遍历到的语句作为污点陷入点;判断该线程的数据流图中是否包括从所述源污点数据到所述污点陷入点的数据流;若是,确定所述源污点数据以及所述线程间共享数据为该线程的代码中的污点数据。6.根据权利要求5所述的方法,其特征在于,所述污点数据为已释放的内存的指针,则判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作,具体包括:获取从所述待检测程序代码提取的各个线程中,利用该已释放的内存的指针对该已释放的内存进行了读或写操作的线程,作为该已释放的内存的指针的操作线程;判断是否存在多个该已释放的内存的指针的操作线程。7.根据权利要求1~4任一所述的方法,其特征在于,所述污点数据为已释放的内存的指针,则判断提取的各个线程中是否包括多个线程对所述污点数据集合中的同一污点数据进行了指定操作,具体包括:获取从所述待检测程序代码提取的各个线程中,利用该已释放的内存的指针对该已释放的内存进行了读或写操作的...

【专利技术属性】
技术研发人员:王凯
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

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

1