写一篇软件安全开发流程新增的安全活动
发表时间:2023-12-02 08:02:12
文章来源:炫佑科技
浏览次数:195
菏泽炫佑科技
写一篇软件安全开发流程新增的安全活动
当今社会存在各种各样的网络安全事件,比如勒索病毒导致众多网络系统瘫痪、大量注册用户个人数据泄露导致企业面临破产、银行员工留后门为自己谋取利益等。 网络安全形势严峻。 国家、政府、企业、医院、学校积极致力于保卫网络安全、保护公司资产、维护用户合法权益。 网络安全工程师已成为新兴且稀缺的职位。
1.优秀的软件安全开发流程
为了提高公司开发的操作系统和各种办公软件的安全性,微软提出了SDL(安全开发生命周期)这一从安全角度指导软件开发过程的管理模型。
SDL 是一个有安全保证的流程,重点关注软件开发,将安全和隐私原则引入到开发的所有阶段。
以下是微软SDL流程框架图:
主要由以下7部分组成:
1、安全培训():提高团队安全意识,统一安全要求
2.需求分析():建立安全需求管理、安全质量标准、安全与隐私风险评估
3. 系统设计():制定设计规范、攻击面分析和威胁建模
4、():使用优化工具,减少危险函数,对代码进行静态安全检查
5.验证():动态安全测试、模糊测试、攻击面审查
6、():制定安全应急预案、*终安全审核、发布并归档
7. ():执行安全应急响应计划
根据微软的SDL流程框架,我们看到软件安全开发是软件开发的必然趋势,即安全必须融入到传统软件开发流程的每一个环节。
2、总结软件安全开发过程中新的安全活动以及传统软件开发过程中的新项目。
客户需求采集
客户安全需求采集
需求分析和澄清
分析客户安全需求,制定安全标准和要求,建立安全需求管理、安全与隐私风险评估
软件设计
功能设计中结合安全设计规范进行安全设计,对模块进行威胁建模和攻击面分析。
软件编码
安全编码:在新代码中使用安全函数,替换旧代码中的危险函数,并对代码进行安全检查; 在使用第三方开源工具或库时,您需要使用*好的和*新的。
版本构建
满足安全编译选项的要求
选择安全的构建工具
软件测试
分析和审查安全设计并输出安全测试用例
对软件暴露的接口进行模糊测试
对软件暴露的攻击面进行攻防渗透测试
软件安全扫描与漏洞挖掘
客户质量验收
提供安全交付成果供验收,例如安全设计说明和安全测试报告
提供测试环境给客户进行安全评估
发布及运行
制定安全应急预案并落实到实际运维中。
在日常运行维护过程中进行安全检查。 如果遇到黑客攻击,会及时发出警报,并快速修复安全漏洞。
原文链接:
自动驾驶安全软件开发流程详解_自动驾驶软件开发_智能汽车设计博客-CSDN博客
1 简介
自动驾驶汽车的发展越来越注重性能、质量和成本效益。 自动驾驶的声誉已成为新技术应用市场成功的关键,而声誉的建立取决于相关软件的开发流程、周期、时间和质量。 汽车企业或其软件开发供应商只有拥有成熟的软件开发团队、软件开发流程以及可复用的软件流程资源库,才能在日益激烈的自动驾驶行业竞争中占据一席之地。
目前,国际上汽车行业使用的主要软件开发成熟度评估标准有:
能力成熟度模型集成(Ma-Model,CMMI)汽车软件过程改进和能力评估模型框架(Im-and,)
CMMI拥有全球公认的软件、产品和系统开发的良好实践过程改进模型,可以帮助组织提高绩效,并且具有通用性。 该标准基于软件过程评估的国际标准,主要针对汽车行业的软件开发过程框架。 它是当今汽车公司的理想模型。 主要依据过程评价标准。 与典型的传统软件开发流程(如线性瀑布模型)相比,V开发模型面向的软件过程域涵盖了客户需求、系统架构、软件需求、软件架构、软件详细设计、单元构建和测试验证。 存在一致性和双向溯源关系。 从*初的系统需求分析开始,测试人员参与相应验证标准的设计。 设计和测试在项目之初就联系在一起,在整个软件开发生命周期中发挥着重要作用。 指导意义。
传统的软件开发非常重视业务流程和文档。 如果软件开发人员完全按照设计文件开发程序,并在漫长的开发周期后提交软件程序,那么早期的错误可能要到开发过程的后期才被发现。 风险和纠正成本是无法比拟的。 控制。
敏捷软件开发模型强调沟通。 通过各个子项目的集成和运行,构建了上层软件项目。 软件开发成员拥有完全的自主权,可以不受设计文档的限制,找到完成工作的*佳方式。
开发过程是迭代的。 开发者尽早提交完整的、可独立运行的源程序,以响应早期的测试和验证需求。 发现问题后,提出需求变更请求。 开发人员根据新的需求重新开发并提交源程序,如此循环往复。 循环直至软件从整体结构到每个细节都完全满足要求,从而实现完美的人机融合。
敏捷方法包括:Scrum 方法、自适应软件开发 (ASD)、 方法,以及*重要的极限编程 (XP)。 Scrum 注重过程,而 XP 注重实践。 在实际开发中,两者经常结合在一起应用。
由于自动驾驶软件的复杂性和专业性,盲目遵循敏捷开发、关注市场变化和客户反馈,会导致整个软件的架构、开发和测试出现很大的波动。 控制不好会导致项目失控,造成严重的质量问题,如bug多、架构不合理、可用性差、性能差等。另外,汽车软件项目的开发周期很长,很难保证开发商不改变。 缺乏标准化的体系文件会给交接过程带来很大的困难。 因此,采取有效的方法保证工艺质量对于提高产品质量具有重要意义。
为了满足自动驾驶汽车的安全要求,根据ISO PAS 21448标准,智能驾驶系统本身的传感器/控制器/执行器的设计存在不足,其性能仅限于某些场景触发条件(例如环境干扰或人员误操作),否则可能会造成车辆级故障和伤害,从而威胁人身安全。 从根本上讲,应在软件开发阶段充分降低预期功能安全SOTIF危害事件的潜在风险,提高软件安全性能,明确安全边界。 因此,本文结合传统和敏捷开发流程,在组件软件层面融合SOTIF的安全需求和测试验证,合理控制软件的已知/未知风险,开发自动驾驶软件流程,促进自动驾驶软件流程的安全性提升和流畅性。自动驾驶车辆系统。 发布。
2 汽车安全软件开发流程定义
智能驾驶软件产品开发的设计流程如图1所示,主要由8个阶段组成,包括软件需求分析、软件架构设计、软件敏捷设计、软件详细设计和单元构建、软件单元验证、软件敏捷集成、软件集成和集成测试,以及软件资格测试。 增加软件敏捷设计和集成活动,应对实际软件开发项目中软件需求的开发周期短和预开发架构问题。
图1 自动驾驶安全软件开发流程
**阶段(Step-01),软件需求分析:
主要工作内容:根据项目目标和计划,进行系统需求、SOTIF危害分析以及项目内各专业的软件需求确认,并进行需求评审。
第二阶段(Step-02),软件架构设计:
主要工作内容:识别软件需求,制定软件架构设计规范,进行软件架构设计评审。
第三阶段(Step-03),软件敏捷设计:
主要工作内容:识别软件敏捷设计需求,制定软件敏捷设计指令和计划,进行软件敏捷设计评审。
第四阶段(Step-04),详细软件设计和单元构建:
主要工作内容:结合敏捷设计需求,根据软件需求和软件架构定义详细的软件设计,包括任务设置、调度机制、优先级、时序、功能接口关系、数据定义、算法策略描述,并根据软件单元进行软件单元设计详细的软件设计构建工作并进行软件详细设计和单元构建审查。
第 5 阶段(Step-05),软件单元验证:
主要工作内容:完成静态检查,编写软件单元测试需求文档和测试用例写一篇软件安全开发流程新增的安全活动,自动或手动进行单元测试,进行软件单元测试评审。
第 6 阶段(Step-06),软件敏捷集成:
主要工作内容:完成软件敏捷集成计划,制定软件敏捷集成描述,进行软件敏捷集成评审。
第 7 阶段(Step-07),软件集成和集成测试:
主要工作内容:根据集成计划完成软件单元集成,编写软件集成测试需求文档,自动或手动进行集成测试,进行软件集成和集成测试评审。
第 8 阶段(Step-08),软件资格测试:
主要工作内容:根据软件需求进行软件资格测试,并进行软件资格测试评审。
反映SOTIF分析和开发流程,具体开发活动如图2所示。
图2 自动驾驶安全软件开发流程
3 汽车安全软件开发流程特点
3.1 双向溯源
该软件开发流程体系具有双向可追溯的特点:
(1)垂直/水平双向溯源
自上而下的可追溯性,方便确认所有需求是否得到落实;
从左到右的可追溯性,可以轻松确认是否所有需求都经过测试;
自下而上的可追溯性可以很容易地发现哪些需求被错误地实现或误解;
从右向左追踪,通过测试过程找出问题或缺陷来自于哪个需求。
(2)需求变化定位
当出现新的需求或需求变化时,快速追踪有利于V模型从上到下、从左到右的准确定位,发现整个项目开发从设计到测试的不同阶段需求变化的具体位置。
(三)评价审核
通过需求的纵向和横向追踪,我们可以了解项目是否严格按照标准流程执行开发过程。
3.2 敏捷开发与集成
将敏捷开发流程融入到软件开发端和软件测试端。 软件敏捷集成和软件敏捷设计过程也具有双向可追溯性,并强调以下关键实践:
(一)以人民为中心
敏捷开发注重人员和沟通。 只有软件开发人员和业务人员实现事件的敏捷处理,整个软件开发过程才能变得敏捷。
(2)迭代增量开发
整个软件开发过程通过迭代开发分为几个阶段。 开发人员根据优先级或风险选择需求,并执行程序的增量设计和开发。 每次迭代的完成都对应着一个经过测试的*终产品,开发团队通过它获得更多的反馈,然后继续改进软件产品。
(3) 测试驱动开发
基本思想是先写测试用例,思考如何进行功能测试,然后在开发功能代码之前编写相关代码来满足这些测试用例,然后循环添加功能。 直到所有功能开发完成。
(4)持续集成
持续集成的主要思想是提高集成测试的效率,将软件开发过程后期的软件集成灵活地分配到整个软件流程中。
3.3 软件层SOTIF开发
在软件设计和测试阶段,SOTIF开发活动同时进行,作为软件开发的安全约束,对应以下五项活动:
(1) 识别和评估潜在的SOTIF功能缺陷和触发条件
通过规范和设计文档的支持,进一步确认软件设计缺陷、性能限制、人员误操作等及其触发条件。 采用FTA故障树分析,在软件层面确定与SOTIF相关的车辆级危险的触发条件,包括合理预见的感知模块、算法决策模块、执行模块和人员的误操作。 向SOTIF确认触发条件的可接受性,并审查和评估触发条件的严重性(S)、可控性(C)和概率是否满足既定的验收标准。
(2) 功能修改以降低SOTIF相关风险
通过分析软件层面的设计缺陷和性能限制,制定针对SOTIF相关危害的改进措施,包括功能目标的改变、软件设计限制、改进和降级。 将改进更新到规范和设计文档中。 如果仍然无法充分降低安全风险,则需要定义验收标准,并考虑相应的法规、目标市场中功能的情况以及人员面临风险的可接受性。
(3) 定义验证和确认策略
SOTIF的验证和确认过程主要是对未知不安全场景和已知不安全场景进行检测和改造的过程,并对软件系统提出验证和确认要求。 制定已识别的 SOTIF 相关危害的验证策略和残余风险的确认策略,编写集成测试规范,并解释所选验证和确认方法的基本原理。
(4) 验证已知的危险场景
对于识别出的SOTIF相关危险场景,根据选定的验证方法,对软件算法进行仿真验证或硬件在环(HiL)验证,进行集成测试,*终出具危险场景验证报告。
(5) 验证未知危险场景
为了评估未知危险场景中的潜在风险,应设计测试用例进行风险测试,识别系统设计中可能引发危险的操作条件,减少未知危险区域,并验证目标是否满足安全验收标准评价依据。
4 应用实践
随着我国汽车企业智能驾驶产品逐渐自主化,由于经验不足软件开发,软件团队在实际项目开发中暴露出不少问题和流程漏洞。 在以往的示范项目中,存在系统方案选择不合理、缺乏有效审核的情况。 评估,导致系统方案选型与主流方案存在偏差,导致开发后期无法闭环控制,车位停车精度不够等一系列问题难以解决。在项目后期解决。 特别是,由于软件开发系统的功能需求规范不完善,导致软件开发过程中需求反复修改,导致软件开发效率低下。 通过该流程的制定和实施,完善整个软件项目开发和测试团队的软件开发流程体系,开展软件开发过程控制,完善软件质量管理和微流程标准化工作,制定40项软件开发规范和需求文档模板,严格控制和检查,有效保证了软件开发各个环节的规范化和规范化,显着减少质量问题,显着提高效率。
如何实施此过程以解决 AEB 自动制动辅助系统的潜在危险的示例如下:
(1) 潜在交通状况:
在交通繁忙的道路上行驶(例如郊区道路)。
(2)潜在危险:
意外紧急制动可能会导致与后面车辆发生碰撞。
驾驶员无法控制危险。 驾驶员对危险的控制取决于两辆车之间的距离。
(3) 触发事件:
特殊的道路条件(例如井盖、管道、饮料罐)可能会产生雷达回波,这些回波可能被解释为潜在的障碍物。
需要降低不必要的紧急制动引起的后侧碰撞的严重程度,并且与此 SOTIF 相关的风险是不可接受的。 为了降低追尾碰撞的严重程度,功能改进方向是限制制动干预的持续时间或强度。
(4)改进的功能说明:
该功能使用雷达传感器扫描前方障碍物的距离。 如果检测到即将发生碰撞,AEB 将被触发。 限制制动干预,以减少或防止因不必要的紧急制动而引起的碰撞。
5 结论
本文结合流程模型和敏捷开发各自的优势,考虑SOTIF安全需求,减少危险事件,提出一种集成软件敏捷开发环节的软件开发流程,兼顾传统汽车软件开发控制、流程、文档和评审。 方法,具有敏捷开发的灵活主动、快速迭代的特点,以及安全约束。 新制定的自动驾驶安全软件开发流程是在传统汽车软件开发流程基础上的改进和优化。 它合理地平衡了软件开发活动。 实际的项目实施结果证明了新开发的软件流程的有效性,将对后续汽车产生积极影响。 自动驾驶安全软件的开发具有启发意义。
—————————————————
版权声明:本文为CSDN博主“智能汽车设计”原创文章,遵循CC 4.0 BY-SA版权协议。 转载时请附上原文出处链接及本声明。
原文链接:
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等