频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

1.1.1 问题的三个方面:为什么问题在不断增加

作者: (美)麦克劳(McGraw,G.) 出处:电子工业出版社  2008-04-14 18:30    砖    好    评论   进入论坛
阅读提示:《软件安全:使安全成为软件开发必需的部分》在论述软件安全理论的基础上详细讲解了如何将软件安全付诸实践。本章讲述学科定义,最重要的事情就是找出什么是最重要的。本节讲了问题的三个方面:为什么问题在不断增加。

第1章  学科定义
最重要的事情就是找出什么是最重要的。
——SHUNRYU SUZUKI

软件安全——使软件在受到恶意攻击的情形下依然能够继续正确运行的工程化软件思想——并不是一个全新的概念。在过去的几年中,随着防火墙之类的基于网络的被动反应式安全方法被证明无效,软件安全逐步接收不断更新的思想而得到稳步的发展。令人遗憾的是,由于存在设计瑕疵和实现缺陷,现在的软件漏洞百出,并导致了难以承受的安全风险。正如Cheswick和Bellovin所指出,“任何软件,不论它看起来是多么的安全,其中都隐藏有漏洞”[Cheswick and Bellovin ,1994]。软件安全风险的观念已经成为一种常识,但是,开发人员、系统架构人员和计算机科学家直到最近才开始系统地研究如何建造安全的软件。

网络安全市场的营业额约为450亿美元 。但是,2000-2003年报告的CERT 事件增加了532% ,对500家公司所做的关于电子犯罪的调查说明,43%的公司认为网络犯罪在不断增加⑤,这些事实都证明我们正在使用的方法显然功效不大。花费在网络安全以及其他周界防御方法上的经费基本上没有解决安全问题。我们必须建造更好的软件。
研究界已经开始出现一些关于软件安全的文献,但是,软件安全的实施实际上还处于初级阶段⑥。例如,直到2001年才出版了关于软件安全和安全工程的第一本著作[Anderson,2001;Viega和McGraw,2001;Howard和LeBlanc,2002]。现在,许多的参考资料都对软件安全的理论基础和关于特定技术问题进行了大量的讨论,但是在实现软件安全方面仍然还有大量的工作要做。本书的目标就是为此提供一些帮助。

1.1  安全问题

计算机安全中的首要和关键问题是软件问题。会导致安全问题的软件缺点——包括实现缺陷(比如缓冲区溢出)和设计瑕疵(比如不一致的错误处理方式)——已经困扰我们许多年了。恶意的侵入者时常利用软件缺点来侵入到系统中[Hog—lund and McGraw,2004]。此外,与Internet相连的应用程序通常都是(也非常容易成为)被利用的目标,而不断增加的软件的复杂性和可扩展性更是火上浇油般助长了这种情形。不论如何,软件中的安全漏洞都是很常见的,并且问题还在不断地增加。

计算机系统和网络的安全性愈来愈受到运行在相应机器上的软件的质量和安全性的影响。与Internet相连的软件,特别是使用Web的定制应用程序,成为常见的攻击目标。据安全研究人员和学者估计,超过一半的弱点(Vulnerability)都是由缓冲区溢出引起的,缓冲区溢出是一种令人难堪的基本缺陷类型[Wagner等,2000]。当然,更复杂的问题,比如竞争条件和设计错误,也随时有可能超过缓冲区溢出而成为首要的安全问题。这些更复杂(也更危险)的安全问题类型似乎也像简单的缺陷一样随处可见。
软件中的安全漏洞(Securityhole)也很普遍。最近五年以来,这类问题不断增加。图1-1说明了1995年到2004年间报告给CERT协调中心(CERT/CC)的与安全相关的软件漏洞的数量。我们必须改变处理计算机安全的方式,并开发出一种严谨的能够有效解决软件安全问题的方法,这种要求是明确而紧迫的。

软件安全是关于如何理解软件所引起的安全风险以及如何管理这类风险的学科。优秀的软件安全方法可以有效地实现软件工程目标,并且能够在软件生命周期的早期阶段就仔细地考虑安全问题,认识和理解一般性软件安全问题(包括语言本身的缺点和缺陷),把安全作为软件设计目标之一,以及对所有的软件工件都进行彻底、客观的风险分析和测试。可以看出,软件安全的确是一个知识密集型的领域。

图1-1  多年来报告给CERT/CC的与安全相关的软件弱点的数量。虽然一直广泛采用网络安全技术,这种问题仍然存在。
软件无处不在。它使汽车开动,控制手机,使洗碗机运行。它是银行和国家权力机构保持活力的源泉;它不时地持续运行在计算机中。认识到软件的应用多么广泛是很重要的事情。由于商业和社会活动越来越依赖于软件,我们不得不使软件变得更完美一些。既然软件默认地通过网络连接在一起,软件安全就不再是一种奢侈——而是一种必需。

1.1.1  问题的三个方面:为什么问题在不断增加

大多数现代计算系统一直都受到软件安全问题的困扰,那么,为什么软件安全问题现在比过去更严重呢?三个趋势——组成了问题的三个方面——对这个问题的发展具有重大的影响⑦。
互连性
计算机之间通过Internet的互连性不断增长,不但增加了攻击目标的数量,而且简化了实施攻击的方法。这就将软件置于更大的风险之中。越来越多的计算机,从家用PC到控制关键基础设施的系统,比如电网的数据采集与监控系统(SCADA)⑧,都与企业网络以及Internet相连。而且,个人、商业机构和政府都越来越依赖电子邮件或者信息系统提供的Web网页进行网络通信。过去脱机时出现的问题现在在联机时也会出现。令人遗憾的是,由于这些系统也与Internet相连,就很容易受到来自远程的基于软件的攻击的侵害。攻击者能够利用有漏洞的软件实施攻击,而不需要与系统进行物理连接;软件安全问题现在能够导致银行服务和飞机航班的中断(2003年1月出现的SQL监狱蠕虫就是一个例子)。

由于通过网络的访问不要求人工干预,因此很容易启动自动攻击。随处可见的网络意味着有更多的软件系统可被攻击,也已经出现了更多的攻击,而采用糟糕的软件安全方法却导致了更大的风险。我们确实到现在才开始处理十年之前就已经出现的因为糟糕的编码和设计而引起的攻击模式。所有设备彻底联网以及直接与分布式计算相关的攻击现在还很少见(虽然网络本身是利用糟糕的编码和设计问题实施攻击的主要通道)。随着时间的推移,情形会变得越来越糟糕。Internet无处不在,因此攻击者仿佛随时都会敲开你的门。
更糟糕的是,大型企业又多了两种缺陷:Web服务和与它密切相关的SOA(Service Oriented Architecture,面向服务的体系结构)。虽然SOA是通过营销手段推出的流行模式,它仍然代表了一种许多安全专业人士认可的简洁方式:过去传统上不需要网络交互的应用程序正在成为与网络交互的应用程序,并且以服务的形式来发布它们的功能。

许多通用平台,包括SAP、PeopleSoft、Oracle、Informatica、Maestro等(更不用说现在的J2EE和.NET应用程序),以及COBOL和其他一些古老的大型机平台,都正被集成到巨型解决方案中。许多的这类应用程序和过去遗留下来的系统都不支持SSL之类的通用工具库和在互连环境中进行认证/授权的标准插件,甚至也不支持简单的加密应用。它们不具备目录服务的内置功能,而大型商店都使用目录服务来进行认证和授权。中间件供应商都声称他们能够很好地简化集成的复杂性并提供无缝互连,但是即使他们提供了互连性(通过JCA、WBI或者其他的任何方法),认证系统和应用程序级协议也无法协同工作。

因此,中间件集成实际上弱化成为应用程序之间的某种组件,就像跨企业的FTP一样。更糟糕的是,商业公司总是害怕与更好的工具进行紧密的集成(因为缺少技术,没有项目预算或者对他们的基础设施队伍没有信心),因此他们不使用中间件,而是使用FTP,并且舍弃需要处理的数据块,而将数据操作转换成装载文件或者其他的应用程序输入。因为这类问题,过去遗留下来的产品的集成经常受到两种巨大的安全问题困扰:
(1)完全依赖基于弱口令保护的主机到主机的认证;
(2)对数据兼容性处理将会隐含地影响到用户的隐私(因为中间件对数据未加密传输,中间件对失效备援及负载平衡的实现都意味着缓存队列文件是以明文的形式随处存放的)。
企业体系结构的当前发展趋势使得互连性所导致的问题比以前更加严重。
可扩展性

第二个对软件安全有负面影响的趋势是系统现在的可扩展程度。一个可扩展的系统通过接受更新或者扩展件(有时也称为移动代码,mobile code)可以使系统的功能升级到一种增强的模式[McGraw and Felten,1999]。例如,由于Web浏览器具有插件式体系结构,因此很容易根据需要来安装读取新的文件类型所需的阅读程序。现在的操作系统通过动态装载的设备驱动程序和模块来支持可扩展性。如今的应用程序,比如字处理器、电子邮件客户端程序、电子表格程序,以及Web浏览器,都通过脚本、控件、组件和小程序来支持可扩展性。Web服务和SOA完全是基于J2EE和.NET这样的可扩展系统而建造的,它们的出现明确地将可扩展性提升到了一个重要的位置。
从经济的观点来看,可扩展的系统很有吸引力,因为它们提供了灵活的接口,能够通过新的组件来适应新的需求。在现代市场中,为了获取市场份额,尽可能快地配置软件是非常重要的。然而,市场也要求应用程序的每一个版本都提供新功能。通过先交付基本的应用程序代码、随后再根据需要来交付特性扩展件的方式,可扩展的体系结构很容易满足这两种要求。

令人遗憾的是,正是可扩展系统的这种本质属性,使它很难阻止软件漏洞通过意外安装的扩展件进入系统。高级语言和平台,包括Sun Microsystems的Java和Microsoft的.NET Framework,都把可扩展性作为一种普通特性。
复杂性

影响软件安全的第三个趋势是现代信息系统(特别是软件系统)的规模和复杂性毫无节制的增长。一个运行在Windows XP中的桌面系统及其相关的应用程序依赖于内核的正常运转,同时,应用程序应该确保它的弱点不会危害系统的安全。但是,Windows XP本身就至少包含4000万行代码,终端用户的应用程序的规模也与此相当,至少不会小于这个数量级。但是,当系统的规模如此之大时,缺陷是不可避免的。
图1-2说明了这些年来Windows的复杂性(按代码行数衡量)是如何增加的。这个图的目的不是要强调数字本身,而是要说明增长速度随着时间的推移而产生的变化。实际上,软件缺点的增长速度趋向于随代码行数的平方⑨而变化。显著影响软件复杂性的其他因素还包括代码集成的紧密程度、补丁与其他部署后所做的修改之间的重叠率,以及严重的体系结构问题。
  
图1-2  1990-2001年Microsoft的操作系统的代码库的增长情况⑩
不安全的编程语言(比如C和C++)无法抵御如缓冲区溢出之类的简单攻击,使用这类语言会使复杂性问题变得更加严重。从理论上来说,我们可以分析和证明一个小程序不存在安全问题,但是,即便是对于最简单的现代桌面系统来说,要证明它不存在安全问题也是不可能完成的任务,更不用说商业机构和政府所使用的企业级系统了。
当然,并不是只有Windows才存在这类问题。几乎所有的代码库的规模都在随着时间而增长。在过去的三年中,我对几千名开发人员进行了一次非正式的调查。除了很少的例外(大概占样本的1%),绝大多数的开发人员都报告说,随着时间的推移,他们的团队打算要编写更多而不是更少的代码。具有讽刺意味的是,这些开发人员同样也报告说,虽然他们将编写更多的代码,他们却打算减少代码缺陷。令人遗憾的事实是,“代码行越多,缺陷也就越多”,这是从实践中得到的实际经验(也是科学所证明的,下一节将说明这一点)。可见,开发人员都是一些乐观主义者。
软件系统迅速膨胀的倾向在开源系统中的表现与Windows完全相同(参见表1-1)。当然,其中的问题就是,更多的代码必然导致更多的缺点,因而也存在更大的安全风险。

表1-1  主要的操作系统和内核的源代码行数
19xx SCOMP 20 000
1979 Multics 1 000 000
2000 Red Hat 6.2 17 000 000
2000 Debian.GNU/Linux 2.2 55 000 000
2000 Linux 2.2 kernel 1 780 000
2000 XFree86 3.3.6 1 270 000
2001 Red Hat 7.1 30 000 000
2002 Mac OS X Darwin kernel 790 000
这个表中的数据由Lee Badger(DARPA的一位项目经理)收集 。

有时,即使源代码库看似很小,代码库也在增长(在可执行空间上)。考虑一下当目标平台是.NET或者J2EE时的情形,在应用程序的底层,采用了一种深不可测的巨大的代码库。当你的程序依赖于如下的功能时,情形就会变得更加糟糕:
— 数据扁平化:Castor,Java数据对象(JDO,Java Data Objects),基于容器管理的持久化;
— 身份管理和证明;
—  XML或者其他的表示格式,以及相关的解析器;
— 模式视图控制器(MVC,Model View Controller)框架:Struts配置容器;
— 应用程序服务器,Web容器;
— 数据库:Oracle,SQR,Informatica等等。
为了理解我所表达的意思,请考虑一下,在WebSphere中运行“Hello World”或者将“Hello World”作为Microsoft ASP程序来运行需要使用多少字节码。运行在操作系统之上的2 MB代码到底是些什么代码?

【责任编辑:阚书 TEL:(010)68476606】

回书目   上一节   下一节
专题
NAC安全访问控制
微软Forefront企业安全解决方案
VPN安全技术与应用
安全防范与策略
国内安全厂商新排名出炉 谁是你心中的第一
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
华为员工自杀频频拷问企业文化
华为员工自杀频频拷问企业文化
视频访谈:网管员如何踏上高薪之路
视频访谈:网管员如何踏上高薪..
首届中国IT工程师生态调查十大发现
首届中国IT工程师生态调查十..
· 首届中国IT工程师生态..
· 思科全球CEO钱伯斯第七..
· 北漂技术人90天求职纪实
· 2007年互联网大会
· 龙芯要做中国的“奔腾”
· IPv6协议--拓展网络无..
· 国际文档格式标准开战
· 微软出价446亿美元收购..
· 贝恩资本携手华为22亿..
· Linux——从菜鸟到高手
· SOA 面向服务架构
· 2008年4月全国计算机等..
· 微软Forefront企业安全..
· 技术人求职简历完备手册
· 勇闯IT培训黑色围城
· 隐私保护技术探讨
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 中间件应用技术专题
· SQL Server入门到精通
· 病毒查杀专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux防火墙
· 打造安全服务器
· SOA 面向服务架构
· PHP开发应用手册
· ADSL应用面面俱到
· 入侵防护系统(IPS)初探
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· 中间件应用技术专题
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· iSCSI应用与发展
· RAID——磁盘阵列基础
· 病毒查杀专题
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用
· PHP开发应用手册
· 中间件应用技术专题