首页>新闻动态>业内资讯

业内资讯

  一、代码安全概况

  随着计算机和通信技术的飞速发展,软件已经成为信息化建设的重要基础设施,无数事实证明软件中的安全漏洞是导致安全事件频繁发生的根本原因。而软件功能的多样化和结构的复杂性必然带来信息系统和基础设施受攻击面的增加,大幅提升安全威胁产生概率。因此,尽早发现软件安全漏洞并进行修复一直以来都是学术界、产业界努力的方向。

  源代码作为软件的最初原始形态,其安全缺陷是导致软件漏洞的直接根源。因此,通过静态方法分析发现源代码中的安全缺陷是降低软件潜在漏洞的重要方法。并且由于该工作在程序上线之前实施,能够大大降低修复成本。经过40余年的发展,源代码分析技术和工具的功能和性能都有很大的提高,并且基于它们的软件代码安全保障方法也蓬勃发展。目前,许多国家和企业也逐渐意识到源代码分析和保障的重要性,通过各种政策和方法论规范此方面的工作。

  二、主流代码安全分析技术

  源代码静态分析技术的发展与编译技术和计算机硬件设备的进步息息相关。源代码安全分析技术多是在编译技术或程序验证技术的基础上提出的,目前主流的分析技术主要包括以下四大类:

  1. 词法分析(lexical analysis)技术

  词法分析只对代码的文本或Token流与已知归纳好的缺陷模式进行相似匹配,不深入分析代码的语义和代码上下文。词法分析检测效率较高,但是只能找到简单的缺陷,并且误报率较高。

  2. 抽象解释(abstract interpretation)技术

  此类技术用于证明一段代码没有错误,但不保证报告错误的真实性。该技术的基本原理是将程序变量的值映射到更加简单的抽象域上并模拟程序的执行情况。因此,该技术的精度和性能取决于抽象域对真实程序值域的近似情况。

  3. 程序模拟(programsimulation)技术

  该类技术模拟程序执行得到所有执行状态,分析结果较为精确,主要用于查找逻辑复杂和触发条件苛刻的缺陷,但性能提高难度大。主要包括模型检查(model checking)和符号执行(symbolic execution)两种技术。模型检查将软件构造为状态机或者有向图等抽象模型,并使用模态/时序逻辑公式等形式化的表达式来描述安全属性,对模型遍历验证这些属性是否满足;符号执行使用符号值表示程序变量值,并模拟程序的执行来查找满足漏洞检测规则的情况。

  4. 定理证明(theorem proving)技术

  该技术将程序错误的前提和程序本身描述成一组逻辑表达式,然后基于可满足性理论(satisfiability theory)并利用约束求解器求得可能导致程序错误的执行路径。该方法较为灵活性,能够使用逻辑公式方便地描述软件缺陷,并可根据分析性能和精度的不同要求调整约束条件,对于大型工业级软件的分析较为有效。

  三、软件代码安全保障现状

  美国等发达国家非常重视软件代码安全保障工作,从政府、研究机构、产业界等各个层面推进代码安全保障工作的落地实施,目前已经形成了总体设计、标准规范、缺陷资源、工具研发、开源计划等的较为完整的体系。但我国的代码安全保障在国家或行业信息系统安全保障体系中的位置还不够突出,其作用尚未得到较好的发挥。

  早在2005年,美国总统信息技术咨询委员会关于信息安全的年度报告中就指出:美国政府和军队等重要部门使用的软件产品,必须加强安全检测措施,尤其是应该进行软件代码层面的安全检测。

  在美国国土安全部(DHS)和国家安全局(NSA)的共同资助下,MITRE公司开展了对软件代码缺陷的研究工作,并建立了软件代码缺陷分类库CWECommon Weakness Enumeration),以统一分类和标识软件代码缺陷。

  美国国土安全部资助了“软件安全保障计划(SAP)”,将减少软件安全风险置于一个非常突出的位置;资助了“内建安全(BSI)”的开发,其基本原则是:软件安全本质上是一个软件工程问题,必须在整个软件开发生命周期中以一种系统的方式进行管理;此外,在其资助下,美国国家标准与技术研究院(NIST)提出并进行软件保障度量和工具检测项目SAMATE的研究,其中源代码缺陷分析是重要组成部分,这个数据库包含实际的软件应用程序和已知的错误或漏洞,便于进行漏洞分析和查找;DHS还资助了开源软件代码测试计划,该计划自2006年开始,由美国Coverity公司承担,其目的是针对广泛应用的开源软件代码进行安全隐患的筛查和加固,具体检测数据不对外公开,截至20172月,累计检测各种开源软件7000多个,发现了大量安全缺陷。

  美国CERTSANSOWASP等第三方研究机构也在软件代码安全保障领域开展了许多工作,例如CERT发布了一系列安全编程(C/C++/Java等)标准,SANSOWASP则每年分别发布了严重代码缺陷TOP25TOP10,用于指导开发人员进行安全的编码,尽量避免代码中的安全缺陷。

  四、各国代码安全审查工作现况

  代码安全审查指对软件产品的源代码进行系统化地核查,判定其中是否存在错误、缺陷、未声明功能等问题。许多国家从维护关键基础设施和供应链安全的角度,建立了网络安全审查制度,其中源代码审查均占据重要位置。目前实施源码审查的国家包括美国、英国、俄罗斯、澳大利亚、印度等,其中以美国、英国、印度最为典型。我国目前也已开始实施网络安全审查制度,但对于源代码的审计和审查仅有原则性规定,尚无详细、规范化的要求。

  美国对源代码安全审查的关注较早,从政府到企业采取了多方面措施。美国在网络安全审查方面,围绕信息技术产品的采购、使用、运维、管理,形成了一套法律法规,其中对供应链安全的要求较为突出;2007年,美国空军成立了应用软件质量保障中心,对所应用软件进行代码缺陷检测;2008年,加州大选软件因未通过代码安全审查而被取消;同年,美国食品药品管理局器械和辐射健康中心开始使用代码缺陷检测工具对发生问题和事故的医疗设备进行检测;2009年,对美国联邦航空管理局的飞机导航系统进行了代码缺陷审查,发现了700多个高风险漏洞;2010年初,美国商务部对人口普查软件进行代码安全检查,发现了80个严重缺陷,导致项目推迟。