CN115062315A - 一种基于多工具检查的安全代码审查方法及系统 - Google Patents

一种基于多工具检查的安全代码审查方法及系统 Download PDF

Info

Publication number
CN115062315A
CN115062315A CN202210739828.3A CN202210739828A CN115062315A CN 115062315 A CN115062315 A CN 115062315A CN 202210739828 A CN202210739828 A CN 202210739828A CN 115062315 A CN115062315 A CN 115062315A
Authority
CN
China
Prior art keywords
vulnerability
tool
inspection
type
risk
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210739828.3A
Other languages
English (en)
Inventor
闫利华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202210739828.3A priority Critical patent/CN115062315A/zh
Publication of CN115062315A publication Critical patent/CN115062315A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Abstract

本发明属于代码审查技术领域,具体涉及一种基于多工具检查的安全代码审查方法及系统,所述的方法包括步骤S1:构建漏洞类型映射链表集的步骤,该步骤中根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;步骤S2:构建漏洞检查模型的步骤,该步骤中针对每个漏洞类型构建与之相对应的检查模型;步骤S3:创建代码检查实例的步骤,该步骤中将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。

Description

一种基于多工具检查的安全代码审查方法及系统
技术领域
本发明属于代码审查技术领域,涉及一种代码审查方法和系统,尤其是一种基于多工具检查的安全代码审查方法及系统;通过构建漏洞类型映射链表集、漏洞检查模型构建、创建代码审查实例实现了一种基于多工具检查的安全代码审核方法;该方案减少了审核人员了重复工作量,提高了代码审核的质量和效率。
背景技术
安全代码审查指对软件源代码进行系统检查,可以发现软件开发过程中的错误并及时进行修改,是软件开发中非常重要的一环。安全代码审查不仅可以提高代码质量、提高程序的可维护性,也可以提高开发者的开发水平。
代码审查有多种方式,采用代码审查工具可以极大的帮助程序员提高代码质量。由于每种代码审查工具的实现方式、漏洞划分依据、检查重点等不同,开发人员通常采用多种代码审查工具,以便能够更全面完善的检查代码。多种代码审查工具的检查,也意味着对检查结果的多次审核。由于每种检查工具的检查结果大多是重复的,所以审核过程中会做许多重复工作,严重降低工作效率。此为现有技术的不足之处。
有鉴于此,本发明提供一种基于多工具检查的安全代码审查方法及系统;以解决现有技术中存在的上述技术缺陷,是非常有必要的。
发明内容
本发明的目的在于,针对上述现有技术存在的缺陷,提供设计一种基于多工具检查的安全代码审查方法及系统,以解决上述技术问题。
为实现上述目的,本发明给出以下技术方案:
一种基于多工具检查的安全代码审查方法,包括以下步骤:
步骤S1:构建漏洞类型映射链表集的步骤,该步骤中根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;
步骤S2:构建漏洞检查模型的步骤,该步骤中针对每个漏洞类型构建与之相对应的检查模型;
步骤S3:创建代码检查实例的步骤,该步骤中将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
作为优选,所述的步骤S1具体包括以下步骤:
步骤S11:搜集检查样本集的步骤,该步骤中通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
步骤S12:构建漏洞类型映射链表集,该步骤中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集的具体构建方式如下:
步骤S121:创建漏洞类型映射链表集L={};
步骤S122:遍历获取S中的元素集合Si;
步骤S123:遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;
若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);
步骤S124:遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;
检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;
步骤S125:遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;
步骤S126:创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;
执行步骤S121至步骤S126,直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
作为优选,所述的步骤S2具体包括以下步骤:
步骤S21:取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
步骤S211:获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集。
步骤S212:构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,是机器学习中常用的构建分类模型的方式之一;
重复以上步骤,直至L中所有元素均被遍历。
作为优选,所述步骤S211中:
根据漏洞信息,确定样本对应的检查工具的判断方法如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
作为优选,所述步骤S3具体包括以下步骤:
步骤S31:把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;
步骤S32:遍历扫描结果中对应的所有的漏洞类型;
步骤S33:根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;
步骤S34:把对应代码检查工具的检查结果进行整理。
步骤S35:得到针对待检查代码的多工具的代码检查结果。
本发明还提供一种基于多工具检查的安全代码审查系统,包括:
构建漏洞类型映射链表集模块,该模块用于根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;
构建漏洞检查模型模块,该模块用于针对每个漏洞类型构建与之相对应的检查模型;
创建代码检查实例模块,该模块用于将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
作为优选,所述的构建漏洞类型映射链表集模块包括:
搜集检查样本集单元,该单元通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
构建漏洞类型映射链表集单元,该单元中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集单元采用以下方式进行具体构建:
创建漏洞类型映射链表集L={};遍历获取S中的元素集合Si;遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
作为优选,所述的构建漏洞检查模型模块包括:
取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集;
构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,是机器学习中常用的构建分类模型的方式之一;
直至L中所有元素均被遍历。
作为优选,所述根据漏洞信息,确定样本对应的检查工具的判断标准如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
作为优选,所述创建代码检查实例模块包括:
把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;遍历扫描结果中对应的所有的漏洞类型;根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;把对应代码检查工具的检查结果进行整理;得到针对待检查代码的多工具的代码检查结果。
本发明的有益效果在于,本发明算法通过分析不同工具检查下的漏洞数据,构建对应的漏洞映射链表集。对每条链表下的漏洞根据漏洞等级、编写语言、漏洞个数、误报数等信息进行分析,构建对应该类型的漏洞检查模型。对构建的所有漏洞类型的模型进行梳理,构建最终的基于多工具检查的安全代码审核模型。采用构建的审核模型进行代码审查,减少了审核人员的重复工作量,提高了代码审核的质量和效率。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明提供的一种基于多工具检查的安全代码审查方法的流程图。
图2是本发明提供的一种基于多工具检查的安全代码审查系统的原理框图。
其中,1-构建漏洞类型映射链表集模块,2-构建漏洞检查模型模块,3-创建代码检查实例模块。
具体实施方式
下面结合附图并通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。
实施例1:
如图1所示,本实施例提供的一种基于多工具检查的安全代码审查方法,包括以下步骤:
步骤S1:构建漏洞类型映射链表集的步骤,该步骤中根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;
所述的步骤S1具体包括以下步骤:
步骤S11:搜集检查样本集的步骤,该步骤中通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
步骤S12:构建漏洞类型映射链表集,该步骤中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集的具体构建方式如下:
步骤S121:创建漏洞类型映射链表集L={};
步骤S122:遍历获取S中的元素集合Si;
步骤S123:遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;
若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);
步骤S124:遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;
检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;
步骤S125:遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;
步骤S126:创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;
执行步骤S121至步骤S126,直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
步骤S2:构建漏洞检查模型的步骤,该步骤中针对每个漏洞类型构建与之相对应的检查模型;
所述的步骤S2具体包括以下步骤:
步骤S21:取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
步骤S211:获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集。
所述步骤S211中:
根据漏洞信息,确定样本对应的检查工具的判断方法如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
步骤S212:构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,是机器学习中常用的构建分类模型的方式之一;
重复以上步骤,直至L中所有元素均被遍历。
步骤S3:创建代码检查实例的步骤,该步骤中将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
所述步骤S3具体包括以下步骤:
步骤S31:把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;
步骤S32:遍历扫描结果中对应的所有的漏洞类型;
步骤S33:根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;
步骤S34:把对应代码检查工具的检查结果进行整理。
步骤S35:得到针对待检查代码的多工具的代码检查结果。
实施例2:
如图2所示,本实施例提供的一种基于多工具检查的安全代码审查系统,包括:
构建漏洞类型映射链表集模块1,该模块用于根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;所述的构建漏洞类型映射链表集模块1包括:
搜集检查样本集单元,该单元通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
构建漏洞类型映射链表集单元,该单元中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集单元采用以下方式进行具体构建:
创建漏洞类型映射链表集L={};遍历获取S中的元素集合Si;遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
构建漏洞检查模型模块2,该模块用于针对每个漏洞类型构建与之相对应的检查模型;所述的构建漏洞检查模型模块2包括:
取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集;所述根据漏洞信息,确定样本对应的检查工具的判断标准如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,是机器学习中常用的构建分类模型的方式之一;
直至L中所有元素均被遍历。
创建代码检查实例模块3,该模块用于将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
所述创建代码检查实例模块3包括:
把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;遍历扫描结果中对应的所有的漏洞类型;根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;把对应代码检查工具的检查结果进行整理;得到针对待检查代码的多工具的代码检查结果。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的方法而言,由于其与实施例公开的系统相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统、系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。
同理,在本发明各个实施例中的各处理单元可以集成在一个功能模块中,也可以是各个处理单元物理存在,也可以两个或两个以上处理单元集成在一个功能模块中。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。

Claims (10)

1.一种基于多工具检查的安全代码审查方法,其特征在于,包括以下步骤:
步骤S1:构建漏洞类型映射链表集的步骤,该步骤中根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;
步骤S2:构建漏洞检查模型的步骤,该步骤中针对每个漏洞类型构建与之相对应的检查模型;
步骤S3:创建代码检查实例的步骤,该步骤中将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
2.根据权利要求1所述的一种基于多工具检查的安全代码审查方法,其特征在于,所述的步骤S1具体包括以下步骤:
步骤S11:搜集检查样本集的步骤,该步骤中通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
步骤S12:构建漏洞类型映射链表集,该步骤中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集的具体构建方式如下:
步骤S121:创建漏洞类型映射链表集L={};
步骤S122:遍历获取S中的元素集合Si;
步骤S123:遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;
若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);
步骤S124:遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;
检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;
步骤S125:遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;
步骤S126:创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;
执行步骤S121至步骤S126,直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
3.根据权利要求2所述的一种基于多工具检查的安全代码审查方法,其特征在于,所述的步骤S2具体包括以下步骤:
步骤S21:取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
步骤S211:获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集;
步骤S212:构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;
重复以上步骤,直至L中所有元素均被遍历。
4.根据权利要求3所述的一种基于多工具检查的安全代码审查方法,其特征在于,所述步骤S211中:
根据漏洞信息,确定样本对应的检查工具的判断方法如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
5.根据权利要求4所述的一种基于多工具检查的安全代码审查方法,其特征在于,所述步骤S3具体包括以下步骤:
步骤S31:把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;
步骤S32:遍历扫描结果中对应的所有的漏洞类型;
步骤S33:根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;
步骤S34:把对应代码检查工具的检查结果进行整理;
步骤S35:得到针对待检查代码的多工具的代码检查结果。
6.一种基于多工具检查的安全代码审查系统,其特征在于,包括:
构建漏洞类型映射链表集模块,该模块用于根据不同检查工具的检查规则以及对漏洞类型的划分标准,建立不同检查工具之间的漏洞类型映射对应关系;
构建漏洞检查模型模块,该模块用于针对每个漏洞类型构建与之相对应的检查模型;
创建代码检查实例模块,该模块用于将待检查的代码投入到构建的漏洞类型检查模型中,创建基于该代码的审核实例。
7.根据权利要求6所述的一种基于多工具检查的安全代码审查系统,其特征在于,所述的构建漏洞类型映射链表集模块包括:
搜集检查样本集单元,该单元通过搜集不同语言、不同行业、不同代码规模下的代码;采用多种代码检查工具对这些代码进行检查,得到对应的扫描集合;
构建漏洞类型映射链表集单元,该单元中:
定义M个代码检查工具,N个代码集合,得到的扫描集合为S;
S={S1,S2,……,Sn},其中集合元素Si={Si1,Si2,……,SiM};
Si指第i个代码采用M个代码检查工具扫描后得到扫描集合;
Sij指第i个代码采用第j个代码扫描工具扫描后得到的结果;
漏洞类型映射链表集单元采用以下方式进行具体构建:
创建漏洞类型映射链表集L={};遍历获取S中的元素集合Si;遍历集合Si中的第一个元素Si1,遍历该元素下的漏洞类型;若该类型漏洞未被记录,则创建新的链表Lx记录该漏洞类型及检查工具,记录方式为Lx=(漏洞类型B1,检查工具T1);遍历集合{Si2,……,SiM}中的元素,若该漏洞类型下的漏洞在Sij中被检查出来,则把对应的工具及漏洞类型记录在该工具及下对应的漏洞类型记录在Lx中最后一个元素的后边,记录方式为Lx=(漏洞类型B1,检查工具T1)->……->(漏洞类型Bj,检查工具Tj);若该漏洞类型被记录,记录链表为Ly;检查Ly,若M个检查工具下的漏洞类型均被记录,则检查下一个漏洞类型;若存在没有被记录的检查工具j,则检查该漏洞类型下的漏洞在有没有被检查工具j检查出来;若检查出来,则把该工具及对应的漏洞类型记录在该链表最后一个元素的后面;遍历集合Si中的剩余元素Sij,遍历该元素下未被记录的漏洞类型;创建新的链表记录该漏洞类型及检查工具,遍历集合Si中的剩余元素,若该漏洞类型下的漏洞其他检查工具也检查出来,则在该链表最后一个元素后面记录该工具及对应的漏洞类型;直至所有的漏洞类型均被记录,从而生成最终的链表集合L={L1,L2,……},其中Li为第i个链表元素,其组成形式为Li=(漏洞类型Bi1,检查工具Ti1)->(漏洞类型Bi2,检查工具Ti2)->……。
8.根据权利要求7所述的一种基于多工具检查的安全代码审查系统,其特征在于,所述的构建漏洞检查模型模块包括:
取漏洞类型映射链表集合L中的元素Li:
若Li中只有一个漏洞类型,则对该类型的漏洞直接采用其对应的检查工具即可;
若Li中存在多个漏洞类型,则采用随机森林构建对应的模型,构建方式如下:
获取样本训练集:
提取该元素链表下的样本信息,信息包含代码行数、文件个数、编程语言、行业类型;
为每条样本信息,依据链表中对应的代码检查工具,提取漏洞信息,包含:中危漏洞数,低危漏洞数,高危漏洞个数、高危漏洞误报数、有效高危漏洞数,其中有效高危漏洞数是指高危漏洞总数-高危漏洞误报数;
根据漏洞信息,确定样本对应的检查工具类型,并把其作为分类类别,得到该元素对应的样本训练集;
构建模型:
把该样本训练集采用随机森林的方式进行训练,得到该链表下的检查模型;
直至L中所有元素均被遍历。
9.根据权利要求8所述的一种基于多工具检查的安全代码审查系统,其特征在于,所述根据漏洞信息,确定样本对应的检查工具的判断标准如下:
若有效高危漏洞数不为0,则分析有效高危漏洞数:
若某一个检查项的有效高危漏洞包含了其他所有的高危漏洞,则该链表对应的检查工具即为该漏洞类型对应的检查工具;
若多个组合才能包含全部的高危漏洞,则该链表对应的检查工具即为该漏洞组合对应的检查工具的组合;
若有效高危漏洞数为0:
若高危漏洞误报数相同、中危漏洞数相同、低危漏洞数相同则取该链表任一元素对应的检查工具作为检查该;
若高危漏洞误报数相同、中危漏洞误报数相同,低危漏洞数不同,则把低危漏洞数小的对应的检查工具作为该链表的检查工具;
若高危漏洞误报数相同,中危漏洞误报数不同,则把中危漏洞数小的对应的检查工具作为检查类型;
若高危漏洞误报数不同,则把高危漏洞数小的对应的检查工具作为该链表的检查工具。
10.根据权利要求9所述的一种基于多工具检查的安全代码审查系统,其特征在于,所述创建代码检查实例模块包括:
把待检查代码采用M个代码检查工具进行扫描,得到对应的扫描结果;遍历扫描结果中对应的所有的漏洞类型;根据漏洞类型检查模型,确定该漏洞类型对应的检查工具;把对应代码检查工具的检查结果进行整理;得到针对待检查代码的多工具的代码检查结果。
CN202210739828.3A 2022-06-28 2022-06-28 一种基于多工具检查的安全代码审查方法及系统 Pending CN115062315A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210739828.3A CN115062315A (zh) 2022-06-28 2022-06-28 一种基于多工具检查的安全代码审查方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210739828.3A CN115062315A (zh) 2022-06-28 2022-06-28 一种基于多工具检查的安全代码审查方法及系统

Publications (1)

Publication Number Publication Date
CN115062315A true CN115062315A (zh) 2022-09-16

Family

ID=83201530

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210739828.3A Pending CN115062315A (zh) 2022-06-28 2022-06-28 一种基于多工具检查的安全代码审查方法及系统

Country Status (1)

Country Link
CN (1) CN115062315A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116611074A (zh) * 2023-07-17 2023-08-18 北京奇虎科技有限公司 安全信息审查方法、设备、存储介质及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116611074A (zh) * 2023-07-17 2023-08-18 北京奇虎科技有限公司 安全信息审查方法、设备、存储介质及装置

Similar Documents

Publication Publication Date Title
Theisen et al. Approximating attack surfaces with stack traces
CN106572117B (zh) 一种WebShell文件的检测方法和装置
CN111083126A (zh) 一种基于专家知识库的渗透测试风险评估方法以及模型
US7451051B2 (en) Method and system to develop a process improvement methodology
CN113407517B (zh) 一种基于多维分析技术的数据质量健康度分析方法及系统
CN109583200A (zh) 一种基于动态污点传播的程序异常分析方法
CN108804326B (zh) 一种软件代码自动检测方法
Yang et al. Vuldigger: A just-in-time and cost-aware tool for digging vulnerability-contributing changes
CN115062315A (zh) 一种基于多工具检查的安全代码审查方法及系统
CN111209570B (zh) 基于mitre att&ck创建安全闭环过程的方法
CN112052457A (zh) 应用系统的安全状况评估方法及装置
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
Zou et al. An empirical study of bug fixing rate
CN114785710A (zh) 一种工业互联网标识解析二级节点服务能力的评估方法及系统
CN116775741A (zh) 一种工程竣工决算的审计方法及相关装置
CN113660227B (zh) 网络安全脆弱性评估定量计算方法及设备
CN111898133A (zh) 一种基于自动化的渗透测试装置和方法
Turhan et al. Regularities in learning defect predictors
CN114117425A (zh) 一种基于dsmm的数据采集安全检测方法
CN111367789A (zh) 静态报告合并分析技术
CN113434408B (zh) 一种基于测试预言的单元测试用例排序方法
KR102037277B1 (ko) 모바일단말을 이용한 성능기반 항만시설 리스크 평가 방법
CN117033226A (zh) 自动化测试效果的评估方法
CN115795467A (zh) 一种计算机软件漏洞智能评估的方法
Bagri et al. Automation Framework for Software Vulnerability Exploitability Assessment

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination