一、引言
2020年4月,国家发改委明确提出“以新发展理念为引领,以技术创新为驱动,以信息网络为基础,面向高质量发展需要,提供数字转型、智能升级、融合创新等服务的基础设施体系”,界定了包括信息基础设施、融合基础设施、创新基础设施等在内的“新基建”概念范畴。“新基建”是新一代信息通信技术与传统基础设施的深度融合,呈现高度网络化、数字化、智能化等显著特征。数字经济时代,“新基建”将加速虚拟空间和实体空间的全面融合,在推动数字经济高速发展的同时,面临的安全风险也从传统的网络安全扩展到社会现实生活。
“新基建”虽然涉及众多领域,但究其主要功能组件,包括底层的硬件设备、调度处理的软件程序和上层生产的信息数据3部分。无论对硬件设备的控制,还是生产操作信息数据,都无法离开基础的软件程序支撑,毫无疑问,软件程序将成为“新基建”的核心要素,软件代码将作为新基建”的基础设施,其安全性直接影响着“新基建”的基础安全。
二、开源软件现状分析
随着全球信息化发展态势的不断融合,国家或企业信息系统的产品来源更加多元化,软件程序的供应链也随之变得更加复杂。
通常来说,软件程序主要来源于自主研发、购买商业化产品、使用开源软件或采用软件外包开发等途径。根据VeraCode公司统计,大约30%?70%自主研发软件的代码都使用过第三方代码,并多以开源组件、商业或外包共享库的形式存在。信息技术分析公司高德纳(Gartner)更是坚定认为现代软件大多数是被“组装”出来的,不是被“开发”出来的。现在的软件开发过程类似于早期的工业生产活动,是以开源软件为基础的原材料,在此基础上,再结合实际的业务需求和应用场景补充添加相对独立的业务代码,最后“拼装”出一套软件系统。这种敏捷开发的方式虽然在一定程度上提高了软件系统开发的效率,却并未充分考虑其使用的基础开源组件是否安全可靠,为软件系统的安全性和可控性带来了巨大挑战。
近年来,以广泛应用的Struts2、OpenSSL等为代表的基础开源组件频现高危漏洞,不同国家、不同企业均因此遭受不同程度的损失,也促使国家和企业提高对软件供应链、开源软件、关键信息基础设施中软件系统安全性的关注程度。
(一)开源软件的安全形势极其严峻
实际上,开源软件的安全形势已变得越来越严峻。根据RiskSense研究报告称,2019年已公开的开源软件CVE漏洞总数为968个,比之前数量最高年份的两倍还多,2020年前3个月新增的CVE漏洞数量也处于历史高位。另外,就美国国家漏洞库(NVD)对于开源软件的漏洞管理情况来看,其收录开源软件漏洞的滞后性比较严重,从漏洞首次公开披露到漏洞被收录到NVD平均耗时54天,最长耗时1817天。攻击者完全有可能利用这段时间窗口开发和部署漏洞利用程序。其中,武器化程度最高的开源软件包括Apache Tomcat、Magento、Kubernetes、Elasticsearch和JBoss。而正在使用存在漏洞开源软件的企业由于无法及时收到NVD的安全警报,将使企业完全暴露在安全风险之中。
(二)开源软件所产生的蝴蝶效应不容乐观
从奇安信代码安全实验室公布的数据来看,开源软件的源代码安全缺陷密度是14.22/KLOC,高危安全缺陷密度为0.72/ KLOC,即每1000行开源软件代码中就有14个安全缺陷,每1400行开源软件代码中就有1个高危安全缺陷。由此可见,开源软件的安全现状极不乐观。
另外,由于开源软件之间的关联依赖关系非常复杂,其带来的安全问题所产生的蝴蝶效应将变得十分巨大。一款开源软件如果出现0Day漏洞,将会导致所有与之存在关联依赖关系的其他软件系统出现同样的0Day漏洞,漏洞的攻击面将会由点及面呈现出爆炸式的放大效果。
(三)开源软件的供应链有可能潜藏高级网络威胁
正是由于开源软件的开源特性,造就了其天然基因中就缺少安全监管机制,上传开源软件的可能是个人,也可能是一个组织,还可能是一些别有用心的机构。因此,开源软件很可能不是“免费的午餐”,有可能被植入高级恶意程序代码,通过数据加密的方式,将恶意流量(如窃取到的用户敏感信息或远程控制命令等)混淆在正常的加密数据流量中来逃避安全检测。这种借助于特洛伊木马以软件供应链为突破口的攻击方式,直接将攻击程序写入开源软件中,大大降低了攻击者从外向内的攻击成本,也必将成为企业所面临的下一个网络安全风口。
(四)开源软件尚处于管理盲区
开源软件目前正处于企业信息化的管理盲区,因为企业所用到的各类软件无论是自行开发还是外包服务,都更偏向于对功能需求的验证,忽视了源代码和使用的基础开源组件的安全性以及各个组件之间的依赖关系。
软件供应商的开发团队对开源软件的使用非常随意,未建立完整的开源软件使用管理机制,开发人员对开源软件基本处于“只用不说”的状态,项目负责人无法掌握开发团队所用到的开源软件具体列表,企业甲方更无法了解正在使用的软件系统是否包含了开源软件。一旦软件产品交付,开源软件的漏洞也将为整个信息系统的安全运营带来极大的安全挑战。
三、开源软件治理措施
当前,国家和企业已逐渐进入数字化时代,无论是对硬件的调度控制还是对上层信息数据的存储、加工和利用,开源软件已成为构建虚拟空间和物理实体的重要黏合剂,应作为“新基建”的核心基础设施给予充分的重视,加紧开展开源软件的安全治理措施研究。
(一)建立开源软件的审查管理机制
无规矩不成方圆,企业和软件开发商应建立对开源软件的审查管理机制,严格执行对开源软件全生命周期的安全使用和风险控制。
(1)建立针对开源软件的顶层审查管理机制。设立相应的组织机构,明确管理职责,结合企业的实际特点,制定审查管理制度和流程。
(2)建立开源软件安全准入机制,制定评估要点,在其生命周期内持续评估其完整性、安全性和法律风险,实时掌握开源软件资产和与其关联的软件系统的安全风险状态。
(3)借助于开源软件的自动化工具持续检测和发现开源软件资产,持续跟踪开源软件漏洞情报。
(4)建立开源软件的漏洞缓解工作机制,研究开源软件的漏洞缓解措施,开展应急响应处置,及时规避网络安全风险。
(5)建立开源软件的运维管理平台,按照审查管理制度流程,执行开源软件全生命周期的运维管理,跟踪并记录开源软件动态,提升开源软件治理效率。
(二)推进源代码安全保障实践方法落地
企业使用开源软件面临的首要问题仍然是代码的安全性问题。在软件源代码安全保障实践方面具有代表性的是微软提出的安全开发生命周期(Security Development Lifecycle,SDL )和高德纳基于敏捷开发推出的DevSecOps的方法。其中,SDL将安全要素内嵌入培训、需求分析、系统设计、编码实现、测试验证、发布和响应等软件开发和运维的7个阶段。DevSecOps通过设计一系列可集成的控制措施,增大安全监测、跟踪和分析力度,将安全融入敏捷过程中,并将安全能力赋予各个团队,同时保持“敏捷”和“协作”的初衷。
无论SDL还是DevSecOps,都可以看到,安全的位置实际上都进行了左移,而且贯穿于所有的过程中。
(1)安全需求分析:应结合业务实际需求,依据行业标准规范,如等级保护、分级保护,识别岀软件系统的安全需求,作为后续安全设计的输入。
(2)安全设计:依据安全需求分析文档,以减少攻击面为原则,围绕用户输入验证、异常处理、身份鉴别、密码管理、会话安全、访问控制、安全审计、数据脱敏、防Web攻击等方面对软件系统进行安全设计。
(3)安全编码:使用指定的安全开发工具,严格依据安全设计文档对软件系统进行编码实现。
(4)安全测试:借助于源代码审计、渗透测试和压力测试等综合测试方法,充分验证软件系统的安全性、可用性和完整性。
(5)安全发布:结合实际网络拓扑,合理部署,减少来自网络的攻击面。
(6)安全响应:制定网络安全事件响应计划和处置流程,有效响应网络安全事件。
(三)借助专业力量持续评估开源软件安全风险
企业应引入或借助专业的技术力量持续加强对在用开源软件的安全风险评估。通过常态化渗透测试、代码安全性分析或者建设网络靶场,持续、动态地验证、评估开源软件的可靠性、可用性和安全性,提升开源软件的安全应用能力。
(四)合作建立开源软件的漏洞情报库
现有的CVE/CPE体系以及NVD等漏洞库,已经无法满足开源软件安全治理的需求,需要创新开源软件的漏洞情报研究、共享、共治机制,合作建立开源软件漏洞情报库。
四、结语
在企业数字化转型过程中,开源软件可以降低成本,提高效率,让企业更专注于自己数字化业务需求实现,已成为企业构筑数字空间的基础设施。开源软件已经站在企业数字化转型舞台中央,其安全性直接影响着数字空间的安全,因此,开源软件的安全性应得到充分关注和重视,亟待开展对开源软件的全生命周期治理,为企业的数字化安全发展保驾护航。
(原载于《保密科学技术》杂志2020年7月刊)