1.3 互联网络的脆弱性
互联网是一个复杂而巨大的人造系统,由大量功能各异的软硬件共同构成。这些系统是对大量TCP/IP协议簇协议的实现,这样一个系统的脆弱性是不言而喻的。
本节从体系结构的设计、协议的设计、软硬件系统(协议)的实现以及网络系统的运行管理等4个方面探讨网络的脆弱性。上一节已经讨论过TCP/IP方面的缺陷,这里着重讨论另外3个方面的因素导致的脆弱性问题。
1.3.1 体系结构的因素
互联网在构建之初提出了若干基本的设计原则,诸如简单性原则、开放性原则、端到端通信原则等。端到端通信原则关注的是如何将报文分组高效地从源转发到目的主机,因此在设计的时候安排中间网络(路由器等设备)只提供最基本的“尽力而为”的分组转发服务,而将服务质量、可靠传输或安全相关的更高级的服务保障需求部署在端到端通信的发送端和接收端。端到端通信的模式将大量复杂的功能特性推给了端系统,使路由器等网络中间设备只保留简单并优化过的分组转发功能。
这样的安排可能导致严重的后果,例如,如果双向通信的某一方行为不规范,就有可能有意或无意地伤害到另一方,而通信的中间节点对此却无能为力。这种做法的一个后果就是使IP欺骗成为可能,另一个后果是DDoS攻击。
1.互联网安全具有高度依赖性
绝大多数DDoS攻击都是由那些出现安全漏洞且已被攻陷的主机系统发起的。不管受害者主机在安全防护方面做得如何好,对DDoS攻击的敏感性还是依赖其他主机的安全状况。
2.互联网资源是有限的
每个接入互联网的实体,不管是主机还是服务,或者是一个公司或ISP网络,其资源总是有限的,都难以承受大量攻击主机(实为被攻击者攻陷继而“征用”的主机)协同进行的同步攻击(尽管这样的攻击从任何单个攻击来源看都像是一次正常的访问)。
3.计算能力与通信能力的不均衡配置
端到端通信原则导致的一个后果是将绝大多数提供服务保证的计算能力放置在端系统,而中间的网络设备只配置有限的处理能力,试图以最小的代价确保数据分组能被快速转发。同时,为了提高主干网络的复用率和吞吐量,通常主干网络的带宽都远远高于边缘网络的带宽。这样,攻击者就可能在主干网络不知情的情况下恶意地利用主干网络充足的带宽资源来向配置较低的受害者(边缘网络)发送大量的报文,耗尽边缘网络的带宽资源,进而导致其无法向正常的用户访问提供服务。
4.审计追踪缺位
IP源地址欺骗使得攻击者可以轻易逃避网络和系统管理人员对其行为的追踪和审计。事实上,IP源地址欺骗在很多情况下成了实施攻击的有效手段,如Smurf等反射式攻击。
5.缺乏协调的分布式自治管理
互联网是由许多分布式的、具有独立自治域的网络通过域间路由协议连接形成的松耦合联盟系统,因此,所谓互联网的管理本质上是分布式的,每个网络根据其所有者定义的本地策略进行运行和管理。这也就意味着,不可能有针对某个安全机制或者安全策略的全球性部署,且由于隐私方面的考虑,我们也不可能调查背景网络流量。
1.3.2 系统实现方面的因素
互联网上运行着大量各式各样的软件和系统,而且随着软件和系统功能越来越丰富,网络结构也越来越庞大和复杂,因此其中存在这样或那样的漏洞是难免的。事实上,时至今日,几乎每天都还有可供攻击者利用的漏洞被发现。漏洞产生的原因大致可以分为两类,一类是设计/编程错误引起的,也有一类是极个别恶意工作人员故意留下的后门。
1.设计/编码错误引起的漏洞
绝大部分的漏洞都是由于程序设计和开发人员在设计和编码过程中无意识的疏忽造成,比如缓冲区溢出、堆(Heap)溢出、格式化字符串漏洞、脚本(ASP/PHP等)漏洞等。这些漏洞可能是由于设计方案存在缺陷,也可能是由于设计人员的经验不足或设计成本限制,生产周期过短,以致没有严格实施编程时应注意的安全规则等原因导致。
缓冲区溢出是此类漏洞的典型代表。从1988年的Morris蠕虫利用缓冲区溢出漏洞拉开蠕虫攻击网络的历史以来,缓冲区溢出这种安全缺陷发展到今天已经在网络安全领域中横行了二十多年,而且现在所面临的重大安全缺陷中还有很大一部分是与缓冲区溢出相关的。
顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯子里倒入了过量的水一样。关于缓冲区溢出以及基于缓冲区溢出的网络攻击更多的内容,我们将在后面的章节专门讨论。
2.预留的后门
在系统设计或实施的过程中,有时候为了调试的方便,给系统留下了“后门”,在系统完成并交付使用后却忘记了“关闭后门”。这种情况虽然不能简单的说就是恶意,不过造成的后果是一样的。在另外一些情况下,某些系统的设计者故意为系统留下“后门”,为自己今后的非法进入创造条件,这就是十足的恶意了。这些“后门”一旦被攻击者获悉,就会后患无穷。
1.3.3 运行管理和维护的因素
当前,互联网的规模已经非常庞大,而且还在不断的扩大,因此,网络运行管理和维护的难度也越来越大,由于网络配置错误而导致网络大面积故障或者被恶意攻击的事例也时有发生。如系统配置不当、错误地使用一些系统的默认口令、使用很容易被猜测到的弱口令等都是安全漏洞之源。此外,网络的脆弱性或者漏洞也可能是由于对网络系统的管理不善而引起的,如缺乏明确的策略或者流程载明哪些人、什么时间段可以对哪些资源进行访问等,又如网络管理人员疏于对网络活动和网络流量进行必要的监控等。这里列出若干和网络配置管理相关的脆弱性。
1.网络结构设计的缺陷
在很多情况下,一个单位或组织在规模较小时设计了一个结构比较简单的网络,也没有在安全方面有过多的考虑。随着单位的发展,其网络规模也越来越大,但由于安全方面没有同步跟上,其安全漏洞就会逐步显现出来,为攻击者留下后门。
2.缺乏数据流控制
数据流控制机制的缺位或者不合理的应用,可能导致不合法的用户或系统对网络资源的访问,比如,对路由器的访问控制列表ACL进行配置是一项很精细的工作,需要准确理解每个字段的含义;而且ACL和执行的顺序是密切相关的,不同的执行顺序可能导致完全不同的后果。
3.安全设备配置不恰当
经验不足的网络管理人员在配置路由器或防火墙等网络设备的时候有可能会直接使用系统的默认配置,这有可能使过多的不必要的端口开放出来,或者配置了过多没必要的网络服务,给攻击者留下很多机会。
4.无保护的口令传输
在不安全的信道上传输未经加密保护的用户名和口令等信息是很不安全的行为,很容易被不怀好意的人窃听。很多情况下,攻击者只需成功窃听到一个关键的口令信息,就可能成功瓦解网络的安全操作或者监控网络活动。
5.长时间使用同一个密码
长时间使用同一个密码很容易让攻击者通过字典攻击等方法获取,从而使攻击者能进一步瓦解任何其他的安全措施,进行更大范围的攻击。
1.3.4 补丁与补丁的局限性
针对体系结构和协议设计方面的缺陷,其改进工作往往牵一发而动全身,需要进行大量的研究、开发和试验才能推动实施,而对系统实现方面的漏洞修复就相对容易一些。在软件的新版本没有发行之前,系统/应用软件提供商一般通过打补丁的方式来暂时解决暴露出来的漏洞。但是,一个补丁打上了,可能又出现一个新的漏洞,因此用户可能需要不断地打补丁。“漏洞-补丁-新的漏洞-新的补丁”的模式成为当前安全领域中对漏洞的通用解决方式。
从根本上说,以补丁来解决漏洞的问题还是存在很多局限性的。
1.漏洞太多,补不胜补
当前网络的系统软件越来越庞大复杂,而互联网的各类新型应用则层出不穷,相应的,系统的各类漏洞也越来越多,对应的补丁也越来越多。比如Outlook仅在2000年就发布了十多个补丁。一个大型企业一般有多种操作系统,成百上千个应用,有的软件厂商每年都会发现几十个漏洞,要对所有漏洞都打上补丁是一件非常繁重的工作。
2.补丁的发布往往要比漏洞的发现滞后一段时间
从发现漏洞到完成漏洞的修改,即补丁的发布,总是需要一些时间的,特别是对于那些复杂的大型系统软件,定位漏洞往往费时费力。如果漏洞是被某些图谋不轨的人先发现,那么也许还没有相应的补丁可用,系统已经被人攻击了。
3.补丁安装不及时
补丁安装不及时面临的风险是可想而知的。因为,攻击者可能在补丁发布的同时已经准备好了攻击软件,而且攻击者也很好地利用了人性的懒惰性弱点。2001年7月19日,红码病毒攻击了微软的MSN服务器。具有讽刺意味的是,针对该病毒的补丁在同年6月就由微软自行发布,时隔1个月后,微软自己都没有安装!
4.打补丁的时机
当然,发布补丁也不是越快越好,因为补丁的成熟也需要一个过程,有时候仓促发布的补丁常常会存在很多的问题。因此选准发布补丁的时机就显得很关键,但是,何时发布补丁对于专家来说都是一个难题,更别说普通的管理员了。目前,很多软件厂商都提供了软件自动更新升级和补丁自动安装的服务,且往往在系统初始安装的时候就默认开通了这项功能。这项服务可以帮助管理员节省精力,但另一方面会导致不成熟补丁的安装。
5.无补丁可打
补丁并非总是可以随时获得的,特别是对于那些应用范围相对较小的系统而言,生产厂商可能没有足够的时间和人力物力去开发补丁程序,至少是无法及时发布补丁,如微软早就已经不再对Windows XP进行维护,但至今还有不少用户在计算机上使用这个系统。