软件安全开发最佳实践之安全开发模型篇

admin 2022年6月27日14:17:51评论584 views字数 4550阅读15分10秒阅读模式
软件安全开发最佳实践之安全开发模型篇
点击蓝字关注我们

软件安全开发最佳实践之安全开发模型篇


一直想把自己对软件安全开发生命周期的理解写成文章跟大家交流,迫于不擅长写作,无法将自己的想法码成文字,就一次次的放弃了。本次借助A9 Team平台第一次尝试一下。
软件安全开发最佳实践之安全开发模型篇


前言
软件安全开发是一种系统化的应用安全解决方法,它将一系列安全活动、安全管理实践和安全开发工具有机地结合在一起,在整个软件开发生命周期中,贯彻安全开发的思想,从源头着手,减少软件安全缺陷与漏洞,从而提高软件运行的安全性。与软件运行阶段解决安全问题相比,在软件开发阶段考虑安全问题,更有效、更经济。本篇文章将梳理我个人对各类软件安全开发模型的理解,以及对软件安全开发最佳实践的思考。




软件安全开发最佳实践之安全开发模型篇
软件安全开发模型
软件安全开发最佳实践之安全开发模型篇

    我最初做应用安全,参照的就是微软的软件安全开发生命周期(SDL)。当时DevSecOps的概念刚刚被提出没多久,记得有一次希望向一个在应用安全方向做了挺长时间的小伙伴请教DevSecOps,得到的回答是“不知道什么是DevSecOps”,也让我感受到了DevSecOps只是在概念阶段。直至今日,感觉DevSecOps的概念似乎已经盖过了当初的SDL,被各个企业参考建设。不过我认为SDL的经典依然是存在。


    除了SDL、DevSecOps,其实还有一些知名的软件安全开发方法在被配合着SDL、DevSecOps应用,如内建安全(BSI)、综合的轻量应用安全过程(CLASP)、软件安全保障成熟度模型(SAMM)。下面将对我了解的一些软件安全开发方法进行简单介绍。

1.软件安全开发生命周期(SDL)

      微软的SDL想必大家已经都非常熟悉了,我就不做过多的介绍。下面介绍下SDL的发展历程:

2002年,微软提出推行可信计算计划,期望提高微软软件产品的安全性,SDL是其中的关键部分。2004年微软内部提出SDL2.0,并在全公司强制执行;2007年发布SDL3.2,也是第一个公开发布的版本。经过多个版本的完善,2012年发布了SDL5.2。近十年虽然有一些材料的更新,但官网的版本目前还是5.2版,这也说明了SDL的强大,能适应各种复杂多变的开发环境。

软件安全开发最佳实践之安全开发模型篇

另外,看过网上的一些文章说微软的SDL只适用于瀑布模型,对于现在各企业在推行的敏捷开发、DevOps等不太适用。其实这个说法不太准确,因为微软的SDL本身也是适用于敏感等开发模型,只是用法于我们常规理解的不太一致。官方也有关于敏捷SDL的介绍,有兴趣的同学可以上官网学习。

2.DevSecOps

DevSecOps是Gartner在2012年就提出的概念,2017年RSA峰会之后,DevSecOps开始成为世界热门话题。其延续了DevOps的理念,将信息安全的框架整合到DevOps的工作流程中,研发、测试、运营、安全多个部门紧密协作,在提升开发和运营敏捷性的同时,也保障了数据和服务的可用性和安全性。

DevSecOps强调的是通过在软件生命周期的各个阶段进行自动化,监控和应用安全性来提高价值,其包括计划、开发、构建、测试、发布、交付、部署、操作和监控等阶段。

软件安全开发最佳实践之安全开发模型篇

中国信息通信研究院牵头制定,2020年发布的研发运营一体化(DevOps)能力成熟度模型的第6部分:安全及风险管理,即是全国首个全球首个 Dev(Sec)Ops 标准。框架划分依据DevOps全生命周期分为:控制总体风险、控制开发过程风险、控制交付过程风险和控制运营过程风险四大部分

  • 控制总体风险安全要求,包括:组织建设和人员管理、安全工具链、基础设施管理、第三方管理、数据管理、度量与反馈改进共六个共性的安全要求;

  • 控制开发过程风险安全要求,包括:需求管理、设计管理和开发过程管理;

  •  控制交付过程风险安全要求,包括:配置管理、构建管理、测试管理、部署与发布管理

  • 控制运营过程风险安全要求,包括:安全监控、运营安全、应急响应、运营反馈


3.内建安全(BSI)

内建安全(Build Security In)含义是将安全内建到软件开发各个阶段中,对各个阶段的产出物的安全性进行评估。BSI的方案本身与开发流程无关,而是在每个阶段都要开展一些关键的安全接触点(touch point)来保证软件的安全性,保证各阶段产品的安全性,避免将安全问题带到下一个阶段。

BSI已成为美国国土安全部的一个项目,作为其软件保障计划的一部分(主要用于外购项目和软件供应链的风险分析),旨在最大程度地减少软件漏洞,提高可信软件产品的开发和部署能力。

BSI模型以风险管理、软件安全接触点和安全知识作为软件安全的三根支柱。

(1)风险管理。风险管理是一种战略性方法,将减轻风险作为一种贯穿整个生命周期的指导方针;

(2)软件安全接触点。强调了安全接触点的实施与开发流程无关,而是在每个阶段都要开展一些关键的安全接触点(touch point)来保证软件的安全性。

安全接触点包括:

  • 安全需求分析。在软件需求分析阶段应充分考虑安全方面的需求,安全需求应包括功能安全需求(数据加密、隐私保护、访问控制等)和异常处理安全需求(异常处理、恶意攻击处理等)

  • 滥用用例。滥用用例也称为误用用例,通过设计滥用用例可以更准确地描述系统在受到攻击时的行为表现:应该保护什么、免受谁的攻击,以及保护多长时间。

  • 风险分析。通过风险分析的方法,揭示架构设计中存在的风险和瑕疵,并提供一系列降低安全风险的防护措施。

  •  代码审核。重点关注代码安全审核的方法,完整的以结构化的思维尽可能多的发现代码的安全问题,对代码审核使用的工具不做强制要求(商业或免费工具都可行)。

  •  基于风险的安全测试。从功能的角度出发,验证软件功能设计是否能安全的实现,安全测试包括从正常功能测试角度测试功能逻辑的安全性测试和以攻击、风险和滥用用例为基础的风险测试。

  •  渗透测试。从攻击者的角度评估应用运行环境中的软件安全性,结合风险分析来设计渗透测试方案。

  • 安全操作。要求不同部门、不同岗位人员之间密切合作、协同一致,相互配合的应用各项安全接触点的工作。

(3)安全知识。安全知识强调对安全经验和专业技术进行收集汇总,对软件开发人员进行培训,并通过安全接触点实际运用到项目过程中。

 软件安全开发最佳实践之安全开发模型篇

4、综合的轻量应用安全过程(CLASP)

CLASP(Comprehensive, Lightweight Application Security Process)最初由安全软件组织(Secure Software,Inc.)定义,后来由OWASP维护完善。

CLASP是一个用于构建安全软件的轻量级过程,由30个特定活动和辅助资源组成,用于提升整个开发团队的安全意识。CLASP的一个突出特点是安全活动与角色相关联,强调安全开发过程中各角色的职责。

软件开发不同阶段的安全活动需要指派不同的角色负责和参与。这些角色分别包括:项目经理、需求专家、软件架构师、设计者、实施人员、集成和编译人员、测试者和测试分析师、安全审计员。对于每一个角色的安全活动,CLASP都对以下问题进行了描述:安全活动应该在什么时间实施、如何实施;如果不进行这项安全活动,将会带来多大的风险;如果实施这项安全活动,估计需要多少成本。

目前在OWASP官网已经找不到CLASP项目材料,据初步了解是因为OWASP

官网两年前进行了更新,很多东西还没有进行同步,是否已经被废弃待进一步跟踪。此处就暂不过多的对CLASP进行介绍,感兴趣的同学待官网同步后再与大家交流学习。

软件安全开发最佳实践之安全开发模型篇

5、软件安全保障成熟度模型(SAMM,2.0 beta版)

软件保障成熟度模型(Software AssuranceMaturity Model, SAMM)是一个开放的框架。是在OWASP CLASP的基础上发展起来的,目前由OWASP作为一个开放的项目来维护,2020年发布了最新的SAMM2.0 beta版本。

与SDL模型不同,SAMM的目的是评估组织已有的软件安全实践,强调建立一种迭代的安全保证计划,根据组织的行为随着时间的推移而慢慢改变,软件的安全保证也应该持续改进,以保证信息系统对于业务功能支持的不断进化。

 SAMM v2.0 基于一组 15 种安全实践,分为五个业务功能。每个安全实践都包含两个流,它们代表一组活动,分为三个成熟度级别 (1-3)

软件安全开发最佳实践之安全开发模型篇

SAMM主要目的是评估软件保障的成熟度,为所有类型的组织提供一种有效且可衡量的方式来分析和改进其软件安全状况。支持包括自研和采购软件完整的生命周期,与具体使用的技术和开发流程无关。

软件安全开发最佳实践之安全开发模型篇
各模型的特点分析
软件安全开发最佳实践之安全开发模型篇

    微软SDL


   SDL官方提供的文档、工具等资源丰富,从需求分析阶段到测试阶段都有较多的自动化工具提供支持。SDL体系较为完善,要求严格,完全按体系标准要求落地,软件安全性效果较高。但缺点也是显而易见的,需要投入大量的人力、资源等。

  • DevSecOps

    DevSecOps建设的基础是DevOps,完全遵循DevOps的思想,将安全无缝集成到其中的一种软件模式,强调的是安全自动化。DevSecOps体现的是一种安全的文化的渗透思想,也是制度流程和工具的集合的方法,是由学习和实践驱动的战略。

    另外,DevSecOps在开发、交付、运营等软件全生命周期都提出了安全活动的指导。

  • BSI

    BSI是在软件开发生命周期的每一个开发阶段尽可能地避免和消除漏洞,强调了各阶段产品的安全性,也包括了软件供应链等的安全性。实施BSI无须改变已有软件开发方法,它适用各种软件开发模型。

    同时,BSI明确了安全知识(库)在软件安全中的重要性,但与微软SDL强调安全培训不同,BSI没有强调要把安全培训作为软件安全开发的先决条件。

  • CLASP

    CLASP最大的特点是强调安全开发过程中各角色的职责,其安全活动也是基于角色安排,即在软件安全开发过程中基于已有的岗位角色实施对应的安全活动,而不是有安全岗位人员来完成。因此,CLSAP更易于与已有的软件开发方法进行集成,当然也容易存在一些问题,如有些企业现有人员安排与模型中定义的角色无法对应,存在部分安全活动职责不明确、各角色人员对安全理解不同,导致安全活动落地的有效性有差异等。

    CLASP采用的流程属于轻量级,官方定义其更适用于小型软件企业。

  •  SAMM

    SAMM本身目的是评估软件保障的成熟度,企业可以通过其衡量自身软件安全保障的现状,引导制定软件开发安全策略,创建明确定义和可衡量的目标。




软件安全开发最佳实践之安全开发模型篇

      上述内容为参考各类材料和个人理解对各类软件安全开发模型做的总结,个人在过往工作中也都是基于以上几个模型的特点结合企业实际的环境特点做软件安全开发方案规划的。当然,优秀的软件安全开发模型不只这几种,还有很多方法值得我们学习和借鉴的,如NIST的安全开发生命周期模型、属性驱动的软件安全开发生命周期模型,有兴趣的同学们可自行探索、学习。

       由于时间和篇幅有限,本次仅对软件安全开发模型做了简单的介绍,后续文章将结合个人如何规划软件安全开发方案,以及软件安全开发过程如何落地实施进行介绍(包括安全培训如何做、安全需求&安全设计关注哪些问题、安全扫描工具和流程如何配合等)。请大家多多关注,并提出不同观点讨论。

往期内容推荐

啥?白帽子进来了。。。

啥?白帽子进来了。。。

《数据安全架构设计与实战》读书笔记

msf简单攻略



软件安全开发最佳实践之安全开发模型篇








原文始发于微信公众号(A9 Team):软件安全开发最佳实践之安全开发模型篇

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月27日14:17:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   软件安全开发最佳实践之安全开发模型篇https://cn-sec.com/archives/1146741.html

发表评论

匿名网友 填写信息