跳到主要内容

网络安全基础02

接上一篇 网络安全基础

网络各层的安全实例

物理层实例:信道加密机

信道加密技术是在物理层提供通信数据的机密性和完整性的方法。这项技术在计算机网络出现之前(甚至在数字通信之前)就已经存在了。

信道加密机位于通信结点(如路由器)前端,将通信结点发送的所有数据都进行加密处理,然后再发送到物理链路上。信道加密机一般用于点对点链路,并成对使用。信道加密是一种物理层的链路级加密(链路级加密也可以在数据链路层进行),网络中每段链路上的加密是独立实现的。

image.png

使用信道加密技术的一个好处就是对上层协议几乎没有任何影响(即具有很好的透明性),为通过该链路的所有数据提供安全保护。由于链路上传输的协议数据单元中的控制信息和数据信息都被加密了,掩盖了源地址和目的地址,因此还能防止各种形式的流量分析。

信道加密机完全使用硬件加密技术,速度快,不需要传送额外的数据,采用这种技术不会减少网络的有效带宽。 但由于分组是以明文形式在各结点内部进行加密的,所以结点本身必须是安全的。 一般认为网络的源点和终点在物理上都是安全的,但所有的中间结点(包括可能经过的路由器)则未必都是安全的。

因此在网络互连的情况下,仅采用信道加密是不能保证端到端通信的安全性的,只能用于保护网络局部链路的通信安全。因此,在实际应用中通常只在容易被窃听的无线链路上(如卫星链路)或者在军用网络等专用网络的通信链路(如SDH专线)穿过不安全区域时使用信道加密技术,更多的情况是在网络层以上使用端到端的加密技术为用户提供安全通信服务。

运输层实例:SSL/TLS

当万维网能够提供网上购物时,安全问题就马上被提到桌面上来了。当一位顾客在网上在线购物时,他会要求得到下列安全服务。

1、顾客需要确保服务器属于真正的销售商,而不是属于一个冒充者(例如,一个钓鱼网站),因为顾客不希望将他的信用卡账号交给一位冒充者。同样,销售商也可能需要对顾客进行鉴别。

2、顾客与销售商需要确保报文的内容(例如,账单)在传输过程中没有被篡改。

3、顾客与销售商需要确保诸如信用卡账号之类的敏感信息不被冒充者窃听。

像上述这些安全服务,需要使用运输层的安全协议。现在广泛使用的有两个协议:

  • SSL (Secure Socket Layer),译为安全套接字层。
  • TLS (Transport Layer Security),译为运输层安全。

SSL 协议是 Netscape 公司在1994开发的安全协议,广泛应用于基于万维网的各种网络应用(但不限于万维网应用)。SSL 作用在端系统 应用层的 HTTP 和运输层之间,在 TCP 之上建立起一个安全通道,为通过 TCP 传输的应用层数据提供安全保障。

1995年,Netscape 公司把 SSL 转交给 IETF1,希望能够把 SSL 进行标准化。于是 IETF 在 SSL 3.0 的基础上设计了 TLS 协议,为所有基于 TCP的网络应用提供安全数据传输服务。

image.png

图7-20表示SSL/TLS处在应用层和运输层之间

在应用层中使用 SSL/TLS 最多的就是 HTTP,但并不局限于 HTTP。当用浏览器查看普通网站的网页时,HTTP 就直接使用 TCP 连接,这时 SSL/TLS 不起作用。但当用信用卡进行网上支付而键入信用卡密码时,支持 SSL/TLS 的 Web 服务器会提供一个使用 SSL/TLS 的安全网页,浏览器访问该网页时就需要运行 SSL/TLS 协议。这时,HTTP 会调用 SSL/TLS 对整个网页进行加密。

在协议名 http 后面加上 s 代表 security,表明现在使用的是提供安全服务的 HTTP 协议。

SSL 提供以下三种安全服务。

1、SSL 服务器鉴别,允许用户证实服务器的身份。支持 SSL 的客户机通过验证来自服务器的证书来鉴别服务器的真实身份并获得服务器的公钥。

2、SSL 客户鉴别,SSL 的可选安全服务,允许服务器证实客户的身份。

3、加密的 SSL 会话,对客户和服务器间发送的所有报文进行加密,并检测报文是否被篡改。

下面以万维网应用为例来说明 SSL 的工作过程。

销售商 B 的万维网服务器使用 SSL 为顾客提供安全的在线购物。为此,万维网服务器使用 SSL 的默认服务端口 443 来取代普通万维网服务的 80 端口,并且该安全网页 URL 中的协议标识用 https 替代 http。

当顾客单击该网站链接建立 TCP 连接后,先进行 浏览器和服务器之间的握手协议,完成加密算法的协商和会话密钥的传递,然后进行安全数据传输。

其简要过程如图7-21所示

image.png

1、协商加密算法。浏览器 A 向服务器 B 提供一些可选的加密算法,B 从中选定自己所支持的算法,并告知 A。

2、服务器鉴别。服务器 B 向浏览器 A 发送一个包含其公钥的数字证书,A 使用该证书的认证机构 CA 的公开发布的公钥对该证书进行验证。

3、会话密钥计算。由浏览器 A 随机产生一个秘密数,用服务器 B 的公钥进行加密后发送给 B。双方根据协商的算法产生一个共享的对称会话密钥2

4、安全数据传输。双方用会话密钥加密和解密它们之间传送的数据,并验证其完整性。

SSL 握手协议

上面是简述的四次通信,这里参考 阮一峰的 SSL/TLS协议运行机制的概述 更加细致的握手过程

客户端发出请求(ClientHello)

首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做 ClientHello 请求。

在这一步,客户端主要向服务器提供以下信息。

(1) 支持的协议版本,比如TLS 1.0版。

(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。

(3) 支持的加密方法,比如 RSA 公钥加密。

(4) 支持的压缩方法。

这里需要注意的是,客户端发送的信息之中不包括服务器的域名3。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。

对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。

服务器回应(SeverHello)

服务器收到客户端请求后,向客户端发出回应,这叫做 SeverHello。服务器的回应包含以下内容。

(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

(2) 一个服务器生成的随机数,稍后用于生成 "对话密钥"。

(3) 确认使用的加密方法,比如 RSA 公钥加密。

(4) 服务器证书。

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供 "客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,所以会向正式客户提供 USB 密钥,里面就包含了一张客户端证书。

客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。

(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称 "pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。

至于为什么一定要用三个随机数,来生成"会话密钥",dog250解释得很好:

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

对于 RSA 密钥交换算法来说,pre-master-key 本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

pre master 的存在在于 SSL 协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么 pre master secret 就有可能被猜出来,那么仅适用 pre master secret 作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

服务器的最后回应

服务器收到客户端的第三个随机数 pre-master key 之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。

(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

防火墙与入侵检测系统

用户入侵包括利用系统漏洞进行未授权登录,或者授权用户非法获取更高级别权限。软件入侵方式包括通过网络传播病毒、蠕虫和特洛伊木马。此外还包括阻止合法用户正常使用服务的拒绝服务攻击等。而上一节讨论的一些安全机制都不能有效解决以上安全问题。

例如,加密技术并不能阻止植入了“特洛伊木马”的计算机系统通过网络向攻击者泄露秘密信息。防火墙(firewall)作为一种访问控制技术,通过严格控制进出网络边界的分组,禁止任何不必要的通信,从而减少潜在入侵的发生,尽可能降低这类安全威胁所带来的安全风险。

由于防火墙不可能阻止所有入侵行为,作为系统防御的第二道防线,入侵检测系统(Intrusion Detection System)通过对进入网络的分组进行深度分析与检测发现疑似入侵行为的网络活动,并进行报警以便进一步采取相应措施。

防火墙

防火墙(firewall)是把一个组织的内部网络与其他网络(通常就是因特网)隔离开的软件和硬件的组合。根据访问控制策略,它允许一些分组通过,而禁止另一些分组通过。

访问控制策略由使用防火墙的组织根据自己的安全需要自行制订。图7-25是防火墙在互连的网络中的位置。

image.png

一般将防火墙内的网络称为“可信网络”(trusted network),而将外部的因特网称为“不可信网络”(untrusted network)。

防火墙的基本原理

根据所采用的技术,防火墙一般分为两类,即 分组过滤路由器应用级网关

分组过滤路由器

分组过滤路由器是一种具有分组过滤功能的路由器,它根据过滤规则对进出内部网络的分组执行转发或者丢弃(即过滤)。过滤规则基于分组的网络层或运输层首部的信息,例如,源/目的IP地址、源/目的端口、协议类型、标志位等。

我们知道,TCP 的端口号指出了在 TCP 上面的应用层服务。例如,端口号 23是 TELNET,端口号 119是 USENET,等等。

所以如果在分组过滤器中将所有目的端口号为 23 的入分组(incoming packet)都进行阻拦,那么所有外单位用户就不能使用 TELNET 登录到本单位的主机上。

同理,如果某公司不愿意其雇员在上班时花费大量时间去看因特网的 USENET 新闻,就可将目的端口号为 119 的出分组(outgoing packet)阻拦住,使其无法发送到因特网。

通常,过滤规则以访问控制列表(Access Control List,ACL)的形式存储在路由器中,管理人员可以通过命令配置访问控制列表中的规则。

image.png

分组过滤可以是无状态的,即独立地处理每一个分组,如表所示的 ACL。

更复杂的分组过滤路由器支持有状态的分组过滤,即要跟踪每个连接或会话的通信状态,并根据这些状态信息来决定是否转发分组。

例如,一个目的地是某个客户动态分配端口(该端口无法事先包含在规则中)的进入分组被允许通过的唯一条件是:该分组是该端口发出的合法请求的一个响应。这样的规则只能通过有状态的检查来实现。

分组过滤路由器的优点是简单高效,且对于用户是透明的,但不能对高层数据进行过滤。例如,不能禁止某个用户对某个特定应用进行某个特定的操作,也不能支持应用层用户鉴别等。这些功能需要使用应用级网关技术来实现。

应用级网关

应用级网关也称为代理服务器(proxy server),它在应用层通信中扮演报文中继的角色。一种网络应用需要一个应用级网关,例如,在前面介绍过的万维网缓存就是一种万维网应用的代理服务器。

在应用级网关中可以实现基于应用层数据的过滤和高层用户鉴别。所有进出网络的应用程序报文都必须通过应用级网关。当用户通过应用级网关访问内网或外网资源时,应用级网关可以要求对用户的身份进行鉴别,然后根据用户身份对用户行为进行访问控制。当某应用客户进程向服务器发送一份请求报文时,先发送给应用级网关,应用级网关在应用层打开该报文,查看该请求是否合法(可根据应用层用户标识符或其他应用层信息)。如果请求合法,应用级网关以客户进程的身份将请求报文转发给原始服务器。如果不合法,报文则被丢弃。

例如,一个邮件网关在检查每一个邮件时,根据邮件地址或邮件的其他首部,甚至是报文的内容(如有没有某些像“导弹”“核弹头”等关键词)来确定该邮件能否通过防火墙。

应用级网关也有一些缺点。首先,每种应用都需要一个不同的应用级网关(可以运行在同一台主机上)。其次,在应用层转发和处理报文,处理负担较重。另外,对应用程序不透明,需要在应用程序客户端配置应用级网关地址。

image.png

通常可将这两种技术结合使用,图7-25所画的防火墙就同时具有这两种技术。它包括两个分组过滤路由器和一个应用级网关,它们通过两个局域网连接在一起。

个人防火墙

以上讨论的防火墙以保护内部网络为目的,又称为 网络防火墙,主要是由负责网络安全的管理员配置和使用,普通计算机用户较少接触。

对于普通用户而言,接触更多的是个人防火墙。所谓个人防火墙,指的是一种安装在用户计算机上的应用程序,其作用类似分组过滤器,对用户计算机的网络通信行为进行监控。

与网络防火墙不同,个人防火墙只保护单台计算机。在用户计算机进行网络通信时,个人防火墙将执行预设的分组过滤规则,拒绝或允许网络通信。在配置完善的情况下,个人防火墙可以较好地阻止网络中的黑客或恶意代码攻击用户计算机,也有助于用户发现主机感染的木马等恶意程序。

例如,用户在计算机上安装了一个新的网络游戏软件,该软件需要通过网络接收数据,防火墙会报警并询问用户阻止连接还是允许连接。如果用户选择允许连接,个人防火墙会为程序创建一个例外,如果该程序以后需要进行网络通信,则防火墙不会再报警,而是允许该软件从网络接收数据。

个人防火墙相对于网络防火墙而言,结构和实现都比较简单,在网络安全领域更多的是对网络防火墙的研究。

入侵检测系统

防火墙试图在入侵行为发生之前阻止所有可疑的通信。但事实是不可能阻止所有的入侵行为,有必要采取措施在入侵已经开始,但还没有造成危害或在造成更大危害前,及时检测到入侵,以便尽快阻止入侵,把危害降低到最小。

入侵检测系统(Intrusion Detection System,IDS)正是这样一种技术。IDS 对进入网络的分组执行深度分组检查,当观察到可疑分组时,向网络管理员发出告警或执行阻断操作(由于 IDS 的“误报”率通常较高,多数情况不执行自动阻断)。

IDS 能用于检测多种网络攻击,包括网络映射、端口扫描、DoS攻击、蠕虫和病毒、系统漏洞攻击等。入侵检测方法一般可以分为 基于特征的入侵检测基于异常的入侵 检测两种。

基于特征的 IDS

基于特征的 IDS 维护一个所有 已知攻击标志性特征 的数据库。

每个特征就是一个 与某种入侵活动相关联的行为模式或规则集,这些特征可能基于单个分组的首部字段值或数据中特定比特串,或者与一系列分组有关。当发现有与某种攻击特征匹配的分组或分组序列时,则认为可能检测到某种入侵行为。这些特征通常由网络安全专家生成,机构的网络管理员定制并将其加入到数据库中。被用于入侵检测的攻击特征必须具有很好的区分度,即这种特征出现在攻击活动中,而在系统正常的运行过程中通常不会出现。

但是基于特征的 IDS 只能检测已知攻击,对于未知攻击则束手无策。

基于异常的 IDS

基于异常的 IDS 通过观察正常运行的网络流量,学习正常流量的统计特性和规律,当检测到网络中流量某种统计规律不符合正常情况时,则认为可能发生了入侵行为。

例如,当攻击者在对内网主机进行 ping 搜索时,或导致 ICMP ping 报文突然大量增加,与正常的统计规律有明显不同。

但区分正常流和统计异常流是一个非常困难的事情。至今为止,大多数部署的 IDS 主要是基于特征的,尽管一些 IDS 包括了某些基于异常的特性。



不论采用什么检测技术都存在“漏报”和“误报”情况。如果“漏报”率比较高,则只能检测到少量的入侵,给人以安全的假象。对于特定 IDS,可以通过调整某些阈值或参数来降低“漏报”率,但同时会增大“误报”率。“误报”率太大会导致大量虚假警报,网络管理员需要花费大量时间分析报警信息,甚至会因为虚假警报太多对报警“视而不见”,使 IDS 形同虚设。

因此,误报率和漏报率是评价入侵检测系统效能的重要依据。

网络攻击及其防范

网络扫描

在实施网络攻击前,对攻击目标的信息掌握得越全面、具体,越能合理、有效地根据目标的实际情况确定攻击策略和攻击方法,网络攻击的成功率也越高。

网络扫描技术是获取攻击目标信息的一种重要技术,能够为攻击者提供大量攻击所需的信息。这些信息包括目标主机的 IP 地址、工作状态、操作系统类型、运行的程序及存在的漏洞等。主机发现、端口扫描、操作系统检测和漏洞扫描是网络扫描的4种主要类型。

主机发现

主机发现是进行网络攻击的前提。只有确定了目标主机的 IP 地址,才能采用各种攻击手段对其发起攻击。进行主机发现的主要方法是利用 ICMP 协议。

由于每台主机都运行了 ICMP 协议,攻击者向主机发送 ICMP 查询报文时,主机会用 ICMP 应答报文进行响应,攻击者从而知道该主机正在运行。

例如,攻击者可以利用 ping 命令对某个目标地址块中的所有 IP 地址进行连通性测试来发现运行的目标主机。防范这种 PING 扫描的方法之一是 配置防火墙不允许通过ICMP查询报文

为了规避防火墙对 ICMP 查询报文的过滤,攻击者可能会向目标主机发送一些首部字段不正确的 IP 数据报,当主机接收到首部字段不正确的数据报时会向源响应一个 ICMP 差错报告。

通常防火墙不会过滤 ICMP 差错报告,否则主机将失去进行差错报告的功能,而影响正常的网络通信。

端口扫描

攻击者在主机发现的基础上,可以进一步获取主机信息以便进行有针对性的网络攻击。

一些网络应用服务总是使用固定的运输层端口。例如,HTTP 使用 TCP 的 80 端口,而 DNS 使用 UDP 的 51 端口。通过端口扫描能够使攻击者掌握主机上所有端口的工作状态,进而推断主机上开放了哪些网络服务

由于活跃的 TCP 端口会对接收到的连接请求进行响应,因此攻击者通过尝试与目标端口建立连接来检测 TCP 端口是否处于工作状态。

对于无连接的 UDP,攻击者向目标端口发送 UDP 数据报,如果目标端口处于工作状态,通常不会作出任何响应(因为攻击者发送的 UDP 数据报的内容通常不会满足接收方的要求),但如果目标端口处于关闭状态,主机将会返回 ICMP 端口不可达的差错报告,攻击者据此推断该 UDP 端口处于工作状态。

操作系统检测

主机使用的操作系统不同,其存在的安全漏洞可能完全不同。检测远程主机的操作系统类别主要有 3 类方法。

一是获取操作系统旗标(banner)信息

当客户机向服务器发起连接时,服务器往往会返回各自独特的欢迎信息。根据这些信息攻击者可以推断出服务器的操作系统类别。

二是获取主机端口状态信息

不同操作系统通常会有一些默认开放的服务,这些服务会打开特定的端口进行网络监听。因此端口扫描的结果可用于推断主机操作系统的类别。

三是分析TCP/IP协议栈指纹

虽然 RFC 文档严格规定了各种协议的语法、语义和时序,但并没有规定所有实现细节,不同的协议实现在细节上会有所不同。

例如,在 TCP 标准中没有规定 初始窗口的大小。通常,各种 TCP 实现都会将初始窗口大小设置为一个固定的默认值。在不同操作系统的 TCP 实现中,这个默认值各有不同。通过分析协议数据单元或协议交互过程中的这些细节可以较准确地推断出目标主机的操作系统类别。这些协议实现细节的独特特征被称为协议指纹。

漏洞扫描

漏洞是信息系统在硬件、软件、协议的具体实现和系统安全策略等方面存在的缺陷和不足。漏洞的存在使得攻击者有可能在未授权的情况下访问系统,甚至对系统进行破坏。

漏洞扫描对于计算机管理员和攻击者而言都有重要意义。漏洞扫描分为基于主机的漏洞扫描和基于网络的漏洞扫描,这里只讨论基于网络的漏洞扫描。

利用前面的端口扫描和操作系统检测可以掌握目标系统上运行的操作系统和应用服务,根据这些信息在事先建立的漏洞库中查找匹配的漏洞,然后根据不同漏洞具体细节向目标系统发送探测分组,并从返回的结果准确判定目标系统是否存在可利用的漏洞。攻击者往往会针对具体漏洞开发专用的漏洞扫描软件。

所以最好经常更新系统安全库,这些寻找漏洞最简单的方式就是看官方给出的历史版本漏洞,黑客便可以对这些旧版本的系统进行攻击

网络扫描的防范

防范网络扫描主要有以下措施:

一是关闭闲置及危险端口,只打开确实需要的端口;

二是使用NAT屏蔽内网主机地址,限制外网主机主动与内网主机进行通信;

三是设置防火墙,严格控制进出分组,过滤不必要的 ICMP 报文;

四是使用入侵检测系统及时发现网络扫描行为和攻击者IP地址,配置防火墙对该地址的分组进行阻断。

网络扫描的行为特征比较明显,例如,在短时间内对一段地址中的每个地址和端口号发起连接等。很多防火墙也具有识别简单网络扫描的功能。

但网络攻防是矛与盾的较量,很多攻击者也在研究如何隐蔽自己的攻击行为,例如,调整扫描次序、减缓扫描速度、利用虚假源地址及分布式扫描等。这些对防火墙和入侵检测系统提出了更高的要求。

网络管理员也可利用网络扫描工具对系统进行定期自查,以便及时发现漏洞、关闭危险端口并安装安全漏洞补丁。从因特网可以下载各种网络扫描工具,例如,Nmap,Queso,SuperScan 等。这些网络扫描工具已成为网络安全的双刃剑。一方面网络攻击者用它们来发现攻击目标,另一方面安全管理员可以用它们来检测自己系统的安全性。

网络监听

网络监听是攻击者直接获取信息的有效手段。如果数据在网络中明文传输(绝大部分情况都是这样),攻击者可以从截获的分组中分析出账号、口令等敏感信息。

例如,远程终端 Telnet 就是使用明文传输登录的用户名和口令,存在极大的安全风险。即使网络通信经过了加密,攻击者还可以尝试密码破译。如果通信用户的加密算法比较脆弱或密钥过于简单,攻击者很可能破译出明文。

分组嗅探器

用于网络监听的工具通常称为分组嗅探器(packet sniffer),它是运行在与网络相连的设备上的程序,它被动接收 所有流经这个设备的网络适配器的链路层帧

在因特网上可以免费下载许多优秀的分组嗅探器软件,例如,被网络管理员经常使用的 Wireshark 就是一种分组嗅探器。

我们已经知道工作在混杂方式的网络适配器会接收所有接口上能监听到的 MAC 帧,而不论这些帧的目的 MAC 地址是否指向自己。

共享式局域网4 中,分组嗅探器将适配器设置为混杂方式,就可以监听到网络中所有的通信。

但是现在的局域网基本上都是使用交换机的交换式局域网,分组嗅探器通常仅能接收到发送给自己的帧或广播帧。为了能监听到网络中的其他通信内容必须采取一些特殊的手段。(例如 ARP 欺骗)

交换机毒化攻击

交换机的转发表空间是有限的,并且总是保留最新记录的表项。攻击者向交换机发送大量具有不同虚假源 MAC 地址的帧,这些虚假 MAC 地址表项会填满交换机的转发表,使真正需要被保存的 MAC 地址被更新淘汰。

这样该交换机就不得不广播大多数的帧,因为在交换机的转发表中找不到这些帧的目的 MAC 地址。这时,分组嗅探器就能监听到网络中其他主机的通信了。

ARP欺骗

我们知道在网络层以上使用 IP 地址标识主机,而在数据链路层使用 MAC 地址进行通信。攻击者能利用 ARP 的安全缺陷(ARP 代理)冒充其他主机的 MAC 地址来非法截取通信数据。ARP 为了提高协议的工作效率,减少不必要的网络通信量,主机对接收到的所有 ARP 报文(不论是 ARP 请求报文还是响应报文)都会根据其中的信息更新自己的 ARP 缓存。

攻击者可以广播或向特定主机发送一个 ARP 请求报文或响应报文,并声称被攻击主机的 IP 地址对应的 MAC 地址就是自己的 MAC 地址,收到该 ARP 报文的主机将会信以为真。

例如,攻击者 C 希望监听主机 A 与 B 之间的通信。为了达到此目的,C 向 A 发送欺骗 ARP 报文,声称自己是 B,而同时又向 B 发送欺骗 ARP 报文,声称自己是 A。之后,A 发送给 B 的分组会发送给 C,C 截取后再转发给 B,而 B 发送给 A 的分组也会发送给 C,C 同样截取后再转发给 A。

这样,A 和 B 的所有通信都会被 C 监听,而 A 和 B 完全不知道 C 的存在。

这实际上是一种中间人攻击。攻击者往往利用 ARP 欺骗将自己伪装成某个路由器,从而能监听到所有流经该路由器的所有通信,其危害极大。

网络监听的防范

为了防止网络监听,首先要尽量使用交换机而不是集线器,在交换机环境中攻击者更难实施监听。

同时很多交换机具备一些安全功能。例如,针对交换机毒化攻击,对于具有安全功能的交换机可以在某个端口上设置允许学习的源 MAC 地址数量的上限,当该端口学习的 MAC 地址数量超过限定数量时,交换机还会产生相应的违例动作,如丢弃帧并进行报警等。

网络管理员还可以 禁用交换机的自学习功能,将 IP 地址、MAC 地址与交换机的端口进行 静态绑定,限制非法主机接入,使攻击者无法实施交换机毒化攻击,也使 ARP 欺骗等攻击手段难以实施。

针对 ARP 欺骗可以对于要重点保护的主机或路由器使用静态 ARP 表,而不再依据 ARP 请求或响应报文进行动态更新。

由于分组嗅探只能在局域网中进行,因此划分更细的 VLAN 有助于限制攻击者监听的范围。最后,对付网络监听的最有效的办法是进行数据加密,避免使用 Telnet 这些不安全的软件。通过使用实体鉴别技术可以很好地防范中间人攻击。

拒绝服务攻击

拒绝服务(Denial of Service,DoS)攻击是攻击者最常使用的一种行之有效且难以防范的攻击手段,是针对系统可用性的攻击,主要通过 消耗网络带宽或系统资源(如处理器、磁盘、内存等)导致网络或系统不胜负荷,以至于瘫痪而停止提供正常的网络服务或使服务质量显著降低,或通过更改系统配置使系统无法正常工作(如更改路由器的路由表)来达到攻击的目的。

大多数情况下,拒绝服务攻击指的是前者。如果处于不同位置的多个攻击者同时向一个或多个目标发起拒绝服务攻击,或者一个或多个攻击者控制了位于不同位置的多台主机,并利用这些主机对目标同时实施拒绝服务攻击,则称这种攻击为 分布式拒绝服务(Distributed Denial of Service,DDoS)攻击,它是拒绝服务攻击最主要的一种形式。

基于漏洞的DoS攻击

比如 泪滴攻击:Teardrop Attacks

这类拒绝服务攻击主要是利用协议本身或其软件实现中的漏洞,向目标发送一些非常特殊的分组,使目标系统在处理时出现异常,甚至崩 溃。

这类攻击又称为剧毒包攻击。例如,有一种称为死亡之 Ping 的攻击,攻击者向目标系统发送超长的 ICMP 应答请求报文,该ICMP报文中数据的长度超过了 RFC 标准中规定的 IP 数据报的最大长度,一些系统在接收到这样意想不到的报文时会发生内存分配错误,导致堆栈崩溃,系统死机。防范基于漏洞的拒绝服务攻击最有效的方法就是及时为操作系统安装修补系统漏洞的安全补丁。

基于资源消耗的DoS攻击

SYN 洪泛

更多的拒绝服务攻击是通过向攻击目标发送大量的分组,从而耗尽目标系统资源来达到瘫痪目标的目的。在所谓的 SYN 洪泛攻击 中,攻击者向目标服务器发送大量的 TCP SYN 分组(连接请求),而这些分组的源地址都是伪造的不同的 IP 地址。服务器不能区分合法的 SYN 分组和欺骗的 SYN 分组,试图为每个 SYN 分组建立 TCP 连接,为其分配缓存和相关资源,并向这些伪造的 IP 地址发送 TCP SYN+ACK 分组进行响应。但攻击者不会对这些分组进行响应来完成第三次握手。这会导致服务器维护大量未完成的连接,当这些半连接的数量超过了系统允许的上限时,系统不会再接受任何连接请求,包括正常用户发送的连接请求。

泪滴攻击

另一个类似的攻击是向被攻击主机发送 IP 报文分片(泪滴攻击:Teardrop Attacks),但是从不发送完组成一个数据报的所有分片。被攻击主机一直缓存收到的部分分片,并徒劳地等待收齐一个数据报的所有分片,随着时间的推移,耗费越来越多的缓存,直到系统崩溃。

Smurf 攻击

Smurf 攻击采用了一种被称为反射攻击的间接攻击方法,通过向被攻击主机所在的网络发送大量的 ICMP 应答请求报文(即 Ping),这些请求报文的目的地址为该网络的广播地址,而源地址为被攻击主机的 IP 地址,最终导致该网络中的所有主机作为反射结点将应答都发往被攻击主机。

这可能导致目标网络拥塞或目标主机崩溃,无法对外提供服务。反射攻击具有放大攻击流量的功能,因为攻击源发送的一个分组经反射后将变成多个分组,反射网络中主机越多,这种放大效果越好。

防止被反射攻击所利用的方法是配置路由器过滤所有到本网的特定网络广播数据报。

分布式DoS攻击

基于资源消耗的拒绝服务攻击需要向目标主机发送大量的分组,通过单个源一般很难达到效果。在分布式 DoS 攻击中,攻击者先通过非法入侵手段控制因特网上的许多主机(例如,通过嗅探口令、漏洞渗透、木马等方式),然后在每个被控主机中安装并运行一个从属程序,该从属程序静静等待攻击者主控程序的指令。(肉鸡)

当有大量这样的从属程序运行后,主控程序则会向这些从属程序发出攻击指令,指示这些从属程序同时向攻击目标系统发起 DoS 攻击。这种分布式的 DoS 攻击往往能产生巨大的流量来淹没目标系统的网络带宽或直接导致目标系统资源耗尽而崩溃。很多DDoS 攻击还结合反射攻击技术进一步将攻击流量进行放大,产生足以使目标系统立即崩溃的超巨量的攻击流量。

DoS攻击的防范

到目前为止,还没有一种完全有效地抵抗 DoS 攻击的技术和方法,特别是基于大规模流量攻击的 DDoS 更难防范。目前应对 DoS 攻击的主要方法有以下几种。

一是利用网络防火墙对恶意分组进行过滤。

例如,为了防范 Smurf 攻击而将防火墙配置为过滤掉所有 ICMP 应答请求报文。但对于像 SYN 洪泛这类攻击很难区分哪些是恶意分组。一些防火墙可以 动态检测到指定服务器上半连接的数量,当该数量超过预设的阈值时将丢弃向该服务器的其他连接请求以保护内部服务器免受 TCP SYN 攻击。

二是在入口路由器进行源端控制

通常参与 DoS 攻击的分组使用的源 IP 地址都是假冒的,因此如果能够防止 IP 地址假冒就能够防止此类的 DoS 攻击。通过某种形式的源端过滤可以减少或消除假冒 IP 地址的现象。

例如,路由器检查来自 与其直接连接的网络分组的源 IP 地址,如果源 IP 地址非法,即与该网络的网络前缀不匹配,则丢弃该分组。现在越来越多的路由器开始支持源端过滤,但这种简单的源端过滤并不能彻底消除 IP 地址假冒,因为攻击者仍然可以冒充 ISP5 网络中的任意一台主机。

而且要通过源端过滤来防范 DoS 攻击,必须使因特网上所有的路由器都具有这样的功能才能达到防范的目的,而目前能支持源端过滤的路由器毕竟是少数,源端过滤并没有被所有路由器强制执行。

三是追溯攻击源

近年来的大量研究工作致力于路由器对流经的 IP 数据报首部进行标记的技术,通过该标记可以 追溯到 DoS 攻击数据报的源头。一旦确定了参与攻击的源主机,就把它隔离起来。但这个过程通常很慢,而且需要人工干预,因此目前主要用于事后追查及为采取相应的法律手段提供依据。

四是进行 DoS 攻击检测

及时检测 DoS 攻击对于减轻攻击所造成的危害非常必要。入侵检测系统可以通过 分析分组首部特征和流量特征 检测正在发生的 DoS 攻击,并进行预警。




总之,DoS攻击是最容易实现却又最难防范的攻击手段。上述措施只能部分地减轻DoS攻击所造成的危害,而不能从根本上解决问题。


  1. IETF即互联网工程任务组,成立于1985年底,是全球互联网最具权威的技术标准化组织,主要任务是负责互联网相关技术规范的研发和制定,当前绝大多数国际互联网技术标准出自IETF。
  2. 每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
  3. 使用 DNS 的负载均衡可以让同一个域名可以绑定多台服务器
  4. 利用集线器连接的局域网叫共享式局域网,利用交换机连接的局域网叫交换式局域网。
  5. 网络业务提供商