安全软件开发生命周期简介
共 3924字,需浏览 8分钟
·
2021-12-02 10:30
自20世纪70年代软件开发生命周期获得突出地位以来,经历了许多修改和调整。 随着时间的推移,终端用户的开发需求与挑战的演变性质结合在一起。最显著的是安全性方面——导致了不同的软件开发方法和方法的形成。其中一种方法是安全软件开发生命周期(SSDLC)。
SSDLC的出现是为了应对应用程序安全性面临的日益严峻的安全挑战。涉及数据泄露、侵犯隐私和其他网络威胁的事件在当今社会非常常见,任何没有将安全性放在首要位置的软件开发模型很可能导致开发公司的财务和声誉损失。
在了解SSDLC之前,让我们先看看SDLC方法。
什么是软件开发生命周期?
软件开发生命周期(SDLC)是一种用于开发软件应用程序的系统而又标准化的方法。SDLC大量借鉴了一般项目管理生命周期方法中的元素,从所涉及的步骤和阶段的相似性中可以明显看出这一点。
虽然不太可能找到两个公司应用完全相同的SDLC过程,但主要阶段在大多数组织中是常见的。
SDLC流程的主要阶段
一般来说,典型的SDLC过程包含五个阶段:
需求收集:开发每个应用程序是为了解决某些问题,并为用户提供实用性。在收集需求时,开发团队的目标是理解客户的需求和目标,并定义以最佳方式完成项目所需的资源。
设计:在这个阶段,为整个项目打下了基础。这里确定的一些主要细节包括编程语言、体系结构、平台、用户界面、通信协议和安全性。
开发/构建:这是通过开发应用程序源代码将所有计划付诸实施的部分,并实现应用程序的所有功能,包括用户界面和安全性。
测试:任何SDLC过程中最重要的组成部分之一是测试软件的漏洞、错误、性能和功能。在此阶段发现的任何应用程序性能问题通常会在部署之前得到纠正。
部署和维护:发布应用程序以供预期客户端使用。它通常包括让应用程序得到app Store的批准,并提供下载。当然,高度专业化的企业应用通常不会在应用商店中发布,而是直接提供给客户。
常见软件开发生命周期模型
SDLC流程在大部分组织中保持不变。但是,软件开发规则手册中没有任何内容可以强制任何开发人员始终以一维顺序遵循SDLC阶段。
多年来,组织和战略家已经尝试了不同的SDLC模型,以更好地满足客户不断变化的需求。最受欢迎的例子如下:
瀑布型
所有模型中最直接的是SDLC的瀑布式方法。在瀑布式开发中,整个开发生命周期的各个阶段以固定的顺序出现,从需求收集到最终部署。
V-模型
V 模型是一个线性模型。
这个模型的主要特点是它非常强调测试。这就是为什么v模型的每个阶段都有自己的测试活动,以便测试在开发的所有阶段中进行,直到完成。
v模型中嵌入的广泛测试和质量控制使它成为最昂贵和要求最高的软件开发方法之一。因此,它只在高度专门化的情况下使用,例如对失败和错误的风险容忍度很低的项目。
迭代模型
随着组织探索非传统和非线性的工作方法,迭代和增量模型获得了更多的关注。开发人员可以以顺序或并行的方式实现该模型。
从本质上讲,迭代模型是累加的,新的软件模块和功能被添加到每个迭代中。
迭代模型的好处在于,它们允许在任何开发阶段进行调整,只要需求的变更在项目的范围内。
迭代模型证明最有效的情况是应用程序的功能只是松散依赖的大型项目。
敏捷开发
在今天,敏捷开发是使用最广泛的SDLC模型。本质上,敏捷遵循迭代式的开发风格,并且更加强调沟通和早期的客户反馈。
敏捷模型中的每次迭代都旨在开发一个完整的模块或功能,以在应用程序的最终版本中体现出来。这意味着传统SDLC过程中的相同步骤顺序会重复多次,直到项目完成,从而导致重复测试和质量保证。
敏捷保证的软件版本的频繁发布以及与客户的沟通和反馈使其成为大多数组织的流行选择。
敏捷开发在以下情况下经常被采用:
需要早期客户反馈的启动计划。
可以轻松拆分为较小部分的大型项目,每个部分都是增量开发的。
需要在SLDC中增加一个“S”
SSDLC是SDLC的一个自然发展,是为了响应现代应用程序开发环境中安全性日益上升的重要性而出现的。
简单地说,SSDLC为旨在加强安全性的应用程序开发提供了一个结构化的框架,将安全性元素集成到SDLC的所有阶段中。
在一个设备、小玩意和电子产品泛滥的世界里,安全漏洞可能会给个人和组织带来灾难。如果是一家公司,忽视安全可能会导致巨大的经济损失。只需利用一个单一的漏洞就可以对一个组织的系统造成严重破坏。
在Facebook-Cambridge Analytica、iCloud泄露、NSA的PRISM监视计划等严重数据泄露和隐私丑闻之后,欧盟GDPR和美国的CCPA 等立法框架要求组织采取数据保护措施所有相关方的安全。
在这种情况下,任何软件开发人员都需要将安全性作为开发生命周期的每个阶段的关键考虑因素。
SSLDC为此类安全灾难提供了解决方案,使组织能够最大限度地降低风险,并显著更有效地控制其声誉和财务安全。这是公司采用SSDLC的主要原因。
SSDLC最佳实践
让我们看看在将安全性集成到每个阶段时如何修改经典的SDLC的这些步骤。
1.需求收集
这个阶段现在的重点是准备一个安全和监管要求的列表,以及项目的其他一般细节。一般会制定详细的计划,为所有不同阶段制定相应的安全保障活动。
这一阶段的一个关键部分是安全意识培训。培训课程旨在为项目参与者提供安全知识,使他们能够采取措施进行安全设计和开发,并从一开始就为整个团队建立安全观念。
2. 设计
设计阶段是决定所有细节的阶段,比如编程语言、软件架构、功能和用户界面。这个阶段的SSDLC实践涉及确定应用程序的大部分安全功能和防御机制。
此阶段的一些以安全为重点的安全活动包括:
威胁建模: 模拟攻击场景,并将有效的对策集成到能够危及应用程序的已识别威胁列表中,从而为后续采取的所有安全措施奠定基础。对可能的威胁的早期检测不仅降低了成功攻击的可能性,而且还降低了与整个项目的安全集成相关的成本。
设计文档和审查:建模结果帮助团队准备设计文档,确定安全性需求和需要解决的应用程序安全性的关键漏洞。
识别第三方风险:如果关联的第三方组件是脆弱的,那么即使是最安全的应用程序也容易受到攻击,从而使整个系统变得脆弱。因此,检查和监控第三方应用可能存在的安全漏洞,并在必要时进行补丁,保证整个应用系统的完整性是至关重要的。
3. 开发/构建
在SSDLC上下文中,该阶段涉及安全编码和扫描等活动。
安全编码:在这个阶段,将考虑应用程序编码的安全最佳实践,如身份验证和加密。通常,团队的目标是遵循安全的编码实践,这成功地消除了许多基本的漏洞,最大限度地减少了回溯相同步骤来修复和修补项目中稍后发现的漏洞的需求。
SAST:静态应用程序扫描工具 (SAST) 可以帮助应用程序完成之前测试及审查代码。静态扫描有助于在开发的各个阶段发现安全问题,使得项目的发展更容易检测和修复问题。
手动代码审查:SAST提供自动扫描功能。在发现代码缺陷和漏洞上帮助开发人员节省很多时间和精力,但仍然需要人工审查来识别恶意攻击者可能利用的代码中的潜在问题。
4. 测试
测试阶段是安全测试全面展开的阶段。在此阶段执行的常见做法包括:
动态扫描: 与 SAST不同,动态应用程序扫描工具 (DAST) 在运行时模拟黑客攻击尝试和威胁以暴露应用程序漏洞。结合前一阶段的 SAST,DAST 添加了一个额外的测试层,以消除大多数安全错误。
模糊测试: 在模糊测试中,开发人员生成模拟自定义模式的随机输入,并检查应用程序是否能够处理这些输入。这有助于为SQL注入等问题构建保护,SQL注入本质上是一种恶意输入。
渗透测试:通过邀请第三方安全专业团队来模拟攻击,是暴露任何系统中隐藏漏洞的最佳方法之一。开发团队总是可能忽略第三方专家的经验和知识可能通过渗透测试重现的某些攻击场景。
5. 部署和维护
当应用程序上线时,开发人员的工作并没有结束。应用程序有自己的生态系统,必须对其进行管理、维护和照顾。
此阶段的一些SSDLC实践包括:
环境响应:应用程序本身可能是万无一失的,但每个应用程序只有在与更大的生态系统相关时才有用。一旦应用程序启动,监控环境及其对应用程序的行为和完整性的影响是维护的一个关键方面。
事件响应计划:在现实世界中,没有任何应用程序能够真正免受安全漏洞的影响。事故响应计划规定了发生事故时团队必须遵循的计划、行动和程序。
安全检查:威胁和攻击总是在发展,为了保证安全,应用程序必须发展得更快。频繁的安全检查有助于保护应用程序免受新形式的攻击和漏洞。
在传统的SLDC模型中,敏捷开发已经在大多数组织中取代了开发生命周期的传统方法。然而,敏捷环境与面向安全的实践和工具并不一致。这主要源于敏捷开发方法需要广泛的安全性测试。由于在敏捷开发中每个阶段都是迭代执行的,而且SSDLC的每个阶段都嵌入了安全组件,敏捷团队可能会发现大量的重复测试。
这也意味着,将SSDLC集成到敏捷环境中,企业需要经历很大的转变。在敏捷开发过程中,安全不再是事后的想法,而是需要贯穿到每天的工作习惯中。
每个企业的最终目的都很明确,通过在开发的不同阶段和部分实现集成来拥抱更大的安全性。
参读链接:
https://resources.infosecinstitute.com/topic/introduction-to-secure-software-development-life-cycle/