基于安全软件开发生命周期的软件工程
2013-04-29刘湖平曾绍军王欣
刘湖平 曾绍军 王欣
[摘要] 利用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理、维护和更新,即软件工程的诞生,是计算机软件生产的里程碑。随着Internet的普及和快速发展,网络安全矛盾日益突显。只有改进传统的软件工程过程,提供更为安全可靠的软件产品,才能减轻威胁,有效遏制网络犯罪。
[关键词] 安全开发; 生命周期; 软件工程
[中图分类号] TP311.5 [文献标识码] A [文章编号] 1673 - 0194(2013)07- 0065- 03
1968年NATO(北大西洋公约组织,North Atlantic Treaty Organization)在德国的加米施(Garmish)召开的计算机科学会议,是一次划时代的会议,正是这次会议诞生了“软件工程”。它不仅有效缓解了当时日益突出的“软件危机”,同时为其后软件生产的辉煌奠定了坚实的理论基础。然而,在网络高速发展的今天,传统的软件工程实践已无法实现安全的软件开发。只有引进新的开发机制,不断改进传统的软件工程过程,才能生产出更为安全可靠的软件产品。
1 软件工程基本概念
计算机软件:与计算机操作有关的程序、规程、规则及任何与之有关的文档及数据。它由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发、运行、维护、使用和培训有关的文档。
软件危机:在计算机软件开发和维护过程中所遇到的一系列严重问题。20世纪60年代末至20世纪70年代初的软件开发,主要依赖个人的“才艺”,而软件功能的需求越来越强,造成软件质量(通用性、可移植性)差、维护困难。在一定时间内,人的智力和体力已无法承受。简单增加开发人员已不能成比例地提高软件开发能力。为开发和维护软件而支付的费用已占到设备成本的40%~75%,开发大型软件一再延时,因此而产生了“软件危机”。
软件工程:用工程、数学的原则和科学的方法,研制与维护计算机软件的有关技术及管理方法。它由方法、工具和过程3部分组成。软件工程方法是完成软件工程项目的技术手段,它支持项目计划与估算、系统与软件需求分析、软件设计、编码、测试与维护。软件工程使用的软件工具自动或半自动地支持软件的开发和管理,支持各种软件文档的生成。软件工程的过程贯穿于软件开发的各个环节,管理者要对软件开发的质量、进度、成本进行评估、管理和控制,包括人员组织、计划跟踪与控制、成本估算、质量保证、配置管理等。
软件生命周期:软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程。它包括软件定义、软件开发、软件使用与维护3个主要部分。对应软件生命周期的软件开发模型是经典的瀑布模型(如图1所示)。它提供了软件开发的基本框架,有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究与使用,从而提高大型软件项目开发的质量和效率。
2 网络系统面临的威胁
网络时代的互联互通给我们带来了前所未有的体验与便捷,无纸化办公、电子商务、网络通信等,正融入我们的日常生活与工作的各个领域。大量有价值的、敏感的数据存储与流动,使得利益驱使下的犯罪充斥于网络社会。早在1995年,安全专家Clark和Davis就定义了网络犯罪成本效益比率:
MbPb > OcpOcmPaPc
Mb——攻击者的货币收益;
Pb——攻击者的心理收益;
Ocp——实施犯罪的成本;
Ocm——攻击者的定罪成本;
Pa——攻击者被缉拿和逮捕的可能性;
Pc——攻击者被定罪的可能性。
当不等式的左边大于右边时,意味着实施攻击的收益大于成本,犯罪即可能发生。
一方面,如前所述,随着应用的普及,用户必然会存储、处理大量有价值的数据,使得不等式的左边对攻击者来说是“堆放金钱的地方”,其值(Mb)会愈来愈大;另一方面,攻击者被发现和追捕的可能性(Pa)微乎其微,同时,网络上黑客工具汗牛充栋、唾手可得,实施攻击无需掌握高难的技术,使得犯罪成本(Ocp)愈来愈小。这样,使得不等式左边远远大于其右边,导致网络系统始终受到严重威胁。
据国家互联网应急中心(CNCERT)发布的《2011年中国互联网网络安全报告》披露:
2011年境内木马或僵尸程序控制服务器IP数量为253 684个,木马或僵尸程序受控主机IP数量为8 895 123个。
2011年境内被篡改网站数量累计为36 612个。
2011年4-12月监测到境内12 513个网站被植入网站后门,其中政府网站1 167个。
2011年国家信息安全漏洞共享平台(CNVD)共收集整理并公开发布信息安全漏洞5 547个,其中,高危漏洞2 164个。
2011年,CNCERT共接收国内外报告网络安全事件15 366起。
2011年3-12月监测到仿冒境内银行网站的域名有3 841个;仿冒境内银行网站的服务器IP有667个。
《CNCERT互联网安全威胁报告》2012年11月的月报称,仅在1个月内:境内感染网络病毒的终端数为近466万个。境内被篡改网站数量为8 253个,其中被篡改政府网站数量为658个;境内被植入后门的网站数量为5 462个,其中政府网站有294个;针对境内网站的仿冒页面数量为6 399个。
国家信息安全漏洞共享平台(CNVD)收集整理信息系统安全漏洞729 个,其中,高危漏洞231个,可被利用来实施远程攻击的漏洞有686个。
据《瑞星2012年中国信息安全综合报告》称:
2012年1月至12月,瑞星“云安全”系统共截获新增病毒样本1 181万余个。
2012年1月至12月,瑞星“云安全”系统截获挂马网站516万个(以网页个数统计)。
2012年1月至12月,瑞星共截获钓鱼网站597万个(以URL计算),瑞星拦截挂马网站攻击的总数总计5 097万次。
360安全中心发布的研究数据显示:
2012年1月至6月,国内日均约2 835.3万台电脑遭到木马病毒等恶意程序攻击。
2012年上半年,360安全卫士共截获新增钓鱼网站350 149家(以host计算),拦截钓鱼网站访问量更是高达21.7亿次。
2012年上半年,360安全卫士平均每月截获46.3万个挂马网页(以URL计算),拦截挂马网页访问量419万次。
从以上的数据分析可知,网络攻击真实存在,网络犯罪令人触目惊心,在攻击者的定罪成本(Ocm)和攻击者被定罪的可能性(Pc)不变的条件下,我们只有在采用技术的手段同时,增大Ocp以减少网络攻击犯罪。
3 基于安全的软件开发生命周期
为了应对日益严重的网络犯罪,我们必须更新与完善软件工程的方法、工具和过程。
设计高质量的软件和良好的安全系统,加大攻击者实施攻击的犯罪成本。引进软件安全开发生命周期(Security Development Lifecycle,SDL)是目前最有效的手段之一。SDL由13个阶段构成(如图2所示),其目的一是减少软件中安全漏洞与隐私问题的数量,二是降低残留漏洞的严重性。
(1) 教育和意识。通过对设计师、开发人员、测试工程师、文档专员等每一个与软件开发有关的人员进行系统、持续的安全培训与考试,结合阅读安全书籍、发表安全文章等手段进行综合度量,让所有参与软件开发的工作人员牢固树立安全意识、夯实安全基础。
(2) 项目启动。该阶段的主要工作是组建安全团队、配置Bug跟踪管理数据库并建立Bug标准。
(3) 定义并遵从设计最佳实践。采用安全设计原则(经济机制、默认失效保护、完全中介、公开设计、权限分离、最小特权、最少公共机制、心理可接受度),枚举软件受攻击面的构成,有效降低受攻击面。
(4) 产品风险评估。该阶段完成两个方面的任务:一是进行软件安全风险评估,二是对软件涉及的隐私影响进行分级。安全风险评估一般以问卷调查的形式开展,涉及的问题主要包括:安装问题、受攻击面问题、移动代码问题、安全特性相关问题、常规问题等。隐私影响通常分成3级。1级为最高,当处理敏感数据,如收集用户个人信息、不间断监控用户行为等情况发生时定义为1级。产品风险评估的目的是确定在开发软件时需要投入多大的资源。
(5) 风险分析。通过威胁建模,系统地挖掘应用中的威胁,对每种威胁的风险进行分级并决定适当的消减措施。
(6) 创建安全文档、工具及客户最佳实践。该阶段完成更为安全的文档的创建和安全工具的开发。所谓更为安全的文档就是充分纳入了安全信息的文档,这些文档包括:①安装文档;②主线产品使用文档;③帮助文档;④开发人员文档。安全工具,一般是小巧的工具,如生成器、向导等,主要目的是帮助用户更为方便且安全地配置系统和使用软件。
(7) 安全编码策略。在代码开发和分析时必须遵从的策略:①使用最新版本编译器与支持工具;②使用编译器内置防御特性;③使用源代码分析工具;④切勿使用违禁函数;⑤减少潜在可被利用的编码结构或设计;⑥使用安全编码检查清单。
(8) 安全测试策略。测试阶段要求必须进行:①模糊测试;②渗透测试;③运行时验证;④重审威胁模型;⑤重估受攻击面。
(9) 安全推进活动。通过代码评审,捕获安全Bug、分类,并在工作完成时修复它。
(10) 最终安全评审。在产品交付给客户之前所进行的最终安全评审,一般由安全团队组织进行,其主要任务是:①与产品开发团队协调;②对威胁模型进行评审;③对未修复的安全Bug进行评审;④对工具有效性验证;⑤签署对产品是否可发布给客户的意见。
(11) 安全响应规划。由于无法实现软件产品的绝对安全,必须制订相应的安全响应规划,即制订处置预案。该预案一般包括:①接收漏洞报告;②评估与分级;③创建修复;④多级测试;⑤发布安全更新等。该过程由安全团队与开发团队共同完成。
(12) 产品发布。以CD、DVD或网络下载等方式发布产品。
(13) 安全响应执行。该阶段的工作就是一旦有新的安全漏洞报告,即启动在第11阶段制订的安全响应预案。
与软件产品本身一样,其开发方法也是一个动态的变化过程。再安全的方法也要由人来执行,保障软件安全没有一劳永逸的办法,即使SDL也在不断地改进和更新。像传统的软件工程带来了软件产业的繁荣一样,不断完善的、基于软件安全开发生命周期的软件工程,必将给软件产业带来质的提升与飞跃。
主要参考文献
[1] 齐治昌,谭庆平,宁洪. 软件工程[M]. 北京:高等教育出版社,2001.
[2] [美]Michael Howard ,Steve Lipner. 软件安全开发生命周期[M]. 李兆星,译. 北京:电子工业出版社,2008.
[3] 史济民. 软件工程:原理、方法与应用[M]. 第3版. 北京:高等教育出版社,2010.