作者 | 刘艳青 上海控安安全测评中心安全测评部测试经理
版块 | 鉴源论坛 · 观通
引语:第一篇对轨交信号系统从铁路系统分类和组成、城市轨交系统分类和组成、城市轨交系统功能、城市轨交系统发展方面做了介绍,第二篇从信号基础出发,讲述了信号机、转辙机、轨道电路等设置原则和含义,本文将从轨交系统的安全性设计的必要性、控制设计、需求分析以及实现等方面进行阐述。
1. 安全性设计的必要性
2. 安全软件控制设计
3. 软件安全性需求分析
4. 软件安全性设计及实现
01 轨交安全性设计的必要性
随着通信信号系统的发展,信号系统与综合监控系统信息交互,旅服系统、车站及列车广播系统等信息网之间的连接病毒、木马都会向信号系统扩散。信号系统本身的安全性防护不到位等安全漏洞,如果未进行有效手段的防护,极易造成重大行车事故。因此信号系统安全防护体系的建设已经迫在眉睫。在设计轨交系统的软件时,软件的安全性越来越重要,尤其对于当前的数据安全、处理安全以及保密安全。软件在具备数据安全的同时,还需注重软件的安全性设计。
软件安全主要表现在:
· 软件数据不被破坏或修改;
· 保密的数据不被公开;
· 数据和系统只能为系统用户使用。
软件可靠性主要表现在:
· 软件按照要求完成了对应的工作;
· 软件按照正确的方式完成了对应的工作。
基于此,软件安全可靠的实现和运行是数据正确、秘密和有效运行的保证,也是实现正确工作的可靠基础。
影响软件安全的不可靠因素:
· 输入错误;
· 系统的权限控制错误;
· 数据的使用权限控制不严;
· 数据的访问监查不到位;
· 数据保护不到位;
· 软件实现错误;
· 数据处理的安全机制不健全;
· 操作系统底层的漏洞;
· 其他的欺骗行为。
02 轨交软件安全控制设计
软件控制设计一般按照如下步骤实施:
首先,分析不安全的原因,找出影响范围最广、安全性最突出的问题,评估优先改善的项目或者目标问题;
其次,进行设计改善,当前提出的设计既要符合当前要求安全需求,也要能考虑进一步可以优化的安全需求;
再次,结合软件的生命周期活动,进行安全控制方面设计的改善。
图1 软件安全性设计过程
03 轨交软件需求分析安全性设计
轨交行业软件需求分析和军工行业类似,在软件要求阶段,由软件设计人员通过对系统要求的充分一致性、完整性、明确性的分析,定义了软件要求。在进行软件需求界定时,软件设计人员所采用的方式主要包括:通过功能分析、面向对象分析、模型、仿真、业务分析、产品原型、场景分析等手段辅助界定软件要求。同时,还要充分考虑应用软件的时效性、内存容量、编程语言、操作系统环境和网络资源限制。
3.1 安全性设计方法
软件安全需求研究和系统分析的方式,主要从安全工作模式、运行状态和要求、容错与容失效、危险命令管理、接口安全、数据安全、系统资源等方面分析软件安全性需求的来源。
专用的安全性需求:特定的安全性系统需求,自上向下进行传递的需求,一般是系统经过初步分析的结果中包含危险原因,且和软件相关的安全性需求,也存在部分在研制后期发现后,从系统层面下达的。
通用的安全性需求:通常是某一领域的共同的安全需要。
3.2 软件安全性需求开发与分析的方法
系统专用的安全性需求,开发和分析除了根据系统的安全性需求和环境需求,还会依据通用标准、专用规范,根据资源的需求、接口需求以及危险报告,根据查找安全性核心功能,确定安全需求。
一般常用的方法有:基于软件功能的故障树分析方法、软件失效模式、影响和危害分析法。
针对安全性的关键功能,重点从:1)安全运行的模式、运行的状态以及安全运行的条件;2)容错与失效模式;3)危险命令处理;4)接口、数据、资源方面,进行需求分析。
3.2.1 安全运行的模式、运行的状态以及安全运行的条件
在这些情况下,随着运行模式或者任务阶段的不同,参数的允许边界可能会变化,比如在系统空载情况下,运行试验期间,对温度的要求,可能会降低。
安全性设计中一般我们需要分析出存在的潜在危险源,例如:顺序要求、不适当的事件、错误的量值、错误的极性、非控的命令、环境的因素导致的错误等,制定针对性的相应措施。
既然有了设计的措施,在测试过程中,要根据设计要求,制定针对性的测试要求,对设计的安全性要求进行逐个的测试,并根据具体测试要求的不同制定对应的测试策略。如错误的量值,规定的量值范围如0-100,是否确认了边界外的数据,是否对浮点数进行了处理,对0的处理正确性等。
3.2.2 容错和容失效
依据失效的容量,确定可接受的冗余要求;信息冗余要求;故障检测、隔离和恢复;冗余管理、转换逻辑。容错和容失效一般根据系统设计的要求而确定。
针对失效容限,可设置冗余的要求:一般针对软件安全程度,可设置软件的失效容限要求,例如,要求允许有一个或二个以上故障而不导致系统危险;根据程序的失效容限要求,对冗余要求的软件,也可采用回复块设计、屏蔽技术及多版本编程等方法实现。
信息的冗余要求:对于安全关键信息应该至少保存到2个存储空间,对于和安全核心功能的关键信息应通过至少两种产生方式或传输方式进行产生、收集或决定。
故障检测、隔离和恢复:按设计要求确定故障检测的要求,并按规定进行隔离错误或恢复系统等。
冗余管理/转换逻辑:如热备份、冷备份等,或者切换到其他的处理工作。
图2 信号系统中CI子系统工作状态切换
3.2.3 危险命令处理
危险命令一般包括:接收、传送或者启动关键信号、危险命令的功能,危险命令处理特别注意较长的命令路径会由于通信线路干扰、设备干扰、认为差错,增大出错的概率
接口设计一般须根据接口定义的物理层和逻辑层协议来进行安全性设计。
3.2.4 数据安全
数据安全要包含所有过程中的数据,包括规定的静态数据、动态的输入输出数据以及内部生成数据的逻辑结构等,须说明对数据的约束。
3.2.5系统资源
· 临界时间:即从故障产生到系统达到不安全状态的时间。
· 自动安全保护:在临界时间比现实人工操作的响应时间短或没有人工干预的情况下,启动自动安全保护。
· 采样速率:采样速率决定了判定结果的基础数据的样本量,只有有足够的样本量时,方可确保决策的正确性的概率。
· 内存资源:根据设计评估内存的使用,通过估计代码规模来估算内存资源的消耗,同时还需考虑动态内存分配占据的比重,避免造成内存的溢出,一般在此必须考虑内存的余量,至少20%的余量设计。
04 软件设计的安全性设计
在软件架构阶段,一般是根据软件需求设计系统软件的顶层结构和软件模块,针对软件功能需求,设计人员可以探索性的实验,构造原型软件,对需求进行验证。
在软件详细设计阶段,软件设计人员根据针对软件架构中定义的模块进行详细设计,每个模块应该被细分为能够被编码、翻译、检索的底层软件单元。如果软件模块能够被复用,设计人员应当采取合适的手段使得软件模块满足软件需求。
在软件编码阶段,非新建软件,开发人员需要从指定的配置库中获取源代码、调试脚本、开发文档。可以从编程语言的使用、复杂度控制、注释要求和方法、指针的使用、多余物处理等方面进行软件编码的安全性设计。
开发人员根据软件详细设计进行重新编码或者修改既有的代码,编码完成后应确保没有编译错误和报警。一般,行业内会制定编码规则等措施规范编码,开发人员编码需要根据严格遵守通用编码标准,记录修改编码的过程。软件调试人员制定测试策略和测试案例,用于调试代码,测试过程应该能够验证代码实现和软件功能的正确性。可以通过代码逻辑验证、数据验证、接口验证、死代码验证、中断的使用验证、软件测试验证等方法进行代码的验证。
05 总 结
系统从安全控制、需求安全分析,再到安全设计,每个环节都是必不可少。轨交系统应用到具体的子系统中,如联锁的冗余设计等。软件安全性考虑,应用在V模型等。很多系统也具备仿真技术的软件安全性设计。信号系统中的故障导向安全原则,也是对危险失效的一种防护。
参考文献:
[1] 城市轨道交通信号系统安全防护体系建设方案
http://www.chinaaet.com/article/3000133785.
[2] GJB102A-2012军用软件安全性设计指南
https://wenku.so.com/d/10ab35c713ed036d8c62ad26aac63af8?src=www_rec.
[3] GBT 37691-2019 可编程逻辑器件软件安全性设计指南
https://wenku.so.com/d/bd18bdc0f2c5fe2486bf132311d6bc73.
[4] 城市轨道交通信号系统运行风险及对策
https://wenku.so.com/d/ff06751d586c6b814754e161bc342d24.
[5] 轨道交通运控CBTC系统安全软件开发过程介绍
https://wenku.so.com/d/b88ab18a04cd64886a5380b0b521fc44.