短江:计算机安全的K阿丝。


所有跟贴·加跟贴·新语丝读书论坛

送交者: bluesea 于 2008-12-23, 17:19:42:

从很小的时候,我就知道现代计算机的结构是具有风险,而从哲学上讲,这又是无可避免的。

很多人会觉得做得多总是会越来越安全的,事实上我们会发现原有的问题,会被别人当作低级错误,看上去我们不再犯这样的低级错误而在进步了。但是事实上如果我们回过头去会发现事情是原地踏步的。

安全问题越进步,破坏的技术也越进步。这是必然且关联的。要理解这个概念,就如同要理解生物进化是无目的的一样,不容易。

我是写不来科普的,只能讲点事情。

说最早的计算机,就是盖茨还很小的时候,他那时候也被叫做黑客,实际上这位黑客没啥大本事,就是在输入框内随意输入字符。字符控制在那时候都做不好,经常会因为随意输入,造成程序溢出。低级吧。但是我们能说那时候的计算机不安全吗?很安全,这些机器主要是放在大企业或者银行里用,根本不用担心普通用户会连接进来。系统也机器昂贵,除了几个高级职员技术人员基本也没谁去用。杀毒软件?根本不需要,因为压根不会频繁安装软件,也没有大量的其他机器连接。

后来呢,大家也知道计算机应用广泛了,输入的问题不再是什么大问题了,其他的问题来了 Morris 这个名字对小时候玩过点技术的应该不陌生吧,那可是前辈大牛啊,Morris的儒虫病毒使得美国和欧洲大量的服务器瘫痪。实际上他仅仅是发现一个用于查看Email帐户的程序漏洞。再而且,他把程序计算错误了,结果使得儒虫在计算机上无限复制直到服务器跨掉。

后来大家也知道了随着个人计算机的普及,病毒也开始成为大家日益烦恼的事情。到了90年代末,这个趋势有些收敛,主要是病毒传播的传统方式已经为大家熟知,一般都是通过交换磁盘,来传播,依附于可执行程序的尾部。这些规律一旦被广大使用者和杀毒软件商掌握,病毒传播的速度就被歇止了。尤其是早期的个人网络出现,很多程序只要直接从网站上下载而不用反复倒手了。自然原来的问题要减轻很多。可是那时候发生了一件大事情,就是全世界的程序员脑子都出问题,无论是中国末流大学的毕业的木瓜,还是米国麻省毕业的天才。每一个程序员在进行这个工作时几乎脑袋都不动一下,就做了同一件现在看起来愚昧得简直连小学生都会耻笑的事情:他们把四位的年份,缩减成了2位。这就是有名的“千年虫”问题。

再后来,传统的病毒逐渐失去了市场,因为人们不再使用磁盘交换数据。他们更多的是在网上交换数据。网络病毒就成了新鲜词汇。虽然网络工具成千上万,但是大多数黑客只研究一个:windows Internet Explorer。这有两个原因:

1.在市场竞争中IE逐渐占据浏览器市场,使用相当广泛。
2.IE采用了微软的ActiveX技术。这个技术允许浏览器从网站下载一个ActiveX程序,而这个程序可以随网页被打开而立刻运行并且访问客户机的本机资源。

关于第二点的争论很大,ActiveX这么做就必然会引起安全问题。而当时的另一项技术Java Applet就采用“沙箱”技术,使得浏览器虽然可以下载一个程序到本地运行,但是却绝对无法访问客户机的资源。这就避免的恶意网站对访问者的攻击。但同样的也使得很多应用变得不再可能。

ActiveX技术在很多时候是管用的,比如我现在用的招商银行的网上银行系统,招商银行将一个密钥从网络上传到我本机,在我访问他们网上支付系统的时候会下载一个ActiveX程序访问我的本地密钥。这样即便我的帐户密码不小心被别人窃取,别人也无法通过我的计算机以外的计算机去访问我的网上帐号。

而且ActiveX也采取了一些安全措施,比如数字签名认证,在IE里选择不下载没有数字签名认证的ActiveX程序就可以提高浏览器的安全性。但是类似因为其结构的原因,这些安全性措施一再被黑客攻破。

我丝毫不怀疑,总有一天ActiveX的这个安全会有一个比较妥善的解决办法,我也丝毫不怀疑目前的病毒传播会成为过时的低级技术。但是当我们回头过来,我们就会发现,计算机的开发并不因为安全而停止脚步,所有的开发几乎都是在新的黑暗之地进行摸索和尝试。很少有用户愿意几十年不变的使用同一种程序,他们总是会为新的功能而欢呼雀跃。而这样的探索就必然意味着风险。

这就是我要总结的计算机安全问题的必然性之一:
1.有探索和创新就必然会有新的风险,当技术人员在突破了原来的框架采用新的方法的时候,人类的天性和制约使得他们无法预新方法所有因此可能带来的问题和风险。

2.现代计算机结构的必然,应该是图灵(还是冯诺义曼?)就语言过现代计算机的结构就必然会有安全性的问题。但这个问题说透了是自由和利用自由的矛盾,也是人性本性的问题。我们不是没有办法让一个计算器变得牢不可破,但是彻底解决这个问题的办法是:限制用户的自由度。就比如前面的Applet和ActiveX的区别就是一例说明。再比如我们限制住用户可以随意安装软件,就可以彻底杜绝病毒,哪怕就是中了病毒只要重启也就没了。国内的网吧采用Net PC的网络方式,就很好的解决这一问题。但是到普通用户那里,谁会接受这样的计算机呢?不让我们随意安装软件的计算机肯定是不受欢迎的。

3. 软件复杂度和人必然会反错误的矛盾。一个人无论聪明还是愚笨,他们都必然会犯错误,而且如果他们从事的工作越负责则犯错误的可能性越大。现代软件的复杂度不断增加,以游戏为例子,以前的一个游戏只要几十K,几百K的存储空间就完成了,但是现在的游戏通常需要两张DVD光盘,数据量是以前的上万倍。程序工作复杂程度也响应增加了许多,虽然有各类工程学的方法可以帮助解决这一问题,但没有任何一种方法可以确保程序员不会犯错,甚至不会犯低级的错误,在90年代,那些在米国最高等研究机构研究软件工程的顶尖人才们恐怕大多数时候在编写程序的时候也会把2004简单的输入成04。

而计算机开发这个行业的特殊的性质造就我们追求复杂,越复杂越好,其复杂度最高点恐怕就是模拟或者描述整个世界。

当然不是说现在的问题就不需要去解决了,只要有安全问题就会有安全问题解决市场,只要有市场自然就会有人去做。这和病毒是无法避免的原则一样也是人性的本能。




所有跟贴:


加跟贴

笔名: 密码: 注册笔名请按这里

标题:

内容: (BBCode使用说明