第2章
攻击类型
本章目标
在阅读完本章并完成练习之后,你将能够完成如下任务:
- 描述最常见的网络攻击,包括会话劫持、病毒攻击、特洛伊木马、拒绝服务和缓冲区溢出。
- 解释这些攻击是如何执行的。
- 制定针对这些攻击的基本防御措施。
- 配置系统以防范拒绝服务攻击。
- 配置系统以防范特洛伊木马攻击。
- 配置系统以防御缓冲区溢出攻击。
2.1 引言
第1章介绍了计算机系统的一些常见危害,概述了网络安全知识。本章将更为深入地研究具体类型的攻击,分析系统最常受到攻击的方式,并特别关注拒绝服务(Denial of Service,DoS)攻击。它是Internet上最常见的一种攻击方法,了解该类攻击的工作原理和防范措施对管理员来说非常重要。
本章还将介绍病毒攻击、特洛伊木马攻击以及一些不太常见的攻击方法,如会话劫持(session hacking)攻击和隧道(tunneling)攻击。有一句古老的格言—“知识就是力量”,对信息安全而言,这句格言不仅是好的建议,而且是构建整个网络安全观的一个公理。
2.2 理解拒绝服务攻击
第一种攻击类型是拒绝服务攻击(DoS)。 回顾第1章学习的内容,拒绝服务攻击是指旨在剥夺合法用户使用目标系统的任何攻击。此类攻击实际上并不试图入侵系统或获取敏感信息,它只是试图阻止合法用户访问给定的系统。这种类型的攻击是最常见的攻击类别之一。许多专家认为它很常见,因为大多数形式的拒绝服务攻击都很容易执行,这就意味着即使是低水平的攻击者也经常可以成功执行。
拒绝服务攻击的理念是基于任何设备都有操作权限这一事实。这个事实适用于所有设备,而不仅仅是计算机系统。例如,桥梁设计的承重有最高限,飞机在不续油的情况下有最长飞行距离,而汽车只能加速到某一时速。所有这些不同的设备都有一个共同的特点:在作业时能力有极限值。计算机或任何其他机器与这些设备没有什么不同,它们也有局限性。任何计算机系统、Web服务器或网络都只能处理有限的负载。
如何定义工作负载(及其限制)因机器而异。计算机系统的工作负载可以用多种不同的方式来定义,包括并发用户的数量、文件的大小、数据传输的速率或存储的数据量。超过任何限制系统将停止响应。例如,如果你向Web服务器发送的请求数多于它可以处理的请求数,那么它就会过载,并且无法再响应其他请求。这就是DoS攻击的理论基础。简单地发送请求使系统过载,它就无法再响应尝试访问Web服务器的合法用户。
2.2.1 执行DoS
拒绝服务攻击的概念很简单。然而,大部分原理通过具体的例子会更容易理解。对于DoS攻击,你需要通过一种安全的方法在教室或实验室环境中来模拟它。演示DoS攻击的一种简单方法,特别是在教室环境中,涉及使用带参数的ping命令。(回想一下,输入ping /h或ping /?会显示ping命令的哪些选项。)第一步,在一台计算机上运行Web服务器,并将该计算机用作攻击的目标。你可以使用任何喜欢的操作系统和Web服务器,如Microsoft 的IIS(Internet Information Services,IIS)或Apache HTTP 服务器,Apache可以从www.apache.org 免费下载,Microsoft Windows 10附带了IIS,因此你可以轻松找到要安装和运行的Web服务器。出于实验的目的,最好找一台低性能的机器,一台旧机器或者一个旧笔记本电脑,都是非常理想的。你要找一个容易过载的机器。从本质上讲,你正在寻找的是与设置真实Web服务器时完全相反的目标。
按如下步骤在Windows上安装Web服务器:
1)从www.apache.org 下载Apache for Windows。
2)在C:Program FilesApache GroupApache2conf目录下找到httpd.conf文件并打开它。
3)设置ServerName = localhost。
4)保存文件。
5)在命令提示符下输入httpd start。
现在打开浏览器,你应该能够查看默认的Apache网站。
按如下步骤在Linux上安装Web服务器:
1)从www.apache.org 下载Apache for Linux(在许多Linux发行版本中,你只需添加Apache Web服务器软件包)。
2)在/etc/httpd/conf中查找httpd.conf文件。找到它后,右键单击并使用文本编辑器打开它。
3)设置ServerName = localhost。
4)保存文件。
5)在shell中,输入/etc/init.d/httpd start。服务器启动后,你会看到一条OK消息。
6)打开浏览器访问http:// localhost /。
你应该能够看到Apache的默认网站。
当你准备让Web服务器上线(可从其他PC访问)时,在/etc/httpd/conf/httpd.conf文件中更改以下设置:
供参考:更改配置文件
无论何时更改配置文件,都必须停止Apache服务器并重新启动它。若要停止Apache,请使用/etc/init.d/http stop命令。
- 将servername更改为你注册的URL或更改为你的IP:端口,如:10.10.10.117:80。
- 更改listen以反映所需的IP和端口(配置文件中有一个示例)。
- 检查documentroot目录,确保该目录是你提供Web页面服务的位置。默认值应该是/var/www/html。
- 在shell中输入/etc/init.d/httpd start,启动Web服务。
供参考:实验室安全
此实验对目标服务器会有潜在危险。事实上,在整本书中,我们进行的实验对真实的计算机系统都可能造成严重破坏。你应该仅在与主网络断开且不包含任何关键信息的计算机上开展这些实验。最好建立一个专门用于安全实践的实验室。
如果你使用的是Windows 7、2008或2012 Server版本,那么还可以选择使用微软的 IIS作为Web服务器。
下一步是验证Web服务器正在实际运行,并且可以访问其默认网页。课堂上的某个人可以打开他的浏览器并在地址栏中输入目标服务器的IP地址,他应该能看到该Web服务器的默认网站。现在你可以对它进行相当原始的DoS攻击了。
可以使用ping命令进行实际的攻击。如果你不记得如何使用ping命令,那么应该记住,在命令提示符下输入ping /h会显示ping命令的所有选项。本练习中使用的选项是-w和-t。-w选项指定ping程序等待目标响应的毫秒数。本实验中将该选项设置为0,这样它根本不会等。-t选项指示ping程序持续发送数据包,直到明确告知它停止。另一个选项-l允许用户更改发送的数据包的大小。请记住,TCP数据包只能具有有限的大小,因此你要将这些数据包设置成尽可能大。
在Windows 10的命令提示符下(即Unix/Linux中的shell),输入“ping <目标计算机的地址> -l 65000 -w 0 -t”。机器应该给出类似于图2-1所示的响应。请注意,图中是正在ping我自己机器的环回(loopback)地址。你需要把它替换为运行Web服务器的计算机的地址。
当执行这一系列ping命令时,这台机器不断地ping目标机器。在该练习中,教室或实验室内只有一台机器ping Web服务器,应该不会对Web服务器产生严重影响。这是因为该流量水平完全在目标Web服务器的处理能力范围内。但是,在其他计算机以相同方式ping服务器之后,目标计算机的处理负担加重了。如果你有足够数量的计算机去ping目标服务器,则最终将达到目标计算机停止响应请求的阈值,这时你就无法再访问该网站了。达到此阈值所需的计算机数量取决于你所使用的Web服务器。本书作者在课堂上进行了这一实验。在该实验环境中,Apache Web服务器运行在装有Windows 7的Pentium III笔记本电脑上,只有1 GB内存。在那种情况下,只需要大约25台机器同时执行ping操作,Web服务器便会停止响应合法请求。即使这个实验没有令机器崩溃,至少也会使它响应更慢。
这个实验让你感受了一下拒绝服务是如何执行的,目的是让你更好地理解DoS背后蕴含的原理。请记住,实际的拒绝服务攻击使用了更复杂的方法。还请注意,没有真正的Web服务会在使用Windows 7的普通笔记本电脑上运行。这个练习仅仅演示了DoS攻击背后的基本原理:只需用大量的数据包淹没目标计算机,它就无法再响应合法请求。这个基本概念如图2-2所示。在这个实验中,我们所做的只是超过了实验室Web服务器的操作极限。
一般来说,用于DoS攻击的方法比图中所示的方法要复杂得多。虽然所有的DoS攻击都试图使目标机器过载,但是这样做的方式多种多样,而且有许多方式能自己发动攻击。例如,黑客可能开发一种小型的病毒,其唯一目的就是对预定目标发起ping泛洪(flood)攻击。病毒传播后,被病毒感染的各种机器对目标系统开始ping泛洪攻击。这种DoS很容易执行,且很难停止。本章后面将描述一些常见的DoS攻击。
从几个不同的机器上发起的DoS攻击被称为分布式拒绝服务(Distributed Denial of Service,DDoS)。
DDoS正变得越来越普遍,事实上它才是目前最常见的DoS攻击类型。本章后面讨论的大多数实例都是DDoS攻击。这种拒绝服务攻击形式越来越普遍的两个原因是:
- 如果有多台机器攻击目标系统,那么使目标系统过载更容易实现。由于新的服务器能够处理更高的工作负载,因此从一台计算机上执行DoS攻击越来越困难。
- 允许攻击者从其他人的机器发起攻击,从而可以保护攻击者的匿名性。从自己的机器发起攻击可能会有风险,因为每个数据包都有可能被追根溯源。这意味着几乎百分之百会被抓获。
DoS攻击背后隐含的基本原理很简单。攻击者的真正问题是避免自己被抓获。下一节将研究一些具体的DoS攻击类型,并回顾具体的案例。
2.2.2 SYN泛洪攻击
执行DoS最原始的方法就是发送大量的ping命令。更复杂的方法要使用特定类型的数据包。一种非常流行的DoS攻击叫作SYN泛洪(SYN flood)攻击。这种特定的攻击类型取决于黑客是否掌握了如何与服务器建立连接。当使用TCP协议在网络中的客户端和服务器之间发起会话时,在服务器上会留出内存中的一小块缓冲空间来处理建立会话的“握手”消息交换。会话建立数据包包含一个用于标识消息交换序列号的SYN字段。
SYN泛洪攻击试图破坏这个过程。在这种攻击中,攻击者非常快地发送多个连接请求,但不响应服务器发回来的应答。换句话说,攻击者请求连接,但却从不遵循其余部分的连接。这使得服务器上的连接保持半开放,分配给它们的缓冲区内存被占用,其他应用程序不能使用。尽管缓冲区中的数据包在一段时间(通常大约是三分钟)之后会因为没有回复被丢弃,但大量这类错误连接请求的后果使得合法的会话请求难以建立,如图2-3所示。
Web服务器上曾发生过许多有名的SYN泛洪攻击。这种攻击类型之所以普遍,是因为任何参与TCP通信的机器都易受攻击—而所有连接到Internet的机器几乎都参与TCP通信。TCP数据包交换是Web服务器通信的全部基础。有几种方法可以防范这些攻击。其中一些方法需要的技术比其他方法的复杂。你可以根据你的网络环境和专业水平选择最适合的方法。
1.使用微块防御
微块(micro block)防御通过改变服务器为任何连接请求分配内存的方式来避免SYN泛洪攻击。服务器不分配完整的连接对象,而是只分配一个微记录。这种技术的较新实现为入站的SYN对象分配少至16字节。设置微块的细节与具体的操作系统有关。这种防御技术并不太常见,许多网络管理员甚至都不知道还有这种方法。
2.使用带宽节流防御
防御DoS攻击的一种常用方法是用防火墙或入侵检测系统检测来自一个或多个IP地址的过多流量,然后限制相应的带宽。这就是使用带宽节流(bandwidth throttling)来减轻DoS攻击的方法。
3.使用SYN cookie防御
正如SYN cookie名字所提示的,该方法使用cookie,但与许多网站上使用的标准cookie不同。使用本方法,系统并非立即在存储器中创建用于握手过程的缓冲空间。取而代之,它首先发送SYNACK(开始握手过程的确认信号)。SYNACK包有一个精心构建的cookie,它由请求连接的客户端机器的IP地址、端口号和其他信息经过哈希算法产生。当客户端以正常ACK(确认)响应时,该响应包括来自该cookie的信息,服务器随后验证该信息。这样,直到握手过程的第三阶段,系统才给它分配全部存储。然而,SYN cookie中使用的哈希密码是相当密集的,因此期望拥有大量入站连接的系统管理员可能会选择不使用这种防御技术。因此,这种方法也不太常用,但并不像微块防御那样罕见。
这种防御机制同时也说明了一个事实,即大多数防御需要在性能和安全之间进行权衡。SYN cookie所需的资源开销可能会降低性能,尤其是当存在大量流量时。然而,SYN cookie是防御多种类型DoS的强大手段之一。最佳的解决方案是使用一个非常高性能的服务器(或服务器群)来处理资源开销并实现SYN cookie。
供参考:状态包检查
实现一个不仅能检查单个数据包,而且还能检查整个“会话”的防火墙是阻止SYN泛洪最简单的方法之一。这种状态包检查(Stateful Packet Inspection, SPI)防火墙可查看来自给定源的所有包。因此,如果来自一个IP地址的数千个SYN数据包没有相应的SYNACK数据包,就该引起怀疑并被阻止。
4.使用RST cookie防御
另一个比SYN cookie更容易实现的cookie方法是RST cookie。在这种方法中,服务器向客户端发送一个错误的SYNACK。客户端应该生成一个RST(reset)数据包,告诉服务器发生了错误。因为客户端发回了一个通知服务器错误的数据包,所以服务器现在知道客户端的请求是合法的,并将以正常方式接受来自该客户端的入站连接。但这种方法有两个缺点。首先,对于一些使用早期Windows的机器和/或位于防火墙后面进行通信的机器来说,可能会出现问题。其次,一些防火墙可能会阻塞SYNACK包的返回。
5.使用堆栈调整防御
堆栈调整(stack tweaking)方法涉及更改服务器上的TCP堆栈,这样当SYN连接不完整时,可缩短超时时长。不幸的是,这种保护方法只会使针对该目标的SYN泛洪变得困难,但对于一个不达目的不罢休的黑客来说,攻击仍然是可能的。堆栈调整比其他方法更复杂,我们将在第8章进行更全面的讨论。
这些方法的具体实现过程依赖于Web服务器所使用的操作系统。管理员应该查阅操作系统的文档或相关网站,以找到明确的说明。防御DoS攻击的最有效方法是综合使用这些方法。将SYN cookie或RST cookie与堆栈调整结合使用是保护Web服务器的很好方法。通过多种方法的结合,每种方法都可以克服其他方法的缺点。把这些方法结合起来,就像同时使用警报系统和警卫来保护建筑物一样。警卫可以做出警报系统不能做的决定,但警报系统从不睡觉,不会被贿赂,也从不分心。这两种方法结合在一起可以克服对方的弱点。
供参考:堆栈调整
堆栈调整的过程通常是相当复杂的,这依赖于具体操作系统。一些操作系统的文档对这个主题没有任何帮助。此外,它只会降低危险,但不会阻止危险。基于这个原因,它不像其他方法那样被频繁使用。
2.2.3 Smurf攻击
Smurf攻击是一种十分流行的DoS攻击。它是以首次执行此攻击的应用程序命名的。在Smurf攻击中,一个ICMP包被发送到网络的广播地址,但它的返回地址被修改为该网络中的某一台计算机,很可能是一个关键的服务器。然后,网络上的所有计算机都将通过ping目标计算机进行响应。ICMP数据包使用Internet控制消息协议(Internet Control Message Protocol,ICMP)在Internet上发送错误消息。因为数据包发送的地址是广播地址,所以该地址通过将数据包发送到网络上的所有主机进行响应,然后这些主机又将数据包发送到伪装的源地址。不断地发送这样的数据包将导致网络本身对它的一个或多个成员服务器执行DoS攻击。这种攻击既聪明又简单。最大的困难是在目标网络上启动数据包。这个任务可以通过某个软件来实现,如由病毒或特洛伊木马发送数据包。图2-4演示了这种攻击。
Smurf攻击是一些恶意组织发挥其创造力的一个实例。它有时被视为在自身免疫性疾病中的生物过程的数字等价物。在这种疾病中,免疫系统攻击病人自己的身体。在Smurf攻击中,网络对自己的系统执行DoS攻击。这种方法的巧妙性说明,如果你负责网络中的系统安全,那么尝试创造性地、前瞻性地工作很重要。计算机攻击的实施者是富有创造力的,他们不断开发新技术,如果你的防守不如攻击者的进攻有创造性和睿智,那么你的系统被攻陷只是时间问题。
可以用两种方式防御Smurf攻击:
- 最直接的方法是配置所有的路由器,让它们不转发任何直接广播的数据包。这些数据包是Smurf攻击的基础,如果路由器不转发它们,那么攻击就被限定在一个子网中。
- 第二种方法是防范特洛伊木马(本章后面将深入讨论)。因为Smurf攻击是由特洛伊木马传播的软件发起的,所以阻止最初的传输可以阻止攻击。禁止雇员下载应用程序,同时使用足够的病毒扫描程序来保护系统,这些策略也可以很好地保护系统免受木马攻击,从而防止Smurf攻击。
使用代理服务器也很有必要。代理服务器可以隐藏机器的内部IP地址,这使得你的系统更不容易受到Smurf攻击。第3章和第4章将详细介绍另一个重要工具—代理服务器和防火墙。
2.2.4 死亡之ping
死亡之ping(Ping of Death,PoD)可能是DoS攻击中最简单、最原始的一种形式,它是基于使目标系统过载的原理。TCP数据包的大小是有限的。在某些情况下,仅仅发送一个超大的数据包就可以使目标机器宕机。
这种攻击与本章前面讨论的教室的示例非常相似。这两种攻击的目的都是使目标系统过载并停止响应。PoD可以攻击无法处理超长数据包的系统。如果成功,服务器将彻底关闭。当然,它还可以重新启动。
防止这种攻击的唯一安全保障是确保对所有操作系统和软件都进行例行修补。这种攻击依赖于特定操作系统或应用程序在处理异常大的TCP数据包时存在的漏洞。当发现这样的漏洞时,厂商通常会发布补丁。存在PoD攻击的可能性,也是必须在所有系统上保持补丁更新的众多原因之一。
PoD这种攻击越来越不常见,这是因为新版的操作系统能够很好地处理死亡之ping所依赖的超大数据包。如果操作系统设计得当,它会丢弃任何过大的数据包,从而消除PoD攻击可能带来的任何负面影响。
2.2.5 UDP泛洪
UDP(User Datagram Protocol,用户数据报协议)泛洪攻击实际上是本章前面描述的实验的变种。UDP是一种无连接协议,它在传输数据之前不需要建立任何连接。TCP数据包需要连接并会等待接收方的确认,然后才会发送下一个数据包,每个数据包都必须经过确认。UDP数据包简单地发送数据包而不需要进行确认。这样可以更为快速地发送数据包,也就更容易执行DoS攻击。
当攻击者将UDP数据包发送到受害系统的任意端口时,UDP泛洪攻击就发生了。当受害系统接收到UDP数据包时,它会确定什么应用程序正在目标端口上等待。当它意识到没有应用程序在端口上等待时,它将生成一个目标不可达(destination unreachable)的ICMP数据包,发送到伪造的源地址。如果有足够多的UDP数据包发送给受害系统的端口,系统就会崩溃。
2.2.6 ICMP泛洪
ICMP泛洪是你在网络安全文献中经常遇到的一个术语。实际上,它只是前面实验中使用的ping泛洪的另一个名称。ICMP数据包是ping和tracert(该命令在Windows中是tracert,在Linux中是traceroute)实用程序中使用的数据包的类型。
2.2.7 DHCP耗竭
DHCP耗竭(DHCP starvation)是另一种常见的攻击。如果足够多的请求涌向网络,攻击者可以无限期地彻底耗尽由DHCP服务器分配的地址空间。有一些工具,比如Gobbler,可以帮你做到这一点。拒绝来自外部网络的DHCP请求可以防止这种攻击。
2.2.8 HTTP Post DoS
HTTP Post DoS通过发送合法的HTTP Post消息进行攻击。Post消息中有一个字段是“content-length”(内容长度)。该字段指出后面跟随消息的大小。在这种攻击中,攻击者以极慢的速度发送实际的消息体。之后Web服务器“挂起”等待消息完成。对于健壮性强的服务器,攻击者需要同时发起多个HTTP Post攻击。
2.2.9 PDoS
永久性拒绝服务(Permanent Denial of Service,PDoS)攻击对系统的损害非常严重,以至于受害计算机需要重新安装操作系统,甚至需要新的硬件。这种攻击有时被称为phlashing,通常涉及对设备固件的DoS攻击。
2.2.10 分布式反弹拒绝服务
如前所述,分布式拒绝服务(Distributed Denial of Service,DDoS)攻击变得越来越普遍。大多数此类攻击依赖于让各种机器(服务器或工作站)攻击目标。分布式反弹拒绝服务(Distributed Reflection Denial of Service,DRDoS)是一种特殊类型的DoS攻击。与所有此类攻击一样,黑客通过让大量计算机攻击选定的目标来实现攻击。但是,这种攻击的工作原理与其他DoS攻击稍有不同。这种方法不是让计算机攻击目标,而是诱骗Internet路由器来攻击目标。
Internet骨干网上的许多路由器都用179端口进行通信。这种攻击利用该通信链路让路由器攻击目标系统。这种攻击之所以特别可恶,是因为它并不要求对其中的路由器进行任何攻击。攻击者不需要使用路由器上的任何软件就能让它参与攻击。相反,黑客向各路由器发送一系列请求连接的数据包。这些数据包是被篡改过的,它们看起来像是来自目标系统的IP地址。路由器通过启动与目标系统的连接来响应。而实际情况是这些来自多个路由器的大量连接,都指向同一个目标系统。这样做的后果是使目标系统无法访问。图2-5说明了这种攻击。
2.2.11 DoS工具
DoS攻击变得如此普遍的一个原因是有许多工具可用来执行攻击。这些工具在Internet上比比皆是,而且大多数情况下都可以免费下载,因此任何谨慎的管理员都应该知道它们。除了作为攻击工具使用之外,它们还可以用于测试你防御DoS攻击的安全措施。
实践中:攻击你自己的系统
测试你对特定类型攻击的防御能力的最好方式就是模拟该攻击。无论你采取什么样的对策,在受到攻击之前,你都不会真正知道它们是否有效。在真正的攻击发生之前发现真相会更好。最好的方法是使用军事风格的战斗演习。
这种方法并不是要在一台实际的机器上进行试验。最好的方法是找一台为测试目的而设置的机器。在这台机器上完成你的各种安全措施,然后让这台机器遭受你希望防范的攻击。这可以给你防御的有效性提供实实在在的证据。
当你进行这类练习时,应该遵循以下几条原则:
- 使用一个测试系统,而不是一个实际的系统。
- 详细记录攻击前系统的状态(使用什么操作系统、补丁、硬件配置、CPU使用、内存使用、安装了什么软件以及系统的配置)。
- 详细并且准确记录你采取了什么安全措施。
- 详细记录机器受到的每种类型的攻击。
- 记录机器如何响应。
当完成这个战斗演习之后,你应该借鉴军队的另一个思想,即行动后的评估。简单地说,就是简明扼要地记录下系统防御是如何执行的,以及这些表征你系统的安全性如何。
然而,一个不幸的事实是,这种特定的安全措施在业界并不常用,主要原因是它需要资源。你必须投入一台测试机器,更重要的是,还要花很多时间来做这个练习。大多数IT部门都有非常繁重的工作,根本无法腾出必要的时间来进行这项训练。然而,这绝对是安全顾问应该参与的事情。
1. Low Orbit Ion Cannon
低轨道离子炮(Low Orbit Ion Cannon,LOIC)可能是最有名的,当然也是最简单的DoS工具之一。通过在Internet上搜索,你就可以从多个网站下载它。
首先将URL或IP地址放入目标框中。然后点击Lock On按钮。你可以更改选择的方法、速率、线程数以及是否等待答复这些设置。然后点击IMMA CHARGIN MAH LAZER按钮开始攻击,如图2-6所示。
2. HOIC
高轨道离子炮(High Orbit Ion Cannon,HOIC)比LOIC更先进,但实际上更容易运行。单击“+”按钮添加目标,会出现一个弹出窗口,你可以在其中输入URL以及一些设置。
3. DoSHTTP
这个工具使用起来也很简单。选择目标、代理(即模拟什么浏览器类型)、多少个套接字、请求,然后即可开始泛洪攻击。
2.2.12 真实的示例
现在,你应该牢固掌握了什么是DoS攻击,并对其工作原理有了基本的理解。你还应该对如何保护你的网络免受这些攻击有一些基本的想法。下面我们开始讨论这种攻击的具体示例。以下对几个实际攻击示例的分析展示了黑客发动攻击所使用的方法、攻击的效果、它们的检测以及管理员为解决它们而采取的步骤。
供参考:病毒还是蠕虫?
你会在不同的书中看到术语病毒(virus)和蠕虫(worm),它们有时可互换,然而,两者之间却存在差异。蠕虫是一种特殊类型的病毒,它可以在没有任何人为交互的情况下传播。传统的病毒攻击是作为电子邮件附件,操作人员必须打开附件才能启动感染。而蠕虫不需要人类用户的任何活动就能扩散。有些书使用这些术语相当严格。这里的术语“病毒”描述了这两种情形。
1. FakeAV
FakeAV病毒于2012年7月首次出现。它感染了从Windows 95到Windows 7以及Windows Server 2003的Windows系统。它是一个假冒的防病毒软件(因此名称为FakeAV)。它会弹出虚假的病毒警告。这不是第一个假冒防病毒的恶意软件,但它却是比较新的一个。
2. Flame
如果没有讨论Flame(火焰),那么任何关于病毒的现代讨论都是不完整的。这种病毒最早出现在2012年,针对的是Windows操作系统。这种病毒之所以引人注目是因为它是专门为间谍活动设计的。它于2012年5月在多个地点被首次发现,包括伊朗政府的站点。Flame是一款间谍软件,它可以监控网络流量,并对被感染的系统进行截屏。
这种恶意软件将加密后的数据存储到本地数据库中,它还能够根据运行在目标机器上的特定杀毒软件改变自己的行为,这说明该恶意软件非常复杂。同样值得注意的是,Flame使用了一个伪造的微软证书进行签名,这意味着Windows系统会信任该软件。
3. MyDoom
MyDoom是一种很古老但又非常经典的病毒,因此值得在任何关于病毒的讨论中出现。在2004年年初,想没听说过MyDoom蠕虫都不容易。它是一种经典的DDoS攻击。病毒/蠕虫把自己通过电子邮件发送给通讯录中的每个人,然后,在预设的时间,所有受感染的机器开始对www.sco.com发起协同攻击。请注意,这个网站现在已经不存在了。据估计,受感染的机器数量在50万到100万台之间。这次攻击成功地关闭了圣克鲁斯行动(Santa Cruz Operation,SCO)网站。应该指出的是,早在DDoS攻击实际执行的前一天,网络管理员和家庭用户就很清楚MyDoom可能会做什么。有几个工具可以在Internet上免费获得,用于清除特定的病毒/蠕虫。然而,显然很多人没有采取必要的步骤来清除他们机器上的这种病毒/蠕虫。
研究该攻击之所以有趣,有以下几个原因:
- 这是一个经典的蠕虫示例。它使用多种传播模式,可以作为电子邮件附件传播,也可以在网络上复制自己。
- 它是向一个非常具体的目标发动分布式拒绝服务攻击的工具。
- 显然它是赛博恐怖主义的一个案例(尽管MyDoom的创造者肯定不这么认为)。
对于那些不知道这个故事的读者,这里简单介绍一下。Santa Cruz Operation(SCO)制作了Unix操作系统的一个版本。与大多数Unix版本一样,它们的版本受版权保护。在MyDoom攻击的几个月前,SCO开始指控某些Linux发行版包含了SCO Unix的代码片段。SCO向许多Linux用户发出信函,要求收取许可费。Linux社区中的许多人认为这是在试图破坏Linux(一种开源的操作系统)的日益普及。SCO甚至更进了一步,对发行Linux的主要公司提起了诉讼。对于许多法律和技术分析人士来说,这种说法似乎毫无根据。
许多分析人士认为,MyDoom病毒/蠕虫是由某个感觉SCO不可接受的人(或群体)创建的。黑客(黑客群体)发起该病毒,对SCO造成经济损失,并损害公司的公众形象。这使得MyDoom病毒成为赛博恐怖主义的一个确切案例:一个团体基于意识形态分歧攻击另一个团体的技术资产。大量的网站涂改事件和其他小规模攻击都是由于意识形态冲突引起的。然而,MyDoom是第一次如此广泛并取得成功的攻击。这一事件开创了信息战的新趋势。随着技术越来越廉价,战术越来越容易掌握,在未来几年此类攻击可能会越来越多。
这种攻击造成的确切经济损失几乎无法计算。它包括对客户服务的损失、销售的损失以及负面宣传的影响。SCO悬赏25万美元,奖励任何提供信息以使肇事者绳之以法的人,这表明他们认为攻击的影响超过了奖金的数额。
特别值得注意的是,MyDoom病毒的变种在其最初目的达成很久之后仍然不断出现。这些变种使用了基本的MyDoom引擎,并以类似的风格传播,但效果不同。至少在2005年2月,MyDoom的新版本出现了。
供参考:Mac系统安全吗?
Macintosh的一些用户认为他们的系统是安全的,不会受到病毒攻击。然而,MacSecurity病毒以及诸如MacDefender等的相关病毒,都证明了这种观点是没有根据的。这些相关的病毒都是为Macintosh操作系统设计的假的防病毒软件。它们在2011年和2012年开始流行。虽然针对Macintosh编写的病毒确实要少得多,但随着苹果公司获得了更大的市场份额,针对Macintosh编写的病毒也会越来越多。
4. Gameover ZeuS
Gameover ZeuS是一种创建点到点僵尸网络的病毒。本质上讲,它在受感染的计算机和指挥控制计算机之间建立加密的通信,允许攻击者控制各种受感染的计算机。2014年,美国司法部暂时关闭了指挥控制计算机的通信;2015年,美国联邦调查局宣布悬赏300万美元奖励提供信息以缉拿Evgeniy Bogachev的人,因为Evgeniy Bogachev涉嫌参与了Gameover ZeuS。
指挥控制计算机是僵尸网络中用来控制其他计算机的计算机,它们是管理僵尸网络的中心节点。
5. CryptoLocker和CryptoWall
勒索软件中最广为人知的一个例子就是臭名昭著的CryptoLocker,它于2013年首次被发现。CryptoLocker使用非对称加密来锁定用户的文件。目前已经发现了CryptoLocker的几个变种。
CryptoWall是CryptoLocker的一个变种,在2014年8月首次被发现。它的外观和行为都很像CryptoLocker。除了加密敏感文件外,它还会与指挥控制服务器通信,甚至会对受感染的机器进行截屏。2015年3月,一个与间谍软件TSPY_FAREIT.YOI捆绑在一起的CryptoWall变种被发现,它除了持有索取赎金的文件外,还从受感染系统窃取证书。
2.2.13 防御DoS攻击
没有万无一失的方法可用来防范所有的DoS攻击,就像没有万无一失的方法来防止黑客企图或网络攻击一样。然而,可以采取一些措施将危险降到最低。除了前面讨论的SYN和RST cookie之外,本节将研究管理员可以采取的一些步骤,以使他们的系统不易受到DoS攻击。
首先要考虑这些攻击是如何进行的。它们可能是通过ICMP数据包执行的,ICMP数据包用于在Internet上发送错误消息,或者由ping和traceroute这样的实用程序发送。简单地配置防火墙以拒绝来自外网的ICMP数据包将是保护网络免受DoS攻击的主要步骤。由于DoS/DDoS攻击可以通过各种各样的协议来执行,因此你还可以将防火墙配置为不管是什么协议或端口,都完全不允许任何流量入站。这似乎是个激进的步骤,但它肯定是安全的步骤。
供参考:阻塞所有流量
大多数网络都必须允许一些流量入站。这可能是到网络的Web服务器或电子邮件服务器的流量。由于这个原因,你往往不会看到防火墙阻止所有流量入站的情况。如果你不能阻止所有的流量入站,那么就尽可能有所选择,只允许绝对必要的流量入站。
如果你的网络足够大,大到有内部路由器,那么可以配置这些路由器,以禁止任何非源于你所在网络的流量。这样,即便数据包通过了防火墙,它们也不会在整个网络中传播。由于所有TCP包都有一个源IP地址,所以判断一个包是来自网络内部还是来自网络外部并不困难。另一种可能性是在所有路由器上禁止所有直接IP广播。这可以防止路由器向网络上的所有机器发送广播数据包,从而阻止许多DoS攻击。
由于许多分布式DoS攻击依赖于“不知情”的计算机作为发起点,因此减少这种攻击的一种方法是保护你的计算机免受病毒/蠕虫和特洛伊木马的攻击。本章稍后将讨论如何防范这些攻击,但现在需要记住三个要点:
- 始终使用病毒扫描软件并保持更新。
- 始终保持操作系统和软件补丁更新。
- 制定策略规定员工不能下载任何东西到他们的机器上,除非下载经过了IT人员允许。
这些步骤都不能确保你的网络彻底安全,不成为DoS攻击的受害者或攻击的发起点,将有助于减少发生这两种情况的可能性。关于该话题有一个很好的资源就是SANS 研究所网站www.sans.org/dosstep/ 。这个网站有很多防御DoS攻击的好技巧。
2.3 防御缓冲区溢出攻击
病毒、DoS和特洛伊木马攻击可能是攻击系统最常见的方式,但它们并不是唯一可用的方法。攻击系统的另一种方式称为缓冲区溢出(buffer overflow)攻击,或者称为缓冲区过载(buffer overrun)攻击。一些专家认为,缓冲区溢出攻击发生的频率不比DoS攻击发生的频率低,几年以前可能是这样,但现在的情况有所不同。缓冲区溢出攻击设计成在缓冲区中放置比缓冲区容量更多的数据。但回想一下,至少有一种蠕虫使用缓冲区溢出来感染目标机器。这意味着,尽管这种威胁可能比以前小了,但它仍然是一个非常真实的威胁。
任何与因特网或专用网络通信的程序都必须接收一些数据。这些数据至少是暂时地存储在内存中,这个内存中的空间被称为缓冲区(buffer)。如果编写应用程序的程序员非常认真,那么缓冲区将截断或拒绝任何超过缓冲区限制的信息。考虑到在目标系统上可能运行的应用程序的数量以及每个应用程序中的缓冲区数量,至少有一个缓冲区没有被正确编写的概率足以引起任何谨慎的系统管理员的关注。一个有一定编程技能的人就可以编写程序,有目的地向缓冲区中写入超出其容量的数据。例如,如果缓冲区可以容纳1024字节的数据,而你试图用2048字节填充它,那么额外的1024字节就会被轻松地加载到内存中。图2-7说明了这个概念。
如果额外的数据实际上是一个恶意程序,那么它已经被加载到内存中并在目标系统上运行。或者,攻击者可能只是想让目标机器的内存泛洪,从而覆盖当前正在内存中的其他项目并导致它们崩溃。无论哪种方式,缓冲区溢出都是非常严重的攻击。
幸运的是,缓冲区溢出攻击比DoS或简单的MS Outlook脚本病毒更难执行。要创建缓冲区溢出攻击,黑客必须具备良好的某种编程语言知识(通常选择C或C++),并充分理解目标操作系统/应用程序,知道它是否具有缓冲区溢出弱点,以及如何利用该弱点。
供参考:什么是Outlook脚本病毒?
微软的 Outlook允许程序员使用Visual Basic编程语言的一个子集编写脚本,这种语言被称为VBA(Visual Basic for Applications)。实际上,微软所有的Office产品都内置了这种脚本语言。程序员还可以使用与VBA关联密切的VBScript语言。这两种语言都很易学。如果将这样的脚本附加到电子邮件中,并且收件人正在使用Outlook,则脚本可以执行。脚本的执行可以做很多事情,包括扫描地址簿、查找地址、发送电子邮件、删除电子邮件等。
是否易受缓冲区溢出攻击完全取决于软件的缺陷。一个完美程序不会允许缓冲区溢出。因为不可能做到完美,所以防止缓冲区溢出攻击的最佳防御措施就是定期给软件打补丁,以便在厂商发现漏洞后及时修正缺陷。
供参考:缓冲区溢出如何发生?
缓冲区溢出攻击只有在软件(通常是操作系统或Web服务器)中存在某个缺陷时才能发生。这意味着防止这种类型攻击的唯一方法是提高软件的质量。不幸的是,许多软件厂商似乎更注重快速上市,而不是广泛地测试和审查软件。精通安全的管理员会关注软件厂商所使用的测试方法。
2.4 防御IP欺骗
IP欺骗(IP spoofing)本质上是黑客获取计算机非授权访问的一种技术。尽管这是IP欺骗最常见的原因,但有时只是为了掩盖DoS攻击的来源。实际上,DoS和DDoS攻击通常会掩盖发起攻击的计算机的IP地址。
在IP欺骗中,入侵者发送给计算机系统的消息使用了不同于其实际来源的IP地址。如果入侵者的目的是获得非授权访问,那么被欺骗的IP地址是目标认为可信的主机的地址。要成功实施IP欺骗攻击,黑客必须首先找到一个目标系统认为是可信来源的机器的IP地址。黑客可能会使用各种技术来找到可信主机的IP地址。在拥有了可信的IP地址之后,入侵者就可以修改其传输的数据包首部,使得这些数据包看上去来自于那个主机。
与许多其他类型的攻击不同,IP欺骗在用于真正的攻击之前,安全专家在理论上就已经知道它。早在20世纪80年代,学术界就开始讨论IP欺骗的概念。虽然人们对隐含在这种技术背后的概念已经有一段时间的了解,但那也只是停留在理论上,直到Robert Morris发现了TCP协议中一个被称为序列预测(sequence prediction)的安全弱点。Stephen Bellovin在他的著名论文“TCP/IP协议集中的安全问题”(Security Problems in the TCP/IP Protocol Suite)中深入探讨了这个问题。
现在IP欺骗攻击正变得越来越少,主要是因为它们使用的场合越来越安全,在某些情况下这些场合已经不再使用。但是,欺骗手段目前仍然可以使用,因此所有安全管理员都应该解决这个问题。解决IP欺骗问题的方法包括:
- 不要透露关于你的内部IP地址的任何信息,这有助于防止这些地址被“欺骗”。
- 使用网络监控软件监控入站的IP数据包以发现IP欺骗迹象。有一款比较普及的产品是Netlog。这款产品及与其相似的产品都是在从外部接口入站的数据包中,查找那些源IP地址和目标IP地址都是你的本地域中地址的数据包。本质上,这意味着这些入站数据包宣称来自网络内部,但明明来自你的网络之外。找到一个这样的包就意味着攻击正在进行。
IP欺骗的危险在于,一些防火墙不会检查来自内部IP地址的数据包。如果过滤路由器没有配置成过滤其源地址为本地域的入站数据包,那么这些包是可以通过过滤路由器的。
潜在易受攻击的路由器配置的例子包括:
- 支持多个内部接口到外网的路由器;
- 代理应用使用源IP地址进行认证的代理防火墙;
- 有两个网卡、支持内部网络划分子网的路由器;
- 不过滤源地址是本地域的数据包的路由器。
防止IP欺骗的最好方法就是安装一个过滤路由器。过滤路由器对入站的数据包进行过滤,如果数据包有来自内部网络的源地址,则不允许它通过。此外,还应该过滤源地址与内部网络不同的出站数据包,以防止源自你的站点的源IP欺骗攻击。许多商用防火墙厂商,如Cisco、FortiGate、D-Link和Juniper,都提供了这种选项。
如果你的厂商提供的路由器不支持对网卡在入站端进行过滤,并且你觉得需要立即过滤这些包,那么你可以通过在外部网卡和外部连接之间安装第二个路由器来过滤伪装IP的数据包。将此路由器与原路由器连接的接口配置为阻塞所有源地址为内部网络地址的数据包。为此,可以使用一台过滤路由器或者具有两个网卡、支持包过滤的Unix系统。
2.5 防御会话劫持
另一种攻击形式是会话劫持(session hijacking)。TCP会话劫持是指黑客接管两台机器之间的TCP会话的过程。由于身份认证通常只在TCP会话开始时进行,这就允许黑客插入通信流并控制会话。例如,一个人可能远程登录到一台机器。在他与主机建立连接之后,黑客可能会使用会话劫持来接管该会话,从而访问目标机器。
一种常用的会话劫持方法是使用源路由(source-routed)IP数据包。这允许网络上A点的黑客通过让IP数据包穿过自己的机器而参与B和C之间的会话。
最常见的会话劫持类型是“中间人攻击”(man-in-the-middle attack)。在这种情形中,黑客使用某种类型的包嗅探程序,简单地监听两台计算机之间的传输,获取他想要的任何信息,但不干扰对话。
此类攻击的一个常见功能是对会话的一端执行DoS攻击,以阻止其响应。因为那个端点不再响应,所以黑客便可以插入他自己的机器来代替那个端点。
劫持连接的目的是利用信任关系并获得对原来没有访问权的系统的访问。
真正能够防御会话劫持的唯一方法是使用加密传输。第6章将讨论各种加密方法。如果数据包没有加密,那么通信就很容易受到会话劫持的攻击。许多网络管理员在外网通信时使用加密传输,但很少加密内网通信。要获得真正高水平的安全性,请考虑对所有传输都进行加密。
在第15章中将详细讨论包嗅探器。现在你需要知道的是,数据包嗅探器是一种软件,它能拦截在网络或Internet上传输的数据包并复制它们。这样攻击者可以得到每个包的副本。这些工具在网络流量监控中有合法用途,但也可以被黑客用来拦截通信,在某些情况下,还用于会话劫持。
2.6 阻止病毒和特洛伊木马攻击
本章前几节讨论了拒绝服务攻击、缓冲区溢出攻击和会话劫持。然而,病毒攻击才是对任何网络而言最常见的威胁。因此,对于任何有安全意识的网络管理员来说,防范病毒攻击必不可少。
2.6.1 病毒
根据定义,计算机病毒是一种自我复制的程序。一般来说,病毒还有其他一些令人憎恶的功能,但自我复制和快速传播是其特征。对于受感染的网络来说,这种增长对被感染的网络来说本身就是一个问题。蠕虫是一种可以在没有人类交互的情况下进行复制的病毒。
想想臭名昭著的Slammer病毒以及其快速、大容量扫描带来的危害。任何快速传播的病毒都可能降低网络的功能和响应能力。它可能导致过多的网络流量,并阻止网络正常运行。仅仅让流量超过网络设计的承载能力,就能让网络陷入暂时性非正常工作之中。
1.病毒是如何传播的
你已经看过了病毒是如何影响受感染的系统的,并查看了一些实际案例。很明显,防止计算机病毒的关键是阻止它传播到其他计算机。要做到这一点,你必须对病毒的典型传播方式有很好的理解。病毒通常有两种传播方式。
第一种方式是扫描计算机以获得与网络的连接,然后将自己复制到该计算机可以访问的网络上的其他计算机。这是病毒最有效的传播方式,也是蠕虫的典型传播方式。当然,这种方法比其他方法需要更多的编程技能。第二种更流行的方式是阅读电子邮件地址簿并将自己发送给地址簿中的每一个人。编写这种类型的病毒程序很简单,这也解释了它为什么使用得如此普遍。
到目前为止,第二种方式是病毒传播最常用的方式,而微软的Outlook可能是这种病毒最为频繁攻击的电子邮件程序。与其说这是由于Outlook存在安全漏洞,不如说是因为Outlook能轻松上手。所有微软的Office产品都设计成了让合法的程序员能够访问该应用程序的许多内部对象,从而可轻松创建能集成到微软Office套件中的应用程序。例如,程序员可以编写一个应用程序来访问Word文档、导入Excel电子表格,然后使用Outlook自动将生成的文档通过电子邮件发送给相关方。微软在简化这个过程方面做得特别好。完成这些任务通常仅仅需要编写少量程序。在Outlook中,引用Outlook并发送电子邮件只需不到5行代码。这意味着一个程序可以让Outlook自己发送电子邮件,而无须让用户知道。Internet上有大量代码示例展示怎样做到这一点,并且都是免费的。
无论病毒是怎么到来的,在它进入一个系统之后便试图传播。在许多情况下,病毒还试图对系统造成伤害。在病毒进入系统后,它可以做任何合法程序可以做的事情。这意味着它潜在地可以删除文件、更改系统设置或造成其他危害。病毒攻击的威胁再怎么强调也不为过。让我们花点时间来看看一些病毒的爆发,看一下它们是如何运作的,并描述它们所造成的破坏。其中有些病毒较老,有些病毒则是近期的。
2. Sobig病毒
Sobig病毒是一种旧病毒,但它是研究病毒传播的一个很好的例子。关于这种病毒,令人感兴趣的是其多模态传播方式。换句话说,它使用了不止一种机制来传播和感染新机器。Sobig将自己复制到网络的任何共享驱动器上,并将自己通过电子邮件发送给地址簿中的每个人。正是由于这种传播方式,Sobig可以被归类为蠕虫而不是简单的病毒。这种多模态传播能力说明Sobig这种病毒特别恶毒(virulent)—表示病毒传播迅速且容易感染新目标的术语。
正是由于病毒的多模态传播能力,所以确保你所在机构的每个人都受到合适的安全策略和程序的警告是非常关键的。如果网络上的一个人很不幸地打开了一封包含Sobig病毒的电子邮件,那么它不仅感染了这台机器,而且还感染了这个人可以访问的网络上的每个共享驱动器。
与大多数电子邮件传播的病毒攻击一样,这种病毒在邮件的主题或标题中有一些标志,可以用来识别电子邮件是否被病毒感染。电子邮件的标题可能是“here is the sample”或“the document”,并鼓励人们打开附件。打开后病毒就将自己复制到Windows系统目录中。一些Sobig变种病毒让计算机从Internet上下载一个文件,并导致打印问题。一些网络打印机会开始打印垃圾。Sobig.E变种甚至写Windows注册表,使病毒在计算机启动时即被加载。这些复杂的特性表明,Sobig的创建者知道如何访问Windows注册表、如何访问共享驱动器、如何更改Windows启动和如何访问Outlook。
推荐给所有安全管理员一个我本人使用的方法,即定期向你所在机构中的每个人发送电子邮件,告诉他们识别电子邮件被感染的标志。像www.f-secure.com 这样的网站列出了当前的病毒以及它们在电子邮件中的表现形式。我对这个列表进行总结,然后每个月发给单位里的每个人一次或两次。这样,机构的所有成员都知道他们绝对不应该打开的电子邮件。如果将此方法与不断灌输谨慎对待非预期电子邮件的方法相结合,就可以大大降低感染病毒的概率。
这种特定的病毒传播如此之快,受感染的网络如此之多,以至于仅仅是病毒的多次复制就足以使一些网络陷入瘫痪。该病毒并没有破坏文件或破坏系统,但因为它产生了大量的流量,使受其感染的网络陷入停滞。这种病毒本身具有中等水平的复杂性。在它消亡之后,许多变种开始出现,并进一步使情况复杂化。
3.病毒变种
有时,一些胆大的有恶意企图的程序员收到一个病毒副本(可能是他自己的机器被感染了)后,决定对它进行逆向工程。许多病毒攻击是以附加在电子邮件上的脚本形式来实现的。这意味着与传统的编译后的程序不同,病毒的源代码易于阅读和修改。这些程序员简单地获取病毒源代码,引入某些更改,然后重新发布变种。因制造病毒而被捕的人常常是变种病毒的开发者,他们缺乏原始病毒作者的技能,因此很容易被捕。
供参考:病毒的经济影响
要准确计算Flame、FakeAV、MacDefender或者任何其他病毒造成的经济损害是不可能的。然而,如果考虑IT专业人员在清理特定病毒上花费的时间,那么全球任何病毒的代价都是数百万美元。如果算上通过防病毒软件、雇佣顾问和购买像本书这样的书籍
来防御这些病毒的花费,那么所有病毒每年的影响很容易达到数十亿美元。事实上,一项研究显示,2007年病毒造成的经济损失超过140亿美元。
出于这个原因,许多安全专家建议政府对病毒制造者采取更严厉的惩罚措施。联邦执法机构在调查这些罪行方面发挥更积极的作用也会有所帮助。例如,一些像微软这样的私人公司已然开始提供大量的信息,引导抓捕病毒创造者,这是非常积极的举措。
你可以在以下网站了解更多关于病毒(包括以前或现有病毒)的信息:
- www.f-secure.com/en/web/labs_global/from-the-labs
- www.cert.org/news/
- www.symantec.com/security-center
供参考:为什么要编写病毒?
对于Flame(火焰病毒)或Stuxnet(震网病毒)来说,确定病毒作者的动机并不难。这些病毒的目的是监视或干扰特定国家的特定政府活动。在其他情况下,病毒(尤其是勒索软件)是从受害者身上榨取钱财计划的一部分。再说一遍,动机不难辨别。然而,对于其他病毒,如Bagle和Mimail,在第一时间理解为什么创造这些病毒就比较困难了。据我所知,目前还没有关于病毒作者思想的正式心理学研究。然而,通过在各种论坛上与所谓的病毒作者进行互动,并阅读已被定罪的病毒作者的访谈资料,我可以对他们的心态发表一些见解。
在某些情况下,病毒作者只是想证明他能够做到。对一些人来说,仅仅知道他们“智胜”了众多安全专家,就能给他们一种满足感。对另一些人来说,制造大面积伤害的能力给他们灌输了一种力量感,而这种力量感可能是他们在其他方面感觉不到的。当病毒作者被抓获时,往往发现他们很年轻、聪明、技术熟练,有强烈的反社会倾向,并且一般与任何同龄人群体格格不入。编写病毒帮助他们宣泄情感,就像其他人从破坏公物和涂鸦中得到的一样。
4.病毒骗局
另一种病毒曾经在某种程度上很流行:“非病毒病毒”,即病毒骗局(virus hoax)。黑客不是真正地编写一个病毒,而是简单地向他拥有的每个地址发送电子邮件。这封电子邮件声称来自某个知名的防病毒中心,并警告说有一种新的病毒正在传播。然后,电子邮件指示用户从计算机中删除一个文件,以清除病毒。然而,这个文件并不是真正的病毒,而是计算机系统的一部分。最早的一种病毒骗局jdbgmgr.exe就采用了此模式。它鼓励读者删除一个系统实际需要的文件。令人惊讶的是,很多人都采纳了这个建议,他们不仅删除了文件,而且还迅速给朋友和同事发了电子邮件,警告他们也从计算机中删除文件。
所有病毒攻击(病毒骗局除外)的一个共同主题是,指示接收者打开某种类型的附件。病毒传播的主要方式是作为电子邮件附件。因此使用下面几个简单的规则就可以大大降低机器感染病毒的概率:
- 始终使用病毒扫描器。McAfee和诺顿(Norton)是两个被广泛接受和使用的病毒扫描器。Malware Bytes、AVG以及其他软件也很有效。每隔一年大约花费30美元更新。在第9章将更为详细地讨论病毒攻击和病毒扫描器。
- 如果你对某一附件没有把握,那么不要打开它。
- 你甚至可以与朋友和同事交换一个代码字。告诉他们,如果他们想给你发送附件,应该在邮件的标题中加上代码字。没有看到代码字,你就不要打开任何附件。
- 不要相信发送给你的“安全警告”。微软不会以这种方式发出警报。定期检查微软网站,以及前面提到的一个杀毒网站。微软的安全网站(www.microsoft.com/security/ )是获得微软安全更新的唯一可靠网站。其他安全站点可能有准确的信息(如www.sans.org ),但如果你使用的是特定厂商的软件(如微软),那么到其站点查找警报和获取补丁才是最好的方式。
这些规则不会让系统得到100%的病毒防护,但在安全防护方面迈出了一大步。
2.6.2 病毒的分类
病毒的种类非常多。在本节中,我们将简要介绍一些主要的病毒类型。病毒可以按照其传播方式或它们在目标计算机上的活动来分类。必须指出的是,不同的专家对病毒的分类方式稍有不同。本节中介绍的分类法很通用,这是我多年来自创的一种分类方式,我发现这种分类法非常有用。
1.宏病毒
宏病毒感染Office文档中的宏(macro)。许多Office产品,包括微软的Office,都允许用户编写称为宏的微程序,这些宏也可以写成病毒。在某些业务应用程序中,宏病毒被写入宏中。比如,Microsoft Office允许用户编写宏来自动化完成某些任务。Microsoft Outlook设计成能让程序员使用Visual Basic编程语言的一个子集,即Visual Basic for Applications(VBA)来编写脚本。实际上,所有Microsoft Office产品都内置了这种脚本语言。程序员也可以使用与VBA 相关的VBScript语言。这两种语言都很易学。如果这样的脚本附加到电子邮件中,并且收件人正在使用Outlook,则脚本可以执行。这个执行可以做很多事情,包括扫描地址簿、查找地址、发送电子邮件、删除电子邮件等。
2.引导扇区病毒
引导扇区(boot sector)病毒不会感染目标计算机的操作系统,而是攻击驱动器的引导扇区。这使得传统杀毒软件更难检测和删除它们。这种杀毒软件安装在操作系统中,并且在某种程度上只在操作系统的上下文中运行。通过在操作系统之外操作,引导扇区病毒更难检测和删除。混合型病毒(multipartite virus)以多种方式攻击计算机—例如,感染硬盘的引导扇区和操作系统中的一个或多个文件。
3.隐形病毒
隐形(stealth)病毒是最大的病毒群体之一。这类病毒包括使用一种或多种技术隐藏自身的任何病毒。换句话说,这是试图避开杀毒软件的病毒。
特洛伊木马是隐藏病毒的一种绝好方法。通过将其绑定到一个合法的程序,病毒不仅会欺骗用户安装它,而且还可能逃避防病毒软件。
多态型病毒会不时地改变其形式,以避免被防病毒软件发现。一种更高级的形式叫作变态(metamorphic)病毒,它可以完全改变自己,不过这需要一个辅助模块来执行改写。
稀疏感染(sparse infector)病毒试图通过偶尔的恶意行为来逃避检测。使用稀疏感染病毒,用户会在短时间内看到症状,然后一段时间内没有症状。在某些情况下,稀疏感染的目标是特定的程序,但病毒只在目标程序执行的第10次或第20次时才执行。或者,一个稀疏感染病毒可能会突然活跃起来,然后休眠一段时间。这类病毒有很多变种,但基本原则是相同的:减少攻击频率,从而降低被发现的概率。
载荷分段(fragmented payload)是一种相当复杂的隐藏病毒的方法。病毒被分成多个模块。其中,加载器模块无害,不太可能触发任何杀毒软件,但是它会分别下载其他片段。当所有片段都准备好时,加载程序将组装它们并释放病毒。
4.勒索软件
现如今,在讨论恶意软件时不可能不探讨勒索软件(ransomware)。事实上,就在我写这本书的时候,世界刚遭受了一次大规模的勒索软件袭击。它刚开始攻击英格兰和苏格兰的医疗保健系统,后来传播到了更多地方。这个病毒就是臭名昭著的WannaCry病毒。尽管许多人第一次开始探讨勒索软件是在2013年CryptoLocker出现时,但勒索软件出现的时间实际上比这早得多。第一个已知的勒索软件是1989年的PC Cyborg Trojan,它只使用一个弱的对称密码加密文件名。
一般来说,勒索软件像蠕虫一样工作,然后或者禁用系统服务,或者加密用户文件。最后索要赎金来释放这些文件或服务。
2.6.3 特洛伊木马
当你在本章看到特洛伊木马这个术语时,你可能已经知道它是什么了。特洛伊木马是一个程序,它看起来是良性的,但实际上却有恶意目的。你可能会收到或下载一个看起来像是无害的商业工具或游戏的程序。更有可能的是,特洛伊木马不过是附在一封看上去无害的电子邮件上的一个脚本。当你运行程序或打开附件时,它会做一些你想不到的事情,例如:
- 从一个网站下载有害软件;
- 在你的机器上安装键盘记录器或其他间谍软件;
- 删除文件;
- 为黑客打开后门。
病毒和特洛伊木马攻击组合是很常见的。在这些情况下,特洛伊木马会像病毒一样传播。MyDoom病毒在机器上打开了一个端口,后来一种名为Doomjuice的病毒会利用这个端口,这样MyDoom就变成了病毒和特洛伊木马的组合体。
供参考:MyDoom是特洛伊木马吗?
一些专家认为,MyDoom实际上不是特洛伊木马,因为它并不伪装成良性软件。然而,有人可能会争辩说,发送MyDoom的电子邮件附件确实声称自己是一个合法附件,因此它可以被归类为特洛伊木马。不管你是否同意MyDoom是特洛伊木马,它确实很好地说明了恶意软件可以通过多种途径造成伤害。
特洛伊木马也可以专门为某个人定制。如果黑客想要窥探某个人,比如公司的会计,那么他可以专门设计一个程序来吸引那个人的注意。例如,如果黑客知道会计痴迷于高尔夫,他就可以写一个程序,计算障碍并列出最好的高尔夫球课程。黑客把这个程序发布到一个免费的Web服务器上。然后给许多人发电子邮件,包括那名会计,告诉他们关于免费软件的事。该软件一旦安装,就检查当前登录人员的姓名。如果登录名与会计的名称匹配,那么该软件就在用户不知情的情况下下载键盘记录器或其他监控应用。如果该软件不破坏文件或复制自己,那么它可能在相当长的一段时间内不被检测到。
编写这样的程序可能在几乎任何中等能力程序员的技能范围内。这是许多机构禁止将任何软件下载到公司机器上的原因之一。我尚未见过任何采用这种方式定制特洛伊木马的实际案例。但请记住,那些制造病毒攻击的人往往是具有创新精神的人。
另一种要考虑到的情况是具有相当破坏性的情况。在不披露编程细节的情况下,这里勾勒出一个基本情景来展示特洛伊木马的严重危害。想象一下,有一个小应用程序能显示一系列奥萨马·本·拉登的照片。这可能会受到许多美国人的欢迎,尤其是军队、情报部门或国防相关行业的人。现在假设应用程序简单地在机器上休眠一段时间,它不需要像病毒一样复制,因为计算机用户本人可能会把它发送给他的许多同事。在特定的日期和时间,软件连接到它能连接的任何驱动器,包括网络驱动器,开始删除所有文件。
如果这样的特洛伊木马被“无拘无束”地释放,那么30天之内它可能会被传送到成千上万的人手中。想象一下,当成千上万的计算机开始删除文件和文件夹时遭受的破坏。
这个场景会让你感到恐慌。包括专业人士在内的电脑用户通常会从Internet上下载各种文件,包括有趣的Flash动画和一些可爱的游戏。每次雇员下载这种性质的文件时,就有可能会下载到特洛伊木马。即便不是统计学家也能意识到,如果员工持续这样做足够长的时间,那么他们最终会把特洛伊木马下载到公司的机器上。
供参考:特洛伊木马案例
强烈警告读者不要尝试实际创建任何以上这些特洛伊木马场景。发放这种应用程序是一种犯罪,可能会导致长期的监狱刑罚和严重的民事处罚。这些例子只是为了向你展示特洛伊木马的破坏性。
创建特洛伊木马和病毒的人极富创造力,新的变种不断出现。很可能有其他人已经想到了与我所展示的场景相类似的东西。呈现这些场景的目的是确保网络管理员具有适当程度的谨慎。坦率地说,我希望每个网络管理员对病毒和特洛伊木马都有一定程度的偏执。
2.7 本章小结
本章讨论了系统最常见的威胁:病毒攻击、拒绝服务攻击、特洛伊木马、会话劫持和缓冲区溢出攻击。诸如身份盗用和网络钓鱼(使用虚假的电子邮件和网站来搜集终端用户的信息,这些信息可以用于身份盗用和欺诈)等其他攻击发生得更频繁,但它们对机构网络的直接威胁并不像对个人那么大。这就是为什么本章将重点放在攻击上—它们才是网络安全最该关心的。
在每种情况下,各种防御机制都可以分为两类:技术性的或程序性的。技术性防御是指那些你可以安装或配置以使系统更安全的项目。这包括微块(micro block)、RST cookie、堆栈调整和防病毒软件。过程性防御包括调整终端用户的行为以提高安全性,这些措施包括不下载可疑文件和不打开未经验证的附件。当你通读本书时,会发现网络防御必须从两个角度进行。后续章节将详细讨论技术性防御(防火墙、病毒扫描程序等),还将用整个章节专门讨论过程性防御(策略和过程)。理解有必要同时使用这两种方法保护你的网络是至关重要的。
很明显,保护你的系统是绝对关键的。在接下来的练习中,你将尝试使用诺顿和McAfee来练习防病毒程序。黑客攻击系统的方式多种多样,因此保护系统安全可能是一项相当复杂的任务。第6章将讨论更具体的方法,你可以通过这些方法来保护你的系统。
2.8 自测题
2.8.1 多项选择题
1.从攻击者的角度来看,DoS攻击的主要缺点是什么?
A.必须持续攻击
B.攻击不会造成实际损害
C.攻击易于被挫败
D.攻击很难执行
2.哪种DoS攻击基于保持连接半开?
A. 死亡之ping
B. Smurf攻击
C.分布式拒绝服务
D. SYN泛洪
3.依赖于向客户端发回哈希代码的DoS防御的名称是什么?
A.堆栈调整
B. RST cookie
C. SYN cookie
D.服务器反弹
4.如果你的Web服务器资源有限,但你需要强大的DoS防御,那么下列哪一种防御方式是最好的?
A.防火墙
B. RST cookie
C. SYN cookie
D.堆栈调整
5.堆栈调整防御的技术弱点是什么?
A.它很复杂,需要非常熟练的技术人员来实施
B.它只会减少超时,但不会真正阻止DoS攻击
C.它是资源密集型的,会降低服务器的性能
D.对DoS攻击无效
6.导致网络上的机器对该网络的某个服务器发起DoS攻击,该DoS攻击的名称是什么?
A. Smurf攻击
B. SYN泛洪
C. 死亡之ping
D.分布式拒绝服务
7.下列哪种病毒攻击会引发DoS攻击?
A. Faux
B. Walachi
C. Bagle
D. MyDoom
8.下列哪一种是推荐的防御DoS攻击的防火墙配置?
A.阻塞来自外网的ICMP数据包
B.阻塞所有入站的数据包
C.阻塞所有ICMP数据包
D.阻塞来自外网的TCP数据包
9.以下哪一项正确描述了缓冲区溢出攻击?
A.发送大量的TCP包使目标过载的攻击
B.试图将大量数据放入内存缓冲区的攻击
C.试图发送超大TCP包的攻击
D.试图将配置错误的数据放入内存缓冲区的攻击
10.防止缓冲区溢出攻击的最佳方法是什么?
A.使用健壮的防火墙
B.在路由器上阻塞TCP包
C.给所有软件打补丁并保持更新
D.停止所有的ICMP流量
11.下面哪一项是IP欺骗的最佳定义?
A.发送一个看上去来自可信IP地址的数据包
B.将数据包重新路由到不同的IP地址
C.建立一个看起来是不同站点的伪网站
D.发送配置错误的数据包
12.IP欺骗攻击的内在危险是什么?
A.对目标系统非常有害
B.许多这类攻击为其他攻击打开了大门
C.难以停止
D.许多防火墙不检查看似来自内部网络中的数据包
13.防御IP欺骗的最佳方法是什么?
A.安装路由器/防火墙,阻止看似来自网络内部的数据包
B. 安装路由器/防火墙,阻止看似来自外网的数据包
C.阻塞所有入站的TCP流量
D.阻塞所有入站的ICMP流量
14.关于会话劫持,下面哪个选项的描述最恰当?
A.通过特洛伊木马接管目标机器
B.远程控制目标机器
C.控制两台机器之间的通信链路
D.控制登录会话
15.下列哪个选项是关于病毒的最佳定义?
A.造成系统文件损坏的软件
B.自我复制的软件
C.对任何文件造成损害的软件
D.附加到电子邮件的软件
16.什么是特洛伊木马?
A.自我复制的软件
B.看起来是良性的软件,但实际上有某些恶意目的
C.删除系统文件、感染其他机器的软件
D.对系统造成损害的软件
2.8.2 练习题
练习2.1 基本的DoS攻击
1.设置一台装有Web服务器的机器。
2.使用实验室里的其他机器ping该目标机器。
3.继续这样做,直到目标不能够再响应合法的请求。
4.注意成功执行DoS攻击所需的每秒数据包总数。
练习2.2 配置防火墙来阻止DoS攻击
(注意:此练习仅适用于能访问实验室防火墙的班。)
1.使用防火墙的文档,了解如何阻塞入站的ICMP包。
2.配置防火墙阻塞这些包。
3.现在使用防火墙尝试再做一次练习2.1,看看它是否成功。
练习 2.3 安装诺顿防病毒软件
1.去诺顿的网站下载它的试用版防病毒程序。
2.配置它并扫描你的计算机。
3.去McAfee的网站下载它的试用版防病毒程序。
4.配置它并扫描你的计算机。
5.注意区分两个病毒扫描器在可用性、使用体验以及通用性能方面的区别。你会推荐哪一个,为什么?
练习2.4 配置路由器
(注意:此练习仅适用于能访问实验室路由器的班。)
1.查阅你的路由器文档,了解如何禁止来自外网的流量。
2.配置路由器以阻止来自外网的流量。
3.ping网络服务器以测试你的配置是否阻塞了外网的流量。
练习2.5 了解Blaster病毒
1.使用Web或其他资源查找Blaster病毒的信息。
2.描述这种病毒是如何工作、如何传播的。
3.研究并描述该病毒造成的破坏类型和数量。
4.病毒作者是否已被抓获或起诉?
5.为防御这种特定的病毒提出建议。
练习2.6 了解MyDoom
1.使用Web或其他资源查找有关MyDoom病毒的信息。
2.描述这种病毒是如何工作、如何传播的。
3.研究并描述该病毒造成的破坏类型和数量。
4.病毒作者是否已被抓获或起诉?
5.为防御这种特定的病毒提出建议。
2.8.3 项目题
项目2.1 最近的病毒攻击
1.使用Web或其他资源,查找在过去90天内传播的新病毒。
2.注意该病毒是如何传播的、造成的损害,以及建议的防范步骤。
3.这种病毒与Sasser病毒和MyDoom病毒相比如何?
项目2.2 建立防病毒策略
1.使用Web查找一个机构的防病毒策略。第1章列出的推荐资源是进行这类搜索的好地方。或者,你可以找一些你接触过的机构的策略,比如你的学校或者你的公司。
2.对该特定单位的防病毒策略,你会提出什么改进建议?
3.你的建议应该非常具体,并且包含支持这些建议的详细理由。
项目2.3 为什么会存在缓冲区溢出漏洞?
考虑缓冲区溢出漏洞是如何产生的,解释为什么你认为存在这些漏洞,提出建议以预防或减少此类漏洞。