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

软件安全:使安全成为软件开发必需的部分 序

作者: (美)麦克劳(McGraw,G.) 出处:电子工业出版社  2008-04-14 18:34    砖    好    评论   进入论坛
阅读提示:《软件安全:使安全成为软件开发必需的部分》在论述软件安全理论的基础上详细讲解了如何将软件安全付诸实践。

译者序

译者有幸参加了2006年3月在美国加州Santa Clara举行的SD West开发大会。会议第三天的主题演讲(keynote)是著名的安全权威Bruce Schneier的题为“What Works, What Doesn't, and Why”的演讲。但是,演讲开始时出现在讲台上的并不是大胡子的Bruce Schneier,而是一位胖胖的先生。他风趣地说,大家好,我是Bruce Schneier,引得全场大笑。这位先生做了大约20分钟的关于“软件安全”的介绍,博得全场热烈的掌声。接着,Bruce Schneier上台,他说,大家好,我是Gary McGraw,又是一次全场大笑。然后,Bruce Schneier说,感谢Gary McGraw关于软件安全的精彩演讲,他的演讲主题与此密切相关。这是译者第一次见到软件安全领域的权威Gary McGraw博士。Gary McGraw博士在演讲中阐述了解决软件安全问题的“使安全成为必需的组成部分”的观点和名为“接触点”的一套最优方法。他的演讲给我留下了深刻的印象。因此,我修改了我的听课日程安排,选听了Gary McGraw博士的题为“Building Security In”的技术课程。正是从这个课程中,我了解到了Gary McGraw博士的新书“Software Security: Building Security In”的主要内容。我认为这本书是至今为止关于实施和保障软件安全的最全面、最实用的书籍,如果能在国内出版,肯定会给我国的软件安全带来极大的促进作用。于是,我将这本书推荐给了电子工业出版社的郭立女士。郭立女士慧眼识金,迅速与这本书的出版社Addison Wesley Professional联系并获得了本书的中文版权,这是本书中文版得以迅速出版的基础。

SD West开发大会是美国最负盛名的软件开发技术大会之一。本次大会中,至少有四分之一的技术讲座以软件安全为主题。这有力地说明了美国软件业界目前对软件安全的重视程度。那么,什么是软件安全呢?Gary McGraw认为,软件安全就是使软件在受到恶意攻击的情形下依然能够继续正确运行的工程化软件思想。译者认为需要从如下的四个方面来理解这个定义。
首先,软件安全是计算机安全的一个分支。现代社会中,我们生活所需的一切似乎都离不开计算机系统,我们的电力、供水、交通、通讯、金融等等,都依赖于计算机系统的安全运行。但是,计算机系统并不安全,它潜伏着严重的不安全性、脆弱性和危险性。如何保障计算机系统的安全就成为我们这个时代的一个根本问题,计算机安全这门学科也因此应运而生,并成为近二十年来最热门的学科之一。计算机安全的研究范畴包括硬件安全、软件安全、数据安全、运行安全和网络安全。

其次,软件安全是计算机安全的关键。由于病毒主要是通过网络传播,而黑客主要是通过网络来进行攻击,因此,多年来人们一直认为网络安全是计算机安全的主要问题。但是在网络安全上的巨大投入却没有从根本上解决计算机安全问题。经过多年的研究,人们逐步认识到软件是计算机安全的大问题:软件的不稳定导致系统崩溃和数据丢失、病毒攻击的是软件的缺陷、黑客利用的是软件的弱点、机密和隐私的泄漏是因为软件存在漏洞……总之,危害计算机安全的绝大部分因素都与软件相关。正如Gary McGraw博士所指出的,计算机安全中的首要和关键问题是软件问题。
第三,软件安全问题的根源是软件存在弱点,因此只有改变我们建造软件的方式,才能从根本上保障软件安全。软件安全的概念已经出现了将近十年,但是人们对软件安全的正确认识才刚刚建立起来。提到软件安全,大多数人,包括许多的软件人员,首先想到的都是反病毒程序和防火墙之类的保护程序,或者密码学之类的信息加密技术。到现在为止,我们在软件安全方面的主要精力依然花费在这些方面。但是,人们所津津乐道的这些东西能从根本上解决软件安全问题吗?回答是否定的。有大量的统计数据可以证明,我们现在所广泛采用的方法并不能解决软件安全问题。我用一个例子来说明这个问题。假设有一个程序,其密码验证是用加密算法来实现的,它安装在一个被防火墙保护的系统中,系统中安装了反病毒程序。这个程序仍然不是绝对安全的(其实,许多受到病毒感染或者黑客攻击的程序都具有这种保护)。首先,我们不知道这个程序是否健壮。如果系统中存在一个可能导致缓冲区溢出之类的弱点,一旦黑客发现了这个弱点,并利用它来使系统出现缓冲区溢出,就可能导致缓冲区或其相邻内存单元中的数据的泄漏或者改写,在最糟糕的情形中系统甚至会执行黑客传给它的任何代码!这样的话,无论是防火墙还是加密系统都不能阻止黑客的攻击,因为黑客是用“合法的”手段“诱使”系统被其利用的。其次,没有谁能保证防火墙和反病毒软件是完全可靠的,它们也可能存在缓冲区溢出之类的弱点。实际上,黑客现在正在攻击防火墙和反病毒程序之类的保护程序,完全可能通过他们内部存在的这类弱点来攻击我们的系统。我们已经有了许多的防火墙、反病毒软件之类的保护程序,但是,病毒和黑客依旧猖獗——只要打开任何一份IT报纸或者杂志都能找到这类报道。问题的根源是什么呢?Gary McGraw博士指出,问题的根源就是我们所依赖的软件存在太多的安全弱点,而不断增加的软件复杂性和可扩展性更是火上浇油般地助长了这种情形。因此,解决软件安全问题的根本方法就是改善我们建造软件的方式,以建造健壮的软件,使其在遭受恶意攻击时依然能够安全可靠和正确运行。

最后,我们需要用工程化的方法来实施软件安全。Gary McGraw博士在本书中全面、详细地介绍了这种方法。本书的副标题“使安全成为必需的组成部分”点出了实施软件安全的工程化方法的总纲,即在整个软件开发生命周期中都要确保将安全作为软件的一个有机组成部分。支持这个总纲的三根支柱是应用风险管理、软件安全的接触点和知识。风险管理是一种战略性方法,即将追踪和减轻风险作为一种贯穿整个生命周期的指导方针。接触点,即在软件开发生命周期中保障软件安全的一套最优方法,是一种战术性方法。Gary McGraw博士总结出了七个接触点,即代码审核、体系结构风险分析、渗透测试、基于风险的安全测试、滥用案例、安全需求和安全操作。无论你采用什么样的软件开发方法学,你都可以将这些接触点应用到你的开发生命周期中,而不需要完全改变你的软件开发生命周期。这些接触点从“黑帽子”(攻击和破解)和“白帽子”(防御和保护)两个方面综合地考察软件开发中可能出现的问题,结合了它们的开发生命周期就成为“安全的”开发生命周期。“安全的”开发生命周期能够在每一个开发阶段上尽可能地避免和消除漏洞,同时又保留了你熟悉的工作方式。软件安全的第三根支柱是知识,包括收集、压缩和共享能用于为软件安全方法提供坚实基础的安全知识。由于软件安全是一门新的学科,及时总结知识,并用知识来教育所有相关的人员,对确保软件安全是至关重要的。在整个开发生命周期中综合应用这些方法,就能从设计、编码和测试等各个层面上消除软件中的安全弱点,从制度上、方法上最大限度地保障软件安全。

本书是关于软件安全的最新、最全面和最实用的权威著作。作者提出的“使安全成为软件开发必需的组成部分(Build Security In, BSI)”的理念已经得到业界和政府机构的广泛认同。美国国土安全部下属的国家网络安全处(NCSD)特别建立了一个关于BSI的门户网站(http://buildsecurityin.us-cert.gov/portal/),并与美国国家标准与技术研究所(NIST)、国际标准化组织(ISO)以及电气电子工程师协会(IEEE)一起共同维护这个网站。
本书不仅从理论上阐述了软件安全问题的根源,更重要的是指出了一种解决软件安全问题的实用方法。正如美国国家科学基金会ACCURATE中心主任约翰霍普金斯大学教授Avi Rubin所指出的,“如果你的生意依赖软件(又有谁的生意不依赖软件呢),就应该买这本书,并将它张贴在餐厅的前面上。” 软件安全人人有责,与软件相关的任何机构的管理人员、商业人员、软件架构人员、软件开发人员、软件测试人员以及安全管理人员都应该具备软件安全的意识和知识,而阅读本书就是使他们快速装备自己的最好方法。现在越来越多的大学、研究机构和培训机构都设置了计算机安全和软件安全课程,本书也是这类课程的理想教材和参考书。
翻译这样一本里程碑式的名著,对译者是一种荣幸,也是一种挑战。作者的语言非常生动和生活化,为了帮助读者阅读,译者对一些较难理解的语句加了一些注释,在书中标记为“译注”,而原书中的注释标记为“原注”。译者虽尽力而为,但是由于水平所限,翻译中肯定存在不准确甚至错误之处,恳请读者方家批评指正。
本书中文版得以出版,需要感谢许多的人。感谢郭立女士对译者的信任。感谢责任编辑许艳小姐,她认真地审阅了原稿,指出了原稿中许多的错误、细心地改正了许多译者“脑是笔非”的笔误。感谢电子工业出版社博文视点资讯有限公司所有为本书中文版的出版付出努力的人。

批评软件很容易,编写软件却很难。软件越大,就越是如此。这就像说话一样——言多必失。你说得越多,听众就越容易发现批评的内容,而且他们产生误解的可能性也就越大。简短可能是智慧的灵魂,但是智慧却肯定是简短的灵魂。
而事实上,我们的软件的确非常的絮叨可厌、代码混乱、设计不当、冗长乏味并且未经仔细推敲。软件就像我们的语言一样很容易被曲解,这令人惊讶吗?我们的软件,就像我们的语言一样,会“被骗子歪曲成制造陷阱的工具(twisted by knaves to make a trap for fools )”,这令人惊讶吗?不,这并不令人惊讶,但是,就像依赖语言一样,我们现在凡事都依赖软件。软件是如此重要,没有软件,甚至世界上的人口可能不会像现在这么多——软件用于交通管理,用于商业金融交易,用于记录和存储信息,用于翻译,用于运输,用于电源变压。换句话说,这些无可争辩的证据说明,我们必须让软件正确运行,同样地,无可争辩的证据也说明,让软件正确运行的目标现在不可能、将来也不可能会自然地实现。

McGraw博士提醒我们,破坏一种东西比设计一种不能被破坏的东西要容易得多。我个人更喜欢Sam Rayburn的朴实说法,即“任何一匹驴子都能踢翻谷仓,但是只有好木匠才能建造谷仓。”安全的软件的精确定义是,能够抵御有知觉的对手的软件。这正是人们特别关注安全的软件的原因。以质位变换命题的形式来解析这个定义:如果一个产品不存在有知觉的对手,那么它就没有安全需求。检查这一命题的最佳方法就是研究产品失败的原因——如果你的产品因为一些愚蠢的用户(“嘿,看看这个问题!”)、阿尔法粒子或者没有充电的电池而不能正常运行,那么它就不存在安全问题。假如一个快乐的傻瓜发现,在你的产品的某些输入域中输入5000个小写的a之后,他就能够成为超级用户,并且因此而导致你的产品不能正常运行,那么,即使这个傻瓜可能不具备完全的知觉能力,但是你的产品仍然存在安全需求。
这里并不存在一条泾渭分明的界线,而只有相对的差别。根据定义,在设计安全的软件时应该考虑到软件可能出现的问题。即使对手全身心地期待这样的问题出现,安全的软件也能够避免。在设计安全的软件时,应充分研究失败案例与成功案例,甚至研究失败案例还应更多。安全的软件的设计者和实现者都会预想存在一个具有思考能力的对手。

正如McGraw博士在这本书中反复强调的,只有专心致志地对待安全问题,才能烘焙出安全的产品。小时候每当我用“我不是有意这样做的,爸爸。”作为做错事的借口时,父亲总会斥责我。他总是尖锐地反问,“可是,你是有意不这样做的吗?”他这样说是为了使我成为一个更完美的人。由于工作原因,我每天都阅读关于弱点的报告。这些报告中的每一个都说,“我不是有意这样做的,爸爸。”有时,他们甚至会说,“我没有这样做,要是我做了,也不是有意的。无论如何,你没有注意到这一点,因此,如果你不希望即将发生的事故成为你的过错,就必须安装这个小小的补丁。难道我不是一个好人吗?”我真想大声质问,“你是有意不这样做的吗?”但是,最诚实的回答也不过是“我曾想有意不这样做。”
安全专家太少,我们总是听不到足够多的意见。优秀的安全专业人才很难找到,而且对他们的需求的增长速度要快于提供的速度。当亟需安全专业人才却找不到时,你该怎么办呢?你可以将所缺乏的专业知识转化为一种处理方法,让其他的人都遵循这种方法,但是这种方法必须具备如下的特征:能够加强严谨的思维方式,避免让不怀好意的人有机可乘,并且可以充分地衡量这种方法以了解它的有效性。如果不全部采用完整的方法,只采用其中的一部分也能够从中受益,那这种方法就更好。当然,最好采用完整的方法,但是,使用任何方法所得的回报都是逐渐减少的,基于这种限制,部分努力就能得到部分价值是一件好事。McGraw博士认为他自己并不完全是设计这种方法的人,但是他所做的工作与我上面所要求的完全一致。
一个好主意,就是你一听到它就会说,“对,就是这样。”在本书中,你将发现许多这样令人交口称赞的好主意——你会情不自禁地说,“对,就是这样。”例如,代码审核是可以训练并改善软件安全的最有力的工具。再如,如果不认真地研究软件在故意的滥用时可能出现的问题,就不可能知道软件在经受挑战时需要进行多少战斗。当然,只有使用这种方法,才能得到它所带来的益处。缓冲区溢出一直是最常见的攻击手段,而且多年前我们就已经知道应该如何避免它,因此,仅仅知道如何做显然是不够的。

你可能会问,“凭什么说Cigital的方法比XYZ的方法好呢?”对此,有一种非常自然的反应:这个问题值得探讨。使用现有方法仅仅得到了很有限的效果,其中肯定出了某些问题。这些“问题”要么是因为缺乏技术,要么是因为缺乏训练。如果是缺乏技术,专家们就有责任与其他人共享有效的经验。可能存在许多可行的方法,但是本书证明至少有一种方法是有效的。本书出版后,今后继续出现的任何失败的原因都必须被归结为缺乏训练。我们很快就能知道足够多的信息。
如果读者偏好用数据说明问题(即使在一篇序中),这里就有三个数据:每4个小时就会出现一种新的Windows病毒;可能有15%的台式机都运行着或多或少地存在问题的软件;嵌入式系统的数量要超过台式机一到两个数量级,而且它们几乎是不可升级的。本书存在的目的就是为了证明其中的内容是有用的。
我所做的研究使我相信,采用最好的软件安全方法的公司和采用最差的软件安全方法的公司之间的差距正在不断增加;我推测每12个月这种不对称性(用最好和最差的缺陷密度之比来表示)就会增加一倍。如果你像我和McGraw博士一样相信,安全是可靠性的子集,那么只需要借用有效的微积分方法就能得出这样的结论:一个包含5个系统组件的商业应用程序,每一个组件有98%的正常运行时间,那么可以预期这个程序每天将有2.5个小时不能正常运行。

安全与软件之间的关系就像突变与自然选择一样,但是它们之间还是有一个极端重要的区别:你可以借助软件安全来控制你的生存优势。如果这种说法对你有吸引力,你就应该使用(至少)一些McGraw/Cigital的程序。这样做不轻松,也不好玩,但是,正如美军突击队手册所说的:
渴望舒适和态度消极是对生存危害最大的两种常见因素。
现在该是你采取行动的时候了。

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

回书目      下一节
专题
NAC安全访问控制
微软Forefront企业安全解决方案
Windows Home Server 家用服务器专题
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开发应用手册
· 中间件应用技术专题