报告认为,随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。
图:奇安信集团代码安全事业部总经理、代码安全实验室主任黄永刚
“吃了不好的食品会生病,用了不好的软件会被攻击”,奇安信集团代码安全事业部总经理、代码安全实验室主任黄永刚举了一个形象的例子。“拿牛奶来说,从奶农、奶站到车间,各个环节都可能导致原材料被污染,造成食品安全问题。同样,软件供应链可划分为开发、交付、运行三个大的环节,每个环节都可能会引入供应链安全风险从而遭受攻击,上游环节的安全问题会传递到下游环节并被放大。”
每1000行代码就有超过10个安全缺陷
源代码是软件的原始形态,位于软件供应链的源头。源代码安全是软件供应链安全的基础,其地位非常关键。
报告显示,2020年全年,奇安信代码安全实验室对2001个国内企业自主开发的软件项目源代码进行了安全缺陷检测,检测的代码总量为335011173行,共发现安全缺陷3387642个,其中高危缺陷361812个,整体缺陷密度为10.11个/千行,高危缺陷密度为1.08个/千行。
开源软件的安全缺陷则更加密集。2020年全年,“奇安信开源项目检测计划”对1364个开源软件项目的源代码进行了安全检测,代码总量为124296804行,共发现安全缺陷1859129个,其中高危缺陷117738个。2020年检测的1364个开源软件项目整体缺陷密度为14.96个/千行,高危缺陷密度为0.95个/千行。
超8成项目存在高危开源软件漏洞
与企业自主编写的源代码相同,开源软件同样位于软件供应链的源头。国际知名咨询机构Gartner表示,现代软件大多数是被“组装”出来的,不是被“开发”出来的。在奇安信代码安全实验室分析的2557个国内企业软件项目中,无一例外,均使用了开源软件。
在2557个国内企业软件项目中,共检出168604个已知开源软件漏洞(涉及到4166个唯一CVE漏洞编号),平均每个软件项目存在66个已知开源软件漏洞,最多的软件项目存在1200个已知开源软件漏洞。
其中,存在已知开源软件漏洞的项目有2280个,占比高达89.2%;存在已知高危开源软件漏洞的项目有2062个,占比为80.6%;存在已知超危开源软件漏洞的项目有1802个,占比为70.5%。影响范围最大的开源软件漏洞为Spring Framework安全漏洞(漏洞编号为CVE-2020-5421),影响了44.3%的软件项目。
值得警惕的是,在所有存在已知开源软件漏洞的项目中,部分软件项目中竟然还存在多年前已公开并修复的古老漏洞,最古老的漏洞是2005年11月公开的CVE-2005-3510,仍然存在于31个项目中。
与此同时,开源软件的漏洞数量仍呈高速上涨的趋势。据奇安信代码安全实验室监测与统计,截至2020年底,CVE/NVD、CNNVD、CNVD等公开漏洞库中共收录开源软件相关漏洞41342个,其中5366个为2020年度新增漏洞。
三层建议助力建设供应链安全良性生态
报告认为,软件供应链已经成为网络空间攻防对抗的焦点,直接影响关键基础设施和重要信息系统安全。然而,目前我国在软件供应链安全方面的基础比较薄弱,亟需从国家、行业、机构、企业各个层面建立软件供应链安全风险的发现能力、分析能力、处置能力、防护能力,整体提升软件供应链安全管理的水平。
对此,奇安信代码安全实验室建议,在国家和行业监管层面,应制定软件供应链安全相关的政策要求、标准规范和实施指南,建立起国家级/行业级软件供应链安全风险分析平台,并且将软件供应链安全的相关工作纳入产品测评、系统测评等工作中。
在最终用户层面,首先应明确本单位内部软件供应链安全管理的目标和工作流程;在采购商业软件时,应充分评估供应商的安全能力,要求供应商提供其软件产品中所使用的第三方组件/开源组件的清单,一旦这些第三方组件/开源组件出现安全漏洞,要求供应商提供必要的技术支持;在软件开发中,须严格遵循软件安全开发生命周期管理流程。
在软件厂商层面,需要提高安全责任意识,建立清晰的软件供应链安全策略,严格管控上下游,持续削减自主开发的代码和开源软件所带来的安全风险,同时建立完善的产品漏洞响应机制,必须要时为客户提供相应的技术支持。