加入收藏 | 设为首页 | 会员中心 | 我要投稿 长春站长网 (https://www.0431zz.com.cn/)- 媒体智能、开发者工具、运维、低代码、办公协同!
当前位置: 首页 > 服务器 > 安全 > 正文

普洱还是喜茶?再议开发安全中的SDL与DevSecOps

发布时间:2022-07-06 10:14:15 所属栏目:安全 来源:互联网
导读:百度、腾讯、小米、OPPO似乎今年谈起开发安全,不说自己从传统SDL转型到DevSecOps就不能称为创新。 的确,DevSecOps越来越受到周期短、迭代快的互联网业务的欢迎,也成为安全界的流行趋势。但在笔者看来,正如喜茶好还是普洱好一样,将DevSecOps和SDL二元化
  百度、腾讯、小米、OPPO似乎今年谈起开发安全,不说自己从传统SDL转型到DevSecOps就不能称为创新。
 
  的确,DevSecOps越来越受到周期短、迭代快的互联网业务的欢迎,也成为安全界的流行趋势。但在笔者看来,“正如喜茶好还是普洱好”一样,将DevSecOps和SDL二元化盲目对立起来也是不成熟的想法。软件开发过程的目标是多样性的,有些是质量、人员效率优先,有些是速度优先,也有些是安全优先,由此可见目标决定过程。因此,需要根据不同的目标来有机整合相关的实践以实现目标。
 
 
 
  作为专业人员,我们必须从更高阶与成熟的软件工程管理角度考虑如何做好软件安全开发。国际标准最广泛采用的基于WSR软系统工程方法论告诉我们:要解决组织的问题需要基于战略方向,从人、流程、技术与工具、方法等多个维度系统化思考。工具很重要,但也不是解决问题的万能药,用什么工具,不是看是不是技术先进,而是在战略指导下,从成本效益角度综合考虑的结果。
 
  SDL与DevSecOps对比又进入了历史误区
 
  “DevSecOps”被评为年度网络安全行业热点词汇,然而历史似乎总在重演。正如当年在软件工程领域爆发“CMMI与敏捷开发”的争论一样,现在安全领域出现了类似的争议。
 
  现在网络上很多文章,开始宣传DevSecOps优于SDL,甚至出现SDL已死的论调。其实SDL是一种安全开发模型,其对应的所谓实践,实际就是模型的要求,用什么方法满足这个要求,组织可以根据具体情况决定,SDL目前实际已经涵盖DevSecOps。而DevOps是软件敏捷开发方法的发展,DevSecOps是基于DevOps的软件安全开发方法。因此,如果作类比,SDL相当于CMMI,而DevSecOps相当于敏捷开发方法,总而言之:
 
  SDL是一种模型,DevSecOps是一种具体的方法,两者相辅相成,一起进步,而不是对立的;
  SDL本身也在演进中,并已经涵盖了DevSecOps方法;
  解决安全运维一体化的并非只有DevSecOps一种选择,S-SDLC也行;
  DevSecOps与传统瀑布模式的S-SDLC方法相比,也没有优劣之说,只是解决问题场景不同,DevSecOps也不能替代瀑布式S-SDLC。
  从软件工程学的角度看软件安全开发
 
  软件安全开发的本质目标,是开发出安全的软件。“安全”即保密性、可用性、完整性。基于软件工程管理“过程控制、预防为主”的原则,应该在软件开发过程中内建,而不是“亡羊补牢”:先开发、再检验、最后修补。
 
  根据《GB/T 11457-2006 软件工程术语》的定义,“软件开发过程(2.1491)”是把用户要求转化为软件产品的过程,此过程包括:把用户要求转换为软件需求,把软件需求转化为设计,用代码来实现设计,对代码进行测试,有时包括安装和验收。因此,软件开发生命周期(SDLC)通常定义为:需求、设计、实现、验证、发布、运维6个生命周期阶段。
 
  软件开发的过程阶段可以遵循不同的“软件开发生命周期模型”,也被称为“软件开发过程模型”。每个过程模型都遵循其在软件开发生命周期所独有的一系列阶段,以确保软件开发成功。不同的软件开发生命周期类型,本质是为了应对不同问题域。目前行业最主流的SDLC是瀑布与敏捷,而选择哪一种SDLC开发软件,需要根据不同场景的特征。见下表。
 
 
 
  为了实现软件的安全特性,需要在软件开发生命周期的各阶段融入安全实践过程,以保障开发过程能产出安全的软件,也就构成了安全软件开发生命周期S-SDLC。因此,在瀑布型SDLC或敏捷型SDLC融入相应的安全实践过程就可以衍生出安全的瀑布开发生命周期与安全的敏捷开发生命周期。因此,S-SDLC实际是泛指安全软件开发生命周期,可以是瀑布模式,也可以是敏捷模式。
 
  SDL的诞生和演进
 
  微软在21世纪初期的软件产品开发实践中,就意识到无法通过技术层面彻底解决软件面临的安全风险。因此,微软尝试从流程和管理的角度解决这个问题,并探索在各软件开发环节加入安全过程、把控安全风险,确保每个环节交付到下一环节的交付物都安全可控。于是,微软产生了“SDL软件安全开发周期(Security Development Lifecycle)”。
 
  2004年,微软的SDL安全开发生命周期模型(见下图)作为软件开发的强制策略开始在公司实行。该模型帮助开发人员构建高安全性的软件,并取得了巨大成功。应该说早期的这个模型,确实没有将运维层面的实践纳入该模型。
 
 
 
  早期的微软SDL
 
  2019年,随着移动、云计算、大数据、物联网、人工智能和其他新技术的兴起,微软对SDL进行调整,使得无论使用经典的瀑布法或更新的敏捷方法(如DevSecOps),在开发的每个阶段提高软件应用程序的安全性。其中,适用于瀑布开发场景的SDL包括12个安全开发实践,适用于敏捷开发场景的SDL包括8个安全开发实践。
 
 
 
  适用于瀑布开发场景的新版微软SDL
 
 
 
  适用于敏捷开发场景的新版微软SDL
 
  新版微软SDL具有以下特征:
 
  不再强调在哪个软件开发阶段执行哪个实践,这使得模型能适用更广泛的SDLC模式;
  重视软件开发过程中的自动化安全检测,包含:静态安全测试、动态安全测试、渗透测试;
  不再关注软件的发布过程;
  加强开发过程中对有关人员、工具和组件的管理。
  互联网技术与应用创新推动敏捷开发向DevOps演进
 
  随着互联网时代的到来,信息得以快速传递,并呈现出跨界融合、创新驱动、重塑结构、尊重人性、开放生态、连接一切等意识形态,对软件开发管理带来前所未有的冲击。互联网行业的软件公司面临更加复杂和快节奏的外部环境,之前在瀑布模型场景的假设被打破。创新业务场景多、客户需求变化快,使得现有经验积累很难借鉴。
 
  需要在成本可控情况下,不断向市场交付、验证、反馈、调整以找到准确的方向,此时准度比精度更重要,做错方向的成本远高于迭代修正的成本,更快的迭代速度可以获得更快的反馈、更灵活调整,只有这样更利于赢得市场竞争,速度成为首要考虑的因素。因此,拥抱变化、固定成本下迭代增量交付的敏捷方法应运而生。但由于敏捷方法应对的是快速变化的外部环境与不确定的问题,则更加依赖团队的能力自组织、自适应外部变化,其存在的局限包括:
 
  如果迭代成本极高,这个方法就无法实施;
  对团队成员的综合素质和能力有较高门槛,很难适应大规模的软件开发场景,因为一旦团队规模变大,就必然需要层级管理模式;
  由于拥抱变化,增加了短期的灵活性,这样操作降低过程风险,则失去了对最终成本的预见性和可控性。
  敏捷方法本身也在演进,开始敏捷方法主要是产品开发领域。随着云计算应用的兴起,软件即服务也意味着为真正敏捷的交付软件价值给客户,必须将敏捷扩展至运维端,才能实现真正的端到端的价值流动和及时客户反馈、快速迭代,持续集成、部署的自动化是这一方法体系的核心能力!我们称之为DevOps。

(编辑:长春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读