一种可扩展的在线静态代码缺陷分析方法
【专利摘要】本发明公开了一种可扩展的静态代码缺陷分析方法。该方法包括:设计了一个高度可扩展的系统架构,对多个缺陷检测工具进行封装和集成;之后对缺陷检测报告进行有效汇总和排序,充分发挥多个缺陷检测工具的优势,提高代码静态分析的效率。
【专利说明】一种可扩展的在线静态代码缺陷分析方法
【技术领域】
[0001]本发明涉及代码检测技术,特别涉及一种可扩展的在线静态代码缺陷分析方法。【背景技术】
[0002]随着社会信息化的不断深入,各类应用软件的使用,人们不得不开始面对日益突出的软件安全问题。
[0003]软件代码安全是一个随时都在发展和变化的动态事物,攻击的领域已经由传统的网络和系统层面上升到了应用层面,近期越来越多的应用系统面临攻击威胁。应用系统的安全性能,一方面立足于系统安全方案的分析与设计,而另一方面同样也取决于系统实现过程中是否存在安全性缺陷。为降低应用系统的安全风险,减少软件代码编写中可能出现的安个漏洞,提高应用系统自身安全防护能力,软件的应用方越来越依赖于采用源代码安全扫描工具在软件开发的过程中去帮助软件开发团队快速查找、定位、修复和管理软件代码安全问题,应用静态源代码安全扫描的的主要价值在于能够快速、准确地查找,定位和修复软代码中存在的安全风险,增加工具投资所带来的最大效益,节约代码安全分析的成本,最终开发安全的软件。
[0004]静态代码审计是近年被人提及较多的软件应用安全解决方案之一。它是指在软件工程中,程序员在写好源代码后,无需经过编译器编译,而直接使用一些扫描工具对其进行扫描,找出代码当中存在的一些安全漏洞的解决方案。
[0005]静态代码审计的优点在于,无需进行编译、也无需去搭建运行环境,就可以对程序员所写的源代码进行扫描。可以节省大量的人力和时间成本,提高开发效率,并且能够发现很多靠人力无法发现的安全漏洞,站在黑客的角度去审查程序员的代码,大大降低项目中的安全风险,提高软件质量。
[0006]然而,目前的静态缺陷分析工具在可用性和有效性方面仍然存在着很多不足,制约了这类工具的进一步广泛应用。
[0007]可用性方面的问题主要包括:每个独立缺陷分析工具都需要程序员手工地在其本地安装配置。这个过程会占用程序员大量的时间和精力;每个独立缺陷分析工具的运行依赖于程序员本地计算机的性能,当程序员本地机器的性能低下时,独立缺陷分析工具的计算效率不如人意;不同的缺陷分析工具优劣势不同,使用单一的缺陷分析工具无法较全面地进行缺陷检测。
[0008]有效性方面的问题主要包括:静态分析技术往往静态地近似模拟受检项目的运行时过程,导致静态缺陷分析工具的缺陷报告中往往存在大量的误报;除了误报,静态缺陷分析工具的缺陷报告中依然会存在很多虽然正确但不足以引起程序员修复动作(重要性或严重性较低)的缺陷报告。
[0009]鉴于当前的情况,一个具有良好架构的在线静态代码缺陷分析方法可以在很在一定程度上缓解上述问题。
【发明内容】
[0010]本发明实施例提供的一种可扩展的在线静态代码缺陷分析方法,用以解决现有技术存在的可操作性与代码缺陷分析效率的问题。
[0011]一种可扩展的在线静态代码缺陷分析方法包括:
[0012]基于B/S架构,从浏览器进行代码分析操作;部署可扩展的数据存取系统,封装集成多种开源静态代码分析工具,屏蔽各工具的系统差异性,提供统一调用接口 ;对缺陷分析报告进行一定排序,能够基于机器学习的方式对各开源工具的缺陷修复历史进行挖掘学习,最终得到汇总后的缺陷分析报告。
【专利附图】
【附图说明】
[0013]图1为静态代码缺陷分析系统意图;
[0014]图2为静态代码缺陷分析系统部署示意图;
[0015]图3为代码分析过程示意图。
【具体实施方式】
[0016]针对现有技术存在的现有技术中存在的可操作性与代码缺陷分析效率的问题,本发明实施例基于B/S架构,从浏览器进行代码分析操作。
[0017]数据存取系统可扩展,独立部署Windows文件系统和Hadoop分布式文件系统服务器,数据需求增加时,Hadoop分布式文件系统可以通过增加存储节点扩展存储容量。
[0018]集成各个独立缺陷分析工具,各个缺陷分析工具封装部署为独立的web服务,并且以统一的“外部访问接口”对外提供访问操作。基于统一的标准化接口对各个独立缺陷分析工具的封装,屏蔽各个缺陷分析工具的系统差异性,当存在缺陷能力扩展需求时,只需要基于封装接口对新的缺陷分析工具进行集成。
[0019]上述统一的“外部访问接口”有6个:
[0020]根据指定位置获取待分析代码压缩包接口,指定位置可以是windows文件系统本地路径,也可以说Hadoop文件系统统一资源标识符指定的位置;
[0021]待分析代码进行格式转换或结构调整接口,根据特定静态代码分析工具的需求,对代码压缩包进行解压、源码编译、结构调整、配置文件补充等操作;
[0022]对待分析代码进行缺陷分析过程接口,通过命令行调用方式启动代码分析工具对当前代码进行缺陷分析;
[0023]解析缺陷分析报告并以统一的格式保存接口,解析缺陷分析报告并提取特定信息以特定格式保存至数据库中;
[0024]获取特定格式的缺陷分析报告位置接口,指定所需的分析报告格式,获取格式化后的指定格式报告访问的完整路径;
[0025]获取缺陷分析过程的异常描述信息接口,根据不同缺陷分析工具的封装过程,获取其执行过程中的异常日志信息。
[0026]对获取的多个工具的缺陷分析报告排序,在进行排序前,首先为每条缺陷分析报告计算排序影响因子得分。影响因子分为3类:第一类影响因子是缺陷分析报告提供的描述信息,该类信息可以直接从各个缺陷分析服务的报告中得到;第二类影响因子是基于缺陷分析报告的统计信息,该类信息通过对所有的缺陷分析报告进行自动化统计而得到;第三类影响因子是每条缺陷分析报告相关的代码特征的提取,该类信息的提取通过部署于独立节点上的“代码特征提取服务”完成。在完成影响因子值的提取后,利用内置的、提前训练好的“得分排序器”为每一条缺陷分析报告计算排序得分。排序器训练的思想是基于机器学习的方式,通过挖掘开源项目的代码跟踪系统和版本控制系统中存储的信息,自动化地学习,总结出开源项目的缺陷修复历史,并据此对静态缺陷分析报告进行自动化评估,从而得到训练集。完成排序得分的预估后,根据排序得分对所有的缺陷分析报告进行降序排列,形成缺陷分析报告并返回给用户,用户可以基于该返回的缺陷分析报告进行相应的缺陷修复动作。
[0027]如图3所示,为本发明实施 例所述可扩展的在线静态代码缺陷分析方法实现流程图。主要包括如下步骤:
[0028]步骤301、访问web界面,指定待测源码的位置。
[0029]步骤302、系统相应用户请求,启动分析过程,首先接收代码并保存。
[0030]步骤303、系统通知各静态代码分析工具,启动各自的分析过程。代码分析工具在各自的工作空间中,先把获取的代码按照所需格式调整转换,然后启动分析程序,获得分析?艮告。
[0031]步骤304、基于机器学习的方式,根据3类影响因子,为每个缺陷分析报告计算排序得分,并形成最终的缺陷分析报告并返回给用户。
[0032]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种可扩展的在线静态代码缺陷分析方法,其特征在于,该方法包括: 基于B/S架构,从浏览器进行代码分析操作;部署可扩展的数据存取系统,封装集成多种开源静态代码分析工具,屏蔽各工具的系统差异性,提供统一调用接口 ;对缺陷分析报告进行一定排序,能够基于机器学习的方式对各开源工具的缺陷修复历史进行挖掘学习,最终得到汇总后的缺陷分析报告。
2.如权利要求1所述的方法,其特征在于,所述方法的可扩展性,具体包括: 数据存取系统的可扩展性,独立部署Windows文件系统和Hadoop分布式文件系统服务器,数据需求增加时,Hadoop分布式文件系统可以通过增加存储节点扩展存储容量; 代码分析模块的可扩展性,集成在系统中的各个缺陷分析工具被封装部署为独立的web服务,并且以统一的“外部访问接口 ”对外提供访问,当存在缺陷能力扩展需求时,只需要基于封装接口对新的缺陷分析工具进行集成。
3.如权利要求1所述的方法,其特征在于,所述提供的统一调用标准化接口,具体包括: 根据指定位置获取待分析代码压缩包接口,待分析代码进行格式转换或结构调整接口,对待分析代码进行缺陷分析过程接口,解析缺陷分析报告并以统一的格式保存接口,获取特定格式的缺陷分析报告位置接口,获取缺陷分析过程的异常描述信息接口。
4.如权利要求1所述的方法,其特征在于,缺陷分析报告排序有3个影响因子,具体包括: 缺陷分析报告提供描述信息、基于缺陷分析报告的统计信息以及与缺陷分析报告相关的受检代码特征信息。
5.如权利要求1所述的方法,其特征在于,完成排序得分的预估后,系统会根据排序得分对所有的缺陷分析报告进行降序排列,形成缺陷分析报告并返回给用户。用户可以基于该返回的缺陷分析报告进行相应的缺陷修复动作。
【文档编号】G06F11/36GK103713998SQ201310557353
【公开日】2014年4月9日 申请日期:2013年11月7日 优先权日:2013年11月7日
【发明者】李星, 李伟, 马艳彬, 徐勤, 王立进, 张玲, 卢云龙 申请人:北京安码科技有限公司