零、前言
Wireshark 是世界上最受欢迎的免费开源协议分析器,通常被网络和安全专业人员用于故障排除、分析、协议开发和取证。Wireshark 的主要目标是捕获网络流量,并尽可能详细地显示数据包数据。它帮助专业人员在微观层面上查看网络流量的内容。
本书从使用 Wireshark 和学习网络协议如何工作的角度出发,提供了一种进行协议分析、排除网络异常和检查安全问题的实用方法。我试图通过实际演示来描述您在日常操作中可能遇到的常见场景,以帮助您更好地理解这些概念。通过阅读本书,您将了解如何安装 Wireshark,如何使用 Wireshark GUI 元素,并了解一些幕后的高级功能,如过滤选项、统计菜单以及解密无线和加密流量。您可以成为团队中的超级英雄,帮助解决连接问题、网络管理任务和计算机取证,因为数据包是生命。如果你的日常工作需要处理计算机网络和安全,那么这本书会给你一个强有力的开端。快乐嗅!
这本书是给谁的
这本书是为那些对网络有基本经验和知识,并想尽快掌握 Wireshark 的学生/专业人士编写的。这本书将带你从安装到常用工具/技巧的使用。这本书将让你熟悉 Wireshark 的 GUI 元素,并解释协议分析背后的科学基础。
这本书涵盖的内容
第 1 章,安装 Wireshark ,将向您介绍 TCP/IP 模型的基础知识,并逐步引导您在自己喜欢的操作系统上安装 Wireshark。
第 2 章、Wireshark 和数据包分析介绍,将帮助您了解数据包分析背后的基础知识和科学,因为 Wireshark 派上了用场,并被证明是处理网络、安全和数字取证的专业人员的瑞士军刀。在这一章中,你也将理解把嗅探器放在一个战略位置的诀窍,以便最大限度地利用你的网络。
第 3 章、在 Wireshark 中过滤我们的方式,将帮助您识别和应用 Wireshark 过滤器,即捕获和显示过滤器。过滤提供了一个强大的方法来捕获或查看您想要的流量;这是从我们想要分析的数据包流中去除噪声的有效方法。
第 4 章、分析应用层协议,将帮助您了解通过 Wireshark 分析 HTTP、SMTP、FTP 和 DNS 等应用层协议的方法和手段。众所周知,应用层协议通常是客户端和服务器之间的接口。了解应用层协议数据包的结构和行为对于高效识别异常非常重要。
第 5 章,分析传输层协议 TCP/UDP ,将帮助您理解底层网络技术,通过分析 TCP 和 UDP 等传输层协议,实现网络数据包在路由基础设施间的移动。TCP 和 UDP 是网络协议的基础,了解它们的结构和行为非常重要。
第 6 章、网络安全数据包分析,将指导您使用 Wireshark 分析安全问题,例如分析恶意软件流量和网络中的足迹尝试。
第 7 章、分析稀薄空气中的流量,将帮助您理解执行无线数据包分析所涉及的方法和途径。本章向您展示了如何分析无线流量并查明可能出现的任何问题。我们还将学习如何使用 Wireshark 解密无线流量。
第 8 章,掌握 Wireshark 的高级功能,将让您深入了解 Wireshark 中可用的高级选项和元素,如统计菜单,还将提供如何使用命令行数据包嗅探应用(如 Tshark)的简要概述方法。
从这本书中获得最大收益
- 对网络协议、OSI 和 TCP/IP 模型有基本的了解
- 具有基本互联网连接的计算机系统遵循所描述的场景
下载彩色图像
我们还提供了一个 PDF 文件,其中有本书中使用的截图/图表的彩色图像。可以在这里下载:https://www . packtpub . com/sites/default/files/downloads/wireshark quick start guide _ color images . pdf。
使用的惯例
本书通篇使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄。下面是一个例子:“将下载的WebStorm-10*.dmg
磁盘镜像文件挂载为系统中的另一个磁盘。”
Bold :表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个例子:“从管理面板中选择系统信息。”
警告或重要提示如下所示。
提示和技巧是这样出现的。
取得联系
我们随时欢迎读者的反馈。
总体反馈:发送电子邮件feedback@packtpub.com
,在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发邮件至questions@packtpub.com
联系我们。
勘误表:虽然我们已经尽力确保内容的准确性,但错误还是会发生。如果你在这本书里发现了一个错误,请告诉我们,我们将不胜感激。请访问 www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交表格链接,并输入详细信息。
盗版:如果您在互联网上遇到我们作品的任何形式的非法拷贝,如果您能提供我们的地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com
联系我们,并提供材料链接。
如果你有兴趣成为一名作家:如果有你擅长的主题,并且你有兴趣写书或投稿,请访问 authors.packtpub.com。
复习
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packtpub.com。
一、安装 Wireshark
本章向您介绍 TCP/IP 模型的基础知识,并逐步演示如何在您喜欢的操作系统上安装 Wireshark。将向您介绍以下主题:
- Wireshark 是什么?
- TCP/IP 模型概述
- 在不同平台上安装和运行 Wireshark
- 常见安装错误疑难解答
Wireshark 简介
Wireshark 是一个先进的网络和协议分析器,它让您以图形的形式可视化网络的活动,并协助专业人员调试网络级的问题。Wireshark 通过提供对网络流量的详细了解,增强了网络和安全专业人员的能力。但是,Wireshark 也被恶意用户用来嗅探网络流量,以获取纯文本形式的敏感数据。
为什么使用 Wireshark?
许多人,包括我自己,都对 Wireshark 提供的简单的数据包捕获功能着迷。让我们快速浏览一下为什么大多数专业人员更喜欢 Wireshark 而不是其他数据包嗅探器的一些原因:
- 用户友好:Wireshark 的界面易于使用和理解,工具&的特性被很好的组织和表现。
- 健壮性 : Wireshark 能够轻松处理巨大的网络流量。
- 平台无关 : Wireshark 可用于不同风格的操作系统,无论是 Windows、Linux 还是 Macintosh。
- 过滤:Wireshark 中有两种过滤选项:
- 您选择要捕获的内容(捕获过滤器)
- 您可以选择捕获后要显示的内容(显示过滤器)
- 成本 : Wireshark 是一款免费的开源数据包分析器,由专业人士社区开发和维护。Wireshark 也提供一些付费的专业应用。更多详情请参考 Wireshark 的官方网站【https://www.wireshark.org/ 。
- 支持 : Wireshark 由一群分散在全球各地的贡献者持续开发。我们可以注册 Wireshark 的邮件列表,也可以从在线文档中获得帮助,这些文档可以通过 GUI 本身访问。各种其他在线论坛也可供您获得最有效的帮助;请访问 Google 付费 Wireshark 支持网站,了解更多可用的支持。
安装过程
Wireshark 的安装非常简单,容易理解。完成以下步骤,将其安装到您的系统上:
- 本书中的食谱和例子将在麦金塔电脑和视窗电脑上使用;对于其他操作系统,安装是相同的。有些操作系统,如 Kali Linux,预装了 Wireshark 版本。
- 找到适用于您的平台的正确版本的 Wireshark(Wireshark 2 . 6 . 1 Intel 64 . dmg)后,按照向导安装 Wireshark。
- 安装过程完成后,重新启动计算机以提交所做的更改。
- 双击桌面上的 Wireshark 图标运行应用:
Wireshark 屏幕
常见安装错误疑难解答
查看以下简单的清单,确保您能够成功运行 Wireshark(确保满足所有这些标准):
- 您仅从已知的可信来源下载了 Wireshark
- 您拥有运行 Wireshark 的管理权限
- Wireshark 和 Winpcap 驱动程序的安装已成功完成,没有任何异常
- 您已连接到要从中捕获网络流量的网络
- 如果您尝试使用虚拟机进行嗅探,请确保您已将网络适配器设置为桥接模式
- 重新启动您的计算机,以确保在成功安装 Wireshark 后应用了更改
- 您的网卡支持混杂模式嗅探(需要时)
- 您可以在 Wireshark 的主屏幕上看到所有接口(有线、无线和逻辑)
- 接口名称后面的线形图显示了主屏幕上的活动
- 此外,您拥有捕获网络流量的合法权限
TCP/IP 模型概述
网络通信的世界是由一组协议(规则和条例)管理的,以便按预期运行。协议管理端点之间的通信信道上的网络分组/段/帧的传输。为了理解网络数据包是如何粘在一起形成数据流的,我们需要理解 TCP/IP 模型这一网络基础知识。TCP/IP 模型最初被称为 DoD 模型,是由美国国防部管理的一个项目。我们在互联网和其他网络上看到的所有通信都是通过 TCP/IP 进行的。
TCP/IP 模型负责数据包生命周期的每个部分,即数据包是如何产生的,数据包是如何生成的,与数据包相关的信息是如何附加到数据有效负载(PDU)上的,它是如何通过中间节点路由的,如何与其他数据包链接等等。
在继续之前,强烈建议您自学一下 TCP/IP 及其工作原理,因为这本书要求您对协议有相当的了解。
TCP/IP 模型中的各层
TCP/IP 模型包括四层,如下图所示。每一层都有特定的用途,并利用一组协议来促进通信。每层中的每种协议都有特定的用途:
第一层是应用层,直接与用户及后续层和协议交互;它主要关注以用户可理解的格式表示数据。应用层还跟踪用户会话,监视谁在连接;它使用一组协议来帮助与用户和 TCP/IP 模型中的其他层进行交互。应用层中一些流行的协议如下:
- 超文本传输协议 ( HTTP )
- 文件传输协议 l ( FTP
- 简单网络管理协议 ( SNMP
- 简单邮件传输协议 ( SMTP
第二层是传输层。这一层的目的是创建套接字(端口和 IP 地址的组合),以便让两个端点进行通信。套接字有助于在两个或多个设备之间创建多个不同的连接(在 Chrome 中可以打开多个标签)。
不同网络/网段中的设备之间的通信需要 IP 地址(例如两个路由器接口之间的通信或互联网上的通信)。也可用于局域网 ( LAN )通信,通过物理地址(MAC)建立。除了端口号的限制范围之外,操作系统和应用可以选择任意端口(除端口1
到1013
之外)进行通信。
传输层也是通信的主干。在这一层工作的两个最重要的协议是 TCP 和 UDP:
- TCP 是面向连接的协议,也称为可靠协议。首先,在端点之间建立专用通信信道,然后进行数据传输。相等划分的块从源传输,并且接收端为每个接收到的分组发送确认。如果在规定的时间内没有收到确认,发送数据的一方将重新发送数据包。
- UDP 是一种无连接协议,通常被称为不可靠的通信形式。在 UDP 中,不建立专用信道,这也使其成为更简单、更快速的通信方式。端点也没有发送确认数据包。例如,如果您正在玩在线游戏,在通信信道上丢失几个数据包不会影响您的游戏体验,因为通过的数据包数量非常大,丢失几个数据包不会对网络流的整体质量产生太大影响。
第三层是互联网层,主要负责网络间数据的路由和移动。在这一层工作的主要协议是 IP ( 互联网协议)。IP 为网络数据包提供到达目的地所需的路由功能。这一层包含的其他协议有 ICMP 和 IGMP。
第四层也是最后一层是链路层(通常称为网络接口层)。它与物理网络硬件连接。TCP/IP 没有在这一层指定任何协议;但是实现了几个协议,比如地址解析协议 ( ARP )和点对点 协议 ( PPP )。这一层涉及信息在通信信道(有线或无线)中如何传播。链路层负责建立和终止连接,以及将信号从模拟转换为数字,反之亦然。网桥和交换机等设备在这一层运行。
随着数据从应用层进入链路层,一些信息以报头或报尾的形式附加到数据上,这使得 TCP/IP 的不同层可以相互通信。添加这些额外比特的过程被称为数据封装,在这个过程中,一个协议数据单元 ( PDU )在联网过程的最后被创建(通过应用到链路层)。
PDU 由数据、网络地址和协议信息组成,作为报头或报尾的一部分。当 PDU 到达最底层时,它已经嵌入了传输所需的所有信息。一旦 PDU 到达目的地,当它通过 TCP/IP 模型的每一层并在模型中向上行进时,附加的报头和报尾 PDU 元素被一个接一个地撕掉。
下图描述了封装的过程:
摘要
在本章中,我们讨论了您需要了解的基本网络概念,以及 Wireshark 简介。Wireshark 是一种协议分析器,被世界各地的技术专业人员用来捕获和分析网络级数据包。
我们还学习了 TCP/IP 模型。TCP/IP 模型有四层:应用层、传输层、网络层和链路层。数据在从一层传递到另一层时被封装;底部生成的数据包称为完整的 PDU。
TCP 是一种可靠的协议,因为确认是其过程的一部分,而 UDP 是一种不可靠的协议,因为不发送确认。
要安装 Wireshark,您只需访问http://www.wireshark.org,然后下载适合您操作系统的版本。
排除 Wireshark 故障的方法是,确保网络工作正常,您拥有安装和运行该应用所需的全部权限,并且安装已经完成,没有任何异常。
在下一章中,我们将运行我们的第一个 Wireshark 捕获,并感受一下协议分析的体验。
二、Wireshark 和数据包分析简介
本章将帮助你理解包分析背后的基础和科学。Wireshark 非常方便,对于处理网络、安全和数字取证角色的专业人员来说,它就像一把瑞士刀。在本章中,您将了解以下主题:
- Wireshark 简介
- Wireshark 的工作原理
- 捕获方法
- 了解 Wireshark 的 GUI
- 开始我们的第一次抓捕
Wireshark 是什么?
Wireshark 是一种数据包嗅探应用,由 IT 专业人员用于各种需求(包括取证、故障排除和增强网络性能)。你可以从https://www.wireshark.org/download.html免费下载,在那里它适用于大多数平台,包括 Linux、Macintosh 和 Windows。
数据包嗅探也称为接入线路,主要是读取通信信道中传输的信息。在捕获网络数据包之前,需要评估嗅探器的放置、要分析的协议和通信信道类型等因素。
Wireshark 的工作原理
Wireshark 通过计算机的网络接口从网络上收集网络流量,以混杂模式运行(如果需要),以检查和显示与协议、IP 地址、端口、报头和数据包长度相关的信息。下图说明了所有元素如何协同工作来向用户显示数据包级别的信息(来源:https://www.wireshark.org):
Wireshark 附带了 Winpcap/libcap 驱动程序,它使 NIC 能够以混杂模式运行;在混杂模式下,您唯一不需要嗅探的时候是当数据包直接、有意地发往您的设备和/或从您的设备生成时。
在操作系统上,您应该拥有运行 Wireshark 的权限。每个协议分析器都要遵循三个过程:收集、转换和分析。这些描述如下:
- 收集:选择一个接口监听流量,捕获网络数据包。
- 转换:增加非人类可读数据的可读性。数据包通过 GUI 转换成易于理解的信息。
- 分析:通过使用统计和图形特性,分析与数据包、协议、原始数据等相关的网络流量。
如前一章所述,协议是一组规则和条例,用于管理两台网络设备之间的通信过程,并控制设备的运行环境。
Wireshark 数据包分析简介
数据包/流量分析是对网络流量的研究,目的是了解数据包的结构、移动和行为。数据包分析是在实时流量上执行的,或者是在已经捕获的流量流上完成的。
日常网络基础设施中会出现许多问题,如果您负责处理网络或数字环境的安全,您需要为自己配备故障排除和分析工具。大多数问题会升级,并在网络中的数据包级别得到纠正。数据包级出现的问题可能会逐渐中断关键的业务通信,导致收入损失。即使最好的网络硬件利用最先进和最安全的协议和服务,也可能对您不利或表现异常。要在这种情况下执行根本原因分析,您可能需要深入到数据包级别,以便了解异常情况。数据包分析可用于以下目的:
- 通过查看数据包及其报头来分析网络问题,以获得更好的洞察力。
- 通过过滤模式和特征来检测和分析网络入侵企图。
- 通过在您的安全设备中建立防火墙规则,然后监控这些规则,来检测内部或外部用户对网络的滥用。
- 研究和隔离被利用的系统,使受影响的系统不会成为枢纽。
- 监控和分析在网络中实时传输的数据。
- 更好地控制网络中允许和限制的信息类别。例如,假设您想要在防火墙中创建一个规则来阻止对 torrent 站点的访问(点对点文件共享)。也可以通过访问列表在可管理的路由器上阻止对这些数据包的访问,但是可以通过流量分析来识别和验证这些数据包的来源。
- 通过过滤数据包踪迹来收集和报告网络统计数据。
- 了解谁在实时网络上以及他们在做什么(他们可能正在消耗网络带宽或尝试连接到受限制的网站),并了解是否有人试图绕过您配置的网络限制。
- 调试客户端/服务器通信,以便可以审核网络上传输的所有请求和回复。
- 识别位于网络角落并消耗带宽的应用。它们可能会使您的网络不安全、无响应或对公共网络可见。
- 调试网络协议实现和由于无意的错误配置或人为错误而产生的任何异常。
- 识别您网络中的异常/恶意流量模式,然后进行分析、控制/监督,并为此类事件做好准备。
执行数据包分析时,需要考虑以下事项:
- 要解释的协议
- 您是否需要捕获来自所有来源和所有目的地的流量
- 充分放置你的嗅探器
- 捕获与特定端口或服务相关的流量,以避免不必要的噪音
您应该记录和构建与网络流量模式和行为相关的用例。用例可以帮助工程师解决网络问题。
数据包分析器可以解释大多数网络协议(如 IP 和 ICMP)、传输层协议(如 TCP 和 UDP)和应用层协议(如 DNS 和 HTTP)。
如何进行数据包分析
网络数据包以原始的二进制形式被捕获,并通过 wiretap 库和捕获引擎,然后到达带有解析器插件和过滤器的核心引擎。然后翻译后的数据通过图形工具包 ( GTK )以数据包的形式显示出来。
捕获方法
为了捕获正确的数据包流,您需要知道在哪里放置您的协议分析器。根据不同的需求(数据包来源、数据包数量、数据包类型等),需要在网络中的某个位置放置协议分析器。此外,网络设备中的一些配置更改可能是必要的,例如交换机配置更改(在网络交换机中进行镜像以捕获来自一个或多个源的数据包)。以下小节讨论了在某些类型的拓扑中评估配置协议分析的最佳方式的几种方法。
基于集线器的网络
在基于集线器的网络拓扑中进行嗅探相对容易,因为您可以自由地将嗅探器放置在任何您想要的位置,因为集线器被设计为将每个数据包广播到所有连接的设备。
然而,由于这种设计缺陷,基于集线器的网络拓扑面临着整体性能方面的问题。网络集线器不具备将流量优先化或仅转发到特定端口的能力。他们经常成为碰撞相关问题的受害者。例如,如果连接到集线器的多台设备同时开始发送数据,数据包很可能会发生冲突,无法到达目的地。发送端将被告知丢失的分组,然后这些分组将被重新发送,但是这将耗费网络及其管理员的时间、不适当的带宽利用以及性能问题。
交换环境
由于在基于交换机的基础设施中存在相对较少的限制,包分析变得相当具有挑战性。像集线器一样,除了接收数据包的端口之外,交换机不会将数据包广播到每个网络端口。它们通过 ARP ( 地址解析协议)了解设备的物理地址,并用相应的 MAC 地址填充端口号列表。即便如此,通过一些硬件或配置的改变,还是有可能从其他端口捕获数据包。两种最流行的技术是 hub out 和端口镜像。
为了捕获来自一个或多个端口的数据包流,请使用交换机配置控制台配置端口镜像。大多数智能交换机都提供了通过易于理解的图形界面进行配置的选项。
让我们用一个逻辑图来简化一下。例如,假设我们有一台 24 端口的交换机和八台 PC,它们连接到不同的交换机端口。我们可以将嗅探器(Wireshark PC)放在任何空闲的交换机端口上,然后配置端口镜像,它会将所有流量从我们想要嗅探的设备复制到我们选择的端口。以下屏幕截图显示了 Cisco 交换机中用于配置端口镜像的一组命令:
那么,让我们更好地理解一下:在前面的截图中,我已经配置了什么来监听从端口fa0/2
到端口fa0/4
始发的所有数据包。端口fa0/2
将是目标机器,端口fa0/4
将是 Wireshark 机器。
一旦完成配置,我们将能够轻松地嗅探和分析从端口fa0/2
来回流动的网络数据包。这项技术是最容易配置的技术之一;你唯一需要事先知道的是如何使用网络设备。
下图描述了端口镜像的简单演示:
端口镜像
当您的交换机不支持端口镜像时,清除是可行的。要使用该技术,您必须将目标 PC 从交换网络中拔出,然后将集线器插入交换机,然后将分析仪和目标设备连接到集线器,这样目标设备就成为同一网络的一部分。
现在,协议分析器和目标机器属于同一个广播域。下图将使我们更容易以更简单的方式准确理解该过程:
走出去
ARP 中毒
毒害设备的 ARP 表条目,然后通过您的机器转发它们,这是从目标机器捕获流量的一种不道德的方式。
比方说,我们在 IP 192.168.1.1
处有一个默认网关,在 IP 192.168.1.2
处配置了一台客户机。这两台设备都维护着本地 ARP 缓存条目。这使它们能够通过局域网发送数据包。现在,位于 IP 192.168.1.3
的 Wireshark(使用arpspoof
或ettercap
来毒化 ARP 条目)机器将通过用多个 ARP 包淹没客户端和网关机器来毒化 ARP 缓存条目,向客户端 PC 声明默认网关已经被改变为 IP 192.168.1.3
,并声明客户端现在位于 IP 192.168.1.3
的网关;这将使每个数据包都通过 Wireshark 机器。
查看您的 PC/路由器/服务器中的 ARP 缓存的命令是arp -a
,它将显示与特定 IP 地址相关的 MAC 地址。看看正常的 ARP 条目:
ARP 中毒(正常情况)
下面是 ARP 中毒前条目的样子:
Before ARP is Poisoned
192.68.1.1 - (Server)
192.68.1.2 - AA:BB:EE
192.68.1.3 - AA:BB:DD
192.68.1.2 - (Client)
192.68.1.1 - AA:BB:CC
192.68.1.3 - AA:BB:DD
192.68.1.3 - (Attacker)
192.68.1.1 - AA:BB:CC
192.68.1.2 - AA:BB:EE
既然您已经了解了 ARP 是什么以及它是如何工作的,我们可以尝试用攻击者的 MAC 地址来毒化默认网关和客户端的 ARP 缓存。简单来说,我们将用攻击者的 MAC 地址替换默认网关的 ARP 缓存中客户端的 MAC 地址。我们将在客户端的 MAC 地址中做同样的事情,用攻击者的 MAC 地址替换默认网关的 MAC 地址。因此,从默认网关来回发往客户端的每个数据包都将通过攻击者的机器发送。下面是在一次成功的中毒攻击后,来自客户端、服务器和攻击机器的 ARP 条目。
After ARP is Poisoned
192.68.1.1 - (Server)
192.68.1.2 - AA:BB:DD
192.68.1.3 - AA:BB:DD
192.68.1.2 - (Client)
192.68.1.1 - AA:BB:DD
192.68.1.3 - AA:BB:DD
192.68.1.3 - (Attacker)
192.68.1.1 - AA:BB:CC
192.68.1.2 - AA:BB:EE
中毒的机器将无法确定他们的 ARP 是否被修改,除非主动检查。下图描述了 MiTM 攻击场景中涉及的所有三个系统的 ARP 表条目:
ARP 中毒(中毒场景)
除了这两种技术之外,市场上还有各种各样的硬件,通常称为 taps,可以放在任意两个设备之间来嗅探和分析流量。尽管这种技术在某些情况下可以有效地捕获网络流量,但由于其恶意性,它只应在授权和受控的环境中实施或部署。
通过路由器
在处理路由环境时,数据包分析的重要方面是将我们的嗅探器放在合适的位置,从那里我们可以捕获所需的流量数据包。在网络技术方面,处理路由结构需要更多的技能,当然在路由器方面也是如此。为了便于理解,考虑以下假设的路由环境。
路由器 1、路由器 2 和路由器 3 协同工作;每个服务器至少处理 2-3 台电脑的流量。路由器 1 充当根节点,同时控制其子网络节点(路由器 2 和路由器 3)的路由。
路由器 3 无法连接到路由器 1。为了解决这个问题,管理员在 router 3 区域内放置了一个嗅探器(协议分析器),并开始分析流量,但无法找出导致停机的异常情况。管理员决定更改协议分析器的位置,转到 router 1 区域,现在按照类似的步骤进行故障排除。过了一会儿,他们发现了问题所在,并成功地解决了问题。
结论是,在您的网络基础设施中放置嗅探器是一个非常关键的决定和任务。
读完这篇文章后,我希望我们对在某些拓扑结构中如何进行协议分析有了一定的了解。现在,让我们看看 Wireshark 接口是什么样子,以及我们如何开始捕获网络数据包。
如果你没有安装 Wireshark,你可以从https://www.wireshark.org/download.html获得一份免费的拷贝。要完成本书中的演示,您还需要熟悉界面。
Wireshark GUI
在讨论它的强大功能之前,让我们先来谈谈 Wireshark 领域的一些关键事件。
Wireshark 建于 20 世纪 90 年代末。Gerald Combs 是一名来自堪萨斯城的年轻大学毕业生,他开发了 Ethereal(Wireshark 的基本版本),当 Combs 开发出这项令人敬畏的发明时,他已经为自己找到了一份工作。服务几年后,库姆斯决定辞职,通过进一步开发 Ethereal 来追求自己的梦想。不幸的是,根据法律条款,库姆斯的发明是该公司专有软件的一部分。尽管如此,库姆斯还是辞去了工作,开始开发新版本的 Ethereal,并将其命名为 Wireshark。自 2006 年以来,Wireshark 一直处于积极开发阶段,并在全球范围内广泛使用。它支持公司 It 和 ICS ( 工业控制系统)800 多种协议。
在开始第一次捕获之前,我们需要熟悉一下可用的选项和菜单。
Wireshark GUI 有六个主要部分,解释如下:
- 菜单栏:这是一个概括形式的工具,在应用菜单中组织
。 - 主工具栏:这包括经常使用的工具/功能,提供软件的有效利用。
- 数据包列表窗格:显示 Wireshark 捕获的所有数据包。
- 数据包详细信息窗格:用于查看与数据包列表窗格中所选数据包相关的详细信息。关于分组的详细信息被分成对应于 TCP/IP 模型的每一层的类别。这可用于查看源和目的 IP 地址,以及以自下而上方式(链路层到应用层)排列的用于通信的不同协议。
- 字节窗格:以十六进制字节
的形式显示数据包中的数据及其对应的 ASCII 值;它以
的形式显示了这些值在线路中传输的情况。 - 状态栏:显示详细信息,如捕获的数据包总数。
下面的屏幕截图将帮助您识别应用中的不同部分;在继续下一步之前,请确保您已经熟悉了所有这些内容:
在工具栏区域,我们有一些有用的工具。我想给大家简单介绍一下其中的一些:
:选择监听接口
:定制捕获过程(界面、过滤器等)
:开始/停止/重新开始拍摄过程
:打开保存的抓图文件
:将当前抓图保存到文件中
:重新加载当前抓图文件
:关闭当前抓图文件
:转到上一个数据包
:转到下一个数据包
:转到特定的数据包编号
:打开/关闭数据包的颜色编码
:打开/关闭自动滚动
:放大、缩小、重置默认缩放
:根据需要改变颜色编码
:缩小窗口捕获数据包
:配置显示过滤器,只查看需要的内容
即使选择了接口,列表窗格中有时也不会列出任何数据包;这可能有多种原因,其中一些原因如下:
- 您没有任何网络活动
- 由于权限问题,您的接口无法捕获所需的数据包
- 您没有激活混杂模式,或者没有混杂模式选项
单击工具窗格中的 Capture 按钮后,Wireshark 将开始捕获,您将能够看到一些用不同代码、协议名称、数据包编号、IP 地址等标记的流量活动:
Wireshark 捕获屏幕
开始我们的第一次抓捕
既然已经向您介绍了 Wireshark 的基础知识,并且您已经学会了如何安装 Wireshark,我觉得您已经准备好开始您的第一次捕获了。我将指导您完成以下一系列步骤来启动/停止/保存您的第一次 Wireshark 捕获:
- 打开 Wireshark 应用。
- 选择一个界面来收听。
在您点击开始之前,我们有选项按钮,这给了我们自定义捕获过程的优势;但是现在,我们将使用默认配置:
捕获定制屏幕
以下是捕获过程的步骤:
- 单击开始按钮启动流量捕获。
- 打开浏览器。
- 在您的浏览器中访问任何网站,以产生一些基于 HTTP 的流量:
The Wireshark website
- 切换回 Wireshark 屏幕;如果一切顺利,您应该能够在 Wireshark GUI 的数据包列表窗格中看到许多被捕获的数据包。
- 要停止捕获,您只需单击工具栏中的停止捕获按钮。区域,或者您可以单击捕获菜单栏下的停止:
Stopping capture
- 现在,最后一步是保存捕获文件以备后用。
- 在文件夹中以默认的
.pcapng
扩展名保存文件。
如果您已经阅读了到目前为止的所有步骤,我建议您创建您的第一个捕获文件,并将其保存在您选择的某个工作区中。
摘要
本章奠定了基本网络概念的基础,并介绍了 Wireshark GUI。Wireshark 是一种协议分析器,全世界的 IT 专业人员都使用它来捕获和分析网络级数据包。
Wireshark GUI 是用户友好的、健壮的和独立于平台的;即使是新的 IT 专业人员也可以轻松采用该工具。
协议分析的一个重要方面是将嗅探器放在正确的位置;每个组织的基础设施都是不同的,所以我们可能需要
来应用不同的技术,以便获得正确的数据包来使用。
Hubbing out、端口镜像、ARP 中毒和窃听是一些有用的技术,可用于监控和分析不同情况下的流量。
Wireshark 工具窗口有六个主要部分:菜单栏、主工具栏、数据包列表窗格、数据包详细信息窗格、字节窗格和状态栏。
在数据包分析场景中使用后退/前进键非常有用。您应该知道主工具栏区域中显示的所有工具。
在下一章中,您将学习如何使用 Wireshark 中不同种类的过滤器。
三、在 Wireshark 中过滤
本章将帮助您识别和应用 Wireshark 过滤器的用法,即捕获和显示过滤器。过滤提供了一种捕获或查看流量的强大方法;这是将期望的业务流与噪声(业务)分离的有效方法。以下是我们将在本章中涉及的主题:
- 捕获过滤器简介
- 为什么以及如何使用捕获过滤器
- 介绍显示过滤器
- 为什么以及如何使用显示过滤器
- 给流量着色
让我们启动我们的分析器并应用一些过滤器来理解它们的用法和有效性。我们将逐步完成创建显示和捕获过滤器的过程。此外,我们将找到实用工具,它在排除网络故障时非常有效。
介绍过滤器
Wireshark 提供的两种过滤器是捕获过滤器和显示过滤器,可用于实时流量和/或保存的捕获文件。过滤器在执行数据包分析时提供了高级功能,用户可以从数据包流中分离出不需要的数据包流进行分析。
捕获过滤器
捕获过滤器使您能够只捕获您希望被捕获的流量,消除不需要的数据包流。捕获数据包是一项处理器密集型任务,数据包分析器在运行时会使用大量的主内存。
仅当数据包满足特定标准(捕获过滤器表达式)时,才会将其发送到捕获引擎。与显示过滤器一样,捕获过滤器不支持高级过滤选项。
以下是“捕获选项”窗口对话框的屏幕截图:
“捕获选项”对话框
让我们浏览一下“捕获”对话框窗口中的可用选项:
- Capture(在 input 选项卡下):它的目的是选择你希望在哪个接口上监听;也可以选择多个接口并行运行。每个接口的详细信息都列在单独的列中,例如捕获、接口、接口名称、是否启用混杂模式等等。在 Capture 对话框下,您会看到一个复选框来切换混杂模式,这使您能够侦听不是从您的机器生成或发往您的机器的流量。
- 管理接口:方便出于监听目的添加或删除新接口。您甚至可以添加远程机器接口来进行远程监听。
- 捕获过滤器:列出捕获过滤器,也便于添加新的用户自定义过滤器:
默认捕获过滤器
Berkley 包过滤 ( BPF )语法是一种用于设计过滤器表达式的行业标准,并受到tcpdump
等协议分析器的支持,这使得过滤器的配置文件可移植。
以下是创建第一个捕获筛选器表达式的步骤;考虑一个场景,您必须捕获来自位于10.10.10.157
的 web 服务器的数据包:
-
打开“捕获选项”对话框。
-
点击捕获过滤器。
-
点击新建。
-
在过滤器名称文本框中写入
Filtering Host
。 -
在过滤字符串文本框中写入
host 10.10.10.157
:
Creating a sample capture filter
- 完成后,单击确定;如果您已经正确地输入了所有内容(主要是过滤器表达式),那么在“捕获过滤器”按钮后面的文本框将以绿色背景显示。
- 捕获文件(在输出选项卡下):使用此选项将数据包流附加到现有的跟踪文件中。捕获的数据包将被添加到您选择的文件中。如果您没有选择任何选项,将会创建一个临时文件。要获得将数据包保存到单个/多个文件的更高级方法,请尝试以下方法:
- 在捕获一定量的数据(KB、MB 或 GB)后,Wireshark 将创建一个新文件来保存数据包流。例如,我想在 Wireshark 捕获 2mb 数据后创建一个新文件。
- 下一个文件间隔(时间):在一定时间(秒、分或小时)后,Wireshark 将创建一个新文件来保存数据包流。例如,我想每五分钟创建一个新文件。
- 环形缓冲区:使用此选项根据前面提到的标准设置创建新文件的限制。例如,您已经选择了环形缓冲区选项,并将文件数设置为
5
,并且您已经配置为每隔 5 MB 创建一个新文件。
根据此配置,每 5 MBs 的数据后,将创建一个新文件,并将数据包写入其中。一旦达到您在环形缓冲区中指定的限制,Wireshark 将不会创建新文件;相反,它将开始保存到第一个文件,并将所有捕获的数据包附加到该文件中。下面的屏幕截图显示了类似的配置:
“捕获文件”选项
- 停止捕获设置(选项选项卡):此选项允许您在触发特定条件后停止捕获过程;我们有四种不同的触发器。它们陈述如下:
- 数据包:达到一定数量的数据包后停止捕获
- 文件:创建一定数量的文件后停止捕获
- 千字节(s):捕获一定量的数据后停止捕获
- 秒:运行一段时间后停止捕获
如果我们一次选择多个选项会怎么样,如下面的屏幕截图所示:
The Stop Capture options
您可以一次激活多个选项;Wireshark 将停止捕获最先满足的条件。
- 名称解析(选项选项卡):如果选中,此功能可以将第 2、3、4 层地址解析为相应的名称:
Name Resolution
- 显示选项(选项选项卡):使用此选项自定义数据包流和相关信息在数据包列表窗格和协议层次窗口中的显示方式。参考以下截图:
显示选项
- 实时更新数据包列表:一旦捕获到新的数据包,数据包列表窗格会立即更新,并自动滚动显示最新的数据包
为什么要使用捕获过滤器
当大量数据包在网络中流动时,需要仅捕获符合标准的流量。创建自定义捕获过滤器可以方便地分析根本原因,同时解决网络问题。Wireshark 会丢弃不符合捕获过滤器表达式的数据包,丢弃的数据包不会被传递到捕获引擎。
如何使用捕获过滤器
使用Berkley Packet Filter(BPF)语法通过捕获过滤器对话框创建捕获过滤器。
BPF 是两个参数的组合:标识符和限定符,解释如下:
- 标识符:搜索标准是你的标识符。例如,像
host 192.168.1.1
这样的捕获过滤器,其中值192.168.1.1
是一个标识符。 - 限定词:这些限定词又分为三个部分:
- 类型:类型限定符有三种:
host
、port
、net
。类型限定符指的是你的标识符所指的名字或数字,例如在你的捕获过滤器host 192.168.1.1
,host
就是类型限定符。 - Direction :有时候,当你需要从一个源或目的地捕获包时,指定方向限定符。例如,在
src host 192.168.1.1
捕获过滤器中,src
指定捕获来自192.168.1.1.
的数据包。同样,如果您指定dst host 192.168.1.1
,将只捕获目的地为host
T5 的数据包。 - Proto :这个限定符用于过滤特定协议的数据包。例如,如果您想要捕获来自主机
192.168.1.1
的http
流量,那么表达式将为src host 192.168.1.1 and tcp port 80
- 类型:类型限定符有三种:
- Wireshark 支持使用和 或运算符连接多个表达式,请参考以下示例:
- 过滤器
src host 192.168.1.1 and tcp port 80
声明所有从192.168.1.1
发出并去往端口80
的数据包都应该被捕获。 - 过滤器
src host 192.168.1.1 or tcp port 80
声明只应捕获源自192.168.1.1
的每个数据包或与端口80
相关联的任何数据包。 - 过滤器
not port 80
声明任何与端口80
相关的数据包都不应该被捕获。
- 过滤器
示例捕获过滤器
要访问默认过滤器,请转到 Capture | Capture Filers,或者单击主工具栏中的 Capture Options 按钮,然后单击 Capture Filter。
请参考下表了解样本采集过滤器:
| 过滤器 | 描述 |
| 主持人192.168.1.1
| 与主机192.168.1.1
相关的所有流量 |
| 端口8080
| 与端口8080
相关的所有流量 |
| src 主机192.168.1.1
| 来自主机192.168.1.1
的所有流量 |
| dst host 192.168.1.1
| 目的地为主机192.168.1.1
的所有流量 |
| src 端口53
| 来自端口53
的所有流量 |
| dst 端口21
| 去往端口21
的所有流量 |
| src 192.168.1.1
和 tcp 端口21
| 源自192.168.1.1
并与端口21
相关联的所有流量 |
| dst 192.168.1.
1 或dst 192.168.1.2
| 去往192.168.1.1
或去往
主机192.168.1.2
的所有流量 |
| 非端口80
| 与端口80
无关的所有流量 |
| 不是 src 主机192.168.1.1
| 所有不是来自主机192.168.1.1
的流量 |
| 非端口21
和非端口22
| 与端口21
或端口22
无关的所有流量 |
| 传输控制协议 | 所有 tcp 流量 |
| Ipv6tcp 或 udp 主持人www.google.com以太主机07:34:AA:B6:78:89
| 所有 ipv6 流量所有 TCP 或 UDP 流量所有进出谷歌 IP 地址的流量与指定 MAC 地址相关联的所有流量 |
显示过滤器
与捕获过滤器相比,显示过滤器灵活而强大。显示过滤器不丢弃任何数据包;相反,数据包是隐藏的。丢弃数据包不是非常有效的做法,因为数据包一旦被丢弃,就无法恢复。应用显示过滤器将限制数据包在 Wireshark 的列表窗格中显示。
在数据包列表窗格上方的过滤器对话框中,显示过滤器可用于捕获文件和实时流量。显示过滤器支持各种参数,如 IP、端口、协议等。
让我们学习如何使用显示过滤器表达式对话框来创建过滤器。
筛选器表达式
- 单击表达式按钮配置显示过滤器
- 例如,如果您只想查看与
ip:192.168.1.1
相关的数据包,则向下滚动字段名称以查找 IPv4。然后,展开该部分并选择 ip.addr 选项。 - 从旁边的关系框中,选择要添加到表达式中的运算符。
- 最后,在“值(IPv4 地址)”框中输入您的 IP 地址,然后单击“确定”
在创建过滤器复杂过滤器时,比较和逻辑操作符非常方便。
下表列出了可用于创建过滤器的比较运算符:
| 操作员 | 描述 |
| ==/eq
| 等于 |
| !=/ne
| 不等于 |
| </lt
| 不到 |
| <=/le
| 小于等于 |
| >/gt
| 大于 |
| >=/ge
| 大于等于 |
下面是用于将多个标准组合在一起的逻辑运算符列表。下表列出了所有这些选项:
| 操作员 | 描述 |
| AND/&&
| 当我们希望表达式的两部分都表示true
时,使用 AND 逻辑运算符。例如,ip.src==192.168.1.1
和tcp
过滤器将只显示源自ip 192.168.1.1
并与tcp
协议相关的数据包。 |
| OR/||
| 当我们一次只关注一个条件为真时,使用 OR 逻辑运算符;例如,port 53
或port 80
过滤器将显示与端口53
( DNS
)相关联的所有数据包,以及与端口80
( http
)相关联的所有数据包(如果有的话)。 |
| NOT/!
| 当我们想从列表窗格中排除一些数据包时,使用 NOT 逻辑运算符。例如,!dns
过滤器会隐藏所有与 DNS 协议相关的数据包。 |
保留过滤器以备后用
保留过滤器节省了键入复杂显示过滤器所需的时间和精力。Wireshark 通过保存自定义过滤器来帮助保留。要为自己创建一个,请遵循以下步骤:
- 转到分析|显示过滤器:
添加显示过滤器
- 单击新建(+),在过滤器名称和过滤器字符串字段中输入值。例如,我们想为
NO ARP
数据包创建一个显示过滤器。然后,这些值将类似于下面的屏幕截图:
创建新过滤器
- 点击应用。现在,您最近创建的过滤器将列在列表的底部,供以后使用。
- 确保过滤器字符串框以绿色背景显示,这意味着您的表达式是正确的;如果它是红色的,那么有问题,如果它是黄色的,这表示结果可能是意想不到的。
- 单击过滤器字符串框旁边的表达式按钮,通过单击并选择所需内容来创建过滤器。
- 删除(-)按钮将从列表中删除现有过滤器。
- 取消按钮将放弃任何未保存的更改并关闭窗口。
- 确定按钮提交保存并关闭窗口。
使用查找对话框搜索数据包
要搜索符合标准的数据包,请使用显示过滤器旁边的查找工具栏。您可以通过导航到编辑|查找数据包或使用快捷键 Ctrl + F 来访问查找实用工具:
“查找数据包”对话框
您还可以使用以下过滤器来查找数据包:
让我们看看更多可用的可配置选项:
- 显示过滤器:根据特定的 IP/端口/协议查找数据包,例如:
ip.addr == 192.168.1.1
(基于 IP 地址)port 8080
(基于端口号)http
(基于协议)
- 十六进制值:如果您有数据包的十六进制值,则使用此选项。例如,写入由冒号分隔的物理地址,例如:
0A:C4:22:90:45:00
AA:BB:CC
- 字符串:输入 DNS 服务器的名称、机器的名称以及您要查找的任何名称(输入任何字符串或单词),例如:
- 加拿大白鲑
- 行政人员
- 网络服务器
- 谷歌
- 搜索范围:通过该选项,您可以在 Wireshark 的特定窗格中进行搜索。例如,如果您正在查找与值 Google 匹配的数据包(将匹配数据包字节窗格中的 ASCII 值)。因此,首先选择字符串选项,然后从第一个下拉列表中选择数据包字节。
- 字符串选项:要启用和使用此选项,首先选择字符串选项,然后选择区分大小写,如果需要,还可以选择字符宽度。
要在匹配的包之间来回移动,可以使用 Ctrl + N (下一个)和 Ctrl + B (上一个)。
给流量着色
为了更好和更方便的观看体验,对流量进行着色以区分不同的数据包流。彩色化有助于轻松区分外观相似的数据包。
要访问默认着色配置文件,请导航至“查看”|“着色规则”,如以下屏幕截图所示:
着色规则
此对话框中列出了当前作为全局配置文件的一部分保存的用于着色流量的所有规则。数据包列表窗格中列出的每个数据包都遵循着色规则窗口中定义的规则,这使它们具有独特的外观。
让我们使用这个特性,用我们选择的颜色组合给http error
包着色。比方说,一个 web 服务器被配置并运行文件共享目的。现在,一个客户端试图做目录列表,得到了HTTP 404
错误消息。这些错误消息显示在数据包列表窗格中,并使用默认的http
着色规则进行着色,使这些错误不易被我们看到。为了快速识别这样的数据包,用black
背景和cyan
前景对HTTP 404
错误消息进行着色。按照步骤进行配置。
- Linux box 是配置在 IP
172.16.136.129
上的客户端,而 Macintosh 运行在配置为 web 服务器的172.16.136.1
上:
The web server running on 172.16.136.1
- 来自访问 Linux 的 web 服务器的正常流量如下所示:
- 既然一切都已启动并运行,我们将尝试从客户机上手动列出一些目录,以生成
HTTP 404
错误消息。
- 通过此请求生成的流量被捕获,可以在下面的屏幕截图中看到:
HTTP 404 Traffic
我们可以看到,在前面捕获的流量中,客户端请求了abc.jpg
资源,但该资源不可用;因此,客户端收到 404 未找到错误。
- 我们很容易发现,因为只有一个客户端请求一个资源。考虑一个有数千个客户端的生产环境。在这种情况下,用不同的规则给一组特定的数据包着色是一个游戏规则改变者。
- 导航至编辑颜色规则|新建(+)。在“名称”框中键入 HTTP 404。
- 在过滤器框中输入
http.response.code==404
。选择前景色选项为Cyan
,选择背景色选项为黑色。然后,点击确定:
- 单击 OK,您将看到新规则正在运行:
After applying the new coloring rule
着色规则以自上而下的方式应用于数据包列表窗格。对于每个数据包,都有附加的着色规则信息,这些信息可以从“帧”部分下的“数据包详细信息”窗格中列出,如下所示:
帧头中的颜色信息
创建新的 Wireshark 配置文件
配置文件就像定制的虚拟环境,在审计/排除网络故障时可以节省大量时间。
要创建配置文件,请按照下列步骤操作:
- 右键单击状态栏(窗口右下角)中的配置文件列:
- 在弹出的对话框中点击 + :
- 现在,选择您想要用作模板的概要文件(如果有的话),并键入新概要文件的名称。
- 然后,点击确定。
现在,在状态栏中,您将看到新的配置文件已经被激活。您在此配置文件中所做的更改将保留在此处,例如,您创建捕获/显示过滤器、更改协议首选项和更改颜色首选项,等等。
此外,导入和导出配置文件非常简单,只需将配置文件复制并粘贴到 Wireshark 目录中即可使用。
摘要
过滤流量让你捕获和看到只有你想要的包流;有两种类型的过滤器:显示过滤器和捕获过滤器。
显示过滤器隐藏数据包;但是,捕获过滤器会丢弃不符合用户定义的表达式的数据包,并且被丢弃的数据包不会传递给捕获引擎。
捕获过滤器使用 BPF 语法,这是一个行业标准,并被其他几个协议分析器使用。
查找工具非常有用,可以从 Wireshark 的“编辑”菜单中访问。Find 实用工具提供了搜索数据包和相关详细信息的各种向量。
过滤一组流量时,颜色首选项很方便。区分数据包变得很容易,因为匹配的数据包将以独特的颜色显示。
概要文件就像节省时间和精力的虚拟场景。针对显示/捕获过滤器和颜色/协议/时间首选项对配置文件所做的更改保持不变。
四、分析应用层协议
本章将帮助您了解通过 Wireshark 分析应用层协议(如 HTTP、SMTP、FTP 和 DNS)的方法。应用层协议通常是客户端和服务器之间的接口。
为了有效地识别异常,了解应用层协议数据包的结构至关重要。在本课中,我们将详细讨论以下主题:
- 常见应用层协议分析
- 组装 VoIP 数据包
- 解密加密流量
域名系统(DNS)
想象一下,在一个互联网世界中,你必须在浏览器的地址栏中输入一个随机的数值
(IP 地址)来访问一个网站,而不是一个名字。同样,想象一下每个数字都是不同的。考虑到这一点,你能记住多少个数字(IP 地址)?5?10?也许,最多 50 岁?所以,现在,你只能访问 50 个网站。
为了无限的网络体验,DNS 来拯救我们。DNS 存储映射到其当前 IP 地址的网站名称的数据集(区域文件)以及域名。区域文件中的每个条目称为一个资源记录(网站名称及其 IP 的组合)。默认情况下,DNS 通过端口53
使用 TCP 和 UDP,两者的目的不同。
DNS 是如何工作的?因此,作为一个客户端,当您尝试从浏览器访问一个网站时,您的请求(DNS 查询)会被发送到内部 DNS 服务器(如果有),该服务器会查找它包含的资源记录。如果 DNS 服务器知道您试图访问的域名的 IP 地址,您的电脑将收到一个包含您想要访问的网站的 IP 地址的回复(DNS 响应),否则您的查询将被转发到网上的外部 DNS 服务器(例如,8.8.8.8
、4.4.2.2
的 google DNS 服务器等等)。).
剖析 DNS 数据包
DNS 数据包由多个字段组成,下面将简要讨论这些字段:
- 事务 ID :这是一个跟踪域查询及其相应响应的号码。
- 查询/响应:每个 DNS 包都被标记为查询或响应。
- 标志位:每个查询和响应包含一组不同的标志位,如下所示:
- 响应:消息是一个查询或者一个响应。
- 操作码:这决定了包含的查询类型。操作码范围在
0-15
之间。请参考下表:
| 0
| 1
| 2
| 3
| 4
| 5
| 6-15
|
| 标准查询 | 反向查询 | 服务器状态请求 | 未赋值的 | 通知 | 更新 | 未赋值的 |
| 0
| 1
| 2
| 3
| 4
| 5
|
| 没有错误 | 格式错误 | 服务器故障 | 名称错误 | 未实施 | 拒绝 |
- 问题:数据包中存在的查询数量。
- 答案:响应查询而发送的答案数量。
- 权限 RRs :作为响应发送的权限资源记录数。
- 附加 RRs :作为响应发送的附加资源记录的数量。
- 查询部分:发送给 DNS 服务器的查询;在收到的响应中应该是相同的。
- 答案部分:答案由作为响应进来的资源记录组成。
- 类型:发送的查询类型。请参考下表了解常见的查询类型:
| A
| NA
| MX
| SOA
| PTR
| AAAA
| AXFR
| IXFR
|
| 主机地址 | 名服务程序 | 邮件交换 | 区域授权的开始 | 指针记录 | IPv6 地址 | 全区域转移 | 增量区域转移 |
- 附加信息:该字段包括包含资源记录的附加信息。不要求回答该询问。
解析 DNS 查询/响应
让我们考虑一个场景来理解 DNS 的工作方式。客户端向拥有名称解析信息的 DNS 服务器发送查询。使用这些信息,客户端可以开始基于 IP 的通信。有时,客户端正在寻找的信息在它请求的 DNS 服务器上不可用。在这种情况下,如果需要递归,DNS 服务器本身会将查询传输到它知道的任何邻居 DNS。参考下面的截图,其中发送了一个访问 https://www.google.co.in 的的请求。来自位于192.168.1.103
的客户端的请求被发送到位于192.168.1.1
的默认网关。此网关会将查询转发到它知道的 DNS 服务器:
DNS 查询
您可能会注意到 DNS 使用 UDP 作为底层协议。如果您想了解关于正在生成的 DNS 查询的更多信息,只需展开 Flags 部分。这一节将列出各种细节,比如递归是否可用,递归是否需要,以及响应代码是什么。请参考以下截图:
扩展标志部分
扩展的 Flags 部分告诉我们,DNS 包的类型是查询,包数据没有被截断,并且递归是可取的(如果可用的话)。
作为对此查询的响应,您将观察到一个具有相同事务 ID 的数据包,它表示客户端发送的 DNS 查询的关联。对查询的响应通常包括被访问域的 IP 地址。发出请求的机器将返回一个 IP 地址,或者多个可用的 IP 地址。如果我们正在寻找的域名不可用,那么 CNAMEs 可能会被返回。
参考下面的截图来理解这一点:
DNS 响应
正如我所说的,我们可以得到多个回复。如果你注意到了回复回复部分,我们已经收到了五个关于www.google.com域名的回复。为了验证收到的响应只属于前一个查询,只需匹配事务 ID。
展开答案类别中的任何部分以查看更多详细信息。参考以下截图:
文件传送协议
自从互联网出现以来,我们一直在使用文件传输协议 ( FTP )。FTP 使用 TCP over port 21
或20
(默认情况下)通过指定的通道启动和传输文件。只有两种类型的通道命令通道(端口21
)和数据通道(端口20
)。命令通道用于发送和接收命令及其响应。数据通道用于在客户端和服务器之间发送和接收数据。但是,您将观察到用于从客户端机器传输 TCP 数据段的随机端口号。
剖析 FTP 通信数据包
客户端可以使用两种模式与服务器通信:主动和被动。在早期版本的 FTP 服务器应用中,默认情况下启用主动模式,但在最新版本的 FTP 服务器应用中,默认情况下启用被动模式。为了详细理解这些模式,让我们使用下面的场景。
假设一个 FTP 服务器配置在 IP 172.16.136.129
上,一个客户端配置在 IP 172.16.136.1
上。
通常,客户端发送的每个请求都是一个特定的命令集,服务器用一个数字值后跟一条文本消息来响应。请参见下面的截图以供参考,随后是简短的分析:
服务器请求密码,客户端提供了密码。一旦服务器收到并验证了密码,用户将登录。在我们的例子中,密码是正确的,所以客户端接收到的响应代码是230
,后面是Login Successful
消息。
从客户端发出的命令可以有参数,也可以没有参数,设备之间传输的数据可以在数据包的 TCP 报头中看到,如下所示:
FTP-返回的数据
帧43
显示客户端发出了LIST
命令,该命令由服务器处理,并且返回了 262 字节的数据。基于 FTP 的通信可以通过协议分析器以明文形式看到,这也是一个经常被利用的弱点。
重组 FTP 数据流很容易,因为除了数据之外,没有任何东西被传输。没有附加到数据包的代码或命令。要重组 FTP 数据包的 TCP 流,只需右键单击选定的数据包,然后选择“跟随 TCP 流”选项进行查看。
参考以下截图:
FTP 流
客户端和服务器之间通过数据和命令通道进行的全部通信都被转换为人类可读的格式。红色的文本是客户端发送的,蓝色的文本是客户端收到的。建议使用 FTP 的安全版本,以减少漏洞。
超文本传输协议(HTTP)
网络上的数据使用 HTTP/HTTPS 应用层协议传输。HTTP 中的正常通信遵循请求/响应模型,其中客户机和服务器之间的通信由一组规则来协调。客户端向服务器请求某个资源,然后接收指定所请求资源的当前状态的状态代码。如果可用,那么资源也与状态代码一起发送,否则客户端将收到不可用的状态代码。
请求/响应如何工作
Web 服务器利用 HTTP 向发出请求的客户机提供网页。在每个 HTTP 会话的开始,TCP 三次握手发生。它在通信主机之间创建一个专用通道,然后是 HTTP 和数据包,这些数据包在会话活动时发送和接收。例如,假设您正在从位于172.16.136.1
的客户端访问位于http://172.16.136.129
的 web 服务器。使用我们的客户机-服务器基础设施,我们将尝试捕获发送的请求和接收的响应。
我将尝试访问位于前面提到的服务器上的主页,并捕获整个会话产生的流量;即发送的请求和接收的响应。采取以下步骤复制该场景。
请求
以下是上述场景的步骤:
- 打开浏览器,输入任意网站的统一资源定位符 ( URL )。
- 网站位于
http://172.16.132.129
(本地网络服务器)。以下是截图供你参考:
- 下面的屏幕截图描述了由于访问 web 服务器而捕获的数据包:
- 只要你按下键,输入,所有这些数据包就会生成。如您所见,前三个数据包是 TCP 三次握手数据包,我们的客户端请求服务器创建一个专用通道。但是,如果服务器守护进程没有运行,或者服务器没有接受我们的请求,出于某种原因,我们会看到
RST
ACK
数据包,如下所示:
- 此错误表明服务器停止服务或不应该响应我们的请求(防火墙或受限区域)。
- 在 TCP 包之后,我们观察到客户机发送的第一个 HTTP 请求。每个请求都包含发送到服务器的几个元素:
HTTP 请求
反应
- 在第四个包之后,服务器确认客户机请求到达 web 服务器的根目录。服务器开始传输客户端请求的资源。
- 列表窗格中的第六个包是客户端收到的包,它是一个状态代码,后跟一条短消息,包括所请求资源的内容。请参考以下说明 HTTP 响应的屏幕截图:
HTTP 响应
- 作为 TCP 通信的一部分,客户端将确认服务器发送的每个数据包,如第七个数据包所示。
- 让我们分析一下第六个数据包的响应元素:
- 第一行包含响应中发送的三个参数。它们表示正在使用的 HTTP
协议版本、状态代码(在我们的例子中是304
,它指定
,自从在
Date
参数中提到的时间以来,所请求的资源没有改变),最后是状态代码的简要描述(在我们的例子中没有修改)。 - 在第三行,服务器参数提到了 web 服务器的名称和版本。我们可以看到 Apache/2.2.22 是
在172.16.136.129
时所在的服务器。 - 第四和第五行表示服务器希望保持连接活动。服务器希望这样做的持续时间也在参数的下一行中提到。
- 第一行包含响应中发送的三个参数。它们表示正在使用的 HTTP
简单邮件传输协议(SMTP)
SMTP 广泛用于在小型网络上发送和接收电子邮件。该协议使用发送方-SMTP 进程发送电子邮件,使用接收方-SMTP 进程接收电子邮件。这使得 SMTP 成为一个基于客户端-服务器的协议,运行在端口25
上。
通常,邮件传输的 SMTP 通道是通过成功的 TCP 三次握手以及随后的一系列 SMTP 数据包创建的:
在我们的实验室中,我们有一个配置在 IP 192.168.1.105
的 SMTP 服务器和一个配置在 IP 192.168.1.104
的客户端。客户端将请求服务器向客户端已知的地址发送电子邮件。服务器将用数字代码响应这个请求,后面跟着一个简短的响应参数。
剖析 SMTP 通信数据包
在 Kali Linux 机器上使用 Netcat 客户机,我将连接到运行在 Windows 机器上的 SMTP 邮件服务。在成功的三次握手之后,服务器将用数字代码和简短的摘要进行响应。按照以下步骤使用命令行发送电子邮件:
-
使用
netcat nc -nv 192.168.1.105 25
打开与邮件服务器的连接。 -
用
HELO testmail
命令初始化一个 SMTP 会话。 -
使用
MAIL FROM:<abc@charit.com>
命令指定起始地址。 -
使用
RCPTS TO:<efg@charit.com>
命令指定收件人的地址。 -
在邮件正文中输入数据,输入
DATA
,按回车,输入.
(f 全停;这是一个 t 终止字符,您可以使用您选择的任何字符)现在,键入您想要发送的消息。一旦你完成了邮件的输入,输入 a(句号)来标记结束,然后按回车。 -
现在,你的信息将被发送。
该过程将生成几个包含我们会话细节的数据包。所有这些提到的命令只有在服务器被配置为允许无任何身份验证的明文消息通信时才起作用;参考以下截图:
SMTP 会话
从1
- 3
来的包都是 TCP 握手包。握手发生在客户端和服务器之间。在第四个包中,客户端收到一条消息,声明响应代码为220
。这意味着服务器是可用的,并准备好响应客户端的请求。在第六个数据包中,客户端使用HELO
命令初始化标准 SMTP 会话,随后是发送者和接收者的电子邮件地址,服务器确认这些地址是正确的,数据包10
和13
中有响应代码250
。然后是使用DATA
命令的电子邮件正文包,它在包23
中被服务器成功接收。最后,用户通过发出QUIT
命令优雅地关闭连接,服务器在包26
中确认该命令,从而发送FIN
、ACK
。
会话发起协议(SIP)和互联网协议语音(VOIP)
SIP 是 VOIP 家族的一部分,VOIP 家族是一种信令协议,用于在网络环境中创建、管理和终止 VOIP 会话。SIP 的例子包括双向电话呼叫或电话会议,或者与多个主机的多媒体会话。会话启动后,数据通过专用信道上的实时传输协议 ( RTP )进行传输。基本上,RTP 家族管理所有多媒体项目的传输和流控制(RTCP 控制流)。
Wireshark 可以组装一个 RTP 数据包流,以便回放双方之间发生的对话(使用它要合乎道德!).
SIP 运行于 UDP 之上,通常使用端口5060
。SIP 为我们提供了不同的呼叫管理功能,例如发起呼叫、断开呼叫、将某人添加到电话会议以及转移呼叫,尽管 SIP 不会帮助您保持呼叫质量。
让我们通过下图来讨论典型的 VoIP 基础设施。有三个节点:其中两个是客户端,一个是 IP 电话服务器,它支持语音通信:
- C1****客户端 1 发送 Invite 请求,使用 SIP 发起会话。
- 电话服务器将请求传输到客户端 2 。
- 电话服务器用 100 尝试分组来确认客户端 1 。
- 客户端 1 在客户端 2 开始振铃时,接收到一个 180 振铃数据包。当另一侧的客户端 2 收到呼叫时,发送 200 OK 包,该包被转发给客户端 1 。
- 现在,客户端发送 ACK 数据包以确认收到
200 OK 数据包。 - 现在双方都通过专用信道连接起来,RTP/RTCP 数据包开始在信道上来回传输。
- 为了结束通信,通信主机之一会发送一个 BYE 数据包,由另一端确认。
- 由于只有电话服务器知道信息,所有的数据包将在客户端 1 和 2 之间来回发送。
- 一旦信道被创建,所有的包将由客户机直接发送和接收,而不需要服务器的干预。
为了便于说明,我使用 Asterisk PBX 配置了一个小型 VoIP 电话基础设施,可以免费下载。因此,我们的 VOIP 服务器位于192.168.1.107
,客户端 1 位于192.168.1.104
,客户端 2 位于192.168.1.107
。我还使用 X-lite 调用应用从客户机 1 调用客户机 2。以下是 Wireshark 列表窗格中捕获的流量截图:
SIP 流量
您应该考虑的一件事是将分析器放置在尽可能靠近电话服务器的地方,以便它能够捕获每一个最后的数据包。在捕获时,如果您看不到任何 SIP 数据包,那么您也将无法捕获 VOIP 数据包。
重组数据包以便回放
是的,可以将 VOIP 数据包组装回去,以监听通信的任何一方或双方。假设我想监听发送到 IP 地址为192.168.1.107
的客户端 2 的消息。我们可以使用 Wireshark 中的电话菜单来重组数据包,并从列表中选择 VOIP 呼叫选项。以下屏幕截图显示了生成的对话框:
VOIP 通话对话
现在选择你想听哪一方的交流。然后点击播放器按钮并配置抖动(抖动是数据包发送和接收速率的变化。如果抖动很高,那么您的网络可能正在处理拥塞。具有高抖动值的呼叫不适合收听)和如图所示的时间,并点击解码:
玩家对话框
我没有更改默认值,而是直接单击了 Decode 按钮,这将为我选择的通信方重组所有的 VoIP 数据包,如下面的屏幕截图所示:
RTP 播放器
如果您想播放消息,请选中滚动条下方的框,然后单击播放。仅出于道德目的使用此功能。
解密加密流量(SSL/TLS)
是的,还可以使用 Wireshark 将您的在线 TLS 流量解密为明文 SSL 流。Google Chrome 和 Firefox 寻找一个存储 TLS 会话密钥的日志文件。按照以下步骤解密加密流量会话:
- 创建一个名为
SSLKEYLOGFILE
的环境变量,它将指向一个文本文件。您的浏览器每次启动时都会查找该文件。要创建环境变量,请右键单击我的电脑,然后转到高级设置|环境变量|新建|指定名称。输入SSLKEYLOGFILE
和值:C:/Users/username/sslkeylog.txt
,点击
确定。 - 我已经创建了一个空白的文本文件,
C:/Users/username/sslkeylog.txt
(让您的新环境变量指向这个文件)。 - 现在打开浏览器,访问一个启用了 TLS/SSL 的网站。
出于演示的目的,我使用位于192.168.1.105
的客户端,在192.168.1.106
的
安装了自己的 SSL web 服务器:
- 在您访问任何启用了 SSL 的安全网站后,您的
sslkeylog.txt
将被填充一些随机数,如下面的截图所示。如果没有,请在继续之前交叉检查您的设置:
- 我捕获了客户端和服务器之间的全部加密会话流量。
现在转到编辑|首选项|协议树| SSL |(预)-主密钥日志文件名。输入/path/to/sslkeylog.txt
并确定。然后右键单击 SSL 数据包(确保选择解密数据包数据。该选项应该出现在字节窗格中)并遵循 SSL 流。现在你会看到类似下面的截图:
解密 SSL 流量
这是解密 SSL 流量最简单的方法之一,只需点击几下鼠标。还有一种方法是将服务器的 RSA 私钥输入到 Wireshark SSL 首选项中,这将得到相同的结果(我将留给您进行研究)。
摘要
DNS 是一种用于将网站名称解析为 IP 地址的协议。通过 DNS,您的机器能够在基于 IP 的网络上通信。
自从互联网出现以来,FTP 就被用来将文件从一台机器传输到另一台机器,并且在今天的现代网络中仍在使用。
Web 浏览器使用 HTTP 来回呈现和传输基于 web 的内容。它通常也称为请求/响应模型,在这种模型中,主机请求某个资源,服务器用状态代码和可用的资源进行响应。
SMTP 非常常用于发送电子邮件。SMTP 命令及其相应的参数以明文形式通过网络传递。
VoIP 流量由两部分组成:用于数据传输的 RTP 和用于会话创建的 SIP。信令协议创建并管理会话,其中 RTP 用于传送语音本身。
五、分析传输层协议 TCP/UDP
本章将通过对传输层协议传输控制协议 ( TCP )和用户数据报协议 ( UDP )的分析,帮助您理解支持跨路由基础设施移动网络流量的底层技术。TCP 和 UDP 是网络协议的基础,了解它们的结构和行为非常重要。
以下是我们将在本章中涉及的主题:
- TCP 报头及其通信方式
- 了解 TCP 标志
- 在 Wireshark 中检查不同的分析标志
- 了解 UDP 流量
- TCP 和 UDP 流量的异常模式
我们还将了解日常网络运行中出现的一些常见异常情况。
传输控制协议
TCP 是一种面向连接的协议,由多个应用层协议使用,根据序列号和确认号来确保数据在传输过程中不会丢失任何信息。TCP 确保节点间数据包的可靠传输。TCP 位于网络层和应用层之间,使用 IP 数据报在发送方和接收方之间传输数据包。
三次握手过程发生在数据传输之前。TCP 连接就像一个双向通信过程,不仅发送方积极参与,甚至接收方也发送确认,使其成为一种可靠的连接形式。
了解 TCP 报头及其各种标志
TCP 报头通常为 20 字节长,但是有时,由于Options
字段的存在,TCP 报头的大小可以变化到 60 字节。下图是简化的 TCP 报头:
以下是对每个 TCP 报头字段的简要说明:
-
源端口:发送方用来跟踪现有数据流和新的传入连接。
-
目的地端口:与目的地提供的服务相关联的端口号。
-
序列号和确认号:每一方使用一个序列号来跟踪数据包的顺序。发送方和接收方使用确认号来传递接收或发送的序列号。
-
**数据偏移量:**表示数据包开始的位置和 TCP 头的长度。由于选项字段的存在,大小会有所不同。
-
标志:存在各种类型的标志位;每一个都有自己的意义。它们启动连接、传送数据和拆除连接:
- SYN (synchronize) :用于发起连接的数据包。
- ACK(确认):用于确认数据包已经收到的数据包,也用于确认发起请求和拆除请求
- RST(复位):表示连接中断或者服务不接受请求
- FIN (finish) :表示连接正在被拆除。发送方和接收方都发送 FIN 数据包,以优雅地终止连接
- PSH(推送):表示传入的数据应该直接传递给应用,而不是被缓冲
- URG (urgent) :表示数据包携带的数据应该由 TCP 栈立即处理
- CWR(拥塞窗口减少):任一方在发生拥塞时用来降低传输速度,以避免丢包
-
窗口大小:表示发送方可以发送的数据量。该大小是在握手过程中决定的,以便进行通信并匹配适合传输的缓冲区大小。
-
校验和:接收端用来验证数据段的完整性。
-
紧急指针:通常标记为 0,与 URG 标志一起使用,标记消息子集的立即处理。
-
选项:该字段长度会因各种选项的存在而变化。该字段有三个部分:第一部分指定选项字段的长度,第二部分表示正在使用的选项,第三部分包含正在使用的选项。其中一个重要的选项,最大分段大小 ( MSS ),也是这个字段的一部分。
-
数据:TCP 报头的最后一部分是真正的数据。
上述信息概述了 TCP 报头以及报头各部分的重要性。在分析 TCP 会话时,了解这些细节变得非常重要。
TCP 如何通信
为了实时理解和分析数据包,我配置了一个在172.16.136.129
运行的服务器和一个在172.16.136.1
运行的客户端,如下图所示:
使用 Wireshark,我们将捕获发生在实际数据传输之前的三次握手过程,以及拆卸过程(正常终止)。
它是如何工作的
下面的屏幕截图描述了当客户端试图访问托管在http://172.16.136.129
上的网页时生成的各种数据包:
使用以下显示过滤器来简化分析:
在数据包282
、283
和284
中进行三次握手过程,以创建专用信道。客户端通过发送 SEQ 设置为0
的282
数据包中的SYN
数据包来启动创建。因为服务器是开放通信的,所以服务器用一个SYN
/ ACK
数据包作出响应,其中ACK
被设置为1
并且SEQ
被设置为0
,随后是从客户端发送的带有SEQ=1
和ACK=1
的数据包编号284
中的确认。
成功完成通道创建后,客户端发送一个GET
请求来访问 web 根目录的内容。服务器在数据包编号287
中对此进行确认,并发送带有200 OK
状态消息的请求内容,客户端在下一个数据包中对此进行确认。
在所有的数据传输发生后,当客户端没有剩余的请求时,或者当服务器没有剩余的发送时,客户端发送FIN
/ ACK
包以适当地终止连接。服务器对此进行确认,并发送其自己的FIN
/ ACK
数据包,这些数据包由客户端在数据包编号302
中进行确认。这种终止方式通常被称为拆卸过程。参考下面的屏幕截图,它说明了这个过程:
序列号是如何生成和管理的
您一定想知道谁给包分配序列号,以及如何分配。发起连接的设备使用主机操作系统生成的初始序列号 ( ISN) 。它可以是任何对数据没有意义的随机数。我们在数据包一中看到的序列号为零是 Wireshark 使用的一种相对引用技术。
从数据包 1 开始,其中SEQ=0
(实际相对序列号为704809601
)由服务器接收,并以自己的SEQ=0
和ACK=1
回复客户端的SEQ=0
。在这三次握手结束时,客户端用SEQ=1
和ACK=1
进行回复,没有任何进一步的增加,因为在此过程中没有数据被传输。
然后,到第四个包,客户端发送一个带有SEQ=1
和ACK=1
的GET
请求,其中数据净荷长度等于323
(参考下面的截图),服务器接收到请求后用SEQ=1
和ACK=324
确认。你看到刚才发生了什么吗?服务器通过在ACK
中添加总数据有效载荷长度来回复,以表示数据被成功接收:
RST(重置)数据包
通常会出现这样的情况,例如服务器守护进程不可用/不运行,服务器由于过载而无法处理您的请求,您被限制与服务器交互,或者您尝试连接的端口没有准备好/没有为连接开放。RST
包基本上表示连接请求的突然拒绝。
在我们的场景中,服务器守护进程没有运行,客户端正在尝试通信;因此,每发送一个SYN
请求,它就会收到RST
个数据包。客户端只尝试访问网页一次,但是 Wireshark 捕获了不止一个SYN
和RST
数据包,因为每个浏览器在无响应或关闭的套接字上以预先配置的时间间隔执行不同次数的尝试。因此,在我们的例子中,我使用的是苹果 Safari 浏览器,它在 3-4 分钟内尝试了三次连接。请参考下面的屏幕截图,它展示了在此过程中捕获的数据包:
异常 TCP 流量
失去连接或连接尝试不成功是最常见的异常 TCP 流量形式。您还可能会观察到其他几种情况,例如由于长距离通信导致的高延迟。为了使分析方便和易于排除故障,请使用时间列,对其进行排序,以找出列表窗格顶部数据包之间的大时间间隔。
另一个例子是,一个恶意设备正在您的网络上运行端口扫描,您的防火墙用RST
数据包进行响应,以避免此类侦测攻击,或者端口也有可能关闭。参考下面的截图,我尝试使用nmap
扫描网络上的一个节点,它看起来很明显(由于从一个源生成的大量数据包都是发往随机端口号的),因此很容易跟踪:
观察Frame 19
,端口扫描启动发送一个SYN
数据包,以检查端口是打开还是关闭。结果,21
( FTP
)港关闭;因此,服务器发送了一个RST
包。除了前面讨论的情况之外,还可以有各种不同的情况。如果你对 TCP 和 IP 有很强的基础知识,那么你就很容易指出不寻常的流量形式。
用户数据报协议
根据 RFC 768 的定义,UDP 是一种无连接协议,非常适合在主机之间传输实时数据,但通常被称为不可靠的通信形式。原因是,UDP 并不关心数据包的传递,任何丢失的数据包都不会恢复,因为发送方永远不会被告知丢失或丢弃的数据包。然而,许多协议,如 DNS,TFTP,SIP,等等。只靠这个。
使用 UDP 作为传输机制的协议应该依靠其他技术来确保数据传输和错误检查。需要注意的一点是,UDP 提供更快的数据包传输,因为它不执行 TCP 中观察到的三次握手或优雅终止。UDP 被称为面向事务的协议,而不是面向消息的协议,如 Tol lCP。
UDP 报头
普通 UDP 报头的大小是 8 字节;与报头一起添加的数据理论上可以是 65,535(实际上是 65,507)字节长。与 TCP 报头相比,UDP 报头非常小;它只有四个公共字段:源端口、目的端口、数据包长度和校验和。请参考此处显示的 UDP 报头:
- 源端口:发送方用来接收任何回复(如果需要)的端口号。大多数时候,在 TCP 和 UDP 中,被选作套接字一部分的端口号是短暂的。
- 目的端口:接收端使用的端口号,所有数据都传输到该端口。
- 数据包长度:指定数据包的长度,从报头开始到数据结束;您将观察到的最小长度为 8 个字节,即 UDP 报头的长度。
- 校验和:数据完整性确保发送方发送的内容与接收方得到的内容相同。有时,在使用 UDP 时,您会看到收到的数据包中的校验和值是
0
。这意味着不需要验证校验和。
它是如何工作的
让我们分析一下 DHCP、DNS 和 TFTP 等使用 UDP 作为传输协议的协议。
我在192.168.1.1
配置了一个默认网关,在192.168.1.106
配置了一个客户端。在它们之间运行的 Wireshark 将捕获 UDP 事务。以下是参考架构图:
DHCP
管理分配给节点的 IP 地址并使其网络通信兼容的协议是动态主机配置协议 ( DHCP )。这是一种为请求设备分配和管理 IP 地址的自动化方式。
为了从分配了 IP 地址的客户机生成 DHCP 数据包,我将尝试释放当前的 IP 地址。参考以下截图:
在列表窗格中,我们可以看到客户端显式发送的 DHCP 释放包(我在 Linux 终端上使用了dhclient -v -r
命令来释放 IP 地址)。
默认情况下,DHCP 服务器端口号为67
,DHCP 客户端端口号为68
。我强调了第四个字段,即数据包长度字段,它指定了数据包的长度,从第一个字节开始,直到数据包中的数据结束。然而,在 308 个字节中,8 个字节表示 UDP 报头的长度,其余 300 个字节表示应用数据。
TFTP
琐碎文件传输协议 ( TFTP )是 FTP 的一个轻量级版本,用于在设备之间传输文件。与 FTP 协议不同,TFTP 不要求用户提供任何凭证。TFTP 使用 UDP 作为传输机制。
最常见的是,TFTP 用于 LAN 环境,当处理交换机和路由器等可管理设备时,网络管理员使用 TFTP 服务器来备份配置文件和更新固件。
TFTP 服务器以 IP 地址192.168.1.106
运行,TFTP 客户端以 IP 地址192.168.1.104
运行。有一个文本文件abc.txt
存储在 TFTP 服务器上,TFTP 客户端将下载该文件。请参考下图:
两台主机之间生成的流量被成功捕获,相应的数据包如下面的屏幕截图所示
现在,让我们看看每个指针代表什么:
- 描述了客户端一请求
abc.txt
文件,就开始传输数据包。可以在列表窗格中看到请求帧。 - 如前所述,TFTP 使用 UDP 作为传输机制。请求的相关详细信息显示在详细信息窗格中,它表明请求是从客户端的临时端口号发起的,目的地是服务器上的端口
69
(69
是 TFTP 协议的默认端口)。 - 该请求是针对
abc.txt
文件的,该文件也出现在 TFTP 协议部分的详细信息窗格中。
一些应用使用 UDP 作为传输协议,并有自己的内置功能来确保传输。您一定想知道两台主机之间共享的确认数据包。正如我们所讨论的,UDP 是一种不可靠的通信形式,那么为什么我们会在 UDP 中看到ACK
s 呢?原因是我们请求的 TFTP 服务器具有内置的可靠性特征。
异常 UDP 流量
以下是一些在某些环境中可能被发现可疑的流量模式。
场景 1: 在 UDP 服务不运行/不可用的场景中,流量会是什么样子?参考以下截图:
客户端请求了一个服务器找不到的无效资源,因此返回了一个错误代码和摘要消息File not found
(在列表窗格中可以看到)。
场景 2: 有时候,服务器守护进程可能没有运行,客户端可能会请求某个资源。在这种情况下,客户端会收到带有错误代码3
的ICMP destination unreachable
错误。参考以下
截图:
让我们更详细地讨论每个指针的含义:
- 当 TFTP 服务器守护程序不起作用时,服务器返回一条
ICMP destination unreachable
消息 - 客户端收到类型为
3
的错误代码 - 该请求被发送到当前不起作用的端口
69
- 在《TFTP 议定书》一节中列出的所需资源
场景 3: 当客户端发起查找与某个地址相关联的域名服务器的请求时,也经常会出现不寻常的 DNS 请求。它看起来就像下面的屏幕截图所示:
现在我们将了解每个指针的含义:
- 如列表窗格所示,客户端在
192.168.1.106
发起了一个寻找地址8.0.0.0
的请求,并在Frame 2 No such Name
收到了一个响应 - 请求被发送到保存 DNS 缓存的默认网关
- 网关回应了一个
No such name
错误
在多种情况下,您会看到与 UDP 相关的异常流量。根据您通常的网络活动,建议创建一个流量模式来识别 DNS、DHCP、TFTP 等的异常情况。UDP 协议。
了解恶意 DNS 流量以保护您的数字基础设施。
摘要
TCP 是一种可靠的通信形式,它有助于三次握手,而拆卸过程确保了连接的可靠性和交互性。
TCP 报头为 20 字节长,由各种字段组成,例如源端口和目的端口、SEQ
和ACK
号、偏移量、窗口大小、标志位、校验和、
和选项。
基于 TCP 的通信使用SEQ
和ACK
号来跟踪发送的数据。
UDP 是一种无连接协议,是一种不可靠的 IP 通信方式,其中丢失和丢弃的数据包永远不会恢复。UDP 确实提供了更快的传输和更容易的会话创建。
UDP 报头有 8 个字节长,只有很少的字段,如源端口和目的端口、数据包长度和校验和。常见的协议如 DHCP、TFTP、DNS 和 RTP 大多使用 UDP 作为传输机制。
六、网络安全数据包分析
Wireshark 是一种高效的实用工具,具有一系列高级功能,可帮助安全专业人员对网络流量进行被动分析,以识别并指出恶意数据包和异常情况。
本章将指导您如何使用 Wireshark 来分析安全问题,例如分析恶意软件流量和足迹尝试。我们将讨论以下主题:
- 分析端口扫描、足迹和攻击/利用网络流量
- 剖析恶意 ARP 流量
- 分析暴力攻击
- 检查恶意流量
- 为恶意流量创建显示和捕获过滤器签名
使用在虚拟网络基础设施中模拟的真实场景,我们将捕获和了解恶意流量模式,并复制攻击,如信息收集和利用企图。我们将从信息收集活动开始,然后通过恶意的.exe
文件进行攻击。然后,我们将继续了解通常用于执行中间人 ( MiTM )攻击的 ARP 中毒流量。
情报收集
每次攻击的概率和成功因素取决于通过被动和主动扫描网络获得的信息。足迹和侦察是术语信息收集的同义词。
下图描述了我们将用于分析和复制攻击的虚拟/物理基础架构:
接入点位于192.168.1.1
,它使用 DHCP 将 IP 地址分配给连接的设备;攻击箱(Kali)配置了一个手动 IP 地址192.168.1.106
。
PING 扫描
让我们从第一个场景开始,攻击者试图对他的机器所在的子网执行 ping 扫描攻击(假设:攻击者是内部员工)。参考下面的屏幕截图,它显示了作为运行 bash 脚本(ping sweep scan)的结果而捕获的流量;脚本从192.168.1.100
到192.168.1.110
ping 每个 IP:
Ping 扫描
从数据包 1-4 开始,由于在 Kali 上发出 ICMP ping
命令,ARP 请求被观察到,并且由于它是新的网络,配置设备将需要为内部 LAN 通信建立它们的 ARP 缓存表。在包 5 中,ping
请求被发送到192.168.1.105
,包 14 中收到对它的回复,这意味着设备可用。DHCP 范围内的其他 IP 也会捕获并观察到类似的流量模式。由于频繁的 ARP 和 ICMP 数据包一个接一个地观察到一系列的 IP,我们可以断定这是局域网上的端口扫描活动。
半开扫描
现在让我们扫描 IP 地址范围内的一个特定设备,并以运行在 IP 192.168.1.105
的机器为目标。收集特定设备相关信息的主要方式是端口扫描,以检查目标设备提供的任何开放服务。我所说的服务是指 HTTP 守护进程、邮件服务器守护进程、FTP 服务器、SMB 等等。
你可能想知道什么是半开扫描。看看我们在前一章中讨论的 TCP 三次握手的过程,其中客户端通过发送一个SYN
包来发起连接,如果服务器可用,客户端接收到SYN
、ACK
包,作为回报,客户端向服务器发送一个ACK
包来完成握手过程。
现在,如果在 TCP 握手的最后一步中发送的ACK
包从未被发送到服务器,会发生什么?在终止握手过程之前,服务器将等待一段时间,与特定 TCP 服务的连接将永远不会完成。这就是为什么这种类型的扫描被称为半开扫描。
我已经使用带有-sS 开关的 Nmap 从 IP 192.168.1.106
处的 Kali 机器执行了半开放扫描,以针对 IP 192.168.1.105
处的 Win7 机器。Nmap 是一个开源的端口扫描工具,适用于大多数平台,可以从http://nmap.org免费下载。由于我们执行的SYN
扫描而生成的流量被捕获并显示在下面的屏幕截图中(使用显示过滤器查看与特定主机相关的数据包,如下所示):
半开扫描
上面列出的数据包中需要注意的要点/模式如下:
- 在很短的时间内,有大量从 IP
192.168.1.106
生成的SYN
数据包通过随机端口发往 IP192.168.1.105
。内部机器在如此短的时间内启动多个连接实例是极不可能的(查看 time 列)。 - 在从 13 到 22 的数据包中,一个
SYN
请求在几毫秒内通过随机和众所周知的端口号频繁发送。 - 此外,IP 地址为
192.168.1.106
的主机从未发送回ACK
数据包来响应SYN, ACK
接收。
操作系统指纹识别
了解目标系统上运行的操作系统将使信息收集过程更上一层楼。如果攻击者知道正在运行的操作系统的品牌和版本,那么就通过瞄准特定的漏洞来进行攻击而言,这就提供了额外的优势。
你认为识别远程机器的操作系统是如何工作的?我将告诉你这个秘密。每个操作系统都有不同的实现 TCP 栈的方式。因此,从远程机器接收到的数据包中会包含某些字段,如 TTL、片段偏移量和窗口大小。通过将数据包中的值与数据库进行比较,工具能够更准确地预测操作系统。例如,如果您尝试 ping 一台 Windows 机器,返回的 TTL 值将是 128,如果您 ping 一台 Linux 机器,TTL 值在大多数情况下将是 64。很简单,不是吗?
使用 nmap 命令nmap -O 192.168.1.109,192.168.1.104
,让我们为 IP 192.168.1.109
和192.168.1.104
采集机器操作系统的指纹,并捕获生成的流量。
我们不会仅仅依靠 nmap 的输出来确认操作系统;为了更加清晰,我们还将尝试剖析 Wireshark 的数据包。请参考以下屏幕截图来比较输出:
检查突出显示的 TTL 字段值,对于 Linux 机器,该值等于64
,对于 Windows 机器,该值等于128
。还要查看底部的最大段大小值,Linux 机器的值是1460
,Windows 机器的值是1440
。nmap 等工具存储所有这些基准值,然后在内部与扫描结果进行比较,以识别远程操作系统。识别此类恶意流量需要注意的几个要点如下:
- 以识别远程操作系统为目标的扫描生成的流量类似于
SYN
扫描(半开)流量,其中观察到不完整的 TCP 握手和ICMP
请求/回复。 - 此外,如果大量的
RST
或RST
、ACK
数据包从一个关键服务器发送到网络中的特定主机,那么这是值得进一步研究的事情。
ARP 中毒
每当任何设备想要与另一台设备通信时,发出请求的设备都会向整个子网发送广播。然后,该 IP 地址所属的设备使用单播数据包回复其 MAC 地址。通过这种方法,局域网中的设备可以相互通信。MAC 地址(物理地址)表存储 MAC 地址及其对应的端口号/IP 地址。
使用arp -a
命令在您的机器上填充 ARP 表条目。大多数平台上的相同命令。
以下是我们将用于理解的本地网络的一些详细信息:
| 装置 | IP 地址 | MAC 地址 |
| 路由器(默认网关) | 192.168.1.1 | D0:5B:A8:07:73:6C |
| 苹果(受害者) | 192.168.1.103 | D8:BB:2C:B9:53:EC |
| Windows 服务器(受害者) | 192.168.1.109 | 00:0C:29:B3:CB:B6 |
| Kali Linux(攻击者) | 192.168.1.106 | 00:0C:29:5D:A7:F7 |
例如,如果苹果机器希望与位于192.168.1.109
的 Windows 机器通信,苹果将发送一个广播,询问 Windows MAC 地址,声明Who has 192.168.1.109? Tell 192.168.1.103
。然后,一旦 Windows 机器知道了这个请求,就会发送一个声明192.168.1.109 is at 00:0C:29:B3:CB:B6
的 ARP 回复单播包。
ARP 中毒是一种毒害/感染/破坏受害者本地 ARP 缓存的攻击形式。请参考下图:
IP 转发是使用 Kali box 上的命令echo '1'/proc/sys/net/ipv4/ip_forward
预先配置的,用于在 Apple 和 Windows box 之间来回发送流量。
执行以下步骤,以便在实验室环境中复制 MiTM 攻击:
- 以下屏幕截图显示了在攻击者毒害受害机器的 ARP 缓存之前,客户端和服务器的 ARP 表条目:
Windows 服务器缓存
苹果缓存
- 攻击者使用命令行实用工具 arpspoof,通过伪造的 ARP 回复数据包毒害 ARP 条目:
代表 Apple 设备发送到 Windows 服务器的 ARP 回复数据包
代表 Windows 服务器发送到 Apple 设备的 ARP 回复数据包
- 由前面的命令生成的流量如下所示:
- 从 Kali box 发送的数据包迫使苹果和 Windows 机器用攻击者的 MAC 地址更新它们保存合法 MAC 地址的本地 ARP 缓存
00:0C:29:5D:A7:F7
:
中毒窗口的缓存
毒化了苹果的缓存
- 现在苹果和 Windows 盒子之间发送的所有流量都将通过 Kali 转发。为了验证,我关闭了 Windows 服务器,并尝试从 Apple box 发送 ICMP 数据包:
前面的输出确保数据包通过192.168.1.106
转发,从而使我们的 ARP 中毒攻击成功。
在关键机器中创建静态 ARP 条目,以保护它们免受 ARP 欺骗攻击;有关在 Windows 框中配置静态条目的信息,请参考以下屏幕截图:
向本地 ARP 缓存添加静态条目
分析暴力攻击
你必须意识到暴力攻击的流行。成功的机会不是很高,但也不是不可能,因为公司机器上没有配置复杂的密码。暴力攻击是一种使用自动猜测密码过程的工具来猜测设备中配置的登录密码的方法。
为了分析这种性质的恶意流量,我将尝试在预先配置的 FTP 服务上执行暴力攻击。FTP 用于高效传输文件,确保现代和关键网络基础设施中数据的完整性和确认交付。
出于测试和分析的目的,我在 Windows 7 机器上的192.168.1.108
处配置了一个 FTP 服务器,攻击者在 Kali 机器上的 IP 192.168.1.106
处。
让我们复制并分析攻击和正常的 FTP 流量模式。如果您想复制它,但仅出于教育目的,请执行以下步骤:
- 使用最适合您需求的平台配置 FTP 客户端和 FTP 服务器,并确保 FTP 服务器和客户端之间的链接正常工作。
- 现在,首先,我们将尝试使用合法用户登录 FTP 服务器,并记录流量。稍后,我们将使用 Wireshark 中的 Follow TCP stream 选项,以易于理解的纯文本格式查看流量详细信息。
- 参考下面的截图,我从 FTP 客户端发起了
之间的连接。然后,我在第一次尝试中提供了错误的凭据,并在第二次尝试中使用了正确的凭据:
-
在我成功登录后,我发出了
help
命令来查看可用命令的列表,然后退出来终止连接。 -
Wireshark 捕获了 FTP 客户端和服务器之间的流量;让我们使用跟随 TCP 流选项(在列表窗格中右键单击|跟随| TCP 流)来查看详细信息:
FTP 组装流
- 现在,我们已经分析了正常的流量模式,让我们看看恶意 FTP 数据包(如暴力攻击企图)会是什么样子。我将使用一个基本的字典文件执行暴力攻击。
- 发出
hydra -l <username> -P <password file> ftp://<you target's IP address>
命令。参考以下截图: - 生成的流量被捕获,我没有显示所有流量,而是使用了一个显示过滤器
ftp.request.command==PASS
,以便只查看与 FTP password 命令相关的数据包。下面的截图显示了我用来查询恶意重复数据包的显示过滤器。
FTP 暴力攻击流量模式
- 由于单个 IP 在很短的时间内发出 FTP pass 命令,因此很容易识别出前面的流量是恶意的(请参考时间列)。
为了识别此类恶意或敏感流量,创建不同的着色方案(在第 3 章、分析传输层协议中讨论)。参考以下截图:
恶意流量的着色方案
使用显示过滤器和彩色流量选项,您可以分析网络基础设施中的恶意流量。
检查恶意流量(恶意软件)
恶意软件是任何网络中最常见的客户端攻击形式之一。恶意软件感染的结果可能非常具有破坏性,从拒绝服务攻击到远程代码执行。由于缺乏安全控制和普遍意识,石油和天然气、能源、运输和制造等关键基础设施行业是恶意软件最喜欢的目标之一。参考下面的截图,我们将在实验室中尝试复制基于恶意软件的感染:
恶意软件一旦安装在受害者的机器上就能够执行任务,例如信息泄露、执行命令和/或破坏系统,即使基础架构中安装了最好的安全解决方案也是如此。
如果您想在自己的虚拟实验室中复制该场景,请遵循以下步骤:
- 您需要三台机器连接到同一个局域网。确保它们能够互相 ping 通,以确保连通性。
- IP 地址
192.168.1.106
上有一个合法网站,IP 地址为192.168.1.107
的
客户端通常会访问该网站。但是,这一次,客户端没有意识到导致重定向到另一个 web 服务器的感染(假设:web 服务器受到威胁并被攻击者接管)。参考以下合法服务器截图:
合法网站
- 为了模拟重定向,我配置了运行在
192.168.1.106
上的 Apache 服务器,将 HTTP 请求重定向到 IP192.168.1.100
,并从那里下载efg.exe
。 - 当客户端访问在
192.168.1.106
运行的网站时,它被重定向到一个新的 web 服务器,该服务器直接要求客户端运行一个名为efg.exe
的文件。参考以下截图:
客户端被重定向到 IP 192.168.1.100,并被要求运行应用。
- 应用的发行者未经验证,因此客户端操作系统无法验证它。这将导致未知的发布者错误。参考以下截图:
未知的发布者错误
- 一旦客户端点击运行,恶意软件将被执行,从而创建一个连接回到命令和控制中心(攻击者)。
- 我们在攻击过程中截获了流量信息。让我们来看看吧。我没有只显示流量,而是首先在客户机和合法服务器之间组装 TCP 流。
- 为了理解我们的恶意软件的工作方式,我们需要查看数据包的详细信息。参考下面的截图,图中显示了组装好的 TCP 流:
客户端和真实(受损)服务器之间的 TCP 流
- 显而易见,客户端访问 web 服务器,请求通过 HTTP 重定向转发到新地址
http://192.168.1.100/efg.exe
- 在客户端和服务器之间交换了几个数据包之后,客户端收到了一条
200 OK
状态消息,提示成功下载了可执行应用efg.exe
下面的屏幕截图描述了客户端机器发送的从新网址下载可执行文件的请求:
图 7.20:恶意软件签名
搜索efg.exe
的客户端发起了GET
请求,服务器用200 OK
状态消息响应。稍后,您可以看到以字符MZ
开头的已知恶意软件签名,后跟一些随机字符。
快速谷歌搜索显示,这是一个可执行文件。维基百科声明 16/32 位 DOS 可执行文件可以通过 ASCII 中文件
开头的字母MZ
来识别。参考以下截图:
继续我们的调查,让我们导出efg.exe
文件。执行以下步骤下载文件:
- 转到文件|导出对象| HTTP:
下一个屏幕看起来像下面的屏幕截图:
导出 HTTP 对象
- 现在,选择说明文件名的对话,并单击另存为。
- 一种选择是将该文件上传到网站,如http://www.virustotal.com,该网站将通过多个反病毒程序扫描该文件。参考以下截图:
Uploadingefg.exeto virustotal.com
- 单击扫描并等待结果:
56 种反病毒软件中有 31 种将可执行文件检测为恶意文件。
- 您还可以通过查看
hex
转储来手动检查受感染客户端与命令和控制中心之间的对话。参考以下截图:
TCP 流对话框中的 Hexdump
攻击者机器似乎正在发出一些命令来收集关于受害者机器的信息。窗口右侧突出显示的内容表示字符串,如Get File Information
、Get full PC name
、Get Current directory
、Adjust token Privileges
等。
熟悉此类流量模式至关重要,建议在 Wireshark 中设置过滤器捕获过滤器,以执行被动分析来识别恶意流量。当然,您环境中的 IDS/IPS 系统将能够自动检测到它,但是在关键基础设施网络(石油和天然气、能源等)中,部署此类安全解决方案的可能性极小。在这些情况下,Wireshark 是您最好的伙伴,最重要的是,它是免费的!!
摘要
使用 Wireshark 防御常见形式的渗透企图,从而保护您的网络安全。从安全角度分析数据包将使您对如何对付恶意用户有新的认识。
诸如端口扫描、足迹和各种主动信息收集尝试等活动是攻击方法的基础,可以利用这些方法绕过您的安全基础设施。创建过滤器和签名来识别恶意流量模式。
猜测密码以获得未经授权的访问被称为暴力攻击。通过 Wireshark,您可以过滤和识别此类恶意形式的流量。
Wireshark 可以帮助您分析恶意软件的行为,使用分析的行为,您将能够为您的 IDS/IPS 安全解决方案创建必要的签名。
下一章将使网络专业人员能够执行无线数据包分析,并教他们如何解密和读取空中的流量。
七、分析稀薄空气中的流量
如今,大多数设备都安装了无线功能,了解网络中无线流量的结构和模式至关重要。本章将帮助理解执行无线数据包分析的方法和步骤。
以下是我们将在本章中涉及的主题:
- 了解 IEEE 802.11
- 无线通信模式
- 捕获无线流量
- 分析正常和异常流量模式
- 解密加密的无线流量
无线网络流量分析类似于有线网络分析;这里讨论的主题的目标是了解无线技术和协议的优点和缺点,以及可疑的无线流量。
了解 IEEE 802.11
在电气和电子工程师学会 ( IEEE ),几组技术专家作为一个委员会正在进行项目,其中一个是 802,它负责开发局域网 ( LAN )标准。具体来说,802.11 包含 WLAN 标准。
802.11 标准有多种,对于最外层的标准,我们将讨论其中的多种,如 802.11b、802.11a、802.11g 和 802.11n:
- 802.11 :支持 1-2 Mbps 的网络带宽。这就是
为什么许多 802.11 兼容设备已经过时的原因。 - 802.11b :该规范与 802.11 标准一样,使用 2.4 Ghz 的信令频率。从技术上讲,使用 b 规范,在 2.4 Ghz 频带上可以实现最大 11 Mbit 的传输速率。
802.11b 频带被分成 14 个重叠的信道,其中每个信道具有 22 Mhz 的宽度。在一个实例中,最多可以有三个不重叠的信道同时工作。这种空间分离是必要的,并且是让通道单独操作所必需的。
大多数电器,如微波炉、无绳电话等等。在 2.4 Ghz 频谱上工作,这可能会在 802.11b WLAN 数据包传输中造成严重干扰和拥塞。
- 802.11a :这是基于 1999 年发布的正交频分复用 ( OFDM ),支持最高 54 Mbps 5 Ghz 频谱的传输速率。该规范是作为 802.11 标准的第二个标准开发的。它通常用于商业环境中;由于其高成本, a 规格不太适合家庭环境。802.11a 不存在信道重叠问题。更高的调节频率有助于防止工作在 2.4 Ghz 频谱上的设备造成的干扰。
- 802.11g :该规范于 2002 年发布,结合了 802.11a 和 802.11b 的最佳特性。它使用 2.4 Ghz 的信号频率,带宽高达 54 Mbps。它还支持向后兼容,这意味着所有 802.11g 接入点将支持使用 802.11b 的网络适配器,反之亦然。
- 802.11n :为了进一步提高范围和传输速率,基于技术多输入多输出 ( MIMO )引入了无线规范 n 。该规范的最终版本于 2007 年发布,规定传输速率高达 600 Mbps。可配置 2.4 或 5 Ghz 它可以同时使用两种频率,从而支持向后兼容网络适配器。MIMO 技术最多可使用四根天线。
无线通信中的各种模式
无线网络使用载波侦听多路访问和冲突避免 ( CSMA / CA )协议来管理发送数据的站点,其中每个想要发送数据的主机都应该首先侦听信道,也就是说,如果它是空闲的,那么主机可以继续发送分组;如果没有,那么主人必须等待轮到它。这是因为每个主机共享同一个介质,从而避免了冲突。
802.11 架构由若干组件组成,如一个站 ( STA )、一个无线接入点 ( AP )、基本 服务集 ( BSS )、扩展 服务集 ( ESS )、独立基本 服务
STA 和 AP 之间有四种常见的关联模式,如下所示:
- 基础设施/管理模式:无线网络,无线客户端在其中与接入点建立连接,以访问数据和网络资源。AP 定义有一个服务集标识符 ( SSID ),它是接入点的名称,用于在一定范围内进行识别(出于安全原因,有时可以禁用广播 SSID,这样可以防止您的无线网络被发现)。例如,当我们扫描附近可用的 Wi-Fi 网络时,会显示多个网络名称供我们选择。另一个需要了解的有用术语是基本服务集标识符 ( BSSID ),即接入点的 MAC 地址。
默认情况下,每个接入点都应该广播 SSID,并在一秒钟内发送 10 次信标帧,让客户端知道 AP 已准备好接受连接。请参考下图:
- Ad Hoc 模式:在 Ad Hoc 模式下,两个客户端相互连接形成一个对等网络。无线客户端发送和接收的数据包不会中继到接入点。请参考下图:
- 主模式:当 NIC(网络接口卡)适配器能够通过使用特殊驱动程序充当客户端的接入点时,它就成为主节点。现代操作系统和硬件都具备这种功能,其中主机设备可以通过共享其有线连接来充当接入点。请参考下图:
- 监控模式:该模式使网络适配器能够监听无线网络流量;当监控模式被激活时,您的设备将停止发送和接收任何数据包,它只会以被动的方式嗅探实时流量。简而言之,如果 wireshark 运行的接口启用了监控模式,它可以在不属于网络的情况下嗅探流量。这种模式通常被称为射频监控模式 ( RFMON) 。请参考下图:
常见和不常见的无线流量
2003 年,保护无线电脑网络安全系统 ( WPA )由 Wi-Fi 联盟推出,作为使 WLAN 通信比之前的协议 WEP 更强的措施。WEP 使用的密钥大小是 40/104 位,而 WPA 使用 256 位的密钥大小,这也有助于完整性检查。在 WEP 中,实现了传统的 CRC,但是 WPA 引入了流行的迈克尔 64 位消息完整性检查 ( MIC )。
WPA 使用 RC4 算法来建立基于动态加密密钥的会话(您永远不会在两台主机之间使用相同的密钥对)。请参考下图,了解通过介质传输的密文是如何形成的:
该过程从追加 IV 和动态生成的 256 位密钥开始。随后使用 RC4 算法加密,生成的加密密钥流会附加数据,瞧!我们有最终的密码文本。
请参考下图,该图描述了 WPA 中的身份验证过程:
以下是上图所涉及的步骤的摘要:
-
首先,主密钥交换(PSK) 发生,随后向 STA 传输一个 nonce 值(启动连接)。
-
STA 将使用 AP 的 nonce 值和它自己的 nonce 来计算成对瞬时密钥(【PTK】)以连同在先前步骤中建立的预共享密钥(【PSK】)一起发送。结果值将被发送到 AP 以计算 PTK,并为 MIC 添加接收序列计数器 ( RSC )。
-
现在,STA 将首先验证消息中的 MIC 以确保完整性,然后安装密钥。
-
将向 AP 发送关于该状态的响应。如果状态显示成功,则 AP 安装将在进一步通信中使用的相同密钥(动态密钥)。
以下屏幕截图描述了成功的 WPA 企业握手过程中涉及的四个身份验证数据包:
更详细地说,让我们观察握手过程中前面四个身份验证数据包中包含的标志:
以下是对上述身份验证数据包的描述:
- 数据包 1 :设置成对主密钥(预共享密钥)和
ACK
位(因为之前交换的关联请求/响应),由 AP 发送给 STA,以与随机选择的 nonce 值一起启动连接。 - 数据包 2 :设置成对主密钥和
MIC
标志,STA 将其发送给 AP 以确认请求,并将其自身的随机数值附加到 AP 的随机数和用于完整性检查的MIC
中。 - 数据包 3 :设置成对主密钥、安装、密钥
ACK
和MIC
标志,AP 发送给 STA。接下来,STA 将完成挑战,以便获得认证。 - 数据包 4 :设置成对主密钥和
MIC
标志,STA 发送给 AP
完成连接过程。
根据我们对成功身份验证过程的理解,现在让我们尝试观察身份验证不成功情况下的数据包模式。这种情况下的唯一区别是 STA 不知道预共享密钥。
参考以下截图:
WPA 认证失败
前面的屏幕截图描述了由于 STA 发送了不正确的预共享密钥而在 STA 和 AP 之间传输的数据包链。在对 AP 的暴力攻击事件中,可能会看到这些数据包。
WPA 企业
为了标准化和强化身份验证过程,并引入一些责任和不可否认的元素,WPA 提供了外部服务器的配置来验证和授权 sta。这个集中式认证和验证单元被称为 RADIUS / TACACS 服务器。在四向握手发生之前, RADIUS 服务器和接入点应该通过一个 MSK。让我们来看看下图:
发布主密钥的交换,成对主密钥被创建并被传递给 AP,这将进一步完成四次握手过程。
作为宽限终止的一部分,无线站使用解除关联分组来通知接入点 STA 现在离线,并且可以释放所分配的资源。以下屏幕截图列出了在解除关联阶段观察到的数据包:
解除关联分组
无线站使用deauthentication
帧通知接入点 STA 正在离开。正如我们在前面的截图中所看到的,首先,STA 发送一个disassociation
帧,并接收来自 AP 的ACK
( 318
,319
)。
无线客户端可能会发送disassociation
帧,这有几种情况。参考下面的截图来理解这一点:
解除身份验证数据包
在前面的数据包列表中,首先,STA 向接入点发送一个deauthentication
帧,该帧在接下来的数据包中得到确认(467
、468
)。
解密无线网络流量
Wireshark 还通过在 802.11 协议部分嵌入预共享密钥来帮助解密无线流量。下面的屏幕截图描述了从附近的接入点嗅探到的正常无线流量:
解密前的 WLAN 流量
为了解密前面列出的数据包,我们需要如下配置 IEEE 802.11 部分:
- 转到编辑|首选项,展开协议部分,选择 IEEE 802.11 并按如下方式进行配置:
- 单击解密密钥旁边的编辑按钮。
- 单击新建并添加 WEP/WPA 密钥以启用解密。完成所有更改后,单击确定:
现在,您将看到解密的流量,如下所示:
解密后的 WLAN 流量
摘要
IEEE 802.11 标准在无线电频率上工作,用于通信目的。CSMA/CD 有助于实现高性能无线网络所需的无冲突环境。
进行无线流量分析时,通常会观察到三种类型的帧:管理帧、控制帧和数据帧。管理帧控制连接的建立,控制帧管理数据包的传输,数据帧由实际数据组成。
局域网中的企业认证协议 l ( EAP )成为 EAPOL,用于 802.11 基础设施(RADIUS/ AAA)交换主密钥。
EAP 用于交换主密钥。根据 RFC 3748 中的定义,EAP 是一种支持多种身份验证方法的身份验证框架,要执行 EAP,您不需要 IP,因为它运行在数据链路层上。
接入点广播无线客户端侦听的信标帧。此外,无线客户端可能会发送探测请求以连接到接入点,然后由接入点或第三方认证服务执行认证。
使用 Wireshark,可以通过在 IEEE 802.11 协议部分添加无线网络密钥来解密无线通信。
八、掌握 Wireshark 的高级功能
在本章中,我们将了解 Wireshark 中可用的高级选项,并使用命令行版本的数据包嗅探器。在这里,我们将讨论以下主题:
- 使用统计菜单分析网络
- 使用 TCP 流
- 使用协议层次选项
- 使用命令行工具进行协议分析
使用 Wireshark,可以查看和分析关于网络数据包、协议和端点的各种统计数据。通过详细查看和分析网络相关信息,了解和认识协议层次结构、对话、端点等高级功能有助于执行故障排除、优化和取证活动。
统计菜单
Wireshark 提供了各种有助于收集网络统计数据的工具,帮助用户分析从一般信息到特定协议相关信息的各种信息。
使用统计菜单
可以在 Statistics 菜单中查看关于捕获的数据包、应用的过滤器、标记的数据包和各种其他统计信息的详细信息;参考以下截图供参考(来源:http://wireshark.org):
协议层次结构
“协议层次结构”窗口提供有关网络流量中协议分布的详细信息。每行代表与一个协议相关的统计数据;参考以下截图:
协议层次窗口
如果要检查特定主机的协议分布,则在打开协议层次结构窗口之前,应用显示过滤器,例如ip.addr==172.20.10.1
。现在,当您再次打开层次窗口时,过滤器将出现在标题栏正下方的协议层次窗口的顶部:
应用显示过滤器后的协议层次窗口
使用协议层次窗口,也可以生成和应用显示过滤器。只需右键单击您希望使用的协议,然后选择所需的选项,如下面的屏幕截图所示:
在需要评估和分析恶意软件相关活动的情况下,协议层级窗口将是值得检查的。
会话
要分析与两个特定端点相关的网络通信,可以使用 Conversation 选项(在 Statistics 菜单下可用)。要访问它,点击统计|对话。该窗口将在顶部列出要评估的网络层,并在行中列出端点地址(IP 或 MAC ):
对话窗口
例如,如果我们需要确定网络中产生最多流量的端点,请转到 IPv4 选项卡,并按降序对字节列进行排序:
最繁忙的设备
在前面的屏幕截图中,第一行描述了端点发送和接收了多少数据包和字节。要通过对话对话框创建显示过滤器,请右键单击一行,然后创建所需的表达式。我选择了第一个选项 A B,它将只显示与地址 A 和地址 B 相关联的数据包:
新创建的过滤器表达式将显示在“显示过滤器”对话框中,如以下屏幕截图所示:
对话对话框有助于收集和分析与特定终端相关的详细信息,这在排查和审核网络基础架构时非常方便。
端点
通过网络进行通信的设备称为端点。局域网中的端点使用物理地址(即 MAC 地址)进行通信。在交换环境中,使用物理地址进行通信;交换机存储 MAC 地址表,工作在 TCP/IP 模型的第 2 层。
例如,我们观察到来自某些端点的大量网络流量,根据我们的剧本数据(通常的流量模式),这是不寻常的。为了确定产生多余网络流量的确切端点,“端点”对话框可以提供帮助。要访问它,请单击统计菜单下的端点选项。端点窗口看起来很像我们之前观察到的对话窗口。
默认情况下,大多数情况下会显示以太网选项卡(列出第 2 层 MAC 地址)。除了协议之外,您还必须观察一个数字,该数字表示为该特定协议捕获的端点的数量。在我们的例子中,我们看到 3 行,在主窗格中可以看到相同数量的行。
在主窗格中,可以看到每个端点的更多具体细节,例如
传输的数据包总数、传输的字节总数以及单个端点接收和传输的字节和数据包总数:
端点窗口
现在,如果您想分析其他协议,只需单击您选择的任何选项卡。我单击了 IPv4 选项卡,并使用 Packets 列对主窗格进行了排序,如下面的屏幕截图所示。
通过查看端点对话框,我现在可以很容易地判断出大多数数据是从 IP 172.20.10.7
传输过来的。这可能是一个 IP 与某个服务器对话,或者更有可能是一个服务器以中等速率与我们网络中的多台机器对话:
端点对话框—IPv4 选项卡
要通过“端点”窗口创建显示过滤器,请右键单击传输的数据包最多的行,然后选择“应用为过滤器”下的“选定项”,如以下屏幕截图所示:
您可以在列表窗格上方的显示过滤器对话框中看到相同的显示过滤器,如下所示:
这有助于我们快速分析某个端点的流量,从而提高用户的分析速度。单击“清除”后,您将看到相同的“端点”对话框。在窗口底部,您会看到两个复选框和几个按钮。下面列出了每种方法的用途:
- 名称解析:解析以太网标签中列出的每个以太网
地址的名称。但是在某些情况下,它可能会对应用的性能产生不利影响,例如,当试图从一个巨大的捕获文件中解析唯一的 IP 地址时会产生 T4。 - 限制显示过滤器:根据通过 Wireshark 主窗口应用的显示过滤器,限制端点窗口的结果。
- 复制:以
CSV 格式(逗号分隔值)复制当前端点窗口标签的内容。 - Map :在浏览器中绘制所选端点的地理位置。
跟随 TCP 流
Wireshark 提供了将纯文本协议数据包流重组为人类可读格式的功能:
跟随 TCP 流窗口
例如,组装一个 HTTP 会话将显示从客户机发送的 GET 请求和从服务器接收的响应。在“跟随 TCP 流”对话框中显示的请求和响应消息后面有特定的颜色编码。客户端请求显示为红色,任何蓝色文本表示从服务器收到的响应。如果协议是 HTTP、FTP、Telnet 等等,那么对话将以纯文本显示;如果使用应用层协议的安全版本,那么请求和响应消息的一些内容将被加密。
在“跟随 TCP 流”对话框的底部,有一个下拉菜单,从中可以过滤“跟随 TCP 流”窗口中的内容,以便仅查看与通信任一端相关的内容。此外,除了查看原始格式的数据,您还可以根据需要在 ASCII、EBCDIC、十六进制转储和 C 数组格式之间进行选择。
要查看 TCP 流,请按照下列步骤操作:
- 打开
capture/trace
文件 - 如果需要,应用显示过滤器
- 从列表窗格中选择任何数据包
- 右键单击选定的数据包,然后单击跟随 TCP 流
命令行-fu
在默认安装 Wireshark 时,还会安装一个名为 Tshark 的命令行版本的协议分析器。有很多基于 CUI 的嗅探工具可用,包括 Capinfos、Dumpcap、Editcap、Mergecap、Rawshark、Reordercap、Text2pcap 和 Tshark。
用于协议分析的最常见和最广泛使用的命令行工具是 Tshark,它可以捕获实时流量并分析保存的捕获文件。Tshark 使用pcap
库来捕获和翻译数据包。就像 Wireshark 的过滤选项在 Tshark 中也可用一样。像 Tshark 这样的应用证明了自己是有价值的,它们具有低内存需求、易于安装和运行嗅探器的简单命令集等优点。
让我们考虑一个场景来理解命令行嗅探器的用法和优点。比方说,我们有一个 Apache web 服务器和一个 FTP 服务器运行在位于 IP 172.16.136.128
的 Windows box 上,一个 Macintosh 客户端运行在172.16.136.1
:
我们将从基础开始,最终转向高级功能的使用,如过滤器和一些可用统计选项的使用。
让我们通过使用该工具提供的不同功能来尝试一下:
- 首先要确认的是有多少接口可用于捕获数据包。使用以下命令检查
tshark -D
:
可用接口
-
如果没有为捕获网络流量指定接口,
tshark
将从列表中选择第一个接口。接口可以通过它们的名称和它们出现的序列号来选择。 -
对于我们的场景,我们将使用
pktap0
来监听客户端和服务器之间的流量。启动捕获过程的命令是tshark -i pktap0
:
- 为了在客户机和服务器之间产生一些流量,我从客户机执行了命令行实用工具
curl
来访问 IP 地址为172.16.136.128
的网页:
- 由于前面的命令,我们将在 Tshark 控制台上看到一些活动:
在 pktap0 捕获的数据包
如果您想在任何时候停止捕获过程,请按下 Ctrl + C 。
- 如果您希望将捕获的网络数据包保存到文件中,请指定
-w
开关,如下所示:
- 由于前面的命令,原始网络数据将存储在名为
http.txt
的文本文件中。以下是保存在文本文件中的内容:
存储在文本文件中的原始数据
- 要以可读的形式保存捕获的数据,只需使用重定向操作符
">>"
到一个文件:
由于发出了前面的命令,数据包被捕获并重定向到文本文件http2.txt
。下面是保存在文本文件中的内容,它列出了通过端口80
在两台主机172.16.136.128
和172.16.136.1
之间捕获的数据包:
我们刚刚学习了将网络数据包保存到文件的两种不同方法。
- Tshark 提供了三种类型的过滤选项:捕获、显示和读取。我们已经在前面的章节中讨论了捕获和显示过滤器,所以让我们讨论一下读取过滤器。读取过滤器能够过滤实时流量并保存捕获的文件。通过读取过滤器,一组特定的数据包可以被解码或写入文件。
- 使用读取过滤器是一项处理器密集型任务,可能会出现丢包等问题,捕获过滤器优于读取过滤器。对于捕获滤波器,使用
-f
开关;-R
用于读取过滤器;并且-Y
用于显示过滤器。让我们使用-f
开关来学习捕获过滤器的用法:
开关的用法区分大小写。
- 如果所需的表达式包含空格字符,如前面的屏幕截图所示,例如“【T0”),请在过滤器表达式两边使用双引号。
- 现在,让我们学习在先前保存的捕获文件
http.pcap
上使用显示过滤器,并在IP 172.16.136.128
过滤来自 web 服务器的所有 HTTP 数据包:
Tshark 显示过滤器
- 为了收集 HTTP 协议,只有来自
http.pcap
文件的统计数据使用命令tshark -r <file-name> -q -z <expression>
:
-
-q
开关使其在标准输出上保持静默(这通常在 Wireshark 中处理统计数据时使用),而-z
开关用于激活各种统计选项。这两种开关经常结合使用。 -
如果您想检查在捕获网络流量时观察到了多少台主机,请使用以下命令:
Tshark 是一个强大而简单的命令行嗅探器,类似于tcpdump
。它能够轻松捕获网络数据包,并且需要较少的配置/安装。
摘要
“对话”窗口列出了两台主机之间通信的相关信息。
“端点”对话框列出了与连接到网络的设备相关的详细信息。
Wireshark Summary 是一个信息功能,它提供了数据、过滤器和trace
文件的粒度形式。
“协议层次结构”窗口以表格形式列出了与网络端点使用的协议分布相关的信息。
使用 Wireshark 中的 Follow TCP Stream 选项从捕获的数据包中读取纯文本数据。有不同的查看选项,如 ASCII 和十六进制。
安装 Wireshark 时会安装一个命令行工具。最常用的工具是 Tshark,它的工作方式类似于 Wireshark 和tcpdump
。它使用其他主要协议分析器使用的 pcap 库。
使用 Tshark,您可以收听实时网络或使用已保存的采集文件。