针对企业信息系统源代码中可能存在的安全漏洞,可以运用基于历史漏洞信息的智能学习技术进行检测。通过采集海量开源代码并提取其中漏洞代码的方法构建样本集,提取漏洞比对特征进行模型训练,形成原型系统,实现对系统源代码进行安全性检测,并辅助工程人员快速进行源代码漏洞的定位与修复,大幅提高代码安全检测与维护的工作效率。总体目标如下:
(1)使用多渠道、多版本、多来源的软件模块代码采集技术,对企业信息系统开发代码、开源代码和第三方代码分别进行爬取;针对开源代码各个模块的不同历史版本,采集完整历史版本代码形成开源代码库;针对API及库函数等不同调用方式对第三方代码进行处理,形成第三方代码库。
(2)基于采集到的代码库,利用git、svn等版本控制工具提供的历史提交信息检索方法,结合栈溢出和堆溢出等漏洞关键词,检索代码库中各个模块代码的实现性漏洞,对漏洞成因、代码位置、修补信息等进行存储,依据漏洞类型分别形成相应类型的漏洞库,获得完整漏洞代码库。
(3)基于生成的漏洞代码库,实现从语法相似性、语义相似性、变量相似性、代码结构相似性等比对结果中进行特征提取;进一步通过将单独特征进行相乘或计算笛卡尔积的方式,形成高质量的能更好表征代码安全性的合成特征。
(4)利用决策树、神经网络、SVM等机器学习算法对比对结果进行判别,得到目标网络密码模块代码的漏洞信息;提取软件模块的漏洞信息,并形成安全性比对报告,最终形成代码安全性比对判别原型系统。
源代码智能审计功能
源代码智能安全审计平台软件功能主要包括:项目管理、源代码仓库管理、代码采集、漏洞扫描、源代码安全分析、智能学习等模块。
(1)多渠道软件代码采集及源代码管理平台
使用多种版本控制系统协议支持模块,最后形成广域分布式的多种版本控制系统聚合爬取技术的代码采集模块。
建设形成了基于历史版本且具有表征能力的代码仓库和离线开源代码框架仓库,满足对项目代码历史信息和修改记录、历史版本获取的需求;
建立了本地源代码仓库,搭建源代码管理平台,方便对源代码进行统一管理管理,为后续的源代码扫描做好准备的工作。
生成基于历史版本管理的源代码仓库。
生成基于历史版本管理的离线开源代码仓库。
(2)漏洞特征库
通过程序静态分析技术等方法,提取历史漏洞能够表征漏洞信息的初步特征,结合保留语义的抽象化方法实现在初步特征基础上生成更为优质的漏洞优化特征,形成企业代码漏洞特征库。可对漏洞优化特征的数据管理,实现了对特征的逐条及批量的增删或导入,并且无需重新构建或编译整个模型。
(3)基于机器学习的源代码漏洞比对与分析
将漏洞采集、漏洞定位、特征提取和特征优化结合中间表示转化、机器学习模型训练与预测。
已达到扫描速度每1万行代码检测时间≤5分钟
在没有机器学习前,审计准确率在50%60%左右,但采用学习得到的漏洞库后,审计准确率能提升到80%95%。