了解您的网络:深入数据包分析
您的网络是您业务运转的命脉。 确保您充分了解其中正在发生的一切。
在许多方面,数字业务的格局经历了多次变革。曾经简单的 CGI 脚本,使用 Perl 编写,如今已演变成完全自动化地在 Kubernetes 和其他编排框架上运行的集群部署(抱歉我用了太多专业术语,但我没有夸大,这确实是现在的现状!)。
一个典型的容器化、分布式现代 Web 应用程序(来源:medium.com)
然而,令人感到欣慰的是,基本原理仍然与 20 世纪 70 年代相同。
我们所拥有的,是对支撑网络的物理电缆的抽象之上的抽象(当然,虚拟网络很棒,但您明白我的意思)。 如果我们愿意深入研究,可以根据 OSI 模型将网络划分为层,但总而言之,我们始终都在处理 TCP/IP 协议(警告:需要复习!)、ping、路由器,所有这些都只有一个共同的目标:数据包的传输。
那么,什么是网络数据包?
无论我们做什么——聊天、视频流、游戏、浏览网页、购物——本质上都是两台计算机(或网络)之间的数据包交换。 “数据包”是在网络中(或网络之间)流动的最小信息单位,并且有一套明确的方法来构造和验证这些数据包(这超出了本文的讨论范围,但如果您感兴趣,这里有 更多信息)。
网络中的数据包流(来源:training.ukdw.ac.id)
简单来说,每个数据包都代表着链条中的一环,它需要在源端正确传输并在目标端验证。即使只有一个数据包丢失或顺序错误,整个过程也会暂停,直到所有数据包都以正确的顺序接收,然后才将它们重新组合成原始的数据(例如,一张图片)。
既然我们了解了网络的基础知识,接下来了解网络分析器的作用就顺理成章了。网络分析器是一种工具,可以帮助您查看网络上的各个数据包。
但是,为什么要这么费力呢?接下来我们将探讨这个问题。
为何需要分析数据包?
数据包似乎是网络数据流的基本构建块,就像原子是所有物质的基础一样(我知道,原子不是真正的基本粒子,但作为类比足够了)。在分析材料或气体时,我们不会去关注单个原子在做什么。那么,为什么要在单个层面上关注网络中的数据包呢?除了我们已经知道的,我们还能知道什么?
在您自己没有经历过困境之前,很难理解数据包级分析的重要性,但我会尽力解释。
数据包分析意味着深入了解网络管道,以找出问题的根源。通常,当所有其他方法都失败时,您才需要进行网络数据包分析。这往往涉及看似无解的情况,例如:
- 即使没有明显的违规行为,机密数据仍然神秘丢失
- 在没有任何明显证据的情况下诊断应用程序运行缓慢的问题
- 确保您的计算机/网络没有受到威胁
- 验证或反驳攻击者是否在 蹭网您的 Wi-Fi
- 找出为什么您的服务器成为低流量瓶颈
总而言之,数据包分析是确凿证据的一种形式。如果您了解如何进行数据包分析,并拥有快照数据,您就可以避免被错误地指责为黑客攻击,或者仅仅被认为是无能的开发人员或网络管理员。
一切都关乎智慧! (来源:dailydot.com)
关于一个真实的案例,我认为这篇博文的评论(这里)很特别(以防您需要):
我们公司的一个至关重要的应用程序出现性能问题,客户部署时遇到了麻烦。这是一个用于全球金融公司的股票代码工厂主管的股票定价应用程序。如果您在 2000 年左右拥有 401(k) 计划,那么它可能依赖于此应用程序。我对 TCP 行为进行了深入分析。我发现问题出在操作系统供应商的 TCP 实现中。错误的行为是,每当发送堆栈进入拥塞控制时,它就永远不会恢复。这导致了一个极小的发送窗口,有时只有 MSS 的几倍。
与操作系统供应商的客户经理和开发人员支持人员沟通了一段时间,他们不理解这个问题、我的解释,或者认为这个问题*不可能*出现在应用程序中,因为应用程序对 TCP 的内部机制一无所知。这就像在对着墙说话。每次电话会议,我都要从头开始解释。最后,我终于联系到了一个能深入讨论问题的人。事实证明,他把 RFC1323 扩展加入到了堆栈中!第二天,我拿到了操作系统的补丁,问题也随之解决。
开发人员解释说,当堆栈处于拥塞控制状态时,存在一个错误导致传入的 *包含有效负载的 ACK* 被错误地分类为 DUPACK。
像 HTTP 这样的半双工应用程序永远不会出现这种情况,但我支持的应用程序一直在套接字上双向发送数据。
当时,我没有得到管理层的有力支持(我的经理甚至对我大喊 “总是想着使用嗅探器” 来解决问题),除了我以外,没有人将操作系统供应商的 TCP 实现视为问题的根源。从操作系统供应商那里获得修复让这次胜利显得格外甜蜜,这让我获得了大量的资源来做自己的事情,也让最有趣的问题出现在了我的办公桌上。
如果您不想阅读那段长文,或者觉得难以理解,那么这位先生正面临着他开发的应用程序的性能问题,管理层对此并未给予任何支持。只有彻底的数据包分析才能证明问题不在于应用程序,而在于操作系统处理网络协议的方式!
修复方案不是对应用程序的调整,而是操作系统开发人员提供的补丁! 😮
真是令人难以置信。如果没有数据包级别的分析,您认为这个人会落到什么境地?很可能失业。如果这还不能让您相信数据包分析(也称为数据包嗅探)的重要性,我真的不知道该怎么办了。🙂
现在您已经知道数据包分析是一种超能力,我有个好消息要告诉您:掌握它并不困难!
由于有了强大且易于使用的数据包嗅探工具,从数据包级分析中收集信息就像阅读销售仪表板一样简单。当然,您需要的不仅仅是对网络内部情况的表面了解。但话说回来,这里没有高深的科学,没有需要掌握的复杂逻辑,只需要一些常识。
如果您在使用这些工具之一时开始阅读其文档,很快您就会成为一名专家。😀
Wireshark
Wireshark是一个历史悠久的项目(始于 1998 年),在网络分析领域几乎是行业标准。考虑到它完全是一个由志愿者运营的组织,并得到一些慷慨的赞助商的支持,这非常令人印象深刻。 Wireshark 仍然是开源的(虽然不在 GitHub 上,但可以在 这里 找到代码),甚至有技术 会议 以它的名字命名!
Wireshark 的众多功能包括:
- 支持数百种网络协议。
- 可与多种文件格式(例如 tcpdump (libpcap)、Pcap NG、Catapult DCT2000、Cisco Secure IDS iplog、Microsoft Network Monitor、Network General Sniffer®(压缩和未压缩)、Sniffer® Pro 和 NetXray®)互操作。
- 几乎可以在所有平台上运行(Linux、Windows、macOS、Solaris、FreeBSD 等)。
- 可以从以太网、IEEE 802.11、PPP/HDLC、ATM、蓝牙、USB、令牌环等读取实时数据。
- 可以即时解压缩 gzip 数据。
- 支持多种解密协议(例如 WPA/WPA2、SNMPv3)。
- 具有广泛的 VoIP 分析能力。
- 提供用于快速视觉扫描的着色规则。
您可以参加这个很棒的在线课程,学习掌握 Wireshark。
想在终端中使用 Wireshark?试试 Termshark 吧。
tcpdump
如果您是老派的(或者说,铁杆命令行爱好者),那么 tcpdump 绝对是您的菜。
这是另一个标志性的 Linux 实用程序(如 curl),它仍然像以往一样重要,甚至许多“更高级”的工具都是建立在其基础之上的。就像我之前说的那样,它没有图形界面,但该工具的功能足以弥补这一不足。
但是,安装它可能会有些麻烦。虽然大多数现代 Linux 发行版都预装了 tcpdump,但如果您的发行版没有,您可能需要从源代码构建。
tcpdump 命令简洁明了,旨在解决特定问题,例如:
- 显示所有可用接口。
- 只捕获其中一个接口。
- 将捕获的数据包保存到文件。
- 只捕获失败的数据包。
…等等。
如果您的需求很简单,并且您只需要运行快速扫描,那么 tcpdump 可能是一个不错的选择(特别是当您键入 tcpdump 并发现它已经安装时!)。请查看这篇文章以了解一些实时 tcpdump 命令示例。
Tproxy
Tproxy 是一个简单的开源命令行工具,用于代理网络上的 TCP 连接。Tproxy 使用 Go 语言编写,并打包为 Go 二进制文件,因此可以在所有现代 Linux 和 macOS 平台上使用。
下图展示了监控 Mysql 连接的命令行:
它的主要用途是代理 HTTP 连接并检查 HTTP 请求和响应的内容。它还可以用于代理其他协议,如 SOCKS 或 TCP。它可以用来代理两台主机之间的 TCP 连接,或分析实时连接的流量。它在调试和测试使用 TCP 作为传输协议的应用程序以及构建 TCP 代理服务方面非常有用。
其目的是为 tcpdump 命令行实用程序提供一个易于使用的界面,使用户能够代理 TCP 连接并执行其他高级网络分析,而无需深入了解底层 TCP 协议。
以下命令行展示了 gRPC 连接:
它充当 TCP 代理,允许您连接到远程服务和应用程序,就像您在本地计算机上一样。它允许在远程主机上构建自定义 TCP 服务,类似于反向 TCP 代理,在处理使用 TCP 的应用程序时允许各种安全性、故障排除和性能改进。
以下是 Tproxy 的更多用途:
- 它在调试和优化 TCP 连接方面非常有用。
- 它也有助于了解其他代理程序的工作原理,例如 Burp Suite 和 ZAP。
- 它可以用来代理两台主机之间的 TCP 连接,或者一台主机与远程 TCP 服务(如数据库或 Web 服务)之间的连接。
- 它可以监控 MySQL 连接和 gRPC 连接,并根据重传率和 RTT 检查连接的可靠性。
大多数用户会发现 Tproxy 可以简化工作流程,并让他们在不更改应用程序或网络本身的情况下执行复杂的网络分析和分析 Web 应用程序。该工具可以从 GitHub 下载。
NetworkMiner
NetworkMiner 自称是取证网络分析工具 (FNAT),并且是您会遇到的最好的数据包级分析器之一。它是一个开源工具,可以被动地分析网络,并配备了一个令人印象深刻的 GUI 界面,可以显示单个图像和其他传输的文件。
但这还不是全部。NetworkMiner 还具有其他出色的功能,例如:
- IPv6 支持
- 解析 PCAP 文件
- 从 SSL 加密流量中提取 X.509 证书
- 支持 Pcap-over-IP
- 支持多种类型的流量,例如 FTP、TFTP、HTTP、SMB、SMB2、SMTP、POP3 等。
- 操作系统指纹识别
- 地理 IP 本地化
- 支持命令行脚本
请注意,其中一些功能在商业版本中可用。
Fiddler
与其他的被动网络嗅探器不同,Fiddler 是位于您的设备和外部世界之间的工具,因此需要进行一些设置(这就是他们将其命名为“Fiddler”的原因吗? 😉)。
它是一个可定制(使用 FiddlerScript)的免费工具,有着悠久而卓越的历史,因此如果您的目标是像专业人士一样嗅探 HTTP/HTTPS 流量,那么 Fiddler 是您的最佳选择。
您可以使用 Fiddler 做很多事情,尤其是在您想变身黑客的时候:
- 会话操作:深入研究打开的 HTTP 标头和会话数据,并以您想要的任何方式修改它们。
- 安全测试:让您模拟中间人攻击,并为您解密所有 HTTPS 流量。
- 性能测试:分析页面加载(或 API 响应)时间,并查看响应的哪个部分是瓶颈。
如果您感到迷茫,Fiddler 的文档 非常好,强烈推荐。
WinDump
如果您想念 tcpdump 的简洁性,并想在 Windows 系统上使用它,那么 WinDump 可以满足您的需求。安装完成后,您可以通过在命令行中输入“tcpdump”来运行它,就像在 Linux 系统上运行该实用程序一样。
请注意,本身并没有什么需要安装的;WinDump 是一个可以立即运行的二进制文件,前提是您安装了 Pcap 库的实现(推荐 npcap,因为 winpcap 已不再开发)。
BruteShark
BruteShark 是一种有效的网络取证分析工具 (NFAT),可用于处理和检查网络流量,例如 PCAP 文件,并直接从网络接口捕获流量。
它包括重建 TCP 会话、构建网络地图、提取高强度加密密码的哈希值、将哈希值转换为 Hashcat 格式以执行离线暴力攻击。
该项目的主要目的是帮助负责分析网络流量并识别弱点的网络管理员和安全研究人员。
BruteShark 有两个版本:一个基于图形用户界面 (GUI) 的 Windows 应用程序和一个用于 Linux 和 Windows 的 CLI 工具。此解决方案中包含的一些项目甚至可以独立用于分析 Windows 和 Linux 机器上的网络流量。
BruteShark 还可以执行各种操作,例如提取 DNS 查询、文件刻录、提取 VoIP 呼叫 (SIP、RTP)、为用户和网络节点构建网络图、使用 Hashcat(NTLM、HTTP-Digest、CRAM-MD5、Kerberos 等)以及检索和解码密码和用户名。
所有项目都使用 .Net Standard 和 .Net Core 实现,以提供跨平台和现代支持。该解决方案提供三层架构,其中包括一个或多个项目,每层包括 PL、BLL 和 DAL。
通过 DAL(数据访问层),该项目有助于使用 WinPcap、libpcap 等驱动程序和 SharpPcap 等包装库读取 PCAP 的原始文件。同样,BLL(业务逻辑层)负责网络信息分析(TCP、数据包等),PL 利用横切项目,同时引用 BLL 层和 DAL 层。
OmniPeek
对于每秒都有大量 MB 数据流过的大型网络,其他工具可能会显得力不从心。如果您也面临同样的情况,那么 OmniPeek 也许值得您关注。
它是一款用于分析网络性能、分析和取证的工具,特别是在您需要低级功能和全面仪表板时。
资料来源:sniffwifi.com
Capsa
如果您只关心 Windows 平台,那么 Capsa 也是一个值得考虑的选择。它有三个版本:免费版、标准版和企业版,每个版本都提供不同的功能。
也就是说,即使是免费版本也支持 300 多种协议,并具有警报等有趣的功能(在满足某些条件时触发)。标准版更进一步,支持 1000 多种协议,并允许您分析对话并重建数据包流。
总而言之,对于 Windows 用户来说,这是一个可靠的选择。
EtherApe
如果您追求强大的可视化效果和开源精神,那么 EtherApe 是一个不错的选择。尽管预构建的二进制文件只适用于少数 Linux 发行版,但源代码是可用的(在 SourceForge 和 GitHub 上),因此您可以选择自己构建它。
在我看来,这些是 EtherApe 如此出色的原因:
- 多节点、彩色编码监控。
- 支持大量数据包格式,如 ETH_II、802.2、803.3、IP、IPv6、ARP、X25L3、REVARP、ATALK、AARP、IPX、VINES、TRAIN、LOOP、VLAN 等(实际上,还有很多很多)。
- 可以从“线路”或 tcpdump 文件中读取实时数据。
- 支持标准名称解析。
- 在最新版本中,GUI 已迁移到 GTK3,从而提供了更愉悦的用户体验。
CommView
如果您是 Windows 专卖店,并看重优先支持的便利性,那么 CommView 是值得推荐的选择。它是一款功能强大的网络流量分析器,内置 VoIP 分析、远程监控等高级功能。
最让我印象深刻的是它能够将数据导出为多种开放和专有格式,例如 Sniffer®、EtherPeek™、AiroPeek™、Observer®、NetMon、Wireshark/Tcpdump 和 Wireshark/pcapng,甚至是普通的十六进制转储。
WiFi Explorer
列表中的最后一个工具是 WiFi Explorer,它有适用于 Windows 的免费版本,以及适用于 Windows 和 macOS 的标准版。如果您只需要进行 WiFi 网络分析(这几乎是当今的标准),那么 WiFi Explorer 将让您的生活变得更加轻松。
它是一款设计精良且功能强大的工具,能够直击网络的核心。
荣誉奖:如果我不提及我偶然发现的 macOS 独有的网络分析器,这篇文章就不完整——Little Snitch。它内置了防火墙,因此它具有额外的好处,即让您能够立即完美地控制所有流量(这听起来可能很痛苦,但从长远来看这是一个巨大的优势)。
接下来是什么?
您还应该探索这些网络监控软件,以更好地了解您的基础设施。如果您想在网络和安全领域发展职业生涯,请查看这里的一些最佳在线课程。