创建安全程序要面临三个挑战

ZDNet软件频道 时间:2004-05-17 作者:Builder.com |  我要评论()
本文关键词:
程序员原本都没有受过安全训练或者是这方面的经历。学校也没有开设安全方面的课程,大多的程序员在从大学毕业以后就开始从事开发的工作了。
本文译自Builder.com,未经许可请勿转载

首先,程序员原本都没有受过安全训练或者是这方面的经历。在那个时候,学校也没有开设安全方面的课程,大多的程序员在从大学毕业以后就开始从事开发的工作了,这和我一样。但是我在大学的时候,给学校做过安全方面的东西,然后又给一个TV工作站做过,最后才到现在雇佣我的电脑公司工作。那时,是给工程师和物理学者教授FORTRAN的年代,调制解调器都还没有发明出来。事实上,我还没有一个计算机科学的学位证书,因为那时还不提供这个方面的证书。

编写安全程序的第二个困难就是一个程序有可能要依赖1,000,000左右的代码――而大多的代码是开发者们不写的甚至连看都不看的代码。当我第一次写机器语言的程序的时候(在十多年之后才产生C语言),所有的代码都是由我自己完成的,在那时并不是一件很困难的事情。我写的第一台计算机程序是IBM

的1401(PDP-6是我写的第三个或第四个计算机程序)。

如今,在普通网络上和一些虚拟专用网络上都没有足够的安全环境;同样,我们也和一些非常复杂的任务打交道,使用的开发平台对开发者99%隐藏了它的底层程序。所以这就给需要开发安全代码的开发者们带来很大的困难。编译器中的Bugs,它能够挫败最仔细的安全计划,所以,它给开发任务带来了更多的困难。例如,在2003年初的时候,我写了一篇关于GCC 和其它编译器的优化程序方法,可以从内存中击败仔细的程序员想要保护密码的计划。

给安全应用方面的软件开发人员带来的第三个方面的困难就是病毒程序只需要破坏安全程序的一个方面就可以了。当你从这方面考虑的话,你就可以理解为什么这么多的安全专家表明不能够创建一个完全安全的程序或者操作系统。

多安全才足够?
确定要多安全才足够的问题依赖于几个方面的因素,它包括:

  • 应用程序或者它处理的数据的价值,或者它使用的网络。
  • 暴露程度(例如,它是否和互联网连接?如果是,那么防火墙或者其它的保护措施的能力如何?)。
  • 危害的级别。数据也许对于公司而言非常的重要,但是对于其他人却不是这样。如果这个公司并不惹大家注意,即使有时也会受到一些随机的拒绝服务(DoS)或者受到一些小病毒的攻击,但是直接受到安全性侵入的级别就非常的低
  • 数据有效性。例如,金融方面数据的有效性就很短;也许第一天有必要保证它的安全性,但是到第二天,这些数据就已经失效了。


为了达到一个好的安全保障,你必须从一开始就考虑设计安全方面的问题;但是即使是在现在,还有很多人到后期才考虑安全问题,一些安全特征在将近程序完成的时候才显现出来。

很少有开发人员或者公司愿意把精力全部投放在创建一个真正安全的程序。创建完全安全程序的代价是无限的,所以总归是应该有折中的办法产生。

软件安全性是一个新兴的话题。我第一次看到Byte,是1985年的一本书软件确认验证测试和文档(Software Validation Verification Testing and Documentation。当今天重看这本书的时候,我惊讶地发现,这本书居然没有一个章节、一个段落或者一小句话包含了“security”这个词语。

现在,在我的书架上有一打书名都是关于“软件安全”类的书籍;其中的一些还是非常不错的。其中有一本书,可以让那些认为自己的软件(程序)是安全的人们感到一震,作者是Ross Anderson,书名叫做安全工程:创建可靠分布式系统的向导(Security Engineering: A Guide to Building Dependable Distributed Systems这本书主要的贡献就是Mr. Anderson呈现了关于国际银行业、ATM、智能卡所可能存在的弱点,还有一种“Tempest virus”病毒,它能够造成计算机在不经意之间就无线地传播其中的数据。(请注意:这不是一本编代码的书;它考虑了最坏情况发生时的状况。)

安全是一个过程,如果一个开发者在程序中的任意一个部分有偷懒的地方,那么它的漏洞就会在整个项目中显现出来。所以,在你遇到以上三个方面的安全困难挑战的时候,一定要时刻牢记这句话。



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134