软件开发模型(也称为软件过程模型)是软件开发全过程、活动和任务的结构框架。选择合适的模型对于项目的成功至关重要。
核心知识点的系统梳理
一、传统过程模型(预测型)
这类模型强调计划性和文档驱动,适用于需求明确且稳定的项目。
1. 瀑布模型
* 核心定义 :最经典的线性顺序模型。将软件生命周期划分为制定计划、需求分析、软件设计、程序编码、软件测试和运行维护等阶段,且顺序执行,不可逆转。
* 关键特征 :
* 文档驱动 :每个阶段结束前必须完成规定的文档,并通过评审。
* 推迟实现 :直到编码阶段才开始构建软件实体。
* 质量保证 :通过阶段评审来保证质量。
* 适用场景 :需求明确、技术成熟、工期较短的中小型项目(如简单的企业官网、嵌入式系统)。
* 缺点:缺乏灵活性,难以适应需求变更;用户直到最后才能看到产品,风险较高。
2. V模型
* 核心定义 :瀑布模型的变种,强调测试与开发的对应关系 。
* 关键特征 :
* 左右对称 :左边是开发阶段(需求→设计→编码),右边是测试阶段(单元测试→集成测试→系统测试→验收测试)。
* 测试早期介入 :在需求分析阶段就开始设计验收测试,在设计阶段设计系统测试。
* 适用场景:对质量、可靠性要求极高的系统(如医疗设备、航空航天、汽车电子)。
3. 增量模型
* 核心定义 :将软件产品作为一系列的增量构件来设计、编码、集成和测试。
* 关键特征 :
* 分批交付 :第一个增量往往是核心产品,后续增量补充辅助功能。
* 并行开发 :可以在前一个增量交付后,并行开发下一个增量。
* 适用场景:需要快速交付核心功能,且人员配置不足以支持一次性完成所有功能的项目。
二、演化与风险驱动模型
这类模型承认需求的不确定性,通过迭代来逐步完善系统。
1. 原型模型
* 核心定义 :快速构建一个简易模型(原型)给用户试用,根据反馈修改,直到满足需求。
* 分类 :
* 抛弃型 :原型仅用于明确需求,开发完成后丢弃。
* 演化型 :原型逐步演变为最终产品。
* 适用场景:需求模糊、用户无法准确描述需求的项目。
2. 螺旋模型
* 核心定义 :结合了瀑布模型的系统性和原型模型的迭代性,并引入了风险分析 。
* 关键特征 :
* 四个象限 :制定计划 → 风险分析 → 实施工程(开发/测试) → 客户评估。
* 风险驱动 :每一圈螺旋都要进行风险评估,若风险过大则停止项目。
* 适用场景 :大规模、高风险、内部开发的复杂系统(如国防系统、金融核心系统)。
* 注意:螺旋模型成本较高,且需要丰富的风险评估经验。
3. 喷泉模型
* 核心定义 :面向对象的开发模型。
* 关键特征 :
* 无间隙 :各阶段(分析、设计、编码)之间没有明显的边界,可以重叠。
* 迭代 :支持反复回溯和演进。
* 适用场景:面向对象的软件开发。
三、敏捷开发模型
敏捷是一种轻量级、以人为本的迭代开发理念,旨在快速响应变化。
1. 敏捷宣言(核心价值观)
* 个体和互动 > 流程和工具
* 工作的软件 > 详尽的文档
* 客户合作 > 合同谈判
* 响应变化 > 遵循计划
2. 极限编程
* 核心实践 :
* 测试驱动开发 :先写测试用例,再写代码。
* 结对编程 :两人共用一台电脑,一人编码一人审查。
* 持续集成 :频繁地将代码集成到主干。
* 重构 :不断优化代码结构而不改变功能。
* 适用场景:需求变化极快、小型团队(<10人)、高风险项目。
3. Scrum框架
* 核心角色 :
* 产品负责人 :决定做什么(管理需求列表)。
* Scrum Master :确保流程顺畅,移除障碍。
* 开发团队 :自组织,负责交付。
* 核心工件 :产品待办列表、冲刺待办列表、增量(可交付的软件)。
* 核心活动:冲刺(通常2-4周)、每日站会、评审会、回顾会。
️ 四、统一过程模型
RUP
* 核心特征 :用例驱动、以架构为中心、迭代增量。
* 四个阶段 :
-
初始阶段 :确立业务案例和范围。
-
细化阶段 :建立架构基线,消除高风险元素。
-
构建阶段 :开发所有剩余功能和构件。
-
移交阶段 :部署、培训、用户反馈。
* 适用场景:大型、复杂、需求多变但需要严格管控的企业级项目。
五、软件能力成熟度模型集成
CMMI用于评估和改进组织的软件开发过程能力。
五个成熟度等级(从低到高)
-
初始级 :过程混乱,成功依赖个人英雄主义,不可预测。
-
已管理级 :项目级管理,有基本的计划和跟踪,经验可重复。
-
已定义级 :组织级标准过程,过程已文档化、标准化。
-
量化管理级 :过程可度量、可预测,使用统计技术控制质量。
-
优化级:持续改进,主动预防缺陷,引入新技术。
记忆口诀:一乱、二管、三定、四量、五优。
配套习题
选择题
先导知识梳理
一、安全开发模型与生命周期
- 微软SDL(安全开发生命周期):体系完善、实施严格,适合大型机构。核心阶段包括:安全培训(第1阶段)、安全需求分析(第2阶段)、安全设计(第3阶段,含威胁建模和攻击面评析)、安全实施(第4阶段,含弃用不安全函数、创建质量门/缺陷等级)、安全验证(第5阶段)等。
- CLASP(轻量级安全开发过程):由OWASP推出,是一种轻量级、应用导向的过程,专注于处理软件脆弱性。
- SAMM(软件保证成熟度模型):开放框架,帮助企业衡量安全保障计划、制定策略并渐进式改进。
- BSI(软件安全框架):包含风险管理、接触点和安全知识三部分。
- 安全左移原则:越早发现漏洞(如设计阶段),修复成本越低。测试阶段发现漏洞的成本远高于设计阶段。
二、访问控制与安全策略
- 自主访问控制:资源所有者针对特定用户指定访问权限(如通过访问控制列表),符合"针对每个用户指明可访问资源"的描述。
- 强制访问控制:基于安全标签和策略,用户无法自主更改权限。
- 基于角色的访问控制:权限与角色关联,用户通过分配角色获得权限。
- 默认安全原则:软件默认配置应处于安全状态。
- 部署安全:包括提供安全配置工具和指导文档,帮助用户安全部署和使用软件。
三、安全威胁与漏洞
- ICMP Flood攻击:入站ICMP流量异常升高可能是此类攻击前兆,可通过防火墙阻止ICMP流量缓解。
- SQL注入:典型代码层安全漏洞,属于软件开发安全问题。
- FTP协议风险:明文传输数据(含密码),易被嗅探;支持暴力破解;服务端软件可能存在漏洞。
- 设计缺陷:如仅凭IP地址实现快捷登录,属于不安全设计,导致攻击面增大。
- 完整性破坏:数据传输中丢失或被篡改,属于完整性问题。
四、软件生命周期与开发模型
- 软件生命周期阶段:包括需求分析、设计、编码、测试、部署、维护等,销售不属于技术生命周期阶段。
- 喷泉模型:以对象为驱动,面向对象开发模型,阶段间无间隙且支持迭代。
- 螺旋模型:在瀑布模型基础上引入严格的风险识别、分析和控制,每轮螺旋前进行风险评估。
- 瀑布模型:线性顺序,文档驱动,阶段不可逆。
- 增量模型:分批交付可运行产品子集,适合需求逐步明确的项目。
- 极限编程:敏捷开发方法,强调测试驱动、结对编程、持续集成。
五、审计与独立性
- IS审计师独立性:直接参与系统设计和开发会导致独立性减弱,因需避免"自己审计自己的工作"。
六、安全属性与目标
- 保密性:防止信息泄露。
- 完整性:确保数据未被篡改或丢失。
- 可用性:确保授权用户可访问资源。
- 不可否认性:防止行为主体否认其行为。
试题
-
题目:某网站管理员小邓在流量监测中发现近期网站的入站ICMP流量上升了250%,尽管网站没有发现任何的性能下降或其他问题,但为了安全起见,他仍然向主管领导提出了应对措施,作为主管负责人,请选择有效的针对此问题的应对措施:( )
- 选项 :
- A. 在防火墙上设置策略,阻止所有的ICMP流量进入(关掉PING)
- B. 删除服务器上的ping.exe程序
- C. 增加带宽以应对可能的拒绝服务攻击
- D. 增加网站服务器以应对即将来临的拒绝服务攻击
- 正确答案:A
- 选项 :
解析:ICMP流量异常升高可能是ICMP Flood攻击的前兆。最直接有效的防御措施是在边界防火墙上过滤ICMP协议,阻止外部对内部网络的探测和流量攻击。
-
题目:某单位系统管理员对组织内核心资源的访问制定访问策略,针对每个用户指明能够访问的资源,对于不在指定资源列表中的对象不允许访问,该访问控制策略属于以下哪一种( )
- 选项 :
- A. 强制访问控制
- B. 基于角色的访问控制
- C. 自主访问控制
- D. 基于任务的访问控制
- 正确答案:C
- 解析 :自主访问控制允许资源的所有者(或管理员)针对特定主体(用户)指定访问权限,通常通过访问控制列表来实现,符合题目描述。
- 选项 :
-
题目:某公司在互联网区域新建了一个WEB网站,为了保护该网站安全性,尤其是不能让攻击者修改主页内容,该公司应当购买并部署下面哪个设备( )
- 选项 :
- A. 负载均衡设备
- B. 网页防篡改系统
- C. 网络防病毒系统
- D. 网络审计系统
- 正确答案:B
- 解析 :网页防篡改系统专门用于监控Web文件系统的变化,一旦发现文件被非法修改,会立即自动恢复,是防止主页被篡改的最直接手段。
- 选项 :
-
题目:某政府机构委托开发商开发了一个OA系统,其中某一个公文分发,公文通知等为WORD文档,厂商在进行系统设计时使用了FTP来对公文进行分发,以下说法不正确的是( )
- 选项 :
- A. FTP协议明文传输数据,包括用户名和密码,攻击者可能通过会话过程嗅探获得FTP密码,从而威胁OA系统
- B. FTP协议需要进行验证才能访问,攻击者可以利用FTP进行口令的暴力破解
- C. FTP协议已经是不太使用的协议,可能与新版本的浏览器存在兼容性问题
- D. FTP应用需要安装服务器端软件,软件存在漏洞可能会影响到OA系统的安全
- 正确答案:C
- 解析 :FTP虽然存在安全隐患,但并未"不太使用",且浏览器兼容性并非主要的安全问题描述。A、B、D均准确描述了FTP的安全风险。
- 选项 :
-
题目:由于频繁出现软件运行时被黑客远程攻击获取数据的现象,某软件公司准备加强软件安全开发管理,在下面做法中,对于解决问题没有直接帮助的是( )。
- 选项 :
- A. 要求所有的开发人员参加软件安全开发只是培训
- B. 要求统一采用Windows8系统进行开发,不能采用之前的Windows版本
- C. 要求增加软件源代码审核环境,加强对软件的安全性审查
- D. 要求邀请专业队伍进行第三方安全性测试,尽量从多角度发现软件安全问题
- 正确答案:B
- 解析 :开发人员的操作系统版本(Windows 8)与开发出的软件是否存在安全漏洞没有直接关系。安全培训、代码审计和渗透测试才是软件安全开发的核心环节。
- 选项 :
-
题目:某公司开发一个游戏网站,但是由于网站软件存在漏洞,在网络中传输大数据包时总是会丢失一些数据,如一次性传输大于2000个字节数据时,总是会有3到5个字节不能传送到对方,关于此案例,可以推断的是( )
- 选项 :
- A. 该网站软件存在保密性方面安全问题
- B. 该网站软件存在完整性方面安全问题
- C. 该网站软件存在可用性方面安全问题
- D. 该网站软件存在不可否认性方面安全问题
- 正确答案:B
- 解析 :数据在传输过程中发生丢失、被篡改或破坏,属于破坏了信息的完整性。
- 选项 :
-
题目:某网站为了更好向用户提供服务,在新版本设计时提供了用户快捷登录功能,用户如果使用上次的IP地址进行访问,就可以无需验证直接登录,该功能推出后,导致大量用户账号被盗用,关于以上问题的说法正确的是( )
- 选项 :
- A. 网站问题是由于开发人员不熟悉安全编码,编写了不安全的代码,导致网站攻击面增大,产生此安全问题
- B. 网站问题是由于用户缺乏安全意识,使用了不安全的功能,导致网站攻击面增大,产生此安全问题
- C. 网站问题是由于使用便利性提高,带来网站用户数增加,导致网站攻击面增大,产生此安全问题
- D. 网站问题是由于设计人员不了解安全设计关键要素,设计了不安全的功能,导致网站攻击面增大,产生此安全问题
- 正确答案:D
- 解析 :这是一个典型的设计缺陷。仅凭IP地址作为身份验证依据是不安全的(IP易伪造或共用),属于设计阶段未遵循安全设计原则。
- 选项 :
-
题目:以下哪一项不是软件生命周期中的阶段( )。
- 选项 :
- A. 设计阶段
- B. 分析阶段
- C. 维护阶段
- D. 销售阶段
- 正确答案:D
- 解析 :软件生命周期通常包括需求分析、设计、编码、测试、部署和维护等阶段,销售属于商业活动,不属于技术开发生命周期。
- 选项 :
-
题目:下面哪项属于软件开发安全方面的问题( )
- 选项 :
- A. 软件部署时所需选用服务器性能不高,导致软件执行效率低
- B. 应用软件未考虑多线程技术,在对用户服务时按序排队提供服务
- C. 应用软件存在SQL注入漏洞,若被黑客利用能窃取数据库所用数据
- D. 软件受许可证(License)限制,不能在多台电脑上安装
- 正确答案:C
- 解析 :SQL注入是典型的代码层面的安全漏洞。A是性能问题,B是架构/性能问题,D是版权/授权问题。
- 选项 :
-
题目:IS(信息系统)审计师参与应用系统开发,他们从事以下哪项可以导致独立性的减弱( )
- 选项 :
- A. 对系统开发进行了复核
- B. 对控制和系统的其他改进提出了建议
- C. 对完成后的系统进行了独立评价
- D. 积极参与了系统的设计和开发
- 正确答案:D
- 解析 :审计师的角色是监督和评价。如果直接参与系统的设计和开发,就变成了"自己审计自己的工作",从而丧失独立性。
- 选项 :
-
题目:微软SDL将软件开发生命周期分为七个阶段,并列出了十七项重要的安全活动,其中"弃用不安全的函数"活动属于( )。
- 选项 :
- A. 需求阶段
- B. 设计阶段
- C. 实施阶段
- D. 验证阶段
- 正确答案:C
- 解析 :弃用不安全函数(如
strcpy、gets等)是在编写代码(实施/开发)阶段必须遵守的编码规范和安全活动。
- 选项 :
-
题目:关于软件安全开发生命周期(SDL),下面说法错误的是( )。
- 选项 :
- A. 在软件开发的各个周期都要考虑安全因素
- B. 软件安全开发生命周期要综合采用技术、管理和工程等手段
- C. 测试阶段是发现并改正软件安全漏洞的最佳环节,过早或过晚检测修改漏洞都将增大软件开发成本
- D. 在设计阶段就尽可能发现并改正安全隐患,将极大减少整个软件开发成本
- 正确答案:C
- 解析 :根据"安全左移"原则,越早发现漏洞(如需求或设计阶段),修复成本越低。测试阶段发现漏洞的修复成本远高于设计阶段。
- 选项 :
-
题目:软件安全策略中,要求软件应该随附工具和指导以帮助最终用户或管理员安全地使用它,属于( )
- 选项 :
- A. 设计安全
- B. 默认安全
- C. 部署安全
- D. 通信安全
- 正确答案:C
- 解析 :提供安全配置工具和文档指导,是为了确保软件在发布后的部署和运行环境中是安全的,属于部署安全的一部分。
- 选项 :
-
题目:在安全开发模型中,用于构建安全软件的轻量级过程,应用该方法可以较好地处理那些可能导致安全服务出现漏洞的软件脆弱性。这种模型是( )
- 选项 :
- A. SDL
- B. BSI
- C. CLASP
- D. SAMM
- 正确答案:C
- 解析 :CLASP(Comprehensive, Lightweight Application Security Process)是由OWASP推出的轻量级安全开发过程。
- 选项 :
-
题目:在安全开发模型中,为软件安全开发提供了一个开放的框架,软件企业可参考它来衡量其软件安全保障计划,制定软件开发安全策略,创建明确定义和可衡量的目标,并循序渐进第改善软件开发过程。这种模型是( )
- 选项 :
- A. SDL
- B. BSI
- C. CLASP
- D. SAMM
- 正确答案:D
- 解析 :SAMM(Software Assurance Maturity Model)是一个开放框架,用于帮助企业评估和改进其软件安全实践。
- 选项 :
-
题目:在安全开发模型中,体系较为完善,实施要求严格,适合于大型机构使用。这种模型是( )
- 选项 :
- A. SDL系列
- B. BSI系列
- C. CLASP
- D. SAMM
- 正确答案:A
- 解析 :微软的SDL(Security Development Lifecycle)体系非常完善且严格,通常被大型机构作为标准参考。
- 选项 :
-
题目:在SDL模型中,实施创建质量门/缺陷(BUG)等级的安全活动,属于( )
- 选项 :
- A. 第1阶段 安全培训
- B. 第2阶段 安全需求分析
- C. 第3阶段 安全设计
- D. 第4阶段 安全实施
- 正确答案:D
- 解析 :在实施(编码)阶段,需要建立代码质量门禁,设定Bug等级标准(如必须修复所有高危漏洞才能进入下一阶段)。
- 选项 :
-
题目:在SDL模型中,减少攻击面的安全活动,属于( )
- 选项 :
- A. 第1阶段 安全培训
- B. 第2阶段 安全需求分析
- C. 第3阶段 安全设计
- D. 第4阶段 安全实施
- 正确答案:C
- 解析 :减少攻击面(如关闭不必要的端口、服务、功能)是在系统架构和详细设计阶段确定的策略。
- 选项 :
-
题目:在SDL模型中,威胁模型和攻击面评析的安全活动,属于( )
- 选项 :
- A. 第2阶段 安全需求分析
- B. 第3阶段 安全设计
- C. 第4阶段 安全实施
- D. 第5阶段 安全验证
- 正确答案:B
- 解析 :威胁建模和攻击面分析是设计阶段的核心活动,用于在编码前识别潜在风险。
- 选项 :
-
题目:以用户需求为动力,以对象为驱动的软件开发模型是( )
- 选项 :
- A. 增量模型
- B. 螺旋模型
- C. 喷泉模型
- D. 极限编程
- 正确答案:C
- 解析 :喷泉模型是典型的面向对象开发模型,体现了迭代和无间隙的特点。
- 选项 :
-
题目:在瀑布模型的每一个开发阶段前引入非常严格的风险识别、风险分析和风险控制的软件开发模型是( )
- 选项 :
- A. 快速原型模型
- B. 增量模型
- C. 螺旋模型
- D. Rational统一过程
- 正确答案:C
- 解析 :螺旋模型的最大特点就是引入了风险分析,在每一轮螺旋开始前都要进行风险评估。
- 选项 :
填空题
先导知识梳理
软件生命周期与过程基础
- 生命周期三时期 :软件生命周期在宏观上划分为定义、开发和维护三个时期。其中定义时期包含问题定义、可行性研究和需求分析;开发时期包含设计与编码测试;维护时期则贯穿软件交付后的全过程。
- 软件过程定义 :为了获得高质量软件所需要完成的一系列任务的框架,以及规定完成各项任务的工作步骤,被称为软件过程(或软件开发模型)。它是软件工程的核心骨架。
微软安全开发生命周期与SD3+C原则
- SDL阶段划分 :微软SDL将软件开发生命周期分为七个阶段。其中,"弃用不安全的函数"(如
strcpy等)属于第4阶段 安全实施,这是编码阶段的关键安全活动。- SD3+C原则 :这是微软SDL实施的基本原则,具体指:
- 安全设计:从架构层面考虑安全。
- 安全配置:默认安装和配置应当是安全的。
- 安全部署:确保发布和部署过程的安全。
- 沟通:保持与用户、安全社区的信息透明。
主流安全开发模型体系
- 四大代表模型 :业界最具代表性的四类安全开发模型包括微软的SDL、BSI(软件安全框架)、NIST的安全开发生命周期模型以及CLASP。
- BSI三支柱 :BSI模型认为软件安全由三根支柱支撑,分别是风险管理(战略层面)、软件安全接触点(战术/工程层面)和安全知识(经验与培训)。
- SAMM核心职能 :在SAMM(软件保证成熟度模型)中,面向安全保证的四个核心业务职能是治理、构造、验证和部署。治理职能主要关注管理层面的策略与合规。
- CLASP视图与实践 :
- 实践活动 :包括建立安全意识、安全需求获取、实施安全开发实践(如代码审查)和安全评估。
- 五大视图 :CLASP通过五个视图来组织过程,分别是基于活动的视图、基于角色的视图、活动评估视图、活动实施视图和漏洞视图。
NIST模型与控制门
- 控制门概念 :NIST的软件安全开发生命周期模型明确提出了软件安全保证和软件开发控制门的概念。控制门用于在开发的关键节点进行检查,确保满足安全要求后方可进入下一阶段。
试题
-
(填空题, 2分)
- 题目 :微软SDL将软件开发生命周期分为七个阶段,并列出了十七项重要的安全活动,其中"弃用不安全的函数"活动属于 第4阶段 安全实施 。
- 解析 :在微软SDL模型中,"弃用不安全的函数"(如
strcpy、sprintf等)属于编码规范的一部分,是在编写代码的"实施"阶段必须执行的安全活动。
-
(填空题, 2分)
- 题目 :软件生命周期由 定义 、开发和维护3个时期组成。
- 解析:软件生命周期通常被划分为三个大时期:定义时期(包括问题定义、可行性研究、需求分析)、开发时期(包括概要设计、详细设计、编码、测试)和维护时期(运行维护)。
-
(填空题, 2分)
- 题目 :为了获得高质量软件所需要完成的一系列任务的框架,同时规定了完成各项任务的工作步骤,称为 软件过程 (或 软件开发模型 )。
- 解析:软件过程(Software Process)是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。在考试语境中,通常指软件过程或软件开发模型。
-
(填空题, 2分)
- 题目 :最具代表性的4类安全开发模型是: 微软的SDL 、BSI、美国国家标准与技术研究院的安全开发生命周期模型、CLASP。
- 解析:业界公认的四大主流安全开发模型/框架通常指:微软的安全开发生命周期、BSI(软件安全框架)、NIST的安全开发生命周期以及OWASP的CLASP。
-
(填空题, 2分)
- 题目 :BSI认为软件安全有3根支柱: 风险管理 、软件安全接触点和安全知识。
- 解析:BSI(软件安全框架)由Gary McGraw提出,其核心思想由三根支柱支撑:风险管理(战略性方法)、软件安全接触点(战术性工程方法)和安全知识(经验与培训)。
-
(填空题, 2分)
- 题目 :SDL模型实施的基本原则是SD3+C,它们是 安全设计 、安全配置、安全部署和沟通。
- 解析:SD3+C是微软提出的安全原则,具体指:Secure by Design(安全设计)、Secure by Default(安全配置/默认安全)、Secure in Deployment(安全部署)和 Communications(沟通)。
-
(填空题, 2分)
- 题目 :在SAMM模型中,面向安全保证的4个核心业务职能是 治理 、构造、验证和部署。
- 解析:在SAMM(软件保证成熟度模型)v1版本中,四个核心业务职能是:治理、构造、验证和部署。(注:SAMM v2已更新为5个职能,但根据题目语境及经典教材,此处填"治理")。
-
(填空题, 2分)
- 题目 :CLASP安全实践活动包括: 建立安全意识 、安全需求获取、实施安全开发实践和应该安全评估。
- 解析:CLASP(轻量级应用安全过程)的活动通常包括:建立安全意识(Institute Awareness)、定义安全需求、实施安全实践(如代码审查、架构分析)以及进行安全评估。
-
(填空题, 2分)
- 题目 :CLASP对于软件安全开发实践的过程可以分为5个视图: 基于活动的视图 、基于角色的视图、活动评估视图、活动实施视图和漏洞视图。
- 解析:CLASP通过五个视图来组织其过程:基于活动的视图(Activity-based)、基于角色的视图(Role-based)、活动评估视图(Activity Assessment)、活动实施视图(Activity Implementation)和漏洞视图(Vulnerability)。
-
(填空题, 2分)
- 题目 :NIST的软件安全开发生命周期模型明确提出了 软件安全保证 和软件开发控制门的概念。
- 解析:NIST的模型(通常指SP 800-64或相关SSDF早期理论)强调在软件开发的各个阶段设置"控制门"(Control Gates),以确保软件安全保证目标的达成。
简答题
先导知识梳理
软件生命周期与过程基础
- 软件生命周期定义:指软件产品从概念产生、开发、使用到最终退役的全过程。它不仅仅包含写代码的时间,而是涵盖了从"摇篮"到"坟墓"的整个时期。
- 生命周期三时期:宏观上可划分为定义时期(问题定义、可行性研究、需求分析)、开发时期(设计、编码、测试)和维护时期(运行维护)。
- 软件过程:为了获得高质量软件所需要完成的一系列任务的框架,规定了完成任务的工作步骤、方法和准则。
- 软件开发模型:软件过程的具体化或抽象表示,也称为软件生命周期模型。它是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
微软SDL与SD3+C原则
- SDL阶段划分:微软SDL将软件开发生命周期分为七个阶段。其中,"弃用不安全的函数"属于第4阶段安全实施,这是编码阶段的关键安全活动。
- SD3+C原则 :这是微软SDL实施的核心原则,具体包括:
- 安全设计:从架构层面考虑安全,保护软件及信息以抵御攻击。
- 安全配置:默认安装和配置应当是安全的,如默认关闭高风险功能。
- 安全部署:提供文档和工具,帮助用户或管理员安全地部署和使用软件。
- 沟通:与用户及安全社区保持信息透明,及时响应漏洞并发布补丁。
主流安全开发模型体系
- 四大代表模型:业界最具代表性的四类安全开发模型包括微软的SDL、BSI(软件安全框架)、NIST的安全开发生命周期模型以及CLASP。
- BSI三支柱:BSI模型认为软件安全由三根支柱支撑,分别是风险管理(战略层面)、软件安全接触点(战术或工程层面)和安全知识(经验与培训)。
- SAMM核心职能:在SAMM(软件保证成熟度模型)中,面向安全保证的四个核心业务职能是治理、构造、验证和部署。
- CLASP视图与实践:CLASP通过五个视图来组织其过程,分别是基于活动的视图、基于角色的视图、活动评估视图、活动实施视图和漏洞视图。其实践活动包括建立安全意识、安全需求获取、实施安全开发实践和安全评估。
- NIST控制门:NIST的模型明确提出了软件安全保证和软件开发控制门的概念,用于在开发的关键节点进行检查,确保满足安全要求后方可进入下一阶段。
典型软件开发模型
- 瀑布模型:线性、顺序执行,文档驱动,阶段不可逆。
- 原型模型:快速构建原型以明确需求,分为抛弃型和演化型。
- 增量模型:分批交付功能,逐步完善系统,适合需求逐步明确的项目。
- 螺旋模型:结合瀑布和原型特点,引入风险分析,适合高风险项目。
- 喷泉模型:面向对象的迭代模型,阶段间无间隙,以对象为驱动。
- 敏捷开发模型:如Scrum、极限编程,强调迭代、以人为本和快速响应变化。
- Rational统一过程:用例驱动、以架构为中心,分为初始、细化、构建和移交四个阶段。
敏捷SDL与经典SDL的区别
- 开发模型不同:经典SDL通常基于瀑布模型,具有明确定义的设计、实现、验证和发布阶段;而敏捷SDL采用无阶段的迭代开发模型(如Scrum),以适应快速更新和发布。
- 达标要求不同:经典SDL要求严格,每个阶段必须完成规定的安全活动;而敏捷SDL允许根据迭代目标灵活调整安全活动的深度,并不是每个发布版本都需要达到所有的安全要求。
试题
32.
题目:什么是软件的生命周期?软件生命周期通常包括哪几个阶段?
答案 :
软件生命周期是指软件产品从概念产生 开始,经过开发、使用和维护,直到最终退役(停止使用)的全过程。
通常包括以下六个核心阶段:
- 可行性研究阶段:评估技术、经济和操作可行性。
- 需求分析阶段:收集并明确用户需求和功能指标。
- 设计阶段:进行系统架构、模块和接口设计。
- 编码(实现)阶段:编写代码实现功能。
- 测试阶段:发现并修正软件缺陷(单元测试、集成测试等)。
- 维护阶段:软件上线后的Bug修复、优化和版本迭代。
解析 :
软件生命周期是软件工程的基础概念。理解这一概念的关键在于"全过程",即它不仅仅指写代码的时间,而是涵盖了从"摇篮"(想法)到"坟墓"(废弃)的整个时期。不同教材对阶段的划分可能略有差异(有的将可行性研究归入需求,有的将部署单独列出),但上述六个阶段是最标准、最通用的划分方式。
33.
题目:什么是软件过程?什么是软件开发(过程)模型?
答案:
- 软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤、方法和准则。
- 软件开发模型:是软件过程的抽象表示,也称为软件生命周期模型。它是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
解析 :
这两个概念紧密相关。"软件过程"更侧重于具体的任务、活动和步骤的集合(即"怎么做");而"软件开发模型"则是这些过程的宏观框架或模式(即"用什么模式来做"),例如瀑布模型、敏捷模型等。模型是过程的具体体现形式。
34.
题目:敏捷SDL和经典SDL的主要区别是什么?
答案 :
主要区别在于对开发流程的适应性和要求的严格程度:
- 开发模型不同 :经典SDL通常基于瀑布模型 ,具有明确定义的设计、实现、验证和发布阶段;而敏捷SDL采用无阶段的迭代开发模型(如Scrum),以适应快速更新和发布。
- 达标要求不同:经典SDL要求严格,每个阶段必须完成规定的安全活动;而敏捷SDL中,并不是每个发布版本(或每次"冲刺")都需要达到所有的安全要求,它允许根据迭代目标灵活调整安全活动的深度。
解析 :
这道题考察的是安全开发流程如何适应现代敏捷开发。经典SDL(如微软早期的SDL)非常严谨但流程重,适合长周期项目;敏捷SDL则是为了应对Web应用等短周期(如2-3周一个版本)开发需求而进行的"瘦身"和改良,强调在不破坏敏捷节奏的前提下融入安全。
35.
题目:典型软件开发模型有哪些?
答案 :
典型的软件开发模型主要包括以下几类:
- 瀑布模型:线性、顺序执行,文档驱动。
- 原型模型:快速构建原型以明确需求。
- 增量模型:分批交付功能,逐步完善系统。
- 螺旋模型:结合瀑布和原型特点,引入风险分析。
- 喷泉模型:面向对象的迭代模型,阶段间无间隙。
- 敏捷开发模型:如Scrum、极限编程,强调迭代和以人为本。
- Rational统一过程:用例驱动、以架构为中心。
解析 :
回答此类问题时,建议列举出最经典的模型(瀑布、螺旋、增量、原型)以及现代主流的模型(敏捷)。如果能简要说明每个模型的一个关键词(如螺旋模型对应"风险",瀑布模型对应"线性"),会使答案更加完整。
36.
题目:简述SDL模型实施的SD3+C原则内容。
答案 :
SD3+C是微软SDL实施的基本原则,具体内容包括:
- 安全设计:在软件设计和实现时,需考虑如何保护软件本身及存储的信息,以抵御外部攻击。
- 安全配置:软件的默认配置(安装后的初始状态)应是安全的。例如,默认关闭高风险功能,以最小权限运行等。
- 安全部署:软件应提供相应的文档和工具,帮助最终用户或管理员安全地进行部署、配置和使用。
- 沟通:开发人员应为产品漏洞的发现准备响应方案,并与用户及社区保持沟通(如发布补丁、安全公告)。
解析 :
SD3+C是软件安全领域的黄金法则。记忆时可以这样理解:
- Design:生来就强壮(代码和设计层面)。
- Default:出厂就安全(不用用户自己去配)。
- Deployment:安家要稳妥(部署过程不出错)。
- Communication:有事好商量(出漏洞了能及时响应和告知)。