随着汽车智能化、网联化进程的加速,软件定义汽车已成为行业共识。现代汽车中的软件系统日益复杂,涵盖从底层嵌入式软件到上层应用软件的完整技术栈。与此同时,汽车出海已成为国内主机厂的重要战略方向,而满足海外市场的信息安全合规要求则是出海的关键前提。当前,联合国欧洲经济委员会(UNECE)WP.29 R155法规及ISO/SAE 21434道路车辆网络安全工程标准均对汽车的信息安全提出了规范化的要求,对应国家标准GB 44495/44496,也对汽车信息安全提出了明确要求。
这些法规和标准共同要求汽车制造商在软件开发全生命周期中嵌入安全测试活动。基于标准和行业最佳实践,经纬恒润提出了覆盖软件开发全生命周期的信息安全自动化测试总体框架,从以下核心维度保障软件安全质量。

代码规范验证
聚焦于自研代码的静态测试,同时也是信息安全测试的第一道防线,它无需运行代码,通过对源代码的语法、语义和结构分析,提前发现潜在的安全缺陷和编码规范违规问题。在ISO/SAE 21434标准中,静态测试作为核心测试方法被明确要求。
静态测试的目标
- MISRA规范检查:遵循MISRA C/C++编码规范,确保代码的安全性和可移植性。
- CERT安全编码标准:检测常见的安全漏洞模式,防止缓冲区溢出、整数溢出等安全缺陷。
- CWE缺陷分类覆盖:对照通用缺陷枚举(CWE),系统性识别代码中的安全弱点。
- 代码质量度量:评估圈复杂度、静态路径等质量指标,确保代码的可维护性。
- 软件结构分析:分析文件包含关系、函数调用关系,发现结构不良的代码。
自动化测试流程

代码功能及覆盖率测试
代码动态测试主要集中在单元和集成测试阶段,旨在证明被测软件实现其单元/架构设计规范、证明被测软件不包含非预期功能。依照ISO/SAE 21434信息安全对于单元/集成测试的要求,使得代码符合硬件-软件接口规范要求、确保被测模块的功能完备性、防差错性以及故障处理功能、验证模型行为与代码行为的一致性。
动态测试的目标
动态测试覆盖从单元级别到集成级别的测试,核心要求包括:
- 测试用例设计,采用需求分析、等价类划分、边界值分析等方法保证用例充分性。
- 软件单元级别的覆盖度量,包括语句覆盖、分支覆盖、MC/DC覆盖等。
- 软件架构级别的覆盖度量,包括函数覆盖、调用覆盖等。
- 数据流和控制流分析及测试,验证动态行为的正确性和控制流的准确性。
自动化测试流程

漏洞扫描-开源组件漏洞测试
现代汽车软件中,开源组件占比高达70%以上,开源组件带来的安全风险已不容忽视。ISO/SAE 21434标准明确要求对供应链中的网络安全风险进行评估和处理,确保开源组件使用也需做到风险可控。GB 44495/44496标准也对开源组件管理提出了明确的合规要求。
漏洞扫描的目标
开源组件面临的主要风险包括:
- 安全漏洞风险:开源组件可能存在已知或未知的安全漏洞,易被攻击者利用。
- 许可证合规风险:开源许可证的不规范使用,可能导致法律纠纷和知识产权风险。
- 运维风险:开源代码长时间不维护,运维风险高。
- 供应链安全风险:第三方组件的安全性直接影响最终产品的安全性。
漏洞扫描的核心目标包括:
- 供应链透明:建立SBOM(软件物料清单),清晰管理所有软件组件及其关系,实现第三方依赖全生命周期可追溯、可审计。
- 许可证合规:识别并管理开源组件许可证,检查许可使用合规性,确保符合公司政策及法律要求,避免侵权风险。
- 漏洞管理:发现开源组件中的已知安全漏洞(CVE),及时预警并提供修复建议,筑牢安全合规防线。
自动化测试流程

模糊测试-协议栈漏洞测试
模糊测试(Fuzzing)是一种自动化动态黑盒测试技术,通过向被测系统发送大量异常、非预期的输入数据,监测系统行为,挖掘潜在的未知安全漏洞和软件缺陷。ISO/SAE 21434标准明确将模糊测试列为必要的信息安全测试方法,GB 44495多项规范也要求对协议栈开展模糊测试。
模糊测试的目标
- 协议栈安全性测试:通过理解协议、接口或数据格式的语法和语义,生成符合该结构的海量有效和无效输入,挖掘潜在的软件缺陷与漏洞。
- 协议健壮性验证:验证协议栈在异常输入下的安全性和健壮性。
- 挖掘未知漏洞:挖掘传统静态分析和手动测试难以发现的未知漏洞和0-day漏洞。
- 低误报率:所有发现的异常都是真实存在的问题,无需人工筛选误报。
- 真实环境测试:在真实运行环境中测试,所测即所得。
自动化测试流程

性能验证
性能测试主要集中在集成和系统阶段开展,ISO/SAE 21434标准中对性能指标也提及要求,实现网络安全控制需考虑控制器性能、内存资源等,验证方法要包括资源使用(堆栈、时间、内存、负载等)等评估(可参见面向域控软件的性能测试联合方案------TAE组件上新)。
性能测试的目标
- 内存占用:针对函数堆栈使用量、Flash/RAM/ROM占用率、内存分配情况等进行分析。
- 时序行为:针对任务/中断的最差工况执行时间、响应时间、激活时间等进行测量。
- 分析任务调度行为、优先级、数据一致性等。
- 监控控制器在多种环境下的CPU负载率等。
自动化测试流程
