欢迎光临第四届中国汽车网络信息安全峰会2019!

J3061《信息物理融合系统网络安全指南》

发布日期:2019-01-15

在J3061的文档中提到,为确保开发工作效率且避免重复性的测试,需在前期即制定并增加相应的软件集成与测试流程,后期则可针对软件设计及实施予以相应的变更.

例如,传统渗透测试(penetration testing)会在产品开发生命周期结束时用于鲁棒性验证,但事实上,对应测试用例可以更早期进行介入,如对ECU的软件模块单元会对污染数据(tainted data)做出怎样的反馈,这样能尽可能确保覆盖更为全面的测试。


软件安全规范定义

针对软件安全需求的定义,第一步需明确系统中对应的硬件及软件接口数据流数据存储数据处理以及用于支持Cyber Security的功能组件

第二步是理解软件如何实现对系统目的或任务的支持,包括信息安全的功能,例如防止未经授权的访问以及检测出篡改行为等。例如,当软件检测到了篡改行为,应记录下(做出report)此篡改行为,并及时更改所有此网络系统相关密钥以防止旨在保护的信息受到威胁。若此时系统软件对保护数据实施擦除操作以进行防护,也许这也是攻击者所预期的后果,因此所有的安全策略应减少且减轻意想不到的后果。另一个措施是推行签名检测,以防止经篡改数据被安装或执行在此系统下。


软件架构设计

软件架构进行设计时需考虑:

所使用的数据类型,数据如何流动,系统如何进行错误检测,系统如何从错误中恢复。总之所期望得到的结果即为传统信息安全中的CIA三要素:保密性(Confidentiality)、完整性(Integrity)、可获得性(Availability)。

  • 保密性(Confidentiality)

通俗地说,即具有一定保密程度的信息只能让有权读到或更改的人读到和更改。

  • 完整性(Integrity)

指在存储或传输信息的过程中,原始的信息不允许被随意更改。

  • 可获得性(Availability)

对于信息的合法拥有和使用者,在他们需要这些信息的任何时候,都应该保障他们能够及时得到所需要的信息。

对数据流的分析可有效地对软件进行分割与隔离,以防止当系统受攻击时出现扩散感染。且为防止软件受到攻击后无法正常运行,软件系统需具备错误检测以及恢复的能力。假如此错误不可恢复,则软件系统应恢复到一个预先定义好的安全模式,并通知所有相关软件模块此错误。

假如一个无法运行的软件可以在提醒其他模块此错误后完成恢复功能,它也应将已恢复到正常工作状态的情况告知给各模块。

日志中需对所有错误,失败以及恢复状态进行记录,以用于后续通过分析记录来识别异常入侵目的以及系统的鲁棒性


软件漏洞测试

系统的风险预测中,威胁模型(Threat Modeling)是首要且最为重要的步骤,能为设计团队明确在网络安全验证阶段需添加的安全测试环节安全审计对象

威胁建模过程中,关注目标主要为软件组件之间的数据流与控制关系,系统各功能用例的输入输出口。任何有数据及控制信息通过的边界都需予以足够关注。

威胁模型的第一个步骤为分解应用程序或者是程序用例。该步骤主要用于了解应用程序是如何与外部实体进行数据交互并于何处对数据进行存储与处理;应用程序是如何去发现潜在的攻击入口。信息会被记录在威胁模型中,并绘制出数据流图来来显示出进入系统的不同路径,并强调出各路径所需要的访问权限。

第二个步骤中,会采用威胁分级模型对威胁进行分级,常见的有STRIDE, ASF, DREAD模型

最后一个阶段中,安全控制包括减少或减轻风险,接受风险,披露(disclosure)风险(警告标识),终止风险。在具体案例中具体选择实施哪个控制决定于该措施所需的成本以及此风险被识别到的成本。


软件开发及实施注意

ECU软件设计过程中,与ISO26262要求一致,良好的代码规范须被予以足够重视,如:

  • 输入校验(Input validation)

  • 输入检查(Input Sanitization) (防止SQL注入)

  • 安全字符串函数的使用,不安全函数的使用

  • 未定义边界长度的字符串或数组的使用,会引起buffer的溢出

  • 领域特殊性,SQL, web等网络技术在CAN领域的应用

  • 使用标准安全编程语言(MISRA C,CERT C)

  • 静态与动态类型的分析


本文仅针对J3061《信息物理融合系统网络安全指南》中的汽车软件集成及测试过程进行了简述,且尽可能保留了原英文版的意思,若有疑问望指出。

欢迎关注个人汽车电子技术公众号:末离说(Iov_Dennischen)


  • 电话咨询
  • 15021948198
  • 021-22306692
None