开发一款安全性良好的软件是困难的,它需要专业知识的积累以及对常见编程缺陷和规则的了解,例如检查输入范围、管理内存分配和回收、寻址字符串格式、避免悬空指针等等。通常情况下,编写安全代码与开发人员编写“流畅”代码的自然愿望形成了对比,开发人员更希望将编写代码的精力集中在正确的业务逻辑上,而非集中于保证编写的每一行代码是否安全上。
在日常实践中,大多数软件的漏洞源于一小部分编码错误,经过多年的开发实践均能得到改善。平均来看,每1000行代码中仍然存在40-70个错误,这些错误中的一部分将导致可利用的安全问题,而这也是行业中普遍存在的问题。但是对于部署了数千万行代码的产品而言,这可能很快就会导致系统安全性受损。
漏洞通常被定义为 “一个可以被不法分子利用的缺陷”。如果把漏洞透明化的概念引入软件世界就很容易受到启发,比如在汽车产品本身安全的情况下,产品被部署到在设计上就不安全的环境中使用会发生什么情况呢?这将导致产品安全难以得到保证。作为制造商,你无法控制你的产品在哪里被使用、如何被使用、它们将与哪些系统连接、谁在使用它们、或者谁可能获得对它们的访问,无论是有意还是恶意的。在这种环境下,管理代码中的漏洞这一任务就变得至关重要。
那么汽车行业的安全挑战都有哪些呢?
· 开发惯例
汽车软件开发大约已有50年的历史,汽车的生命周期至少是12年,汽车平台每5-7年就会更换一次,但大部分遗留的硬件和软件都是从一个平台转移到另一个平台。汽车开发人员主要使用C和C++作为开发语言,虽然这两种语言灵活性很高,但是它们从设计上就不安全,也没有提供任何可以防止将安全漏洞引入系统的保护措施。尽管通过引入编码标准(如MISRA-C)已经做了一些工作来确保编码的安全性,但这些指导方针很难强制执行,并且在一些富操作系统中遵守这些指导方针是不现实的。
· 供应链
汽车行业的分布式开发实践是独特的,它有多层的供应商,每个供应商都为更高层次的系统集成提供软件集成。一辆汽车可能有50-150个不同的计算单元,由10-20个不同的供应商提供。而供应商提供的这50-150个不同的计算单元中,每个组件可能又有多个CPU、几十个外围硬件组件和大量的软件包。有了这么多第三方代码,且考虑到OEM实际上只负责实际编码的一小部分,这也就使得软件的不透明性成为常态,令制造商很难评估其安全性。
· 开源软件(OSS)
面对日益增长的客户需求,更快、更灵活的开发模式驱动成为众望所归,原始设备制造商和供应商越来越多地引入开源软件,并整合了大量的开源库。这种对开源软件的依赖导致了另一个安全问题的恶化。
那么面对这些问题,如何监管才有效呢?
近几年来,汽车行业内相继发布了多项标准,ISO/SAE21434是SAE J3061的延伸、联合国欧洲经济委员会(UNECE)、WP.29车辆法规协调工作小组也制定了法规以满足OEM和制造商的需求:当涉及到汽车网络安全时,OEM和制造商必须满足法规要求后才能颁发汽车型号认证,否则汽车就不能出售。ISO标准和WP.29的工作都包括一项指令,即在汽车生命周期中持续管理和监测漏洞。
拥有一个明确和规范的流程是推动车辆安全状况改善的一大步。但仅有流程是不够的,仍需要汽车行业自身进行安全数字化转型。在软件日益复杂的现实中,规模化管理漏洞带来了多种挑战。
· 可见性
按照传统来讲,汽车工业是根据功能部件的概念来进行组织的。因此,原始设备制造商已经优化了内部资产管理系统来管理供应商的零件,但这些零件的内部软件组成却很少可见。这些系统在管理硬件组件(以及机械部件)级别的复杂供应链分配方面非常出色,但在软件级别的问题上却收效甚微。通常情况下,产品安全团队面临的最大挑战是需要深入了解系统上的漏洞和威胁,而它们很少有内部可见性。
· 相关性
另一个挑战是 "去除噪音"。NVD是软件漏洞的主要来源,每年有超过16,000个CVE,其中90%以上在汽车行业没有应用。但如果没有先进的软件将数据与实际的车辆联系起来,安全团队就会花费相当多的时间来处理成千上万的漏洞,最终很有可能面对的是大部分漏洞和当前产品不相关的窘境。
· 可追溯性
在一个组件或开发程序中发现的漏洞很可能与其他组件或开发程序有关,但由于团队可能是在孤军奋战,无法在多个项目之间协调程序,对于安全同事而言很难了解其整个开发范围。
· 可操作性
安全团队的一项关键任务是管理开发工作,以消除漏洞并不断改进系统的状态。对于不同的个人和完全不同的组织结构,如果不以有组织和可扩展的方式进行管理,管理难度会很大。
以上谈到的所有挑战都强调了汽车行业安全数字化转型的必要性。从业者们逐渐认识到“人+机器”的方法对于保持安全所需的规模的重要性,同时也认识到了引入自动化技术实施标准和法规要求的信息安全活动对于推动行业安全数字化发展的利害。
经纬恒润针对ISO/SAE 21434、WP.29 R155等法规进行了深入研究,结合多年功能安全、信息安全经验,可以为客户提供信息安全全流程解决方案。依托自动化工具和咨询服务,助力客户建立完备的信息安全流程体系,在信息安全设计、软件开发、硬件设计、漏洞扫描、测试验证方面为客户赋能,保证软件源码级、部件级以及整车层面的安全。