计算机网络:自顶向下方法(第七版)第八章 学习分享(四)

文章目录


前言

阅读本文前请注意最后编辑时间,文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论与私信,指出错误或是进行交流等。

本文是关于《计算机网络:自顶向下方法(第七版)》的学习分享,内容书写顺序也是按照书中的顺序。本文并不会提及书中的所有内容,主要写重点的知识,以及自己感兴趣的内容。会对原文中的内容进行一定的精简,或者加上个人的理解。


计算机网络中的安全

使无线 LAN 安全

在无线网络中安全性是特别重要的关注因素,因为这时携带数据帧的无线电波可以传播到远离包含无线基站和主机的建筑物以外的地方。 在802. 11 中的安全性问题受到了技术界和媒体界的极大关注。 在进行大量讨论的同时, 一个几乎没有争论的事实是,看起来被广泛认同的初始802. 11 规范具有一些严重的安全性缺陷。 现在的确能够下载利用这些漏洞的公共域软件,使得那些使用该普通802. 11 安全性机制的用户面对安全性攻击,就像根本没有使用安全性措施的网络用户一样,门户洞开。

在下面一节中,我们讨论最初在802. 11 规范中标准化的安全性机制,该规范统称为有线等效保密 (Wired Equivalent Privacy, WEP) 。 顾名思义, WEP 意欲提供类似于在有线网络中的安全性水平。 接下来我们将讨论WEP 中的安全性漏洞并讨论802. 11i标准,后者是在2004 年采纳的 802. 11 的本质上更为安全的版本。

有线等效保密(简要介绍)

lEEE 802. 11 的 WEP 协议设计于 1999 年,为在主机和无线接入点(即基站)之间提供鉴别和数据的加密。 WEP并没有指定密钥管理算法,因此它假定主机和无线接入点之间就密钥达成了某种一致。 鉴别以下列方式进行:

  1. 无线主机通过接入点请求鉴别。
  2. 接入点以一个 128 字节的不重数值响应该鉴别请求。
  3. 无线主机用它与这个接入点共享的密钥加密这个不重数值。
  4. 接入点解密主机加密的不重数值。
    如果解密所得不重数值与初始发给主机的值相同,则这个接入点鉴别了该主机。

    上图阐述了 WEP 数据加密算法。

IEEE 802. 11i

在IEEE 802. 11 于 1999 年发布后不久,就开始研发具有更强安全性机制的 802. 11 的新型、改进版本。 这个新标准被称为802. 11i, 于2004 年最终得到批准。 如我们将看到的那样,WEP提供了相对弱的加密、仅有单一方式执行鉴别并且没有密钥分发机制,但IEEE 802. 1 l i 却提供了强得多的加密形式、一种可扩展的鉴别机制集合以及一种密钥分发机制。

上图概述了 802. 11i 的框架。 除了无线客户和接入点外, 802. 11i 定义了一台鉴别服务器, AP能够与它通信。 鉴别服务器与 AP 的分离使得一台鉴别服务器服务于许多 AP,集中在一台服务器中作出有关鉴别和接入(通常是敏感)的决定,降低了 AP的成本和复杂性。 802. 11 i 运行分为 4 个阶段:

1 ) 发现。 在发现阶段, AP通告它的存在以及它能够向无线客户节点提供的鉴别和加密形式。 客户则请求它希望的特定鉴别和加密形式。 尽管客户和 AP 已经交换了报文,但该客户还没有被鉴别,也还没有加密密钥,因此在该客户能够通过无线信道与任何远程主机通信之前,还需要进行几个其他步骤。

2 ) 相互鉴别和主密钥 (MK) 生成。 鉴别发生在无线客户和鉴别服务器之间。 在这个阶段,接入点基本是起中继的作用,在客户和鉴别服务器之间转发报文。 可扩展鉴别协议(Extensible Authentication Protocol, EAP)定义了客户和鉴别服务器之间交互时简单的请求/响应模式中使用的端到端报文格式。 EAP报文使用EAPoL (EAP over LAN)进行封装,并通过 802. 11 无线链路发送。这些EAP报文在接入点拆封,然后再使用RADIUS 协议重新封装,经 UDP/IP 传输到鉴别服务器。 尽管 RADIUS 服务器和协议并不为 802. 11i 所要求,但它

们是802. 11i 的事实上的标准组件。 使用 EAP, 鉴别服务器能够选择若干方式中的一种来执行鉴别。 802. 11i 虽未强制一种特殊的鉴别方法,但经常使用 EAP-TLS鉴别方案 。 EAP-TIS 使用类似于公钥技术(包括不重数加密和报文摘要),以允许客户和鉴别服务器彼此相互鉴别,并导出为双方所知的一个主密钥。

  1. 成对主密钥 (Pairwise Master Key, PMK) 生成。 MK 是一个仅为客户和鉴别服务器所知的共享密钥,它们都使用 MK来生成一个次密钥,即成对主密钥 (PMK)。 鉴别服务器则向 AP发送该PMK。 这正是我们所希望达到的目的! 客户和 AP现在具有一个共享的密钥(前面讲过在WEP 中根本不涉及密钥分发的问题),并彼此相互鉴别。 它们此时已经快要能发挥效用了。

  2. 临时密钥 (Temporal Key, TK) 生成。 使用 PMK, 无线客户和 AP 现在能够生成附加的、将用于通信的密钥。 其中的关键是临时密钥, TK将被用于执行经无线链路向任意远程主机发送数据的链路级的加密。802. 11 i 提供了几种加密形式,其中包括基于 AES 的加密方案和 WEP 加密的强化版本

运行安全性:防火墙和入侵检测系统

遍及本章我们已经看出,因特网不是一个很安全的地方,有坏家伙出没从事着各种各样的破坏活动。 给定因特网的不利性质,我们现在考虑一个机构网络和管理它的网络管理员。 从网络管理员的角度看,世界可以很明显地分为两个阵营: 一部分是好人,他们属于本机构网络,可以用相对不受限制的方式访问该机构网络中的资源;另一部分是坏家伙, 他们是其他一些人,访问网络资源时必须经过仔细审查。在许多机构中,从中世纪的城堡到现代公司的建筑物,都有单一的出口/入口,无论好人坏人出入该机构,都需要进行安全检查。 在一个城堡中,可以在吊桥的一端的门口执行安全检查;在公司大厦中,这些工作可在前台完成。 在计算机网络中,当通信流量进入/离开网络时要执行安全检查、做记录、丢弃或转发,这些工作都由被称为防火墙、入侵检测系统 (IDS) 和入侵防止系统 (IPS) 的运行设备来完成。

防火墙

防火墙 (firewall) 是一个硬件和软件的结合体,它将一个机构的内部网络与整个因特网隔离开,允许一些数据分组通过而阻止另一些分组通过。 防火墙允许网络管理员控制外部和被管理网络内部资源之间的访问,这种控制是通过管理流入和流出的流量实现的。 防火墙具有3 个目标:

• 从外部到内部和从内部到外部的所有流量都通过防火墙。 下图显示了一个防火墙,位于被管理网络和因特网其余部分之间的边界处。 虽然许多大型机构可使用多级防火墙或分布式防火墙 , 但在对该网络的单一接入点处设置一个防火墙,这使得管理和施加安全访问策略更为容易。

• 仅被授权的流量(由本地安全策略定义)允许通过。

• 防火墙自身免于渗透。 防火墙自身是一种与网络连接的设备,如果设计或安装不当,将可能危及安全,在这种情况下它仅提供了一种安全的假象(这比根本没有防火墙更糟糕!)。

防火墙能够分为 3 类:传统分组过滤器 (traditional packet filter) 、 状态过滤器(slateful filter ) 和 应用程序网关 (application gateway) 。

  1. 传统的分组过滤器
    如上图所示,一个机构通常都有一个将其内部网络与其ISP (并因此与更大的公共因特网相连)相连的网关路由器。 所有离开和进入内部网络的流量都要经过这个路由器,而这个路由器正是分组过滤 (packPt filtering) 出现的地方。 分组过滤器独立地检查每个数据报,然后基于管理员特定的规则决定该数据报应当允许通过还是应当丢弃。 过滤决定通常基于下列因素:
    • IP 源或目的地址
    • 在 lP 数据报中的协议类型字段: TCP、 UDP、 ICMP、 OSPF 等。
    • TCP 或 UDP 的源和目的端口
    • TCP 标志比特: SYN 、 ACK 等
    • ICMP 报文类型。
    • 数据报离开和进入网络的不同规则
    • 对不同路由器接口的不同规则。
    网络管理员基于机构的策略配置防火墙。 该策略可以考虑用户生产率和带宽使用以及对一个机构的安全性关注。 下表列出了一个机构可能具有的若干可能的策略,以及它们是如何用一个分组过滤器来处理分组的。 例如,如果该机构除了允许访问它的公共Web服务器外不希望任何入TCP连接的话,那么它能够阻挡所有的入TCP SYN 报文段,但具有目的地端口 80 的TCP SYN 报文段除外,并且该目的 IP地址对应于该Web服务器。 如果该机构不希望它的用户用因特网无线电应用独占访问带宽,那么它能够阻挡所有非关键性UDP 流量(因为因特网无线电经常是通过UDP发送的)。 如果该机构不希望它的内部网络被外部绘制结构图(被跟踪路由),那么它能够阻挡所有ICMP TTL过期的报文离开该机构的网络。

    一条过滤策略能够基于地址和端口号的结合。 例如,一台过滤路由器能够转发所有Telnet 数据报(那些具有端口号23 的数据报),但那些包括在一个特定的IP地址列表中的 Telnet 数据报除外,它们将不被转发。 这些策略仅允许在许可列表上的IP地址进行Telnet 连接。 不幸的是基于源地址的策略无法对其源地址被哄骗(篡改)的数据报提供保护。
    过滤也可根据TCP ACK 比特是否设置来进行。 如果一个机构要使内部客户连接到外部服务器,却要防止外部客户连接到内部服务器,这个技巧很有效,在每个TCP 连接中第一个报文段的 ACK 比特都设为0, 而连接中的所有其他报文段的 ACK 比特都设为 1。 因此,如果一个机构要阻止外部客户发起到内部服务器的连接,就只需直接过滤进入的所有ACK 比特设为0 的报文段。 这个策略去除了所有从外部发起的所有TCP连接,但是允许内部发起TCP连接。
    在路由器中使用访问控制列表实现防火墙规则, 每个路由器接口有它自己的列表。下表显示了对于某机构222.22/16 的访问控制列表的例子。 该访问控制列表适用于将路由器与机构外部ISP连接的某个接口。 这些规则被应用到通过该接口传递的每个数据报。 前两条规则一起允许内部用户在 Web上冲浪: 第一条规则允许任何具有目的端口 80 的TCP分组离开该机构网络;第二条规则允许任何具有源端口80且ACK
    比特置1的TCP分组进人该机构网络。 注意到如果一个外部源试图与一台内部主机建立一条TCP连接,该连接将被阻挡,即使该源或目的端口为 80。 接下来的两条规则一起允许DNS 分组进入和离开该机构网络。 总而言之,这种限制性相当强的访问控制列表阻挡所有流量,但由该机构内发起的 WeL流量和 DNS流量除外。
  2. 状态分组过滤器
    在传统的分组过滤器中,根据每个分组信息做出过滤决定。 状态过滤器实际地跟踪TCP 连接,并使用这种知识作出过滤决定。
    为了理解状态过滤器,我们来重新审视上表中的访问控制列表。尽管限制性相当强,表中的访问控制列表仍然允许来自外部的 ACK=1 且源端口为 80 的任何分组到达,通过该过滤器。 这样的分组能够被 试图用异常分组来崩溃内部系统、 执行拒绝服务攻击或绘制内部网络的攻击者使用。 幼稚的解决方案是也阻挡TCP ACK 分组,但是这样的方法将妨碍机构内部的用户在Web上冲浪。
    状态过滤器通过用一张连接表来跟踪所有进行中的TCP连接来解决这个问题。 这种方法是可能的:因为防火墙能够通过观察三次握手 (SYN、 SYNACK 和 ACK) 来观察一条新连接的开始;而且当它看到该连接的一个FIN分组时,它能够观察该连接的结束。当防火墙经过(比如说)60秒还没有看到该连接的任何活动性,它也能够(保守地)假设该连接结束了。 某防火墙的一张连接表例子显示在下方第一张表中(用于状态过滤器的连接表)。 这张连接表指示了当前有3 条进行中的TCP连接,所有的连接都是从该机构内部发起的。此外,该状态过滤器在它的访问控制列表中包括了一个新栏,即"核对连接",如表中所示 , 注意到该表与传统的分组过滤器的访问控制列表相同,只是此时它指示应当核对其中两条规则所对应的连接。

    我们举出某些例子来看看连接表和扩展的访问控制列表是如何联手工作的。 假设一个攻击者通过发送一个具有TCP源端口 80和ACK标志置位的数据报,试图向机构网络中发送一个异常分组。 进一步假设该分组具有目的端口号12543 和源IP地址 150.23.23. 155。 当这个分组到防火墙时,防火墙核对表8-8 中的访问控制列表,该表指出在允许该分组进入机构网络之前还必须核对连接表。 该防火墙正确地核对了连接表,发现这个分组不是某进行中的TCP连接的一部分,从而拒绝了该分组。 举第二个例子,假设一个内部的用户要在外部Web 站点冲浪。 因为该用户首先发送了一个TCP SYN 报文段,所以该用户的TCP连接在连接表中有了记录。 当Web服务器发送回分组 (ACK 比特进行了必要的设置),该防火墙核对了连接表并明白一条对应的连接在进行中。 防火墙因此将让这些分组通过,从而不会干扰内部用户的Web 冲浪活动。
  3. 应用程序网关
    在上面的例子中,我们已经看到了分组级过滤使得一个机构可以根据IP 的内容和TCP/UDP 首部(包括IP地址、 端口号和ACK 比特)执行粗粒度过滤。 但是如果一个机构仅想为一个内部用户提供Telnet应用程序的过滤该怎样做呢?如果该机构要这些特权用户在允许创建向外部的Telnet会话之前首先鉴别他们自己该怎样做呢?这些任务都超出了传统过滤器和状态过滤器的能力。 的确,有关内部用户的身份信息是应用层数据, 并不包括在IP/TCP/UDP首部中。
    为了得到更高水平的安全性,防火墙必须把分组过滤器和应用程序网关结合起来。 应用程序网关除了看lP/TCP/UDP首部外,还基于应用数据来做策略决定。 一个应用程序网关 (application gateway ) 是一个应用程序特定的服务器,所有应用程序数据(入和出的)都必须通过它。 多个应用程序网关可以在同一主机上运行,但是每一个网关都是单独的进程。
    为了更深入地了解应用程序网关,我们来设计一个防火墙,它只允许内部客户向外Telnet, 不允许任何外部客户向内 Telnet。 这一策略可通过将分组过滤 (在一台路由器上)和一个Telnet应用程序网关结合起来实现,如图所示。

    路由器的过滤器配置为阻塞所有Telnet 连接,但从该应用程序网关IP 地址发起的连接除外。这样的过滤器配置迫使所有向外的Telnet连接都通过应用程序网关。 现在考虑一个要向外部Telnet 的内部用户。这个用户必须首先和应用程序网关建立一个Telnet 会话。 在网关(网关监听进入的Telnet 会话)上一直运行的应用程序提示用户输入用户 ID 和口令。 当这个用户提供这些信息时,应用程序网关检查这个用户是否得到许可向外Telnet。 如果没有,网关则中止这个内部用户向该网关发起的Telnet连接。 如果该用户得到许可,则这个网关: 1.提示用户输入它所要连接的外部主机的主机名;2.在这个网关和某外部主机之间建立一个Telnet 会话;3.将从这个用户到达的所有数据中继到该外部主机, 并且把来自这个外部主机的所有数据都中继给这个用户。 所以,该Telnet 应用程序网关不仅执行用户授权,而且同时充当一个Telnet 服务器和一个Telnet客户,在这个用户和该远程Telnet 服务器之间中继信息。
    内部网络通常有多个应用程序网关,例如Telnet、 HTTP、 FTP 和电子邮件网关。 事实上,一个机构的邮件服务器和Web高速缓存都是应用程序网关。应用程序网关也有其缺陷。 首先,每一个应用程序都需要一个不同的应用程序网关。第二,因为所有数据都由网关转发,付出的性能负担较重。 当多个用户或应用程序使用同一个网关计算机时,这成为特别值得关注的问题。 最后,当用户发起一个请求时,客户软
    件必须知道如何联系这个网关,并且必须告诉应用程序网关如何连接到哪个外部服务器。

入侵检测系统

我们刚刚看到,当决定让哪个分组通过防火墙时,分组过滤器(传统的和状态的)检查IP、 TCP、 UDP 和 ICMP首部字段。 然而,为了检测多种攻击类型,我们需要执行深度分组检查 (deep packet inspection) , 即查看首部字段以外部分,深入查看分组携带的实际应用数据。应用程序网关经常做深度分组检查。 而一个应用程序网关仅对一种特定的应用程序执行这种检查。

显然,这为另一种设备提供了商机,即一种不仅能够检查所有通过它传递的分组的首部(类似于分组过滤器),而且能执行深度分组检查(与分组过滤器不同)的设备。 当这样的设备观察到一个可疑的分组时,或一系列可疑的分组时,它能够防止这些分组进入该机构网络。 或者仅仅是因为觉得该活动可疑,该设备虽说能够让这些分组通过,但要向网络管理员发出告警,网络管理员然后密切关注该流量并采取适当的行动。 当观察到潜在恶意流量时能产生告警的设备称为入侵检测系统 (Intrusion Detection System , IDS) 。 滤除可疑流量的设备称为入侵防止系统 (Intrusion Prevention System , IPS) 。 在本节中我们一起学习 IDS 和 IPS 这两种系统,因为这些系统的最为有趣的技术方面是它们检测可疑流量的原理(而不是它们是否发送告警或丢弃分组)。 我们因此将IDS 系统和IPS系统统称为IDS系统。IDS 能够用于检测多种攻击,包括网络映射(例如使用 nmap进行分析)、端口扫描、TCP 栈扫描、 DoS 带宽洪泛攻击、蠕虫和病毒、操作系统脆弱性攻击和应用程序脆弱性攻击。目前,数以千计的机构应用了 IDS系统。 这些已部署的IDS系统有许多是专用的, 很多网络安全公司在市场上销售这些系统。 但是许多已部署的IDS 系统是公共域系统,如极为流行的 Snort IDS 系统(我们将简要讨论它)。

一个机构可能在它的机构网络中部署一个或多个IDS传感器。 上图显示了一个具有3 个IDS 传感器的机构。 当部署了多个传感器时,它们通常共同工作,向一个中心 IDS处理器发送有关可疑流量活动的信息,中心处理器收集并综合这些信息,当认为适合时向网络管理员发送告警。 在图中,该机构将其网络划分为两个区域:一个高度安全区域,由分组过滤器和应用程序网关保护,并且由 IDS系统监视; 一个较低度安全区域(称之为非军事区 (DeMilitarized Zone, DMZ)) , 该区域仅由分组过滤器保护,但也由 IDS 系统监视。 注意到 DMZ包括了该机构需要与外部通信的服务器,如它的公共Web服务器和它的权威DNS服务器。

此时你也许想知道,为什么使用多个IDS传感器?为什么在图中不只是在分组过滤器后面放置一个IDS 传感器 (或者甚至与分组过滤器综合)?我们将很快看到, IDS不仅需要做深度分组检查,而且必须要将每个过往的分组与数以万计的"特征 (signature) "进行比较;这可能导致极大的处理量,特别是如果机构从因特网接收每秒数十亿比特的流量时更是如此。 将IDS传感器进一步向下游放置,每个传感器仅看到该机构流量的一部分,维护能够更容易。 无论如何,目前有许多高性能IDS 和IPS 系统可供使用,许多机构实际上能够在靠近其接入路由器附近只使用一个传感器。

IDS 系统大致可分类为基于特征的系统 (signature-based system) 或基于异常的系统(anomaly-based system) 。 基于特征的 IDS 维护了一个范围广泛的攻击特征数据库。 每个特征是与一个入侵活动相关联的规则集。一个特征可能只是有关单个分组的特性列表(例如源和目的端口号、协议类型和在分组载荷中的特定比特串),或者可能与一系列分组有关。这些特征通常由研究了已知攻击、 技艺熟练的网络安全工程师生成。 一个机构的网络管理员能够定制这些特征或者将其加进数据库中。

从运行上讲,基于特征的IDS嗅探每个通过它的分组,将每个嗅探的分组与数据库中的特征进行比较。 如果某分组 (或分组序列)与数据库中的一个特征相匹配, IDS产生一个告警。 该告警能够发送一个电子邮件报文给网络管理员,能够发送给网络管理系统,或只是做日志以供以后检查。

尽管基于特征的IDS 系统部署广泛,但仍具有一些限制。 更重要的是,它们要求根据以前的攻击知识来产生一个准确的特征。 换言之,基于特征的IDS对没有记录的新攻击完全缺乏判断力。 另一个缺点是,即使与一个特征匹配,它也可能不是一个攻击的结果,因此产生了一个虚假告警。 最后,因为每个分组必须与范围广泛的特征集合相比较, IDS可能处于处理过载状态并因此难以检测出许多恶意分组。

当基于异常的IDS观察正常运行的流量时,它会生成一个流量概况文件。 然后,它寻找统计上不寻常的分组流,例如, ICMP分组不寻常的百分比,或端口扫描和 ping掠过导致指数性突然增长。 基于异常的IDS 系统最大的特点是它们不依赖现有攻击的以前知识。在另一方面,区分正常流量和统计异常流量是一个极具挑战性的问题。 迄今为止,大多数部署的IDS 主要是基于特征的,尽管某些IDS包括了某些基于异常的特性。

Snort

Snort 是一种公共域开放源码的 IDS, 现有部署达几十万 。它能够运行在Linux、 UNIX 和 Windows 平台上。 它使用了通用的嗅探接口 libpcap, Wireshark 和许多其他分组嗅探器也使用了 libpcap。 它能够轻松地处理 100Mbps 的流量; 安装在千兆比特/秒流量速率下工作,需要多个Snort传感器。

为了对Snort有一些认识,我们来看一个Snort特征的例子:

bash 复制代码
alert icmp $EXTERNAL_NET any-> $HOME_NET any
(msg: "ICMP PING NMAP"; dsize: 0; i type: 8; ) 

这个特征由从外部 ( E X T E R N A L N E T ) 进入机构网络 ( EXTERNAL_NET) 进入机构网络 ( EXTERNALNET)进入机构网络(HOME_NET) 的任何ICMP 分组所匹配,其类型是8 (ICMP ping) 并且具有空负载 (dsize = 0) 。 因为 nmap 用这些特定的特征产生这些ping分组,所以设计出该特征来检测 nmap 的 ping扫描。 当某分组匹配该特征时, Snort产生一个包括 ''ICMP PING NAMP" 报文的告警。

也许关于Snort 印象最为深刻的是巨大的用户社区和维护其特征数据库的安全专家。 通常在一个新攻击出现后的几个小时内, Snort社区就编写并发布一个攻击特征,然后它就能被分布在全世界的数十万Snort部署者下载。 此外,使用Snort 特征的语法,网络管理员能够根据他们自己的机构需求,通过修改现有的特征或通过创建全新的特征来裁剪某个特征。


参考目录

书籍:《计算机网络:自顶向下方法(第七版)》

相关推荐
m0_677904842 小时前
K8s学习
java·学习·kubernetes
|_⊙2 小时前
红黑树 (C++)
开发语言·c++·学习
ByteCraze2 小时前
手写高性能虚拟列表(详解!!!)
javascript·学习
扣脑壳的FPGAer2 小时前
数字信号处理学习笔记--Chapter 1.3 常系数线性差分方程
笔记·学习·信号处理
东北洗浴王子讲AI2 小时前
GPT-5.4英语口语学习全攻略:从开口困难到流利表达的进阶之路
gpt·学习
王的宝库3 小时前
GitLab 常用 Git 命令新手指南
git·学习
ruan1145143 小时前
MySQL -- 个人学习记录
学习
red_redemption3 小时前
自由学习记录(161)
学习
南境十里·墨染春水3 小时前
linux学习进展 主函数的参数
linux·运维·学习