1.6 面对攻击的网络
对于今天的许多机构(包括大大小小的公司、大学和政府机关)而言,因特网已经成为与其使命密切相关的一部分了。许多个人也依赖因特网进行许多职业、社会和个人活动。但是在所有这一切背后,存在着一个阴暗面,其中的“坏家伙”试图对我们的日常生活中进行破坏,如损坏我们与因特网相连的计算机,侵犯我们的隐私以及使我们依赖的因特网服务无法运行。
网络安全领域主要探讨以下问题:坏家伙如何攻击计算机网络,以及我们(即将成为计算机网络的专家)如何防御以免受他们的攻击,或者更好的是设计能够事先免除这样的攻击的新型体系结构。面对经常发生的各种各样的现有攻击以及新型和更具摧毁性的未来攻击的威胁,网络安全已经成为近年来计算机网络领域的中心主题。本书的特色之一是将网络安全问题放在中心位置。
因为我们在计算机网络和因特网协议方面还没有专业知识,所以这里我们将开始审视某些今天最为流行的与安全性相关的问题。这将刺激我们的胃口,以便我们在后续章节中进行更为充实的讨论。我们在这里以提出问题开始:什么东西会出现问题?计算机网络是怎样易于受到攻击的?今天某些最为流行的攻击类型是什么?
1.坏家伙能够经因特网将有害程序放入你的计算机中
因为我们要从/向因特网接收/发送数据,所以我们将设备与因特网相连。这包括各种好东西,例如Web页面、电子邮件报文、MP3、电话、视频实况、搜索引擎结果等。但是,不幸的是伴随好的东西而来的还有恶意的东西(这些恶意的东西可统称为恶意软件(malware)),它们能够进入并影响我们的设备。一旦恶意软件感染我们的设备,就能够做各种不正当的事情,包括删除我们的文件,安装间谍软件来收集我们的隐私信息,如社会保险号、口令和击键,然后将这些(当然经因特网)发送给坏家伙。我们的受害主机也可能成为数以千计的类似受害设备网络中的一员,它们被统称为僵尸网络(botnet),坏家伙利用僵尸网络控制并有效地对目标主机展开垃圾邮件分发或分布式拒绝服务攻击(很快将讨论)。
今天的多数恶意软件是自我复制(self-replicating)的:一旦它感染了一台主机,就会从那台主机寻求进入更多的主机。以这种方式,自我复制的恶意软件能够指数式地快速扩散。恶意软件能够以病毒或蠕虫的形式扩散。病毒(virus)是一种需要某种形式的用户交互来感染用户设备的恶意软件。典型的例子是包含恶意可执行代码的电子邮件附件。如果用户接收并打开这样的附件,不经意间就在其设备上运行了该恶意软件。通常,这种电子邮件病毒是自我复制的:例如,一旦执行,该病毒可能向用户地址簿上的每个接收方发送一个具有相同恶意附件的相同报文。蠕虫(worm)是一种无需任何明显用户交互就能进入设备的恶意软件。例如,用户也许运行了一个某攻击者能够发送恶意软件的脆弱网络应用程序。在某些情况下,没有用户的任何干预,该应用程序可能从因特网接收恶意软件并运行它,生成了蠕虫。新近感染设备中的蠕虫则能扫描因特网,搜索其他运行相同易受感染的网络应用程序的主机。当它发现其他易受感染的主机时,便向这些主机发送一个它自身的副本。今天,恶意软件无所不在且造成的损失惨重。当你用这本书学习时,我们鼓励你思考下列问题:计算机网络设计者能够采取什么防御措施,以使与因特网连接的设备免受恶意软件的攻击?
2.坏家伙能够攻击服务器和网络基础设施
另一种宽泛类型的安全性威胁称为拒绝服务攻击(Denial-of-Service(DoS)attack)。顾名思义,DoS攻击使得网络、主机或其他基础设施部分不能由合法用户所使用。Web服务器、电子邮件服务器、DNS服务器(在第2章中讨论)和机构网络都能够成为DoS攻击的目标。因特网DoS攻击极为常见,每年会出现数以千计的DoS攻击[Moore 2001;Mirkovic 2005]。大多数因特网DoS攻击属于下列三种类型之一:
- 弱点攻击。这涉及向一台目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的报文。如果适当顺序的多个分组发送给一个易受攻击的应用程序或操作系统,该服务器可能停止运行,或者更糟糕的是主机可能崩溃。
- 带宽洪泛。攻击者向目标主机发送大量的分组,分组数量之多使得目标的接入链路变得拥塞,使得合法的分组无法到达服务器。
- 连接洪泛。攻击者在目标主机中创建大量的半开或全开TCP连接(将在第3章中讨论TCP连接)。该主机因这些伪造的连接而陷入困境,并停止接受合法的连接。
我们现在更详细地研究这种带宽洪泛攻击。回顾1.4.2节中讨论的时延和丢包问题,显然,如果某服务器的接入速率为R bps,则攻击者将需要以大约R bps的速率来产生危害。如果R非常大的话,单一攻击源可能无法产生足够大的流量来伤害该服务器。此外,如果从单一源发出所有流量的话,上游路由器就能够检测出该攻击并在该流量靠近服务器前就将其阻挡下来。在图1-25中显示的分布式DoS(Distributed DoS,DDoS)中,攻击者控制多个源并让每个源向目标猛烈发送流量。使用这种方法,为了削弱或损坏服务器,遍及所有受控源的聚合流量速率需要大约R的能力。DDoS攻击充分利用具有数以千计的受害主机的僵尸网络在今天是屡见不鲜的[Mirkovic 2005]。相比于来自单一主机的DoS攻击,DDoS攻击更加难以检测和防范。
当学习这本书时,我们鼓励你考虑下列问题:计算机网络设计者能够采取哪些措施防止DoS攻击?我们将看到,对于3种不同类型的DoS攻击需要采用不同的防御方法。
3.坏家伙能够嗅探分组
今天的许多用户经无线设备接入因特网,如WiFi连接的膝上电脑或使用蜂窝因特网连接的手持设备(在第6章中讨论)。当无所不在的因特网接入极为便利并使得令人惊奇的新应用程序为移动用户所用的同时,也产生了重大的安全弱点——在无线传输设备的附近放置一台被动的接收机,该接收机就能得到传输的每个分组的副本!这些分组包含了各种敏感信息,包括口令、社会保险号、商业秘密和隐秘的个人信息。记录每个流经的分组副本的被动接收机被称为分组嗅探器(packet sniffer)。
嗅探器也能够部署在有线环境中。在有线的广播环境中,如在许多以太网LAN中,分组嗅探器能够获得经该LAN发送的所有分组。如在1.2节中描述的那样,电缆接入技术也广播分组,因此易于受到嗅探攻击。此外,获得某机构与因特网连接的接入路由器或接入链路访问权的坏家伙能够放置一台嗅探器以产生从该机构出入的每个分组的副本,再对嗅探到的分组进行离线分析,就能得出敏感信息。
分组嗅探软件在各种Web站点上可免费得到,这类软件,也有商用的产品。教网络课程的教授们布置的实验作业就涉及写一个分组嗅探器和应用层数据重构程序。与本书相关联的Wireshark[Wireshark 2012]实验(参见本章结尾处的Wireshark实验介绍)使用的正是这样一种分组嗅探器!
因为分组嗅探器是被动的,也就是说它们不向信道中注入分组,所以难以检测它们的存在。因此,当我们向无线信道发送分组时,我们必须接受这样的可能性,即某些坏家伙可能记录了我们的分组的副本。如你已经猜想的那样,最好的防御嗅探的方法基本上都与密码学有关。我们将在第8章研究密码学应用于网络安全的有关内容。
4.坏家伙能够伪装成你信任的人
生成具有任意源地址、分组内容和目的地址的分组,然后将这个人工制作的分组传输到因特网中极为容易(当你学完这本教科书后,你将很快具有这方面的知识了!),因特网将忠实地将该分组转发到目的地。想象某接收到这样一个分组的不可信的接收方(比如说一台因特网路由器),将该(虚假的)源地址作为真实的,进而执行某些嵌入在该分组内容中的命令(比如说修改它的转发表)。将具有虚假源地址的分组注入因特网的能力被称为IP哄骗(IP spoofing),而它只是一个用户能够冒充另一个用户的许多方式中的一种。
为了解决这个问题,我们需要采用端点鉴别,即一种使我们能够确信一个报文源自我们认为它应当来自的地方的机制。当你继续学习本书各章时,再次建议你思考怎样为网络应用程序和协议做这件事。我们将在第8章研究端点鉴别机制。
在本节结束时,值得思考一下因特网是如何从一开始就落入这样一种不安全的境地的。大体上讲,答案是:因特网最初就是基于“一群相互信任的用户连接到一个透明的网络上”这样的模型[Blumenthal 2001]进行设计的,在这样的模型中,安全性没有必要。初始的因特网体系结构的许多方面都深刻地反映了这种相互信任的观念。例如,一个用户向任何其他用户发送分组的能力是默认的,而不是一种请求/准予的能力,还有用户身份取自所宣称的表面价值,而不是默认地需要鉴别。
但是今天的因特网无疑并不涉及“相互信任的用户”。无论如何,今天的用户并不是必须相互信任的,他们仍然需要通信,也许希望匿名通信,也许间接地通过第三方通信(例如我们将在第2章中学习的Web高速缓存,我们将在第6章学习的移动性协助代理),也许不信任他们通信时使用的硬件、软件甚至空气。随着我们进一步学习本书,会面临许多安全性相关的挑战:我们应当寻求对嗅探、端点假冒、中间人攻击、DDoS攻击、恶意软件等的防护办法。我们应当记住:在相互信任的用户之间的通信是一种例外而不是规则。欢迎您到现代计算机网络世界来!