CISSP(二十)

软件开发安全

软件开发生命周期SDLC
敏捷、瀑布、DevOps 、DevSecOps
成熟度模型CMM
软件保证成熟度模型(SAMM)
集成产品团队(IPT)
集成开发环境(IDE)
持续集成和持续交付(Cl/CD)
软件配置管理(SCM)
商用现货(COTS)
用户验收测试UAT
层次式数据库和分布式数据库
专家系统
机器学习ML
神经网络

DevOps 模型

DevOps 教程

什么是 DevOps

DevOps 模型的三个要素是软件开发、质量保证和IT 运营。信息安全仅在DevSecOps模型中引入。

DevOps 是一种软件开发和运维的方法论和文化,旨在通过加强开发团队和运维团队之间的协作、自动化和持续交付,实现更快速、可靠和高质量的软件交付。DevOps 将开发(Development)和运维(Operations)两个环节融合在一起,通过自动化和协作来减少繁琐的手动操作和减少生产环境中的错误。

以下是 DevOps 模型的一些核心原则和实践:

  1. 协作: 开发团队和运维团队之间的紧密协作是 DevOps 的关键。团队之间需要共同负责软件的开发、测试、部署和运维,共同解决问题和优化流程。

  2. 自动化: 自动化是 DevOps 的核心。通过自动化部署、测试、监控等环节,可以减少人工干预,提高效率,降低错误率。

  3. 持续集成(CI): 开发人员将代码频繁地集成到共享代码库中,自动运行测试,以确保代码的质量。

  4. 持续交付(CD): 在持续交付中,开发完成的代码经过自动化测试和验证后,可以随时交付给生产环境,减少交付的风险和时间。

  5. 持续部署: 在持续部署中,通过自动化流程,开发完成的代码直接部署到生产环境,从而实现更快的交付速度。

  6. 监控和反馈: 对生产环境进行监控,及时捕获问题,并为团队提供实时的反馈,以便快速修复和改进。

  7. 基础设施即代码: 使用代码来管理基础设施,通过自动化来创建、配置和管理环境,提高一致性和可重复性。

  8. 容器化和微服务: 使用容器技术和微服务架构,将应用程序划分为小的可独立部署的组件,提高灵活性和可扩展性。

DevOps 的目标是缩短开发周期、加快交付速度、提高软件质量和可靠性,并促进开发和运维团队之间的协作和沟通。它强调团队文化的改变,注重自动化和持续改进,以实现更好的软件交付和运维效果。

瀑布模型

瀑布模型(Waterfall Model)是软件开发过程中的一种传统项目管理方法,它被用于描述软件开发的阶段性流程。瀑布模型最早由Winston W. Royce于1970年提出,被认为是软件开发方法的先驱之一。该模型的过程呈现出类似瀑布的阶梯形状,因此得名。

瀑布模型的主要特点是顺序性和阶段性,各个阶段依次进行,每个阶段的输出成为下一个阶段的输入。典型的瀑布模型包括以下阶段:

  1. 需求分析(Requirements Analysis): 在这个阶段,团队与客户合作,明确项目的需求和目标。定义软件的功能和性能要求,并编写需求文档。

  2. 系统设计(System Design): 根据需求文档,设计软件系统的整体结构、模块、组件等。这个阶段也包括数据库设计、用户界面设计等。

  3. 实现(Implementation): 在此阶段,根据系统设计,开始编码和实现软件的各个模块和组件。

  4. 测试(Testing): 在实现后,对软件进行测试以确保它满足需求,并发现和修复潜在的错误和缺陷。

  5. 集成(Integration): 将各个模块和组件整合到一个完整的系统中,并进行系统级别的测试。

  6. 部署(Deployment): 完成测试和集成后,将软件部署到生产环境中,使其可供最终用户使用。

  7. 维护(Maintenance): 在软件投入使用后,进行bug修复、更新、改进等维护工作,以确保软件持续运行并满足用户需求。

瀑布模型的优点是清晰的阶段划分,适用于较小规模、需求稳定的项目。然而,由于其顺序性和刚性结构,它可能难以应对需求变更和灵活性要求高的项目。在现代软件开发中,瀑布模型通常与其他敏捷方法相结合,以更好地适应快速变化的需求和市场环境。

螺旋模型

螺旋模型(Spiral Model)是一种软件开发过程模型,它结合了瀑布模型的阶段性和敏捷方法的迭代特点,用于管理复杂的软件项目。螺旋模型最早由Barry Boehm于1986年提出,旨在解决传统瀑布模型在应对风险和不确定性方面的不足。

螺旋模型将软件开发过程划分为一系列迭代的循环,每个循环被称为一个”螺旋”,并包含四个主要阶段:

  1. 计划(Planning): 在这个阶段,定义项目的目标、约束、风险以及可行性等。制定开发计划,确定开发的范围、资源和时间。

  2. 风险分析(Risk Analysis): 对项目中可能存在的风险进行分析和评估。确定风险的潜在影响以及如何应对和减轻风险。

  3. 工程实现(Engineering): 在这个阶段,根据风险分析的结果,进行软件的设计、编码、测试和集成工作。每个循环会产生一个增量的软件版本。

  4. 评估和计划(Evaluation and Planning): 在每个循环结束后,评估已经完成的软件版本,收集用户反馈,根据经验教训和用户需求调整项目计划。

螺旋模型的关键特点是强调风险管理和迭代开发。每个螺旋循环都通过评估、规划和调整来适应项目需求的变化和风险的演化。螺旋模型适用于复杂、大规模的项目,特别是在需求变化频繁、技术不确定性高或风险管理至关重要的情况下。通过不断迭代和反馈,螺旋模型可以帮助项目团队更好地控制项目进程,降低风险,并逐步满足用户需求。

敏捷开发

敏捷开发(Agile Development)是一种迭代、增量的软件开发方法,强调通过持续反馈和紧密合作来适应需求变化和快速交付高质量的软件。敏捷开发方法的核心理念是团队成员之间的合作、用户反馈、灵活性和可持续交付。

敏捷开发的主要原则包括:

  1. 个体和互动胜过过程和工具: 强调团队成员之间的交流和合作,鼓励面对面的沟通,以及根据团队成员的能力来进行任务分配。

  2. 工作的软件胜过详尽的文档: 注重实际的软件成果,而不是过多的文档和计划。开发出可工作的软件原型,使用户可以提供反馈。

  3. 客户合作胜过合同谈判: 强调与客户的紧密合作,及时获取用户需求和反馈,以便及时作出调整和改进。

  4. 响应变化胜过遵循计划: 接受需求变化的现实,适应变化并快速作出反应,以便适应项目的动态性。

敏捷开发方法通常包括一系列迭代周期(通常称为“迭代”或“冲刺”),每个迭代都会产生一个增量的软件版本。在每个迭代之前,团队会确定开发的任务和优先级,然后在迭代内完成任务并交付软件。每个迭代结束后,团队会进行评估和反馈,以便在下一次迭代中进行调整和改进。

敏捷开发方法有多种实现,其中包括Scrum、Kanban、Extreme Programming(XP)等。这些方法都强调团队合作、灵活性、用户反馈和持续交付,以便更好地满足不断变化的需求和市场环境。

能力成熟度模型

能力成熟度模型(Capability Maturity Model,简称CMM)是一个用于评估和改进组织软件开发和管理能力的框架。最早由美国卡内基梅隆大学(Carnegie Mellon University)的软件工程研究所开发,旨在帮助组织提高其软件开发过程的质量、效率和可靠性。

CMM以五个不同的成熟度级别(从1到5)来描述组织的软件开发过程。每个级别都表示一定程度的成熟度和能力,随着级别的提高,组织的软件开发过程变得更加规范、稳定和可预测。

这五个成熟度级别如下:

  1. 初始级别(Initial): 在初始级别,组织的软件开发过程通常是不稳定的、不可预测的,且缺乏标准化和规范。开发过程几乎完全依赖于个人技能,缺乏有效的管理和控制。

  2. 已管理级别(Managed): 在已管理级别,组织开始引入一定的项目管理和过程控制。软件开发过程得到了一些规范和文档化,项目进度和资源得到一定程度的监控和管理。

  3. 已定义级别(Defined): 在已定义级别,组织建立了一套标准的软件开发过程,并对项目执行进行了规范化。开发过程的关键活动和角色被明确定义,项目管理和控制得到进一步加强。

  4. 已量化级别(Quantitatively Managed): 在已量化级别,组织开始采用定量的方法来度量和管理软件开发过程。过程的绩效和质量指标得到了监控和量化,可以进行数据驱动的决策。

  5. 优化级别(Optimizing): 在优化级别,组织不断改进和优化其软件开发过程。通过反馈和学习,持续寻求改进的机会,以提高软件开发过程的效率和质量。

CMM早期主要关注软件开发过程,后来也发展出了其他领域的成熟度模型,如项目管理成熟度模型(Project Management Maturity Model,简称PMMM)等。这些模型都旨在帮助组织提高其能力和绩效,从而更好地实现项目目标和交付价值。

软件保障成熟度模型

软件保障成熟度模型(Software Assurance Maturity Model,简称SAMM)是一种用于评估和提高组织在软件开发和交付过程中的安全性保障能力的框架。SAMM旨在帮助组织建立和改进其软件安全实践,以减少软件漏洞和安全风险。

SAMM包含了多个不同的领域和实践,每个领域都有不同的成熟度级别,从而形成一个阶梯式的模型。通过评估组织在不同领域的成熟度,可以帮助组织了解其软件安全实践的强弱之处,并提供了具体的改进建议。

SAMM模型通常包含以下几个核心领域:

  1. 制定策略和度量(Strategy & Metrics): 确定组织的软件安全目标、策略和度量标准,以便有效管理和评估安全实践。

  2. 管理与组织(Governance & Organization): 建立安全的软件开发组织结构,包括分配安全角色和责任,以及制定安全政策和流程。

  3. 敏捷实践(Software Security Touchpoints): 在软件开发过程中嵌入安全实践,确保安全问题可以在早期阶段被发现和解决。

  4. 敏捷建设(Software Security Lifecycle): 建立全面的软件安全生命周期,覆盖需求、设计、开发、测试和发布等阶段。

  5. 验证与修复(Deployment Validation & Remediation): 验证软件在部署时的安全性,并及时修复潜在的安全问题。

  6. 教育与意识(Training & Awareness): 提供培训和教育,提高开发人员和相关人员的安全意识和技能。

  7. 合作与反馈(Collaboration & Feedback): 与安全团队、开发人员和其他相关方合作,促进信息共享和反馈。

SAMM模型帮助组织在不同的软件安全领域中逐步提高其成熟度,从而减少软件漏洞、降低安全风险,以及提升软件交付的质量和可靠性。

IDEAL模型

IDEAL模型是一个软件工程中的改进模型,用于指导软件开发团队在项目开发中不断优化和改进过程。IDEAL模型是CMMI(能力成熟度模型整合)的前身之一,它强调在整个软件开发周期内不断进行过程改进,从而提高项目交付的质量和效率。

IDEAL模型的每个字母代表一个阶段,分别是:

  1. I - Initiate(初始阶段): 在初始阶段,团队识别和定义项目的目标、范围、需求和风险。项目的基本计划和开发过程得以确定,同时制定过程改进的计划。

  2. D - Diagnose(诊断阶段): 在诊断阶段,团队对现有的软件开发过程进行评估和分析,找出其中的弱点和问题。这个阶段的目标是识别需要改进的领域和机会。

  3. E - Establish(建立阶段): 在建立阶段,团队根据诊断阶段的结果,制定和实施过程改进计划。新的过程和实践被引入并逐步建立,以提高开发过程的效率和质量。

  4. A - Act(执行阶段): 在执行阶段,团队执行过程改进计划,监控改进的实施情况,并采取必要的行动来解决问题和障碍。这个阶段强调实际执行和持续改进。

  5. L - Learn(学习阶段): 在学习阶段,团队回顾和评估过程改进的效果,总结经验教训,以便在未来的项目中应用和推广成功的实践。

IDEAL模型的主要思想是,软件开发是一个不断循环的过程,团队需要在项目的不同阶段持续地识别问题、制定改进计划、实施改进措施,并从中学习和进步。通过循环迭代,团队可以逐步提高其开发过程的成熟度和效能。

ODBC

ODBC代表”Open Database Connectivity”,是一种用于在计算机系统之间进行数据库连接和数据访问的标准接口。它允许不同的应用程序通过统一的接口来访问不同类型的数据库,无论是关系型数据库还是其他类型的数据存储。

ODBC的主要目标是提供一个统一的数据库访问层,使应用程序能够通过相同的方式连接和操作不同的数据库管理系统(DBMS),而不需要关心具体数据库的细节。ODBC通过定义一组函数来实现这一目标,这些函数允许应用程序执行数据库查询、插入、更新和删除等操作。

ODBC的工作原理如下:

  1. 驱动程序(Driver): ODBC提供了一个通用的API,而数据库供应商则提供特定的驱动程序,这些驱动程序负责实际连接到数据库和执行查询等操作。

  2. 数据源(Data Source): 数据源是数据库的物理位置和相关配置的定义。应用程序通过数据源名称来指定要连接的数据库。

  3. 连接管理器(Connection Manager): 连接管理器负责管理连接和维护连接池,它将应用程序与正确的驱动程序和数据源关联起来。

通过使用ODBC,开发人员可以编写与数据库无关的应用程序代码,从而简化了数据库连接和访问的过程,提高了应用程序的可移植性和灵活性。因此,ODBC在多种操作系统和开发环境中被广泛使用。

专家系统

专家系统是一种基于人工智能技术的计算机程序,旨在模拟人类专家在特定领域中的知识和经验,以便做出类似于人类专家的决策和推理。它是一种应用于特定领域的智能系统,通过使用预定义的规则、知识库和推理机制,来解决复杂的问题和提供决策支持。

专家系统通常由以下组件组成:

  1. 知识库(Knowledge Base): 知识库是专家系统中存储领域知识和经验的部分。它包含了专家知识、规则、事实和推理模式等信息,用于系统的推理和决策。

  2. 推理引擎(Inference Engine): 推理引擎是专家系统的核心组件,负责根据知识库中的规则和知识进行推理和逻辑推断。它能够根据用户的输入和问题,从知识库中提取相关知识并做出决策。

  3. 用户界面(User Interface): 用户界面是用户与专家系统进行交互的部分,使用户能够提出问题、获取建议或进行决策。用户界面可以是文字界面、图形界面等。

  4. 解释器(Explanation Facility): 解释器是用于解释专家系统决策和推理过程的组件,它可以向用户解释为什么系统做出了特定的决策,从而增加了系统的透明度和可理解性。

专家系统广泛应用于各种领域,如医疗诊断、金融分析、工程设计、法律咨询等,可以帮助人们在特定领域中做出高质量的决策和解决复杂问题。它的设计和开发需要领域专家的知识输入,并结合人工智能技术来实现智能决策和问题求解能力。

Scrum 方法

Scrum 是一种敏捷软件开发方法,旨在促进团队合作、灵活性和快速交付高质量的软件产品。Scrum 强调团队的自组织和迭代式开发,将项目分解为一系列小的时间框架(称为迭代或周期),每个时间框架都以一个可交付的软件增量结束。

以下是 Scrum 方法的一些关键概念和流程:

  1. 角色:

    • Scrum Master: 负责维护 Scrum 过程,促进团队合作,解决障碍和问题。
    • 产品负责人(Product Owner): 代表利益相关者,负责定义和优先排序产品需求,并确保团队开发的功能对业务有价值。
    • 开发团队: 负责实际的软件开发工作,自组织、跨功能,以迭代方式交付可工作的软件增量。
  2. 仪式(Ceremonies):

    • Sprint Planning: 每个迭代开始前的会议,团队和产品负责人确定要在迭代中完成的工作。
    • Daily Scrum(每日站会): 每天短暂的会议,团队分享进展、讨论问题和协调工作。
    • Sprint Review: 每个迭代结束时的会议,团队演示交付的增量,并与利益相关者讨论反馈。
    • Sprint Retrospective: 每个迭代结束时的会议,团队回顾过去的迭代,识别改进的机会。
  3. 工件(Artifacts):

    • Product Backlog(产品待办项清单): 包含所有产品需求的列表,由产品负责人管理和优先排序。
    • Sprint Backlog(迭代待办项清单): 包含在当前迭代中要完成的工作的列表,由团队管理。
    • Increment(增量): 在每个迭代结束时,团队交付的可工作的软件部分。
  4. 时间框架:

    • Sprint(迭代): 固定时间段,通常为 2-4 周,团队在其中进行软件开发并交付可工作的增量。

Scrum 的核心思想是在每个迭代内持续地进行开发、测试和交付,同时在每个迭代结束时获取反馈并调整。这种迭代和增量的方法使得团队能够更好地适应变化,高效地交付价值,并持续地改进其开发过程。

变更管理流程

失效关闭、失效打开、故障抑制、故障清除的区别

在系统工程和电子设备的领域中,失效关闭、失效打开、故障抑制和故障清除是一些重要的概念。它们描述了在设备或系统中出现故障时,不同元件或机制的状态和行为。以下是它们的区别:

  1. 失效关闭(Fail-Safe / Fail-Closed): 这是一种设计策略,当系统发生故障时,元件或系统会进入一种安全状态,通常是关闭状态,以防止可能的危险情况。例如,当电子设备发生故障时,失效关闭机制可能会导致设备自动关闭以防止过热或火灾。

  2. 失效打开(Fail-Open): 这是另一种设计策略,当系统发生故障时,元件或系统会进入一种状态,通常是打开状态,以确保不会影响到其他系统的运行。例如,某些电路保护装置可能在故障时打开以保护其他电子元件免受过电流的损害。

  3. 故障抑制(Fault Tolerant / Fault Suppress): 故障抑制是指系统或设备设计中采用了一些技术或机制,使其能够在部分故障或异常情况下继续正常工作,而不会导致整个系统的失效。这种设计可以提高系统的可靠性和稳定性。

  4. 故障清除(Fault Clearing): 故障清除是指在故障发生后,系统会自动或通过干预消除故障,并使系统恢复到正常工作状态。例如,当电网中出现短路时,保护装置可能会迅速切断故障部分,然后系统工作人员可能会进行修复,最终使电网恢复正常。

总之,失效关闭、失效打开、故障抑制和故障清除是在设计和维护电子设备和系统时考虑的不同策略和机制,以确保系统在故障情况下的安全和可靠性。

SAMM

软件保证成熟度模型(Software Assurance Maturity Model,简称SAMM)是一种用于评估和提升软件安全保证成熟度的框架和方法论。它旨在帮助组织建立和维护可靠的软件安全实践,从而降低软件开发和维护过程中的安全风险。

SAMM提供了一个综合性的指南,帮助组织识别并实施软件安全最佳实践,同时还支持组织在软件安全领域逐步提升成熟度。它将软件保证过程分为不同的领域和实践,为每个领域定义了不同的成熟度级别。组织可以通过自我评估或第三方评估来确定自己在每个领域的成熟度水平,并制定相应的改进计划。

SAMM的主要目标包括:

  1. 提供一个综合性的软件安全框架,帮助组织制定软件安全战略和计划。
  2. 评估和提升组织在不同软件安全领域的成熟度。
  3. 支持组织在软件开发生命周期的各个阶段实施安全最佳实践。
  4. 促进组织内外的合作,共同提升软件安全保证水平。

SAMM将软件保证成熟度划分为四个核心领域,每个领域又细分为不同的实践和活动。这四个核心领域分别是:

  1. 策略和度量(Strategy & Metrics)
  2. 设计和架构(Design & Architecture)
  3. 实施(Implementation)
  4. 验证(Verification)

通过遵循SAMM模型,组织可以逐步改进软件安全实践,提高软件的安全性和质量,降低潜在的风险和漏洞。

[10/20]练习题测试结果

正确率 10/20

  1. A 。DevOps 模型的三个要素是软件开发、质量保证和IT 运营。信息安全仅在DevSecOps模型中引入。

Vincent 是一名软件开发人员,正在处理积压的变更任务。他不确定哪些任务应该具有the most高优先级。变更管理流程的哪一部分可以帮助他确定任务的优先级?
A. 发布控制
B. 配置控制
C. 请求控制
D. 变更审计

  1. C 。请求控制为用户提供了请求变更的框架,为开发人员提供了对这些请求进行优先级排序的机会。
    配置控制确保根据变更和配置管理策略对软件版本进行更改。
    请求控制为用户请求变更提供了一个有组织的框架。
    变更审计用于确保生产环境与变更记录一致。

  1. C 。在失效关闭状态下,系统将保持高安全级别,直到管理员介入。在失效打开状态下,系统默认为低安全级别,禁用控制,直到故障得到解决。故障抑制旨在减小故障的影响。故障清除不是有效的方法。

以下哪一种键用于在数据库表之间强制执行参照完整性约束?
A. 候选键
B. 主键
C. 外键
D. 备用键

  1. C 。外键用于在参与关系的表之间强制执行参照完整性约束。候选键是可能用作主键的字段集,主键用于唯一标识数据库记录。备用键是未选择为主键的候选键。

什么样的数据库技术可防止未授权用户因看不到通常可访问的信息而推导出机密
信息?
A. 推理
B. 操控
C. 多实例化
D. 聚合
9. C 。多实例化允许将看起来具有相同主键值的多个记录插入具有不同分类级别的数据库中。
聚合攻击涉及使用专门的数据库函数来组合大量数据库记录,以显示可能比单个记录中的信息更敏感的信息。
推理攻击使用演绎推理从现有数据得出结论。操控是对数据库中的
数据进行授权或未经授权的更改。


以下哪一项不是敏捷开发的原则?
A. 持续不断地提早交付以使客户满意
B. 业务人员和开发者相互合作
C. 坚持不懈地追求技术卓越
D. 在其他需求上优先考虑安全

以下哪一项不是敏捷开发的原则?
A. 持续不断地提早交付以使客户满意
B. 业务人员和开发者相互合作
C. 坚持不懈地追求技术卓越
D. 在其他需求上优先考虑安全
10.D 。在敏捷开发中,最高优先级是通过持续地提早交付有价值的软件来使客户满意。
它不是将安全性置于其他需求之上。敏捷原则还包括:通过持续地提早交付来满足客户,业务人员和开发人员一起工作,以及持续关注技术的卓越性。


  1. C 。专家系统使用由一系列if/then 语句组成的知识库来根据人类专家的先前经验做出决策。

  1. D 。在SW-CMM 的管理级(第4 阶段)中,组织使用定量方法来获得对开发过程的详细了解。

  1. B 。ODBC 可充当应用程序和后端DBMS 之间的代理。软件开发生命周期(SDLC)是包含所有必要活动的软件开发过程的模型。支付卡行业数据安全标准(PCIDSS)是信用卡处理的监管框架。抽象是一种软件开发概念,它将软件对象的常见行为概括为更抽象的类。

  1. B 。表的基数是指表中的行数,而表的度数是列的数目。在本例中,该表有3 列(姓名、电话号码和客户ID) ,因此其度数为3 。

[14/20]CISSP官方学习手册(第9版)第20章练习题

  1. A
  2. B
  3. D 正确答案C
  4. C
  5. B
  6. A 正确答案B
  7. B 正确答案C

Richard 认为,一个数据库用户滥用其特权进行查询,并结合大量记录中的数据来获取公司整体业务趋势的信息。该数据库用户利用的过程是什么?
A. 推理
B. 污染
C. 多实例化
D. 聚合
8. B 正确答案D


  1. C
  2. D
  3. C
  4. D
  5. B
  6. A
  7. A

当一个较高分类级别的数据与一个较低分类的级别数据混合时,数据库存在以下
哪类安全风险?
A. 聚合
B. 推理
C. 污染
D. 多实例化

  1. B 正确答案C

  1. D
  2. C

什么事务管理原则确保两个事务在操作相同的数据时不会相互干扰?
A. 原子性
B. 一致性
C. 隔离性
D. 持久性

  1. A 正确答案C

  1. B

page818/912