论文部分内容阅读
C++源代码漏洞静态扫描是指在不运行程序的情况下,使用污点分析、数据流分析技术挖掘潜在的漏洞。C++是最流行的语言之一,但其内存模型决定了C++相比于Java等语言更容易出现内存损坏等漏洞。静态扫描技术成本低、速度快,得到了开发者的广泛使用。随着软件的规模变大、复杂度变高,静态扫描工具会忽略控制流、上下文来提升扫描效率,但会导致误报数量的增多。为了改善开发者漏洞审核流程,降低漏洞审核难度,C++源代码漏洞静态扫描系统亟需降低误报率来协助开发者交付更健壮的代码。本系统创新地引入基于机器学习的迭代反馈式误报过滤机制,来解决C++源代码漏洞扫描中误报率高的问题。首先,系统融合多个开源漏洞扫描工具对程序进行扫描,获取丰富的原始漏洞报告。其次,系统使用漏洞扫描工具集对带漏洞标签的源码数据集进行扫描来获取误报数据,并使用该数据结合机器学习算法训练误报过滤器,获取过滤后的漏洞报告。接着,系统将漏洞交给漏洞专家审核,获取误报漏洞。最后,系统使用相似度算法寻找与误报漏洞代码相似的代码,并用这些数据再次训练误报过滤器。通过将漏洞列表中的误报项过滤掉,漏洞报告的有效性和可用性得到了提升,同时开发者参考过滤后报告修复漏洞,可以生产更高质量代码。本系统划分为C++源代码漏洞静态扫描模块、C++源代码特征提取模块、漏洞静态扫描误报过滤模块、漏洞审核反馈模块。为实现服务间松耦合,本系统使用Docker容器技术对扫描服务、误报过滤服务进行封装。为保证扫描服务的高性能,本系统使用异步队列中间件Rabbit MQ进行服务间消息传递。为保证扫描服务的持续优化,本系统使用Jenkins持续集成工具实现误报过滤模型的自动更新。本系统相比于目前使用最广泛的开源工具Tscan Code和Cppcheck,F1值分别提高了30%和22%,有效地降低了C++源代码漏洞静态扫描的误报。本系统提高了C++源代码漏洞静态扫描器的可用性,减少了误报漏洞数量,减轻了开发者审核漏洞负担,为交付高可靠的代码提供保障。