软件生命周期的学习和安全思考

文摘   2024-10-30 09:33   上海  

软件生命周期并非一个固定以“周”为单位计量的过程,而是一个涵盖软件从产生到报废的全过程。这一过程通常被划分为三个主要时期和多个阶段,以确保软件开发的顺利进行和软件的持续有效运行。以下是对软件生命周期的详细阐述:

三个主要时期

  1. 软件定义期

  • 任务:确定软件开发工程必须完成的总目标,评估工程的可行性,明确系统必须完成的功能,并估计完成工程所需的资源和成本。

  • 阶段划分:此时期包括问题定义和可行性研究两个阶段。

  • 软件开发期

    • 任务:具体设计和实现在软件定义期定义的软件。

    • 阶段划分:此时期包括需求分析、概要设计(总体设计)、详细设计、编码、单元测试和综合测试六个阶段。

  • 软件使用、维护、退役期

    • 任务:使软件持久地满足用户的需要,包括修正错误、适应环境变化、满足用户新要求等。

    • 阶段划分:此时期主要包括软件运行维护和退役两个阶段。其中,软件维护是软件生命周期中持续时间最长的阶段,包括程序代码的维护和文档的维护。

    生命周期模型

    在软件生命周期中,还涉及到多种生命周期模型,这些模型有助于更好地理解和实施软件开发过程。常见的生命周期模型包括:

    1. 瀑布模型:该模型由Royce提出,以文档驱动为特点,要求每个阶段的文档都需经过正式评审和批准后才能进入下一个阶段。

    2. 快速原型模型:开发人员对用户提出问题进行总结,就主要需求达成一致意见,快速地建立一个原型系统并运行,然后对原型进行反复修改,使之完善。衡量原型化模型开发人员能力标准是快速获取需求能力。

    3. 迭代模型:迭代模型强调在软件开发过程中不断迭代,每次迭代都会产生一个可以发布的产品版本,这个产品是最终产品的一个子集。迭代模型有助于在开发过程中尽早暴露和应对风险。

    4. 增量模型:增量模型也称为渐增模型。增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户而是可以分批次进行提交。

    5. 螺旋模型:螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。

    软件生命周期与安全左移的关系

    软件生命周期是指软件从产生到报废的全过程,包括软件定义、开发、使用、维护和退役等多个阶段。而安全左移是一种软件开发实践,其核心思想是将安全措施提前到软件开发生命周期(SDLC)的更早阶段。

    在软件生命周期中,安全左移的实践意味着在软件开发过程的早期阶段就引入安全考虑,以便在代码被集成、测试、记录甚至发布之前,就能发现潜在的安全风险,同时安全左移也有助于提前引入供应链管理,减少后续供应链替代或其他操作的成本。

    软件生命周期中安全人员的具体抓手

    网络安全在软件生命周期中扮演着至关重要的角色。以下是安全人员可以介入的几个关键点:

    *软件生命周期中的保密性、完整性、安全性**:

    在软件生命周期中,保证安全性和保密性是至关重要的,这涉及到软件从需求分析、设计、开发、测试、部署到维护的各个环节。以下是在软件生命周期中保证安全性和保密性的关键措施:

    一、需求分析阶段
    1. 明确安全需求:明确软件的安全需求,包括身份验证、授权、数据加密、传输安全等方面的要求。

    2. 威胁建模:识别潜在的威胁和攻击方式,分析软件可能面临的安全风险,并在需求中制定相应的防范措施。

    二、设计阶段
    1. 安全架构设计:设计安全的应用程序架构,确保安全措施在应用程序的每个层级中得到实施。

    2. 数据全生命周期设计:设计安全的数据存储和传输方案,同时在设计阶段就对采集或应用数据进行初步的数据分类分级,查看数据流的流动途径,采用合适的加密技术保护敏感数据。

    3. 身份验证与授权:确定适当的身份验证和授权方案,确保用户访问权限的合法性和合理性。

    三、开发阶段
    1. 安全编码:遵循安全编码规范,确保代码的安全性。避免使用不安全的函数和库,防止常见的安全漏洞,如SQL注入、跨站脚本攻击等。

    2. 代码审查:通过代码审查发现潜在的安全问题,并及时进行修复。

    3. 使用安全工具:利用安全工具进行代码分析、漏洞扫描等,提高代码的安全性。

    四、测试阶段
    1. 安全测试:进行渗透测试、漏洞扫描等安全测试,验证软件的安全性。

    2. 功能测试与验证:确保软件的功能与需求一致,同时验证安全措施的有效性。

    3. 修复漏洞:根据测试结果,及时修复发现的安全漏洞。

    五、部署阶段
    1. 安全配置:在部署过程中,确保服务器、数据库等系统的安全配置正确无误。

    2. 访问控制:设置严格的访问控制策略,防止未经授权的访问和操作。

    3. 监控与日志:建立安全监控和日志记录机制,及时发现并响应安全事件。

    六、维护阶段
    1. 漏洞修复:及时修复已知的安全漏洞,确保软件的持续安全性。

    2. 安全更新:根据安全技术的发展和威胁的变化,定期更新软件的安全措施。

    3. 培训与意识提升:加强员工的安全意识培训,提高他们对安全问题的认识和应对能力。

    七、其他措施
    1. 采用安全开发框架:选择具有安全特性的开发框架和库,降低开发过程中的安全风险。

    2. 定期安全评估:定期对软件进行安全评估,发现潜在的安全隐患并进行改进。

    八、安全合规和运营
    1. 遵循安全标准与法规:遵循相关的安全标准和法规要求,确保软件的安全性和合规性(例如密评、等保、安全合规等)注:合规可以放到设计阶段也可以放到维护阶段去做,取决于该系统/网络是处于增量还是存量。

    2. 日常的安全运营:建立Soc中心,对监控的日志进行汇总分析,及时发现问题。

    云下信安
    再溯源就不礼貌了