| 当我们评判一个系统是否安全时,不应该只看它应用了多么先进的设施,更应该了解它最大的弱点是什么,因为网络的安全性取决于它最薄弱环节的安全性。
通过考察近几年在 Internet 上发生的黑客攻击事件,我们不难看出威胁网络安全的基本模式是一样的。特别在大量自动软件工具出现以后,加之 Internet 提供的便利,攻击者可以很方便地组成团体,使得网络安全受到的威胁更加严重。
隐藏在世界各地的攻击者通常可以越过算法本身,不需要去试每一个可能的密钥,甚至不需要去寻找算法本身的漏洞,他们能够利用所有可能就范的错误,包括设计错误、安装配置错误及教育培训失误等,向网络发起攻击。但在大多数情况下,他们是利用设计者们犯的一次次重复发生的错误轻松得逞的。
我们可以粗略地将对系统安全造成的威胁归结为 6 大类 : 教育培训问题、变节的员工、系统软件的缺陷、对硬件的攻击、错误的信任模型和拒绝服务。需要指出的是,这几类威胁之间可能会有交叉与重叠之处。另外,一些文献对系统安全的威胁分类方法可能同这里给出的不同,但大多没有本质的区别。
1 .教育培训问题
对于安全系统的使用者来说,可以采用 2 种不同的安全模型。
(1) 火车司机型 在这种系统中,使用者只需要控制系统的启停,安全系统便能够辨别出危险信号,自动找寻安全道路,使用者在其他时间可以放心大胆地干别的事情。
(2) 航空飞行员型 在这种模型中,即使系统已经拥有很先进的自动导航设备,而且大多数情况下系统已经处在自动运行中,仍然要求使用者必须在安全方面训练有素。
在这 2 种模型中,第一种显得非常好用。用惯了图形用户界面的人都希望安全系统在经过简单的指导安装之后,不用再亲自介入以后的运行了。这种想法很自然,但实现起来并不容易。网络世界远远没有铁路系统那么有序,缺少像铁轨那样严格控制并引导列车前进的机制,由于可能出现的异常情况太多,所以没有什么办法可以让人一劳永逸。
有些人会认为:“不是还有防火墙吗?交给它好了!”这同样是错的,防火墙并不是万灵药,它虽然堵住了大量不安全的缺口,但还是小心翼翼地向外界打开了一扇访问内部信息的小门。尽管此门的开启受到限制,可路却通了。如果有人利用这条路径进行数据驱动型的攻击,防火墙是无能为力的。
许多系统被攻破是因为它们严重依赖于用户创建的口令,但由于不便于记忆,人们通常不会选择复杂性很强的口令,当这个口令被用做加密系统的密钥时,比起随机生成的密钥,它们更容易(当然也更快)被破解。为了便于记忆,有些系统的口令不仅仅是一个单词,还可以是一句话,称为“通行短语”。但由于语言本身信息的高度冗余性,所以 40 个字符的通行短语并不比 64 位( 8 个字符)的随机密钥更安全。
此外,出于工作上的考虑,有些用户可能会把自己的口令告知同事;有些用户由于拿不准自己把信用卡放在何处而没能及时挂失;还有些用户从不仔细查收邮件的电子证书 ; 或者不去改变软件缺省安装的不安全状态(尤其对 Windows NT 用户)等等,所有对这些细节的疏忽,都为网络带来不小的安全隐患。
2 .变节的员工
谈到变节的员工问题应该说它属于机构的内部事务。通常负责密钥管理和系统维护的人越多,系统出问题的可能性就越大。对此,最好的解决办法是建立完整的安全政策,严格控制用户的权限以及对关键信息的访问。对于银行之类的系统,必要时可对某些关键数据采用秘密共享机制的保护策略,以保证在若干个人同时在场的情况下才能启用。与此同时,还要加强审计功能,保证每一件事务都有据可查。
安全系统应该能够提供解决这一问题的机制,不允许任何人在系统中留有“后门”。
3 .系统软件的缺陷
常见的网络应用系统包含了 Web 浏览器、 Java 虚拟机、 Web 服务器、事务服务器、数据库系统及 CORBA 机制等等。当然,也包括防火墙。由于其结构十分复杂,任何一个部分都有可能出错,而任何一个错误都有可能导致安全漏洞或数据失窃、文件被毁或事务被欺骗提交等。更可怕的是,攻击者知道这些漏洞而当事人却蒙在鼓里。
经过进一步细分,我们发现这一类问题可能出在以下几个方面。
(1)系统设计问题
安全系统牵涉了各种不同的密码学原理,如加密算法、数字签名算法、单向 Hash 算法、消息认证码及安全协议等。只要攻破其中的任何一项,就等于攻破了整个系统。即使系统使用了很强的加密算法和安全协议,仍然可能存在薄弱环节。此外,就如相生相克一样,两个强安全协议、密钥的联用也可能得到一个不安全的系统。
以上这些问题都应该在设计安全系统时仔细分析、认真考虑。
值得一提的是, Internet 从建立开始就缺乏总体的安全构想和设计,而 TCP/IP 协议却是在可信的环境下专门为网络互联设计的,缺乏安全措施的考虑。因此,在这方面出现的安全问题较多。
(2)系统实现问题
在系统实现方面出现问题的原因很多,有的可能缘于对设计的理解,由于理解不透,所实现的系统并非是想像的系统 ; 有的可能缘于在实现过程中对细节过于疏忽,比如一些系统不能保证在加密之后可清除明文,或在加密过程中,系统崩溃可能导致密钥被转存到硬盘上等。
然而,在系统实现过程中最大的问题是程序里存在的错误,受时间和测试工具的限制,现有的许多系统都是在未经充分测试的情况下投入运行的,难免隐藏一些错误。
(3)故障恢复问题
设计一个安全的系统要求做到当一个系统某一部分被攻破时,其影响范围应该尽量最小化,避免捅出更大的乱子。泄漏一个文件的密钥不应使入侵者看到硬盘上所有的加密文件,黑客对智能卡进行逆向工程,只能得知所拿卡的秘密,而不应帮助他获得系统中其他卡的信息。作为一个优秀的系统设计者,必须考虑入侵发生后的应对办法,并且在设计时还要牢记一点:或早或晚,自己设计的系统总有一天会被人攻破!只有这样,当攻击真的发生时,才不会手足无措。
在已经广泛投入使用的系统中,攻击者可以从许多渠道获知各部分可能出现的错误或已经被确诊的错误,这些渠道可能是地下黑客站点、 CERT 报告或安全新闻组等,通常,它们还会给出相应的解决方法。
不能迷信专用系统的安全性,没有经过大量测试的系统,即使采取了秘而不宣的算法,也不可能有很高的安全性。事实上,如果这类算法是用软件实现的,根本抵挡不住训练有素的程序员对其进行逆向工程,也没有办法对其保密。
4 .对硬件的攻击
有些系统(特别是商业系统)常常依靠智能卡、电子钱包之类的防撬装置来保证安全,由于加解密、签名等工作都由硬件完成,用户密钥从不会进入到计算机内存之中。所以,即使这些系统用卡落入他人之手,也不会造成危害。
专有硬件是维护网络安全很重要且很有效的一种手段,如果一个系统完全依赖于它的防破坏性,就不能让人相信它是安全的。实际上,存在一些对这类硬件的攻击手段,如通过检查其运算所花费的时间、测量工作中的能量消耗、射线穿透检查等特殊“通道”,可能会让拿到卡的攻击者获取一些秘密。
所以,当设计使用这类硬件的系统时,应该建立其他机制用于防止防撬技术失败。
5 .错误的信任模型
在使用一个系统时,通常都要做出一些假定。比如当用户收到一封电子邮件时,可能假定发信者确实是真实的;当用户拿到一个新版的操作系统时,可能会假定厂家在广告中做的宣传是真实的;当用户通过网络获取一个共享文件时,可能会假定取到的是真正好的软件。在此,我们不妨看看下面 2 个例子。
攻击者攻破了某个网络目录服务器,由此将对某些服务器的访问定向到攻击者指定的机器,该机器可能中断客户和服务器之间来往的数据,使客户和服务器双方都没有意识到第三方的存在,很多敏感数据就此被窃取。这种方式通常被称为“中间人”攻击。
在内部网中,当各工作站使用共享文件系统 (AFS 、 NFS 、 Windows NT/95 及 Netware 等 ) 共享可执行文件时,一个内部攻击者可能监听了工作站向文件服务器发出的文件访问请求,抢先把修改过的文件块传给工作站。由于内部网缺少判断数据包发送地址的能力,工作站会接收该数据包,将真正的包当做重复数据丢弃,从而工作站将毫无觉察地使用修改后的程序。这类错误应该算一个比较严重的问题,当前许多操作系统在这方面没有做很大的改进, Windows NT 的 Service Pack 3 虽然注意到了这个问题,但在同其他系统的互操作性方面却受到了影响。
6 .拒绝服务
拒绝服务是指一个未经授权的用户不需要任何特权就可以使服务器无法对外提供服务,从而影响合法用户的使用。拒绝服务攻击可以由任何人发起,而它只利用 2 类办法便可实现攻击。
系统程序的错误 特殊的请求数据可能导致系统瘫痪。
协议本身抗干扰能力差 这是许多基于 TCP/IP 的协议所共有的问题,攻击者靠大量的请求数据挤占合法用户的请求空间,使合法用户的请求无法得到响应。典型的示例如 SYN Flood 、 Smurf 以及 DDoS 等。
|