原文标题:V-SZZ: Automatic Identification of Version Ranges Affected by CVE Vulnerabilities
原作者:Lingfeng Bao,Xin Xia*,Ahmed E. Hassan,Xiaohu Yang
发表会议:2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE)
原文链接:https://ieeexplore.ieee.org/document/9794006
主题类型:漏洞版本影响、SZZ、V-SZZ
笔记作者:octopus
过去对漏洞的研究主要为漏洞管理,漏洞补丁,漏洞识别等,很少有研究漏洞所影响的版本问题。但是,漏洞影响版本是很值得探讨的问题,因为许多政府、企业等所用的软件严重依赖NVD、CVE等漏洞数据库所揭露的漏洞来制定软件安全策略,若当前使用的版本存在脆弱版本,则需要执行打补丁更新等操作。但是,NVD等数据库所揭露的版本不一定正确,这就导致了企业和软件供应链可能错误的更新补丁,造成人力资源等浪费。
基于上述问题,作者评估了SZZ算法以及出现的许多变体的SZZ(AG-SZZ, MA-SZZ, 和 RA-SZZ)算法是否能够准确的识别漏洞诱导提交,并对原始的SZZ算法改进,提出了V-SZZ算法,以之前的算法为基线,得出了改进的V-SZZ算法准确度,并基于诱导提交有效地细化脆弱版本,再手工验证了受这些漏洞影响的软件版本,得出最后结果。
包含以下语言的各项目
作者排除了四类样本:
因此,最后实验数据集从剩下的C/C++每个项目中随机挑选20个漏洞共计100个,41个Java项目中剩余的72个漏洞,共计172个漏洞总数和188个提交
原始的VSS算法认为previous commits即为inducing commits,这是不精确的。因为在previous commits之前的提交很有可能存在引发漏洞的某几行代码的更改,意味着previous commits不是第一个修改Fixing commits修改的行的提交,在之前的存在称为descendants commits,找到第一个修改那些行的提交才能认为是inducing commits
对于修复提交的每一个修改行,使用git blame命令去识别之前的提交(忽略非语义行代码),然后应用行映射算法,去将修改的行映射到识别到的之前的提交的那一行,接着使用git blame迭代上述步骤,直到找到映射出的行被作为新行,第一次被加在代码里,那此时的提交即为Inducing commit
在一个项目中,把一个分支的某个提交提交到另一个分支上是很常见的,通常使用命令git cherry-pick实现。如果仅仅对某一个分支执行git blame指令,可能会忽略掉其他的分支,导致结果不准确。
如果使用命令git cherry-pick实现,通常会存在git消息中生成“herry picked from commit xxx”,据此可以轻易的判断出这个提交是从哪个分支上提交过来,但若没有此消息,作者将所有的提交块进行哈希,当给定一个提交时,可以将其哈希并且与所有哈希进行匹配,匹配成功的那些提交块则认为是复制过去的提交
根据上面找的Inducing commits,再找到可抵达其的提交(可抵达意味着他们两个提交属于相同的祖先或父母)的版本号作为,然后在找到可抵达Fixing commits的提交的版本号作为,两者的差值即为脆弱版本集合
对于C/C++和Java项目,其召回率和精确度和F1分数基本都领先其余SZZ算法,其在检测诱导提交和正确的版本号都具有更显著的效果
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com