3.1.1  安全开发生命周期

3.1.1 安全开发生命周期

1.安全开发生命周期的概念

传统的软件开发生命周期主要是从软件功能实现角度出发,合理地组织开发流程以高效地完成软件的各项功能,通常只注重软件功能的定义与实现,而安全性没有得到充分的考虑。即使在测试环节考虑信息系统安全性,也往往是在编码完成后进行,而未能将软件安全的思想贯穿至软件开发的整个过程。

安全开发生命周期从根本上来说,是将安全原则渗透至整个软件开发的生命周期中,即在每个开发阶段均考虑安全性,通过将安全技术纳入软件开发的各个阶段,主动实现软件自身安全性。

2.SDL模型

安全开发周期(Security Development Lifecycle,简称SDL)模型是微软公司自2004年便开始实践的一种业界领先的软件安全研发过程,极大地提升了微软公司产品的安全性水平,扭转了微软公司备受诟病的应用系统漏洞问题。SDL是由相对独立而又同等重要的多个活动组成的一个整体,每个活动都能帮助创建更安全的软件。具体地说,SDL由13项活动组成。这13项活动按软件工程的过程可划分成5个过程,分别为需求过程、设计过程、实现过程、校验过程、发布与维护过程,如图3-1所示。

SDL主要特点有:

(1)安全和隐私并重 在强调软件安全和可信的同时,注重对客户隐私的保障。微软区分了安全和隐私的差异,尽管二者存在交集,但对二者的处理方式在SDL中做了区分,对隐私问题阐述了专门的处理方式。

(2)活动按阶段归组 SDL的安全实践活动被按照阶段归组,因此将他们映射到标准的软件开发过程也很直接。

(3)丰富的资源 为促进该方法在微软之外的软件组织的应用,微软对该方法做了详尽的描述,并在MSDN网站上提供了丰富的文档资源和相应的支持工具。

978-7-111-51949-2-Part02-1.jpg

图3-1 SDL模型各过程安全活动[26]

在SDL模型中,各个过程的安全活动内容如下[27]

(1)需求过程 SDL模型将安全培训作为基础性工作,认为应该在项目启动阶段对开发人员进行安全培训,并为开发人员提供了培训套件,其中含有多个用于安全开发过程的简要的、独立划分的指导方针。SDL要求开发人员必须了解基本安全概念,每年至少参加一门安全培训课程。SDL同时要求建立安全领导团队,任命安全顾问担任开发团队和安全团队沟通的桥梁。

(2)设计过程 SDL主张建立和遵循设计的最佳实践,即在功能性规格说明书中描述产品的安全特性,在设计规格说明书中描述怎样实现安全功能需求。通过开展风险分析和威胁建模来识别待构建软件中的脆弱性。微软还提供了威胁建模工具来辅助这个过程的实施。

(3)实现过程 为客户创建的指导性安全最佳实践文档包括:安装应用时遵循的最佳实践文档、软件的使用文档、客户帮助文档及开发人员专用的安全文档,用来满足不同用户类型和过程对安全的需求。SDL主张制定并遵循安全编码规范,以便在软件开发的早期发现和修复安全问题。为用户创建处理安全和隐私问题的文档和工具,以便于用户合理安全地部署该程序。SDL建议使用最新版本的编译器和支持工具以及源代码安全审核工具来检测代码的安全性。

(4)校验过程 SDL的安全测试主要关注两方面问题,一是确保软件的机密性、完整性和可用性都得到了满足;二是确保那些可能导致安全漏洞的事件都得到了处理。SDL通过安全推进活动来对威胁模型进行更新、执行代码评审和测试,以及对文档进行彻底的评审和编辑。安全推进活动的目的是发现漏洞而不是修复它们。修复漏洞应在执行安全推进活动之后进行。SDL认为在将软件产品发布给用户之前,需要进行最终的安全评审和隐私评审来确定软件已经达到足够安全可以发布的程度,否则可能推迟产品的发布。SDL还要求为交付软件后的安全响应做好准备工作,也就是建立一个处理漏洞的响应过程,这个过程将在软件出现漏洞的时候被执行。

(5)发布与维护过程 SDL认为软件开发团队应该制定应急预案,以做好应对可能出现的安全漏洞的准备。在软件发布之后,产品开发团队必须在出现安全或隐私问题之后立即做出响应,提供修正软件漏洞的安全更新服务。