CN116383834B - 针对源码漏洞检测工具异常的检测方法以及相关设备 - Google Patents
针对源码漏洞检测工具异常的检测方法以及相关设备 Download PDFInfo
- Publication number
- CN116383834B CN116383834B CN202310647561.XA CN202310647561A CN116383834B CN 116383834 B CN116383834 B CN 116383834B CN 202310647561 A CN202310647561 A CN 202310647561A CN 116383834 B CN116383834 B CN 116383834B
- Authority
- CN
- China
- Prior art keywords
- code
- source code
- vulnerability detection
- detection tool
- abnormality
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 421
- 230000005856 abnormality Effects 0.000 title claims abstract description 106
- 238000000034 method Methods 0.000 claims abstract description 82
- 230000002159 abnormal effect Effects 0.000 claims abstract description 56
- 238000012360 testing method Methods 0.000 claims description 50
- 230000004044 response Effects 0.000 claims description 26
- 230000008859 change Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 3
- 238000013135 deep learning Methods 0.000 description 56
- 238000010586 diagram Methods 0.000 description 22
- 238000007781 pre-processing Methods 0.000 description 22
- 238000012545 processing Methods 0.000 description 22
- 230000008439 repair process Effects 0.000 description 22
- 230000006870 function Effects 0.000 description 19
- 238000004891 communication Methods 0.000 description 10
- 238000012795 verification Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 8
- 238000000605 extraction Methods 0.000 description 7
- 230000009466 transformation Effects 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 239000012634 fragment Substances 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008094 contradictory effect Effects 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 101100503482 Arabidopsis thaliana FTSH5 gene Proteins 0.000 description 1
- 101150082136 VAR1 gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000011895 specific detection Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000011426 transformation method Methods 0.000 description 1
- 238000012038 vulnerability analysis Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/243—Classification techniques relating to the number of classes
- G06F18/2433—Single-class perspective, e.g. one-against-all classification; Novelty detection; Outlier detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种针对源码漏洞检测工具异常的检测方法以及相关设备,所述方法包括:获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;根据预设规则改写所述待测代码,得到改写代码;将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常。
Description
技术领域
本申请涉及代码漏洞检测技术领域,尤其涉及一种针对源码漏洞检测工具异常的检测方法以及相关设备。
背景技术
随着深度学习领域的发展,其应用也越来越广泛,基于深度学习的源码漏洞检测工具能够自动检测代码的漏洞和异常,这些工具在大批量代码漏洞和异常检测工作中起到重要作用。但是,基于深度学习的源码漏洞检测工具所使用数据集存在数据标签不正确、具有重复数据、矛盾数据、数据缺失、过时数据等问题,进而导致这些工具存在较高的误报率。
由于现有技术中没有详细的研究和分析基于深度学习的源码漏洞检测工具中存在的异常以及其存在原因,因此需要定义、分析、量化基于深度学习的源码漏洞检测工具中的异常,这些异常一般表现为源码漏洞检测工具无法正确地检测出源码中可能存在的漏洞,比非异常的源码漏洞检测工具具有更高的漏报和误报。这严重影响了源码漏洞检测工具的效率和可靠性。
发明内容
有鉴于此,本申请的目的在于提出一种针对源码漏洞检测工具异常的检测方法以及相关设备,以解决自动化地检测源码漏洞检测工具中可能存在的异常情况及异常情况修复的问题。
基于上述目的,本申请提供了一种针对源码漏洞检测工具异常的检测方法,包括:
获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;
根据预设规则改写所述待测代码,得到改写代码;
将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;
根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常。
可选的,所述方法还包括:
对所述待测代码进行检测,确定所述待测代码是否为目标语言的待测代码;
响应于所述待测代码不是所述目标语言的待测代码,确定源码漏洞检测工具出现异常;
响应于所述待测代码是目标语言的待测代码,确定所述待测代码是否为语法错误的待测代码;
响应于所述待测代码是语法错误的待测代码,确定所述源码漏洞检测工具出现异常。
可选的,所述方法还包括:
提取所述第一中间代码的第一代码特征;提取所述第二中间代码的第二代码特征;
将所述第一代码特征与所述第二代码特征进行差分比较;
响应于所述差分比较的结果存在差异,确定所述源码漏洞检测工具出现异常。
可选的,所述方法还包括:
检测所述第一中间代码的第一关键词,对所述第一关键词进行符号化,得到第一符号化结果;
检测所述第二中间代码的第二关键词,对所述第二关键词进行符号化,得到第二符号化结果;
响应于所述第一符号化结果与所述第二符号化结果不同,确定所述源码漏洞检测工具出现异常。
可选的,所述方法还包括:
对所述待测代码进行语义等价变化,得到语义测试样本;其中,所述待测代码与所述语义测试样本的语义相同;
将所述语义测试样本输入到预先构建的源码漏洞检测模型,得到所述语义测试样本的第一语义代码;
比较所述第一中间代码的语义与所述第一语义代码的语义;
响应于所述第一中间代码的语义与所述第一语义代码的语义不同,确定所述源码漏洞检测工具的鲁棒性出现异常。
可选的,所述方法还包括:
确定所述待测代码的非相关信息,根据所述非相关信息对所述待测代码进行分类,得到第一代码集和第二代码集;其中,所述第一代码集中的代码不包含所述非相关信息,所述第二代码集中的代码包含所述非相关信息;
根据预设公平规则计算所述第一代码集以及所述第二代码集的真阳性率和假阳性率;
计算所述第一代码集的真阳性率与假阳性率之差,得到第一偏差结果;计算所述第二代码集的真阳性率与假阳性率之差,得到第二偏差结果;
响应于所述第一偏差结果与所述第二偏差结果的偏向性相同,确定所述源码漏洞检测工具的公平性出现异常。
可选的,所述方法还包括:
响应于所述源码漏洞检测工具出现异常或/和所述源码漏洞检测工具的鲁棒性出现异常;
将所述异常检测结果写入到异常检测结果文件和日志。
基于同样的目的,本申请还提出了一种针对源码漏洞检测工具异常的检测装置,包括:
获取模块,被配置为获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;
第一编写模块,被配置为根据预设规则改写所述待测代码,得到改写代码;
第二编写模块,被配置为将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;
检测模块,被配置为根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常。
基于上述目的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任意一项所述的针对源码漏洞检测工具异常的检测方法。
基于上述目的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述任意一项所述的针对源码漏洞检测工具异常的检测方法。
从上面所述可以看出,本申请提供的针对源码漏洞检测工具异常的检测方法以及相关设备,首先获取待测代码,将待测代码输入到预先构建的源码漏洞检测模型,得到待测代码的第一中间代码,进一步地,根据预设规则改写待测代码,得到改写代码,将改写代码输入到源码漏洞检测模型,得到改写代码的第二中间代码,最后,根据第一中间代码以及第二中间代码确定异常检测结果;其中,异常检测结果包括:源码漏洞检测工具异常和源码漏洞检测工具的鲁棒性异常。本申请利用差分测试技术,能够根据不同异常制定对应检测方法,并对部分异常进行检测和量化,以对检测到的异常进行及时修复,提升了基于深度学习的源码漏洞检测工具的可靠性、鲁棒性和准确性,节约大量人力资源,也有助于网络空间安全领域其他检测工具的异常研究。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的源码漏洞检测工具异常检测***示意图。
图2为本申请实施例提供的异常检测模块的检测流程示意图。
图3为本申请实施例提供的源码漏洞检测工具异常示意图。
图4为本申请实施例提供的针对源码漏洞检测工具异常的检测方法的流程示意图。
图5为本申请实施例提供的源码输入校验异常检测流程示意图。
图6为本申请实施例提供的预处理异常检测流程示意图。
图7为本申请实施例提供的符号化异常检测流程示意图。
图8为本申请实施例提供的代码片段标记异常检测流程示意图。
图9为本申请实施例提供的深度学习鲁棒性异常检测流程示意图。
图10为本申请实施例提供的深度学***性异常检测流程示意图。
图11为本申请实施例提供的针对源码漏洞检测工具异常的检测装置示意图。
图12为本申请实施例提供的电子设备硬件结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请进一步详细说明。
需要说明的是,除非另外定义,本申请使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
如背景技术部分所述,尽管基于深度学习的源码漏洞检测工具发展迅速,其准确度也越来越高,但是在工具设计以及使用的时候仍存在异常情况,导致基于深度学习的源码漏洞检测工具无法正确检测漏洞。目前已有研究关注基于深度学习的源码漏洞分析工具中鲁棒性提升以及其数据集中存在的问题,但是现有技术中没有详细的研究和分析基于深度学习的源码漏洞检测工具中存在的异常以及其存在原因。
申请人在实现本申请的过程中发现,可以将基于深度学***性异常。本申请针对源码漏洞检测工具中的不同异常,分析了其产生原因和可能导致的后果。
以下,通过具体的实施例进一步详细说明本申请的技术方案。
参考图1,为本申请实施例提供的源码漏洞检测工具异常检测***示意图。
基于差分测试的源码漏洞检测工具异常检测***主要功能是自动化运行用户所提供的基于深度学习的源码漏洞检测工具,对其中的异常情况进行检测,并返回结果,并提供对应异常的自动化修复措施,帮助用户更正确地使用基于深度学习的源码漏洞检测工具,提高漏洞检测检测工具的可靠程度。
由于各个源码漏洞检测工具的中间文件类型、内容表达方式、检测目标语言各不相同,该***需要考虑如何自适应地运行相应工具、并检测其中可能存在的异常。
在本申请实施例中,源码漏洞检测工具异常检测***分为交互层、控制层、数据存储层和核心逻辑层,优选利用python语言实现,还可以应用C++或者QT编译语言实现。
作为一个可选的实施例,该***交互层的主要功能是用于与用户进行输入、输出的交互,交互层主要分为检测工具信息输入和检测结果展示两个模块,其中,检测工具信息输入是指用户通过配置文件指定源码漏洞检测工具的名称、版本、各功能单元文件名称、检测文件名称、中间文件类型、中间文件名称、检测目标语言等信息。检测结果展示主要是通过命令行和结果文件方式向用户输出检测结果,并且将检测结果输出到日志中,防止因为特殊原因导致检测结果丢失。
在具体实施中,检测结果展示模块还可以与终端设备可通过有线或无线的通信网络连接。终端设备包括但不限于桌面计算机、移动电话、移动电脑、平板电脑、媒体播放器、智能可穿戴设备、个人数字助理(personal digital assistant,PDA)或其它能够实现数据展示功能的电子设备等。
作为一个可选的实施例,该***控制层的功能主要分为:执行模式控制、工具运行控制和数据获取控制。
其中,执行模式控制是指对基于差分测试的源码漏洞检测工具异常检测***的执行模式进行获取和控制。执行模式控制的实现方法可以是通过命令行参数的输入方式,选择执行模式,-run为直接执行源码检测工具模式,-testing为异常检测模式,-testing-fixed为异常修复检测模式。
工具运行控制是指根据执行模式控制工具异常检测***各模块的运行以及待测源码漏洞检测工具各功能模块的运行。源码检测工具模式时,控制层控制执行用户提供的源码漏洞检测工具,并获取检测结果;异常检测模式时,控制层控制源码漏洞检测工具运行的同时,根据不同的异常类型执行不同的差分测试;异常修复检测模式时,控制层需要先利用异常修复模块对源码漏洞检测工具进行修复,随后运行源码漏洞检测工具,并利用差分测试检测异常。
数据获取控制包括对中间文件进行控制,中间文件控制是指在异常检测运行前后,对源码漏洞检测工具和异常检测生成的中间文件进行管理,在数据获取模块获取到用户输入检测工具信息后,控制层会创建对应的文件路径,数据获取模块获取到中间文件内容信息后,多余的中间文件会被删除。
作为一个可选的实施例,该***数据存储层主要用于存放基于差分测试的源码漏洞检测工具异常检测***的数据存储,存储内容包括但不限于关键词库、漏洞源码库、检测工具中的文件和缓存以及工具异常检测***的日志。数据存储层中的存储内容可供交互层、控制层、核心逻辑层读取、写入、修改和删除。
作为一个可选的实施例,该***核心逻辑层的主要功能是根据控制层的工具运行调度运行核心逻辑,其主要内容有运行根据检测内容,运行基于深度学习的源码漏洞检测工具,获取中间文件数据,生成用于差分测试的测试数据,利用差分测试进行源码漏洞检测工具的异常检测,修复含有异常的源码漏洞检测工具。其中,核心逻辑层分为异常检测模块、数据获取模块和异常修复模块。
在本申请实施例中,异常检测模块主要用于检测基于深度学习的源码漏洞检测工具中存在的异常,异常检测模块的各个子模块主要分布于源码漏洞检测工具各个检测流程中。
参考图2,为本申请实施例提供的异常检测模块的检测流程示意图。
异常检测模块首先根据不同异常检测项的预设规则,将待测代码改写成相应的改写代码,将原待测代码和改写后生成的改写代码输入到基于深度学习的源码漏洞检测工具中,通过数据获取模块获取到两种代码的中间文件数据,并比较生成代码生成的中间数据是否与原待测代码生成的中间数据是否存在差异,如果具有差异,则说明存在有相应的异常。
参考图3,为本申请实施例提供的源码漏洞检测工具异常示意图。
异常检测模块按照异常类型细分各个子模块,可以分为:源码输入校验异常检测子模块、预处理异常子模块、符号化异常检测子模块、代码片段标记异常检测子模块、深度学***性异常检测子模块。这些异常检测子模块会根据检测内容,制定不同的检测规则。
参考图4,为本申请实施例提供的针对源码漏洞检测工具异常的检测方法的流程示意图。
步骤S401,获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码。
在具体实施中,可以根据检测需求运行基于深度学***性异常检测。
步骤S402,根据预设规则改写所述待测代码,得到改写代码。
在具体实施中,可以根据不同的检测需求的预设规则,对待测代码进行改写,得到待测代码的改写代码,针对改写待测代码的预设规则与监测需求相应,同样包括但不限于源码输入校验异常检测、预处理异常、符号化异常检测、代码片段标记异常检测、深度学***性异常检测。
步骤S403,将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码。
在本步骤中,对于改写代码的处理过程与步骤S401的处理过程相应,根据步骤S401中的监测需求,将改写代码输入到源码漏洞检测模型,得到改写代码的第二中间代码。
步骤S404,根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常。
在具体实施中,针对源码漏洞检测工具异常的异常检测结果通常包括两种,源码漏洞检测工具异常(也可以理解为工具实现类异常)、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常(也可以理解为算法类异常),进一步地,源码漏洞检测工具异常可以但不限于源码输入校验异常检测、预处理异常、符号化异常检测、代码片段标记异常检测。
以下,通过具体的实施例进一步详细说明本申请中步骤S401至步骤S404的技术方案。
在具体实施中,源码输入校验异常检测需要对源码漏洞检测工具中的源码输入校验相关的异常情况进行检测。源码输入校验异常检测子模块默认检测对象为目标语言的有漏洞代码片段和无漏洞代码片段,那么当输入检测为其他输入,而源码漏洞检测工具也将这些输入作为代码片段处理时,则发生了异常。
参考图5,为本申请实施例提供的源码输入校验异常检测流程示意图。
作为一个可选的实施例,可以对待测代码进行检测,确定待测代码是否为目标语言的待测代码,响应于待测代码不是目标语言的待测代码,确定源码漏洞检测工具出现异常,响应于待测代码是目标语言的待测代码,确定待测代码是否为语法错误的待测代码,响应于待测代码是语法错误的待测代码,确定源码漏洞检测工具出现异常。
具体地,针对错误代码检测的原理为如果源码漏洞检测工具接收错误的代码输入,那么检测工具应当无法识别错误代码,而非将错误的代码识别为有漏洞或者无漏洞代码。错误代码检测所使用的检测方法可以是将原代码的偶数行删去,如果检测工具能够正常生成数据集,并将其加入到检测流程中,则检测到源码输入校验异常。
针对非目标代码检测的原理为如果源码漏洞检测工具接收到了非目标语言代码的输入,那么即使该代码语法正确,也需要排除该数据,否则将影响目标语言的检测准确率。非目标代码检测所使用的检测方法为可以是预先准备c、c++、java、python、javascript、shell、php等代码,通过读取配置文件确定源码漏洞检测工具所检测的目标语言,并将非目标语言的代码输入到检测工具中,如果检测工具可以顺利识别源码并将其加入到检测流程中,则检测到源码输入校验异常。
在具体实施中,预处理异常检测需要对源码漏洞检测工具的预处理、特征处理过程中存在的异常情况进行检测,如果预处理异常检测子模块没有按照设计预想的方式进行获取到代码特征,那么判断源码漏洞检测工具存在预处理异常。
参考图6,为本申请实施例提供的预处理异常检测流程示意图。
作为一个可选的实施例,可以提取第一中间代码的第一代码特征;提取第二中间代码的第二代码特征,进一步地,将第一代码特征与第二代码特征进行差分比较,响应于差分比较的结果存在差异,确定源码漏洞检测工具出现异常。
具体地,可以利用基于内容保护的代码变换方法将已有的待测代码转化为内容完全一致的中间代码,然后将第一中间代码和第二中间代码同时输入到源码漏洞检测工具的预处理方法中,将经过预处理的中间代码输入到源码漏洞检测工具的进行特征提取,通过差分比较两段代码所生成的代码片段,检测源码漏洞检测工具的预处理方法是否存在异常。
其中,预处理异常检测方法主要分为注释过滤检测、多余换行符处理检测和单行内容处理检测。
注释过滤检测原理为检测特征处理操作时是否对各种注释进行过滤。其检测方法可以是在待测样本中增加单行注释、多行注释,这些注释中的语句为正确语法结构的代码。如果加入注释的样本特征处理结果与原待测样本特征处理结果不一致,则说明源码漏洞检测工具在预处理和特征处理时没有对源代码中的注释进行过滤,导致源码特征中获取到了注释中的代码,因此检测出预处理异常。
多余换行符处理检测原理为检测特征处理操作时是否对代码中多余的换行符进行处理。由于c、c++、java编码中常见长语句,而大部分编码者为了编写方便会在长语句中***换行符,如果源码漏洞检测工具无法合适处理长语句中的换行符,那么单句语句中存在换行符的代码和不存在换行符的代码将会得到不同的控制流和数据流,同样语句生成不一样的特征会误导源码漏洞检测工具做出错误的判断。其检测方法可以是在源码样本每行中间合适的位置加入换行符(如:前括号之后),生成改写样本,如果改写样本的特征处理结果与原待测代码特征处理结果不一致,则说明存在预处理异常。
单行内容处理检测原理为检测操作是否将一行中的多句语句进行分行处理。与长语句中可以***换行符相对应,如果c、c++、java代码中存在一行中存在多句代码,那么编译器的编译结果回合分行编写多句代码的结果完全相同。此类情况在实际编码中常存在于定义变量中,如:“int a=0;float b=1.0f;”。检测方法可以为将源码样本中的换行符部分删除,生成改写代码样本,如果改写代码样本的特征处理结果与原待测代码特征处理结果不一致,则说明存在预处理异常。
在具体实施中,符号化异常检测是指基于深度学习的源码漏洞检测工具在代码嵌入时,将一些无关的源代码词汇修改成特定词汇。常用的符号化方法是将源代码片段中的变量名和函数名修改成如VAR1、FUN1等词汇。这样做的好处是可以保留源代码中的其他关键词信息,使得源码漏洞检测工具更加精准地学习到代码特征和漏洞特征,并且可以解决潜在的词汇表***问题,即代码中的标识符过多导致无法转换成合适的向量。
符号化异常检测子模块需要对源码漏洞检测工具中符号化相关的异常情况进行检测,如果检测工具的符号化过程中出现了把目标语言常见的关键词符号化或者未将部分变量名、函数名等需要符号化的词汇符号化等异常情况,则判断检测出异常。
需要说明的是,由于并非所有基于深度学习的源码漏洞检测工具对代码中的词汇进行符号化处理,因此符号化异常也仅存在于有符号化处理的源码检测工具中。
参考图7,为本申请实施例提供的符号化异常检测流程示意图。
作为一个可选的实施例,可以检测第一中间代码的第一关键词,对第一关键词进行符号化,得到第一符号化结果;检测第二中间代码的第二关键词,对第二关键词进行符号化,得到第二符号化结果,然后,响应于第一符号化结果与第二符号化结果不同,确定所述源码漏洞检测工具出现异常。
其中,符号化异常检测子模块中主要检测方法有符号化完整性检测、关键词符号化检测和非关键词符号化检测。
符号化完整性检测原理为检测是否存在部分变量名或函数名没有被符号化。检测方法可以为检测代码片段中是否存在除符号化词和关键词之外的其他词汇,如果存在则表示符号化完整性异常。而其中关键词表的完整与否至关重要,关系到是否能够正确检测出符号化完整性异常,符号化异常检测子模块中关键词表使用的是绝大部分开源的源码漏洞检测工具关键词表所有词汇的并集,可以最大程度使得符号化完整性检测的关键词表完整。
关键词符号化检测原理为检测是否有部分关键词符号化,如果存在有部分关键词被符号化,则存在异常,如果待测代码中存在有关键词被符号化,那么基于深度学习的源码漏洞检测工具可能会收集不到待测代码中的关键特征,导致检测性能下降。检测方法可以为检测符号化前后代码中出现的词汇,如果有关键词出现在符号化以前的代码中,但是没有出现在符号化后代码中,则说明存在符号化异常。
非关键词符号化检测原理为检测符号化方法是否能够对简单变换变量、函数等非关键词名称的代码,生成同样的符号化结果。检测方法可有为在进行符号化前,修改非关键词名称,对比两类样本的符号化结果,如果新的符号化结果和原先的结果不一致,则变量名符号化异常。由于基于深度学习的源码漏洞检测工具中符号化本身就是将变量名称进行修改,所以具体检测方法可以是比较源码漏洞检测工具单次符号化和连续两次符号化结果之间是否存在不同,如果两者的中间结果之间存在不同,则检测出符号化异常。
在具体实施中,由于代码片段标记异常主要是指提取信息后代码标记是否存在错误,而这种检测本身就是基于深度学习的源码漏洞检测工具的检测内容,现有技术中没有很好的方法完美检测和解决代码片段标记异常。而本申请聚焦于代码片段标记异常中的一种特殊情况:代码片段标记矛盾。
参考图8,为本申请实施例提供的代码片段标记异常检测流程示意图。
作为一个可选的实施例,基于差分测试的代码片段标记异常检测的原理为多个源码在经过预处理和特征处理后,可能会生成重复的代码片段,而内容完全相同的代码片段其漏洞标记应当一致。在本申请实施例中,基于差分测试的代码片段标记异常检测方法流程可以为将所有待测代码作为测试用例输入到源码漏洞检测工具中,经过源码漏洞检测工具的预处理方法、特征提取方法、标记获取方法后得到代码片段标记对,使用哈希函数获取所有代码片段的哈希值,获取重复的哈希值,比较其标记是否存在不同,如果有不同则存在代码片段标记异常。其中差分测试用例为已有待测代码,待测***为以深度学习源码漏洞检测工具的预处理、特征提取、标记获取为整体的软件代码,差分比较规则为比较相同代码片段是否存在矛盾的漏洞状态标记。
需要说明的是,选择利用差分测试技术而不选择直接检测代码片段标记的原因有两点,一是大部分基于深度学习的源码漏洞检测工具的特征提取方法使用的是跨文件的数据流和控制流提取,代码片段中存在的代码片段错误主要由于无法正确定位漏洞行所在的文件信息,导致无法辨别代码片段的标记正确与否。二是大部分已有的传统源码漏洞检测工具主要在源码函数的粒度上利用数据流分析、控制流分析、符号执行等方法检测源码漏洞,无法检测提取特征后的代码片段的漏洞存在情况,也无法判断代码片段标记是否正确。而本申请考虑到相比于直接检测代码片段标记是否存在错误,利用差分测试检测是否有代码片段是否矛盾这种方式实现更加简单,异常检测结果的准确率高。
在具体实施中,深度学习鲁棒性异常检测原理为如果两个同等语义,结构相似的代码片段的检测结果不同,则说明深度学习源码漏洞检测工具存在深度学习鲁棒性异常。源码漏洞检测工具存在鲁棒性异常则代表其没有学习到代码漏洞的本质特征,甚至也没学习到代码结构的特征,而只是学习到了两个代码片段之间不同的词汇。
作为一个可选的实施例,可以对待测代码进行语义等价变化,得到语义测试样本;其中,待测代码与语义测试样本的语义相同,进一步地,将语义测试样本输入到预先构建的源码漏洞检测模型,得到语义测试样本的第一语义代码,比较第一中间代码的语义与第一语义代码的语义,响应于第一中间代码的语义与第一语义代码的语义不同,确定源码漏洞检测工具的鲁棒性出现异常。
参考图9,为本申请实施例提供的深度学习鲁棒性异常检测流程示意图。
具体地,检测方法可以为利用语义等价变换生成测试样本,如果测试样本结果与原结果不一致,则说明存在鲁棒性异常。首先对已有源码使用基于语义保护的代码变换方法生成其他语义相同的变换代码,并且标记代码变换前后的代码,然后使用基于深度学习的源码漏洞检测工具检测所有代码的结果,最后计算测试结果中的准确率和F1值,并且差分比较语义等价变换前后的代码是否存在结果反转。其中,F1值即为召回率(Recall),是针对原样本而言的,其含义是在实际为正的样本中被预测为正样本的概率。如果语义等价变换前后代码片段检测结果不一致,差分测试结果为存在鲁棒性异常。其中差分测试用例为已有源代码和经过语义保护变换的源代码,待测***为深度学习源码漏洞检测工具整体,差分比较规则为相同语义的不同代码是否存在检测结果差异。
需要说明的是,基于语义保护的代码变换方法指的是通过对代码一些不涉及源码结构变化的源代码等价变换,基于语义保护的代码等价变换操作包括但不限于:将for循环改成while循环、将while循环改成for循环、改变关系表达式、修改一元运算、修改为自增运算、修改数字、修改变量定义、增加垃圾代码和改变没有依赖的语句顺序。
在具体实施中,深度学***性异常检测原理为通过机器学***性领域的相关方法,检测源码漏洞检测工具中是否存在过于强调部分特征的异常情况存在。检测源码漏洞检测工具的公平性异常需要找出与源码漏洞检测无关的特征。深度学***性检测中使用到的无关特征为:代码中是否存在循环,特定词汇的存在与否和代码片段总词汇数量。
参考图10,为本申请实施例提供的深度学***性异常检测流程示意图。
作为一个可选的实施例,可以确定待测代码的非相关信息,根据非相关信息对所述待测代码进行分类,得到第一代码集和第二代码集;其中,第一代码集中的代码不包含非相关信息,第二代码集中的代码包含非相关信息,进一步地,根据预设公平规则计算第一代码集以及第二代码集的真阳性率和假阳性率,计算第一代码集的真阳性率与假阳性率之差,得到第一偏差结果;计算第二代码集的真阳性率与假阳性率之差,得到第二偏差结果,最后,响应于第一偏差结果与第二偏差结果的偏向性相同,确定源码漏洞检测工具的公平性出现异常。
具体地,深度学***性检测方法可以是利用数据获取模块中获取到待测源码的相关特征信息,随后根据无关特征存在与否将待测代码分为两个组,最后在使用基于深度学***性衡量标准对不同特征的源码进行统计和总结,模块中利用的公平性衡量标准为AOD和SPD,AOD衡量两个群体的真阳性和假阳性比率之差,SPD衡量两个群体的阳性率之差。如果发现测试结果中存在着偏向性的结果,则判断源码漏洞检测工具中存在深度学***性异常。举例来说:源码漏洞检测工具检测出很多代码样本可能因为行数过短,而被判断为更可能存在漏洞,则检测出深度学***性存在异常。
需要说明的是,由于深度学***性衡量标准这种统计性的结果衡量有时不能够表示漏洞检测的因果关系,因此深度学***性异常的影响和后果并非十分严重。因此,本申请通过公平性衡量这种统计方式,更加清晰直观地发现所测量的源码漏洞检测工具是否可靠和有效。
在具体实施中,在差分测试检测异常结束后,需要对异常检测结果进行收集和上报,以使工作人员根据该异常检测结果进行代码修复工作。
作为一个可选的实施例,响应于源码漏洞检测工具出现异常或/和源码漏洞检测工具的鲁棒性出现异常,将异常检测结果写入到异常检测结果文件和日志。
具体地,可以通过数据获取模块实现,数据获取模块主要用于获取源码漏洞检测工具异常检测***中存在的各种数据。数据获取模块按照功能分为以下三部分:检测工具输入信息获取、源码漏洞检测工具中间数据获取和异常相关数据获取。
其中,异常相关数据获取主要收集工具异常检测***中异常检测相关的数据,根据异常检测模块中不同检测功能收集并读取不同异常检测的相关数据,这些相关数据用于判断源码漏洞检测工具是否存在异常。在差分测试检测异常结束后,数据获取模块会收集异常检测结果,并将其写入到异常检测结果文件和日志中。
此外,检测工具输入信息获取主要收集异常检测工具的名称、版本、各功能单元文件名称、待测文件路径名称、中间文件类型、中间文件名称、检测目标语言等信息,用于自动化运行源码检测工具,为基于差分测试的异常检测提供信息和数据,也为数据获取模块中源码漏洞检测工具中间数据获取和异常相关数据获取提供文件名称信息。数据获取模块所需的功能单元文件有:预处理文件、特征处理切片函数文件、符号化处理函数文件、向量化文件以及深度学习模型运行文件,为了使得源码漏洞检测工具正常运行,其他文件需要被这些文件直接调用。数据获取模块所需的中间文件有:代码片段文件、符号化后代码片段文件、词向量文件和最终结果文件。
源码漏洞检测工具中间数据获取主要收集源码漏洞检测工具运行过程中产生的中间文件中的内容,根据检测工具信息获取中收集到的中间文件名称,读取中间文件的内容,为工具异常检测***的异常检测模块提供了用于比较的中间数据。目前支持的中间文件类型有pkl、json、txt,并且根据不同的中间文件格式预制了内容的格式。
进一步地,基于差分测试的源码漏洞检测工具异常检测***还通过异常修复模块来对比有无异常带来的影响。
根据本文定义的不同异常监测需求,主要分为源码输入校验异常修复、预处理异常修复、符号化异常修复、代码片段标记异常修复、深度学***性异常修复。
源码输入校验异常修复主要通过对源码漏洞检测工具输入的内容进行检测。对文件名后缀不是目标代码,则不将该文件的内容输入到源码漏洞检测工具中。利用joern工具分析文件中的内容是否符合源码规范,如果发现代码语法错误,则不将改代码输入到源码漏洞检测工具中。
预处理异常修复主要通过对输入代码进行规范化处理,包括:去除代码中的所有注释、分析代码中的单句语句并将单句语句单独成行。
符号化异常修复主要通过将源码漏洞检测工具的符号化函数进行替换,用关键词表更为完整、流程更为正确的符号化函数,对代码进行符号化。
代码片段异常修复主要通过将源码漏洞检测工具中检测到的标记矛盾的代码片段进行过滤。由于难以通过自动化的方式辨别代码片段的真实标记,因此通过直接过滤标记矛盾的代码片段可以直接消除代码片段标记矛盾的异常。
深度学习鲁棒性异常修复主要通过数据增强的方式,利用不涉及源码结构变化的简单词汇变换,在训练集中生成新样本后,将原样本和生成样本输入到源码漏洞检测工具的训练模型中进行代码的训练,借此提升深度学习模型的鲁棒性,修复鲁棒性异常。
深度学***性异常修复通过拒绝基于选项的分类方法(ROC方法)实现,ROC方法是一种后处理的机器学***性提升方法,后处理方法的特点为:不需要修改数据集,也不需要修改模型,只修改测试结果。ROC方法的原理为先选定一个阈值a(0.5<a<1)。对于原来更容易判断为阴性的样本,概率≥a,则结果判断为阳性结果,概率<a,则判断结果为阴性;对于更容易判断为阴性的样本,如果检测置信度≥1-a,则结果判断为阳性样本,检测置信度<1-a,则判断结果为阴性样本,这样两个组的公平性差距就会变小。
从上面所述可以看出,本申请提供的针对源码漏洞检测工具异常的检测方法以及相关设备,首先获取待测代码,将待测代码输入到预先构建的源码漏洞检测模型,得到待测代码的第一中间代码,进一步地,根据预设规则改写待测代码,得到改写代码,将改写代码输入到源码漏洞检测模型,得到改写代码的第二中间代码,最后,根据第一中间代码以及第二中间代码确定异常检测结果;其中,异常检测结果包括:源码漏洞检测工具异常和源码漏洞检测工具的鲁棒性异常。本申请利用差分测试技术,能够根据不同异常制定对应检测方法,并对部分异常进行检测和量化,以对检测到的异常进行及时修复,提升了基于深度学习的源码漏洞检测工具的可靠性、鲁棒性和准确性,节约大量人力资源,也有助于网络空间安全领域其他检测工具的异常研究。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本申请的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例提供的针对源码漏洞检测工具异常的检测方法相对应的,本申请还提供了一种针对源码漏洞检测工具异常的检测装置。
参考图11,为本申请实施例提供的针对源码漏洞检测工具异常的检测装置示意图。
所述装置包括:
获取模块1101,被配置为获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;
第一编写模块1102,被配置为根据预设规则改写所述待测代码,得到改写代码;
第二编写模块1103,被配置为将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;
检测模块1104,被配置为根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常。
可选的,所述检测模块1104,还被配置为:
对所述待测代码进行检测,确定所述待测代码是否为目标语言的待测代码;
响应于所述待测代码不是所述目标语言的待测代码,确定源码漏洞检测工具出现异常;
响应于所述待测代码是目标语言的待测代码,确定所述待测代码是否为语法错误的待测代码;
响应于所述待测代码是语法错误的待测代码,确定所述源码漏洞检测工具出现异常。
可选的,所述检测模块1104,还被配置为:
提取所述第一中间代码的第一代码特征;提取所述第二中间代码的第二代码特征;
将所述第一代码特征与所述第二代码特征进行差分比较;
响应于所述差分比较的结果存在差异,确定所述源码漏洞检测工具出现异常。
可选的,所述检测模块1104,还被配置为:
检测所述第一中间代码的第一关键词,对所述第一关键词进行符号化,得到第一符号化结果;
检测所述第二中间代码的第二关键词,对所述第二关键词进行符号化,得到第二符号化结果;
响应于所述第一符号化结果与所述第二符号化结果不同,确定所述源码漏洞检测工具出现异常。
可选的,所述检测模块1104,还被配置为:
对所述待测代码进行语义等价变化,得到语义测试样本;其中,所述待测代码与所述语义测试样本的语义相同;
将所述语义测试样本输入到预先构建的源码漏洞检测模型,得到所述语义测试样本的第一语义代码;
比较所述第一中间代码的语义与所述第一语义代码的语义;
响应于所述第一中间代码的语义与所述第一语义代码的语义不同,确定所述源码漏洞检测工具的鲁棒性出现异常。
可选的,所述检测模块1104,还被配置为:
确定所述待测代码的非相关信息,根据所述非相关信息对所述待测代码进行分类,得到第一代码集和第二代码集;其中,所述第一代码集中的代码不包含所述非相关信息,所述第二代码集中的代码包含所述非相关信息;
根据预设公平规则计算所述第一代码集以及所述第二代码集的真阳性率和假阳性率;
计算所述第一代码集的真阳性率与假阳性率之差,得到第一偏差结果;计算所述第二代码集的真阳性率与假阳性率之差,得到第二偏差结果;
响应于所述第一偏差结果与所述第二偏差结果的偏向性相同,确定所述源码漏洞检测工具的公平性出现异常。
可选的,所述获取模块1101,还被配置为:
响应于所述源码漏洞检测工具出现异常或/和所述源码漏洞检测工具的鲁棒性出现异常;
将所述异常检测结果写入到异常检测结果文件和日志。
为了描述的方便,描述以上***时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的***用于实现前述任一实施例中相应的针对源码漏洞检测工具异常的检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的针对源码漏洞检测工具异常的检测方法。
图12示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1210、存储器1220、输入/输出接口1230、通信接口1240和总线1250。其中处理器1210、存储器1220、输入/输出接口1230和通信接口1240通过总线1250实现彼此之间在设备内部的通信连接。
处理器1210可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1220可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1220可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1220中,并由处理器1210来调用执行。
输入/输出接口1230用于连接输入/输出模块,以实现信息输入及输出。输入/输出模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1240用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1250包括一通路,在设备的各个组件(例如处理器1210、存储器1220、输入/输出接口1230和通信接口1240)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1210、存储器1220、输入/输出接口1230、通信接口1240以及总线1250,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的针对源码漏洞检测工具异常的检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的针对源码漏洞检测工具异常的检测方法。
上述非暂态计算机可读存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上示例性方法部分中任一实施例所述的针对源码漏洞检测工具异常的检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
虽然已经参考若干具体实施方式描述了本申请的精神和原理,但是应该理解,本申请并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本申请旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (7)
1.一种针对源码漏洞检测工具异常的检测方法,其特征在于,包括:
获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;
根据预设规则改写所述待测代码,得到改写代码;
将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;
根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常,包括:
提取所述第一中间代码的第一代码特征;提取所述第二中间代码的第二代码特征;
将所述第一代码特征与所述第二代码特征进行差分比较;
响应于所述差分比较的结果存在差异,确定所述源码漏洞检测工具出现异常;
对所述待测代码进行语义等价变化,得到语义测试样本;其中,所述待测代码与所述语义测试样本的语义相同;
将所述语义测试样本输入到预先构建的源码漏洞检测模型,得到所述语义测试样本的第一语义代码;
比较所述第一中间代码的语义与所述第一语义代码的语义;
响应于所述第一中间代码的语义与所述第一语义代码的语义不同,确定所述源码漏洞检测工具的鲁棒性出现异常;
确定所述待测代码的非相关信息,根据所述非相关信息对所述待测代码进行分类,得到第一代码集和第二代码集;其中,所述第一代码集中的代码不包含所述非相关信息,所述第二代码集中的代码包含所述非相关信息;
根据预设公平规则计算所述第一代码集以及所述第二代码集的真阳性率和假阳性率;
计算所述第一代码集的真阳性率与假阳性率之差,得到第一偏差结果;计算所述第二代码集的真阳性率与假阳性率之差,得到第二偏差结果;
响应于所述第一偏差结果与所述第二偏差结果的偏向性相同,确定所述源码漏洞检测工具的公平性出现异常。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述待测代码进行检测,确定所述待测代码是否为目标语言的待测代码;
响应于所述待测代码不是所述目标语言的待测代码,确定源码漏洞检测工具出现异常;
响应于所述待测代码是目标语言的待测代码,确定所述待测代码是否为语法错误的待测代码;
响应于所述待测代码是语法错误的待测代码,确定所述源码漏洞检测工具出现异常。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检测所述第一中间代码的第一关键词,对所述第一关键词进行符号化,得到第一符号化结果;
检测所述第二中间代码的第二关键词,对所述第二关键词进行符号化,得到第二符号化结果;
响应于所述第一符号化结果与所述第二符号化结果不同,确定所述源码漏洞检测工具出现异常。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述源码漏洞检测工具出现异常或/和所述源码漏洞检测工具的鲁棒性出现异常;
将所述异常检测结果写入到异常检测结果文件和日志。
5.一种针对源码漏洞检测工具异常的检测装置,其特征在于,包括:
获取模块,被配置为获取待测代码,将所述待测代码输入到预先构建的源码漏洞检测模型,得到所述待测代码的第一中间代码;
第一编写模块,被配置为根据预设规则改写所述待测代码,得到改写代码;
第二编写模块,被配置为将所述改写代码输入到所述源码漏洞检测模型,得到所述改写代码的第二中间代码;
检测模块,被配置为根据所述第一中间代码以及所述第二中间代码确定异常检测结果;其中,所述异常检测结果包括:源码漏洞检测工具异常、源码漏洞检测工具的鲁棒性异常以及源码漏洞检测工具的公平性异常包括:
提取所述第一中间代码的第一代码特征;提取所述第二中间代码的第二代码特征;
将所述第一代码特征与所述第二代码特征进行差分比较;
响应于所述差分比较的结果存在差异,确定所述源码漏洞检测工具出现异常;
对所述待测代码进行语义等价变化,得到语义测试样本;其中,所述待测代码与所述语义测试样本的语义相同;
将所述语义测试样本输入到预先构建的源码漏洞检测模型,得到所述语义测试样本的第一语义代码;
比较所述第一中间代码的语义与所述第一语义代码的语义;
响应于所述第一中间代码的语义与所述第一语义代码的语义不同,确定所述源码漏洞检测工具的鲁棒性出现异常;
确定所述待测代码的非相关信息,根据所述非相关信息对所述待测代码进行分类,得到第一代码集和第二代码集;其中,所述第一代码集中的代码不包含所述非相关信息,所述第二代码集中的代码包含所述非相关信息;
根据预设公平规则计算所述第一代码集以及所述第二代码集的真阳性率和假阳性率;
计算所述第一代码集的真阳性率与假阳性率之差,得到第一偏差结果;计算所述第二代码集的真阳性率与假阳性率之差,得到第二偏差结果;
响应于所述第一偏差结果与所述第二偏差结果的偏向性相同,确定所述源码漏洞检测工具的公平性出现异常。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任意一项所述的方法。
7.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1至4任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310647561.XA CN116383834B (zh) | 2023-06-02 | 2023-06-02 | 针对源码漏洞检测工具异常的检测方法以及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310647561.XA CN116383834B (zh) | 2023-06-02 | 2023-06-02 | 针对源码漏洞检测工具异常的检测方法以及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116383834A CN116383834A (zh) | 2023-07-04 |
CN116383834B true CN116383834B (zh) | 2023-08-08 |
Family
ID=86971488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310647561.XA Active CN116383834B (zh) | 2023-06-02 | 2023-06-02 | 针对源码漏洞检测工具异常的检测方法以及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116383834B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017049800A1 (zh) * | 2015-09-23 | 2017-03-30 | 百度在线网络技术(北京)有限公司 | 检测应用漏洞代码的方法和装置 |
CN111475408A (zh) * | 2020-03-27 | 2020-07-31 | 南京英诺森软件科技有限公司 | 一种基于代码检查工具的质量管理方法 |
CN113127003A (zh) * | 2021-04-26 | 2021-07-16 | 平安普惠企业管理有限公司 | 代码异常告警方法、装置、设备及存储介质 |
CN113836023A (zh) * | 2021-09-26 | 2021-12-24 | 南京大学 | 一种基于体系结构交叉检查的编译器安全性测试方法 |
CN114491566A (zh) * | 2022-04-18 | 2022-05-13 | 中国长江三峡集团有限公司 | 一种基于代码相似性的模糊测试方法、装置及存储介质 |
CN115757181A (zh) * | 2022-12-05 | 2023-03-07 | 飞狐信息技术(天津)有限公司 | 一种代码检测方法、装置、设备及可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10140201B2 (en) * | 2016-12-19 | 2018-11-27 | Bank Of America Corporation | Software defect detection tool |
US11620389B2 (en) * | 2019-06-24 | 2023-04-04 | University Of Maryland Baltimore County | Method and system for reducing false positives in static source code analysis reports using machine learning and classification techniques |
US11423146B2 (en) * | 2019-08-27 | 2022-08-23 | Nec Corporation | Provenance-based threat detection tools and stealthy malware detection |
-
2023
- 2023-06-02 CN CN202310647561.XA patent/CN116383834B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017049800A1 (zh) * | 2015-09-23 | 2017-03-30 | 百度在线网络技术(北京)有限公司 | 检测应用漏洞代码的方法和装置 |
CN111475408A (zh) * | 2020-03-27 | 2020-07-31 | 南京英诺森软件科技有限公司 | 一种基于代码检查工具的质量管理方法 |
CN113127003A (zh) * | 2021-04-26 | 2021-07-16 | 平安普惠企业管理有限公司 | 代码异常告警方法、装置、设备及存储介质 |
CN113836023A (zh) * | 2021-09-26 | 2021-12-24 | 南京大学 | 一种基于体系结构交叉检查的编译器安全性测试方法 |
CN114491566A (zh) * | 2022-04-18 | 2022-05-13 | 中国长江三峡集团有限公司 | 一种基于代码相似性的模糊测试方法、装置及存储介质 |
CN115757181A (zh) * | 2022-12-05 | 2023-03-07 | 飞狐信息技术(天津)有限公司 | 一种代码检测方法、装置、设备及可读存储介质 |
Non-Patent Citations (1)
Title |
---|
刘臻等.基于漏洞指纹的软件脆弱性代码复用检测方法.浙江大学学报(工学版).2018,(第11期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN116383834A (zh) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Jiang et al. | What causes my test alarm? Automatic cause analysis for test alarms in system and integration testing | |
CN108932192B (zh) | 一种基于抽象语法树的Python程序类型缺陷检测方法 | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
US8539475B2 (en) | API backward compatibility checking | |
CN108170468B (zh) | 一种自动检测注释和代码一致性的方法及其*** | |
Li et al. | Deeplv: Suggesting log levels using ordinal based neural networks | |
CN107862327B (zh) | 一种基于多特征的安全缺陷识别***和方法 | |
CN104899147A (zh) | 一种面向安全检查的代码静态分析方法 | |
CN109710518A (zh) | 脚本审核方法及装置 | |
JP7404839B2 (ja) | ソフトウェアプログラム不良位置の識別 | |
CN111045927A (zh) | 性能测试评估方法、装置、计算机设备及可读存储介质 | |
Anu et al. | An approach to recommendation of verbosity log levels based on logging intention | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
Emam et al. | Inferring extended probabilistic finite-state automaton models from software executions | |
CN110750297B (zh) | 一种基于程序分析和文本分析的Python代码参考信息生成方法 | |
CN114238980B (zh) | 一种工控设备漏洞挖掘方法、***、设备及存储介质 | |
CN113779590B (zh) | 一种基于多维度表征的源代码漏洞检测方法 | |
CN110990575A (zh) | 测试用例失败原因分析方法、装置及电子设备 | |
CN112464237A (zh) | 一种静态代码安全诊断方法及装置 | |
CN113778852A (zh) | 一种基于正则表达式的代码分析方法 | |
Husain et al. | Application of data mining techniques for improving software engineering | |
Satapathy et al. | Usage of machine learning in software testing | |
CN116383834B (zh) | 针对源码漏洞检测工具异常的检测方法以及相关设备 | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
CN116340172A (zh) | 基于测试场景的数据收集方法、装置及测试用例检测方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |