软件定义汽车时代,代码质量先行!
#01 序言
大家好,这里是安势信息。
犹记得在十几年前,家里第一次买车时,当时我的父亲购车的主要考虑因素依然是汽车的核心部件——发动机,也就是核心的硬件设施。
但时代更迭,随着汽车及新能源汽车行业的迅速发展,硬件对于车主的购车决策的影响正在逐渐变弱,智能座舱、售后服务、车载娱乐、车联网安全、智能驾驶等等非硬件设施也成为影响购买的重要因素。且近几年不难发现,智能车联网已经基本实现,甚至因此产生了网约车这样的巨大产业。而这一切的一切,背后离不开两个字—软件。
所以不难发现,当前车载软件的的规模、复杂度正在快速增大。
#02 背景
在 2010 年,部分车中的软件代码行数已达千万级,2016 年车载软件代码行数增长了 15 倍,达 1.5 亿行,达到了 1.5 亿行这个惊人的数字,而在 2018 年,软件占比车辆总价值快速增长到了每年达 11%的复合增长率。而预计到 2025 年,车载软件代码行数预计将达 2 亿行, 且随着自动驾驶系统的不断采用及发展可能达 10 亿行!
再来看看麦肯锡 2018 年出具的《对汽车软件和电子架构的再思考》中的一图,不难看出一个问题:
汽车软件的复杂度持续上升, 但开发效率没有同步跟上。
也正是因为汽车软件无论是在数量级、复杂度上的高度增长,导致了历年来汽车的相关 CVE 事件屡见不鲜。单单是 2022 年就有 151 起汽车行业的相关 CVE 事件发生,超危事件占比 20%达到了 33 起!
不论是远程信息处理、远程服务器,还是移动应用、车载娱乐等等,越高频的人车互动往往意味着越多的对外暴露面,而这些暴露面的存在一方面难以避免,一方面却是因为本身软件及背后的代码质量不高,导致了漏洞、缺陷的存在,最终让 CVE 事件频发。
不过,问题的出现往往伴随着解决方案的出现。车联网安全,或者说汽车软件安全这一板块,国际上近年来也出台了相关标准及法规,2020 年的 R155/R156/R157 智能网联汽车法规、2021 年的 ISO/SAE 21434 汽车行业网络安全标准等相关书面文件让业内认识到了智能车联网安全的重要性。
#03 汽车软件 &代码质量
那么如何保障智能车联网的安全呢?
智能车联网与软件最息息相关,汽车软件不但是车联网的基础,也是当前汽车的重要价值组成。所以对于很多汽车企业来说,要让汽车软件易用、可靠,安全,那么需要做到以下几点:
制定适合于车企自身的编程规范
代码质量要得到保证
支撑工具易用、可用,且具备自动化能力
实现开发过程安全
就编程规范而言,需要汽车软件团队建立 AUTOSAR/MISRA C/C++代码规范与合规性认识,建立准确解读代码规范的能力,完成裁剪不必要的规则和具备合规能力。简而言之,凡事要有规范,汽车软件的编程因其重要程度更加要有对应的规范。
就代码质量而言,要严格把控企业所有平台整体复杂数字系统软件的源代码,比如车机应用软件、SOA Service 自开发、开源软件及相关的第三方软件,要提高这些软件的代码质量,包括但不限于要对代码的可读性、性能达标、可维护性等相关方面做出要求。
就工具能力而言,要找到合适企业自身的 SAST 及其他工具,比如 SAST 的扫描时间、缺陷告警的描述是否准确易懂、告警页面的展示是否及时、工具的自动化程度等等,这些工具能力的强弱都会直接影响到开发团队的开发进度及开发质量。
就开发过程而言,很多车企已有代码规范偏重风格类,对内存安全和软件安全重视不够,且缺少配套的流程、组织架构和平台支撑,再加上没有将代码质量(安全)的管控有机的集成到开发流程中,甚至出现独立于整个开发流程的情况,这都会导致汽车软件代码质量的低下。
因此,对于很多汽车企业,尤其是软件对于汽车总价值占比较高的企业来说,需要建立对应的编程规范,将安全问题重视起来。所谓“好马配好鞍”,当开发人员的意识与能力都到达某个阈值时,一款合适的 SAST(静态代码扫描分析)工具再加上正确的流程规范,能够为开发部门带来能效的提升。
安势信息为您带来围绕上述四方面的汽车行业解决方案。
01 编码规范建设
主观上,安势信息拥有服务多家头部车企的相关经验,能够为企业提供相关的安全编码流程建设、组织架构及人员培训的相关服务;客观上,支持 Misra C++ 2008、Misra C 2012 以及 Misra C 2012 AMD 1/2/3 增补规则;支持 AUTOSAR 及常见的 CWE Top25 2021&2022&2023 等导致运行时错误的缺陷检测;支持 OWASP Top10。同时也允许企业基于自身的开发风格自定义增加编码规则进行检测。具体规范及检测器标准展示如下表:
02 代码质量保证
在代码质量上,
关于输入,清本 SAST 在支持 C/C++、Java、Android java 等多种语言,架构上支持 Spring 的一系列框架,检测对象的形式支持 zip 形式,也支持 Git/SVN 下载、TFS、目录等;
关于集成,清本 SAST 可以与常见的如 Ant、Maven、Gradle、nexus 等工具集成,支持 CI(如 Jenkins、GitHub)并且能够进行二次开发接口的接入;
关于检测控制,清本 SAST 可以自定义检测任务模板,自定义选择检测器类型和数量,可以囊括安全编码规范、运行时缺陷、安全漏洞、个人隐私信息,C/C++检测器超过 700 个,Java 覆盖 53 大类、数百种细分类型漏洞及缺陷;不仅如此,清本 SAST 还可以通过配置文件,实现黑/白名单定制,进行快速检测、突发检测、增量检测等等。
03 工具能力
工具能力方面,清本 SAST 可以给到多样化的检测项目信息展示,方便开发团队实现检测项目间的信息共享及跟进,例如代码行数、缺陷数量等等;陷描述详尽且可视化程度高,提供包括污点轨迹跟踪、所在函数、位置、检测规则、CWE 编号、严重等级、可利用程度、错误示例代码、正确示例代码等信息。下图为 checker 覆盖关键项展示:
清本 SAST 采取全方位的方法,从编译、编码规范、开发者自测和自定义检查等多个维度进行深度展开,致力于为汽车软件的代码质量提供三个层次的严格检查:
IDE 级:对特定开发人员的本地代码进行检查。通过将静态代码分析工具集成到 IDE 中,我们可以实现初步的代码审查。这种 IDE 级别的检查既快速又精准,具有高度灵活的检查频度,可以及时提供反馈,以便开发人员立即对代码进行调整。
MR 门禁级:对于开发部门来说,清本 SAST 可以提供增量方式在代码仓库的入口进行审查。MR 门禁级别的检查不仅快速、精准,而且是增量代码审查的关键环节,以此确保部门代码库的质量。这可视为部门代码审查流程中的重要一环。
版本级:在产品的版本开发中,清本 SAST 提供全面而深入的版本级检查。全面和全量的审查是必要的,可以被视为产品版本发布的“守护神”。每天一次的检查频度是整个产品层面代码质量保障的重要参考。
以上三个层级的检查,旨在确保从单个开发者到整个产品层面,每一处代码都经过严格的质量控制,最大程度上保障了汽车软件的质量和稳定性。
同时,清本 SAST 的性能也是开发团队提高开发效能的重要依仗,清本 SAST 支持构建过程中依赖抽取和迁移扫描,支持增量分析;全面适配各类国产化平台环境,检测效率超过每小时百万行,整体的误报率小于 20%。
04 开发流程
在开发流程上,清本 SAST 可以高效的将代码扫描融入到整个 SDLC 中,使开发流程的效率大大提高。
在流程建设方向上,安势信息能为车企提供适配性较高的 DevSecOps 平台建设的相关咨询服务,将流程自动化、整体安全性、持续监控和执行软件安全合规性融入到开发流程中,从而实现“安全左移”。
版权声明: 本文为 InfoQ 作者【安势信息】的原创文章。
原文链接:【http://xie.infoq.cn/article/d34fdc106babb2681bc1f097a】。文章转载请联系作者。
评论