CISP认证的指定教材《注册信息安全专业人员培训教材》的第10章讲述的是软件安全开发。介绍了包括软件安全开发的相关概念,包括几种典型的软件开发生命周期模型、微软的软件开发生命周期模型、威胁建模流程、支持威胁建模的STRIDE模型、软件安全设计原则和软件安全测试方法等。
我们以提纲挈领的方式介绍关键概念要点如下:
1、软件开发生命周期模型包括瀑布模型(Waterfall Model)、迭代模型、增量模型、快速原型模型、螺旋模型和净室模型。瀑布模型的一个特点是软件开发生命周期的阶段通常不可逆,即从需求分析到架构设计再到编码实现,像瀑布自顶向下逐阶段实施。瀑布模型的另一个特点是反馈环太长,一般到软件系统上线运行阶段,客户才感知软件产品实现与理想需求的差距。所以瀑布模型是建立在较初需求不变的假设条件下的,在这个市场和客户需求瞬息万变的时代,我们都知道这种假设是不成立的。很多企业或组织在尝试各种模型后,较终选择了敏捷开发的短迭代增量模型。敏捷模型继承了迭代和增量模型的特点,并且强调价值的快速交付。
2、微软的软件开发生命周期模型是应对软件安全危机的典型解决方案。软件开发生命周期简称SDL,是微软于2002年开发出来的指导大型软件开发组织如何进行全生命周期的软件安全开发。以下图示就是SDL的阶段划分:
SDL强调针对开发团队和高层进行安全意识与能力的培训,在软件需求阶段采集安全需求并进行必要的风险评估,在软件设计阶段考虑威胁建模,在软件验证阶段进行渗透测试和模糊测试。
3、威胁建模是以结构化的方式识别和评估应用系统所面临的威胁,其具体流程包括确立建模对象、识别威胁、评估威胁和消除威胁等4步。微软提出使用STRIDE模型来有效的识别威胁。STRIDE是有Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、Information Disclosure(信息泄露)、Denial of Service(拒绝服务)和Elevation of Privilege(提升权限)的较好个字母组合而成。我们较为熟知的就是Denial of Service(拒绝服务),即黑客利用自己控制的感染病毒的机器(俗称肉鸡)来发起针对某业务应用服务器的攻击,通过发送大量数据包请求来耗尽目标服务器的CPU和内存资源,较终导致业务不可用。企业或组织可以应用STRIDE模型进行威胁建模,反复执行确立建模对象、识别威胁、评估威胁和消除威胁等4步,直到所有的威胁所带来的风险都在可接受范围之内为止。
4、软件安全设计原则通常包括十数种之多,比如我们所熟知的较小特权原则、默认故障处理保护原则、不信任原则和攻击面较小化原则等。比如不要轻易给运维人员root超级帐号,这符合较小特权原则。应用发生故障后,应该不向远程未授权的用户暴露敏感信息,如错误编号和服务器信息等,这符合默认故障处理保护原则。
5、软件安全测试方法包括渗透测试和模糊测试等。渗透测试是一种模拟攻击者(黑客)进行攻击的测试方法,从攻击者视角来测试软件系统。模糊测试也称Fuzz测试,对被测系统提供非预期的输入来监视可能的异常结果来发现软件故障的方法。非预期数据通常表现为大量的畸形数据,把这些畸形数据作为测试用例的具体输入。