当您进行代码审计(CodeReview,RV)时,您一定会联想到:为什么每次都要人工审计?这种机器是否能够代替人工完成这项工作?通过调查研究,得出以下结论:现在机器不能完全替代人工,但能够做一些辅助工作,提高人工RV的效率。例如,通过一些算法或规则,能够自动发现隐藏在代码中的漏洞,这涉及到相关的代码漏洞检测技术。有两种检测漏洞的思想,某种是简单地预测漏洞是否存在,另一种是能够识别出漏洞的性质,并能确定漏洞的具体位置。对开发人员来说,两种思路都很有帮助,尽早发现代码中的问题就可以节省很多精力和成本。此外,还存在漏洞修复相关的研究,能够提供漏洞修复补丁(Patch),实现对漏洞的自动修复。
编码漏洞检测进展,随着软件测试技术的发展,对漏洞检测技术的研究也越来越多,有效的漏洞检测能提高软件测试的效率。概括起来,漏洞检测技术的发展大致可分为以下几类:首先,人们根据历史漏洞总结出一些明显的特征,如文件修改次数、代码复杂性等,随后的开发如果遇到具有相似特征的代码文件,就需要重点处理,它很可能是有缺陷的。
后来人们总结出常见漏洞的固定写法或规则,出现了现在流行的基于静态规则的漏洞检测方法,能够检测出特定漏洞类型,甚至这种能力已集成到开发阶段,开发时就可以实时检测,尽早避免问题。近年来,深度学习技术得到了快速发展,许多人也将该技术应用于漏洞检测,通过对基于历史漏洞数据的元或代码信息的训练,就可以预测代码文件并识别特定漏洞。
典型产品技术分析,以下是一些在代码漏洞检测领域具有代表性的产品及相关技术的介绍。两者都是Facebook享有的漏洞检测和自我修复系统。Infer是某种代码静态分析工具,它能够在发布之前发现代码中的漏洞,现在它在github上开放源代码,Steel13K,是某种对于java语言,C/C++,Objelickve-C等语言的漏洞检测软件。与java语言代码相比,它能够发现空指针异常、资源泄漏等许多漏洞。该Infer的一般工作流程分为两个阶段:捕获(Capture)和分析(Asisynis)。捕捉阶段,Infer将把代码编译成内部中间语言,然后在分析阶段,Infer分别对每个函数和方法进行分析检测,发现错误后立即终止本方法的运行,而不会影响对其他方法的继续分析。分析命令能够运行几次,直到检测到没有bug为止。