ISO21434是一套网络安全流程标准,本章是Part10 产品开发的总结。本章描述了网络安全需求和架构设计的规范,以及集成和验证活动。
*图中垂直箭头是在设计期间从更高的架构层面进行验证,水平箭头是对已实施和集成的组件进行验证,但ISO21434并不强制使用V模型开发,也鼓励敏捷开发。
活动目的:
1)定义网络安全规范;
2)验证定义的网络安全规范和架构设计符合更高层级的网络安全规范;
3)识别组件的弱点;
4)证明组件实施和集成结果符合网络安全规范。
活动输入:
1)更高层级的网络安全规范,如:分配的网络安全要求;组件的外部接口规范;组件运行环境的信息;
2)相关项定义;
3)网络安全概念。
活动输出:
1)网络安全规范,评审报告;
2)后开发网络安全要求;
3)建模、设计或编程语言和编码指南的文件;
4)开发分析和测试得到的弱点;
5)集成和验证规范,报告。
活动要求:
1. 设计
网络安全规范的定义应基于以下:
1)更高层级的网络安全规范;
2)选择实施的网络安全控制措施,可以从可信的目录获取,如使用带有嵌入式硬件信任锚的单独微控制器来实现安全密钥存储功能,并实现与非安全外部连接有关的信任锚的隔离;
3)现有的架构设计。
网络安全规范可包含以下:
1)与网络安全要求相关的已定义架构设计的子组件之间的接口规范,包括它们的使用、静态和动态方面;
2)考虑开发后网络安全要求,如:密钥存储的安全管理、关闭调试接口、删除个人身份信息的程序;
3)识别与网络安全要求相关的配置和校准参数,设置值或允许范围,如:为集成硬件安全模块的配置;
4)可以考虑实现网络安全控制所需组件的能力,例如处理器性能、内存资源。
另外,优化的网络安全要求应分配给优化的架构设计的组成部分。开发后阶段的确保网络安全的步骤需要被定义,如:网络安全控制的正确集成和初始化以及在整个生产过程中确保网络安全的过程。
语言的选择:如果设计、建模或编程的符号或语言被用于网络安全规范或实现,则在选择该符号或语言时应考虑以下:
1)在语法和语义上都有明确和可理解的定义;
2)支持实现模块化、抽象和封装;
3)支持使用结构化构造;
4)支持使用保密设计和实现技术;
5)集成到现有组件的能力,如:库、框架、用另外一种语言编写的软件组件;
6)抵御由于使用不当造成漏洞的能力,如:避免缓冲区溢出。
编码规则的补充:以上选择准则,如果语言本身没有涉及,则应由设计、建模和编码的指南或开发环境涵盖,如:使用MISRA C:2012或CERT C在C语言中进行加密,使用语言子集、强制执行强类型或使用防御性实现技术。
设计原则:应用成熟和可信的设计和实现原则,以避免或减少弱点的引入,如:NIST特别出版物800-160卷1附录F.1中给出了网络安全架构设计原则的例子。
架构设计应识别弱点并进行漏洞分析和管理,对于复用组件可以直接用已知的弱点或漏洞,如果弱点准备通过改变架构设计来解决,则不用进行漏洞分析。
应验证定义的网络安全规范,以确保与更高层级的网络安全规范的一致性、完整性和正确性,验证方法可包括:评审、分析、仿真、样件。
2. 集成与验证
集成与验证活动应验证组件的实现与集成满足定义的网络安全规范,应考虑以下内容:
1) 定义的网络安全规范;
2) 用于批量生产的配置;
3) 支持网络安全规范中定义的功能的能力;
4) 建模、设计和编码指南的符合性。
验证方法应包括:
1)基于需求的测试;
2)接口测试;
3)资源使用评估;
4)控制流和数据流的测试;
5)动态分析;
6)静态分析。
如果采用测试验证,可以选择测试用例和测试环境,考虑:
1)集成测试的等级,以实现验证目标;
2)根据对测试环境的分析,后续集成活动中增加额外测试的必要性,如:目标处理器与仿真或开发环境的数据字和地址字的位宽不一样。
导出测试用例的方法可以包括:
1)需求分析;
2)等价类的生成与分析;
3)边界值分析;
4)基于经验知识的错误猜测。
如果采用测试验证,应使用定义的测试覆盖率指标来评估测试覆盖率,以确定测试活动的充分性,如:对于网络安全来说,标准的测试覆盖率指标可能是不够的,例如对软件的声明覆盖率。
应进一步测试,以确认组件中残留的未识别的弱点和漏洞被最小化,如:非必要的功能可能包含弱点,测试方法包含如下,发现的弱点按照第8章持续性网络安全活动进行漏洞分析和管理。
1)功能测试;
2)漏洞扫描;
3)模糊测试;
4)渗透测试。
如果没有进行以上试验,则应提供理由,包括如下因素:
1)访问组件攻击面的可行性;
2)直接或间接结合其他组件访问组件的能力;
3)组件的简单性。
总结:网络安全的开发阶段应继承更高层级的网络安全规范,细化和定义相应的网络安全规范,包括网络安全要求和架构设计,并按要求进行验证、漏洞分析、集成测试和网络安全测试。