内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

聊聊代码安全的历史与发展现状

2017-10-11 12:29 出处:清屏网 人气: 评论(0

一、代码安全概况

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

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

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

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

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

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

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

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

3. 程序模拟(programsimulation)技术

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

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

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

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

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

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

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

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

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

在企业界,包括微软、思科、英特尔、SAP、Juniper、EMC等大型公司都已经或正在部署软件源代码缺陷分析系统。此外,微软、思科等公司还提出了安全开发生命周期(SDL)的概念,将安全措施贯穿于软件生命周期的整个过程,以尽量减少设计、代码和文档中的漏洞。Gartner公司于2012年提出了DevSecOps的概念,旨在将安全贯穿于敏捷开发和运营的始末,并且强调:“如有可能,安全控制必须是可编程的和自动化的”,这使得代码安全和安全开发的重要性更加突出,目前许多团队都在致力于DevSecOps在企业内部的落地。

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

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

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

英国本土IT产业规模相对有限,使用其他国家企业的网络信息技术产品和服务的情况较多,供应链更为复杂。因此,英国的网络安全审查机制,并没有体系化的政府采购信息技术产品与服务的安全性能要求,而是采用相对市场化的评估机制,这其中就包括深层次的源代码审查测试,检测相关产品或服务是否存在安全缺陷或漏洞。英国要求设备商自己出资建设网络安全评估中心,受相关机构监管,独立于设备商运营,并对设备商交付的代码进行测试和验证,但对源代码审核方法、过程、技术手段、实施细节都高度保密。

印度作为软件开发大国,对代码安全方面的要求较高,这其中也包括对华进口的设备软件代码安全测试的强制性要求,导致我国企业因代码安全测试未通过而无法进入印度市场。2010年5月初,印度政府以代码安全和间谍软件为由禁止印度电信运营商采购中国华为、中兴的电信设备。华为不得不宣布允许客户访问其软件代码,并聘请美国Fortify检验其软件代码,以消除印度对其设备安全性的担忧。

我国的《网络安全法》和《网络产品和服务安全审查办法》已于2017年上半年实施,对网络运行安全、网络信息安全、网络安全审查等方面进行了制度规定和顶层设计,其中明确了等级保护制度的重要地位,而等级保护制度中对二级以上系统均有代码安全的原则性要求,但目前国内在代码安全领域尚缺少细化的审查办法和技术标准。当然,我们也高兴地看到,国内研究机构和企业近年来在代码安全的技术研究、工具研发、标准制定等方面都有一定突破,与国际上的差距也在逐渐缩小,相信在不久的将来,我国自主知识产权的源代码安全检测产品一定可以为我国的网络安全审查工作贡献应有的力量。

分享给小伙伴们:
本文标签: 代码安全

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号