ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

网络监听实验从入门到实战:抓包、ARP欺骗与防御分析

网络监听实验从入门到实战:抓包、ARP欺骗与防御分析 这些年做网络攻防实验绕不开一个既基础又经典的方向——网络监听。很多刚入门的朋友一听到“监听”两个字脑子里想的是电影里那种神秘设备但真正上手之后才会发现它其实就是抓包、分析、还原流量的一套技术组合。攻击者靠它收集情报防守者靠它发现问题同一套工具思路不同结果完全不同。这次就以“网络监听”为主题完整拆一遍实验思路。我会把原理、环境搭建、具体操作、流量分析方法和防御对策放在一起写重点讲清楚每一步为什么这么做。适合高校安全方向的学生、刚入行的安全测试工程师还有想搞懂抓包原理的网络运维朋友参考。1. 网络监听的本质数据包为什么会“被看见”先说一个最容易被忽略的问题网络监听到底监听的什么它不是去入侵某台机器而是让网卡把本来不属于自己的数据也收下来然后从这些数据里还原出有价值的东西。这在攻防里属于被动收集情报也是后续很多攻击手法的前置步骤。1.1 网卡的两种工作模式普通模式与混杂模式网卡默认工作在普通模式下驱动程序会把收到的数据帧逐一过滤只有目的MAC地址是本机MAC、广播地址或组播地址的帧才会交给上层协议栈处理其他帧直接丢弃。也就是说正常情况下A和B在通信C的网卡虽然物理上也能收到这些电信号但因为目的MAC不是自己C在驱动层就把包丢掉Wireshark之类工具根本看不到。监听实验的第一步就是把网卡切到混杂模式Promiscuous Mode。在这个模式下驱动不再按目的MAC过滤收到的帧全部送到上层Wireshark、tcpdump才能抓到自己不该“收”的数据。在Linux里用一条命令就能切换sudo ip link set eth0 promisc onUbuntu/Kali等发行版还支持用ethtool查询当前状态ethtool -K eth0 promisc on切完之后用ip link show eth0能看到PROMISC标志。这里有个我自己踩过的坑有些虚拟机的虚拟网卡支持混杂模式但VMware/VirtualBox的默认网络策略可能不生效尤其在有NAT和主机隔离的配置下就算开了混杂模式流量也未必能全收。实验时先把虚拟网络调成桥接模式或者全部放在同一个自定义的host-only网络里能减少很多干扰。1.2 交换式网络下的监听困境与突破口早期以集线器Hub为核心的网络是真正意义上的共享式网络Hub把收到的数据帧向所有端口广播任何一台机器只要开启混杂模式都能看见全网流量监听几乎是零门槛。但现在的网络早已是交换式网络交换机会根据MAC地址表把帧只转发到对应端口。你去监听同网段的另一台主机时正常情况下交换机会把数据发给目标端口你的网卡收不到。那攻击者是怎么解决的核心思路是“骗”交换机或“骗”通信双方把流量引到自己这台机器上最常见的就是ARP欺骗。ARP欺骗之所以有效是因为ARP协议在设计时默认凭据不可信——收到一个ARP应答包就更新缓存根本不验证真实性。攻击者伪装成网关回应受害者的ARP请求受害者就会把数据发给攻击者攻击者再把数据转发给真正的网关形成中间人链路。这个细节我会在第4部分用完整实验来讲现在先留个概念。1.3 监听在攻防实验中的价值定位网络监听为什么会成为攻防实验的主角之一关键在于它把“看不见的通信”变成了“看得见的数据”。从攻击角度看通过对流量的嗅探可以拿到明文账号口令、聊天内容、文件内容等敏感信息从防御角度看监听对应的抓包分析是所有网络排障、异常流量发现、入侵痕迹分析的基础能力。我在做攻防实验教学时一直强调一个原则先学会监听和分析再去讨论攻击和防御。这就好比你想当医生得先会看化验单然后才能谈诊断和开药。很多新手一上来就追求炫酷的利用工具反而不愿意静下心看懂Pcap里的协议细节后面真正遇到问题的时候往往连排查方向都找不到。2. 实验环境搭建先把“靶场”圈起来网络监听实验对环境的要求不高但“可控性”非常重要。不建议直接拿真实宿舍网、办公室网络来练手不仅容易误伤别人还会给自己惹麻烦。正确做法是用虚拟机在隔离网络里搭一套小型靶场。2.1 最小化拓扑三台虚拟机的分工推荐用VMware Workstation或VirtualBox创建三台虚拟机攻击机Kali Linux负责抓包、运行监听工具受害机AWindows 10或者Ubuntu均可模拟普通用户访问HTTP网站受害机B或网关节点可以用真机上的虚拟NAT网关替代或者再加一台Linux当路由器。我自己用的最小组合是两台虚拟机加宿主机的虚拟网络。三台机器全部放在同一个自定义host-only网络比如vmnet2网段固定成192.168.100.0/24。这样流量可控、隔离良好不会影响外部设备。各机器参数参照下面这个表角色系统推荐IP作用攻击机Kali Linux192.168.100.10开启混杂模式运行Wireshark/tcpdump/ettercap受害机AWindows 10192.168.100.20模拟普通用户访问明文HTTP服务受害机BUbuntu 22.04192.168.100.30模拟网关开启IP转发功能如果实验条件紧张也可以把受害机B省略攻击机直接监听同一网络中的受害机A与网关192.168.100.1之间的流量。注意这里的前提是同时具备root权限和实验授权。2.2 工具清单抓包、转发、欺骗分别用什么工具不用贪多但每类最好有一两个趁手的抓包工具Wireshark图形化方便分析、tcpdump命令行快速过滤、留后手流量构造/欺骗工具ettercap、arpspoof隶属于dsniff套件辅助分析strings从pcap或二进制里提取可打印字符串、chaosreader把TCP流还原成文件这个在还原图片、文档时很好用。安装命令在Kali里通常是预装的Ubuntu可以手动装sudo apt update sudo apt install tcpdump wireshark dsniff ettercap-text-only这里有个细节Wireshark抓包需要root权限但图形界面直接以root运行会有权限警告。建议把当前用户加入wireshark用户组或者用sudo运行命令行抓包再用普通用户打开pcap文件分析。2.3 连通性与转发验证环境搭好之后先别急着抓包先把链路跑通。步骤是三台机器互相ping确保二层互通在受害机A上访问一个内网HTTP服务比如用Python起个临时服务python3 -m http.server 8080然后在攻击机上用tcpdump抓一下确认能看到A到B的流量。这个步骤虽然简单但价值很大。它能让你确认虚拟交换机没有隔离端口混杂模式的网络路径是通的。我在实践中遇到过一个问题VMware的host-only网络默认开启了端口隔离导致攻击机抓不到同网段其他主机的广播流量找了一圈才发现是虚拟交换机配置问题。后来直接换用自定义网段并关闭隔离选项后才正常。3. 抓包实操从第一条TCP连接看起环境就绪之后开始正式做监听实验。这里我会分三个层次来讲先把最简单的抓包手法过一遍再对重要协议做一次分析最后看如何从明文流量里提取敏感信息。3.1 用tcpdump抓取一次HTTP请求的完整过程在攻击机开一个终端监听eth0网卡的80端口流量sudo tcpdump -i eth0 host 192.168.100.20 and tcp port 80 -w http.pcap参数解释一下-i eth0指定网卡host 192.168.100.20过滤源或目的IPtcp port 80只保留TCP 80端口流量-w把结果写到pcap文件。不加-w时会在终端实时打印摘要打印会消耗CPU在高流量场景下容易丢包实验时养成先落盘再分析的习惯比较好。然后在受害机A上打开浏览器访问http://192.168.100.30/index.html或者直接用curlcurl http://192.168.100.30:8080/回到攻击机按CtrlC结束抓包然后用Wireshark打开http.pcap。你会看到完整的TCP三次握手。重点关注Wireshark下方的“Follow TCP Stream”追踪TCP流功能它能直接把HTTP请求和响应内容合并展示还原出整个会话。3.2 解剖一次三次握手SYN、SYN-ACK、ACK很多初学者抓包时会忽略一个关键点为什么有的SYN包后面跟的是[RST]而不是SYN-ACK这就是端口未打开或防火墙拦截的典型表现。分析TCP握手时不要只看有没有三个标志位还要看IP层TTL、序列号变化。三次握手本质是序列号同步过程。第一次握手客户端发送SYN包序列号是一个随机初始值M第二次握手服务端回应SYN-ACK带自己的随机初始序列号N同时确认号是M1第三次握手客户端发送ACK确认号是N1。Wireshark里抓到的包端口、序列号、窗口大小一清二楚。这就是后续做TCP重传分析、丢包排障的基础。我在分析时习惯先加过滤条件tcp.flags.syn 1把握手包筛出来再逐个看帧的时间戳判断握手延迟。如果SYN到SYN-ACK超过几百毫秒基本可以断定服务端或链路存在瓶颈。3.3 明文流量里的“安全彩蛋”接下来是监听实验里最刺激的部分在明文协议下直接找到敏感信息。受害者A访问http://192.168.100.30/login.html在一个简化表单里输入用户名admin、密码123456点登录。攻击机这边用Wireshark的Follow TCP Stream直接看会发现HTTP请求行里有完整的URL参数POST数据区块里直接是明文表单内容。我用strings命令处理pcap文件也能看到同样的结果strings http.pcap | grep -i password这里想特别说一点很多人觉得现在网站基本都是HTTPS监听已经没用了。但这个想法不完全对。内网旧系统、IoT设备、打印机管理接口、路由器后台仍然有大量明文HTTP和Telnet服务。攻击者一旦进入内网这里就是突破口。我们做实验的目的不是为了教大家“怎么偷账号”而是通过亲眼看到明文传输的危害明白加密通信到底在防什么。作为防守方看到报告里出现这样的现象时就应该知道必须推动升级到HTTPS或者启用报文加密。4. 进阶监听实验用ARP欺骗把流量“引”过来单个主机的抓包仍然局限在本机收得到的数据想要监听同一交换网络内其他主机的对外通信就需要把网络流量“引”到自己的机器上。这就是ARP欺骗在监听实验里的作用。4.1 ARP欺骗为什么能成功ARP是IPv4网络中用于解析IP到MAC的协议。主机A要和网关通信时会广播ARP请求询问“谁有192.168.100.1的MAC地址”网关回复后A把映射关系写入ARP缓存。ARP缓存表有一个重要特性它信任后续收到的ARP应答包并且存在过期时间。攻击者在回复包中伪造IP地址不做任何验证就更新受害者缓存这就是欺骗的基础。假设攻击机是192.168.100.10受害者是192.168.100.20网关是192.168.100.1。攻击者向受害者发送ARP应答声称“192.168.100.1的MAC是攻击机MAC”再向网关发送ARP应答声称“192.168.100.20的MAC是攻击机MAC”。两端同时欺骗之后受害者到网关的流量都会经过攻击机攻击机开启IP转发发到真正网关实现中间人。4.2 实验操作过程记录首先开启攻击机的IP转发功能否则欺骗之后数据会在攻击机处断掉sudo sysctl -w net.ipv4.ip_forward1用arpspoof实现双向欺骗。开两个终端分别执行sudo arpspoof -i eth0 -t 192.168.100.20 192.168.100.1 sudo arpspoof -i eth0 -t 192.168.100.1 192.168.100.20命令的含义分别是告诉受害者“网关是你攻击机”、告诉网关“受害者的IP是你攻击机”。同时开第三个终端用tcpdump抓包sudo tcpdump -i eth0 host 192.168.100.20 and tcp port 80 -w arp_test.pcap然后在受害机上访问HTTP网站输入账号密码提交表单。等待几十秒后停止抓包。在Wireshark里打开arp_test.pcap先看有没有来自攻击机的ARP应答风暴再看能否成功还原HTTP POST数据。如果只能看到SYN包但看不到数据段多半是IP转发没开或者交换机的动态ARP检测DAI拦截了欺骗原因是实验网络里的安全策略导致动作被阻止。ettercap也提供了图形化的中间人攻击模式操作时选择网卡、设置目标IP即可。但从学习的角度看我建议先用arpspoof命令行走一遍因为它把每一条欺骗都显式拆开了方便理解每一步在做什么图形化工具反而容易让人忽略底层细节。4.3 抓包结果应该怎么读当实验成功后用arp -a在受害机上查看ARP表会看到网关IP对应的MAC是攻击机的MAC这说明缓存已被污染。在Wireshark里过滤arp能看到大量来自同一条主机ID的ARP应答包这就是攻击者广播欺骗的证据。从流量分析的角度此时抓到的HTTP数据与第3部分的区别在于之前抓到的包完全来自本机与对端的通信而这里抓到的是受害者发送给网关的报文只是被交换机转到了攻击机。这种“明明是发给别人却被你截获”的现象正是监听攻击最有杀伤力的地方。我还建议把chaosreader跑一遍它能把pcap里的TCP流自动重组并还原出图片、HTML文件和文件传输内容chaosreader arp_test.pcap确认输出目录里出现了HTTP会话文件后说明整条监听链路完全打通。这里再次强调这个实验必须在自己的靶机环境里完成不要对其他人的现网设备做类似操作。5. 防守视角如何发现网络被监听、如何削弱监听效果做攻防实验不能只学攻击那一半知道监听是怎么实现的之后更要清楚防守方有哪些抓手。下面从网络侧和应用侧两个方向展开。5.1 网络侧防护交换机安全机制的组合拳针对ARP欺骗监听最直接的对策是在交换机上启用动态ARP检测Dynamic ARP InspectionDAI它依赖DHCP Snooping建立的IP-MAC绑定关系对非法的ARP报文进行丢弃。没有DAI的话管理员可以在主机或网关上做静态ARP表把网关IP和真实MAC写死arp -s 192.168.100.1 00:aa:bb:cc:dd:ee这样即使攻击者发来伪造ARP应答主机也不会更新缓存。缺点是维护成本高适合小型固定网络。交换机端口安全Port Security可以限制端口学习到的MAC数量防止攻击者在端口上做中间人接入。DHCP Snooping则可以限制可信DHCP服务器防止伪造DHCP服务器和IP欺骗。这些机制配置起来都不复杂但默认在不少小型网络环境中没有开启属于典型的“知道却不用”的安全欠债。5.2 应用侧防护让监听者拿到“密文垃圾”即使攻击者成功监听到了流量如果传输内容是加密的那他拿到的只是一堆无法还原的密文。这就是HTTPS、SSH等加密协议的根本价值。我在实验时会让受害者A访问同一个服务的HTTP版本和HTTPS版本各一次。对比Wireshark里的“Follow TCP Stream”会发现HTTP版本能直接看到password123456HTTPS版本在TLS加密后只看到一堆不可读字节即便在中间人伪装下因为证书校验会报警浏览器也会拦住连接。所以应用的防护思路很明确对外Web服务必须强制HTTPS配置HSTS内网管理尽量用SSH代替Telnet用HTTPS代替HTTP不要为图省事关闭证书验证未知证书一律拒绝对敏感数据即便链路已加密也建议做二次加密或签名这样即使应用层数据被模拟也不至于直接泄露明文。5.3 监听检测怎么判断自己是不是“被中间人”防守方的另一个需求是发现监听行为。如果攻击者做了ARP欺骗受害者可以通过以下迹象怀疑网关延迟明显波动因为流量绕行攻击机转发多了节点延迟通常升高ARP表异常用arp -a查看网关IP对应MAC是否与真实网关MAC一致抓包看到大量ARP应答正常网络不会频繁出现同一IP的ARP应答利用工具检测比如在网关侧运行arpwatch它会持续监听ARP流量记录IP与MAC的变化一旦发现IP-MAC绑定异常就会报警。检测还需要链路层以上的配合比如在主机侧部署终端检测工具对网络的异常TCP会话、未完整体握手现象做告警。这些能力在复杂网络里需要和流量分析平台结合但“被监听”这件事第一阶段靠异常MAC和延迟特征就足够发现问题了。6. 实验总结之外平日操作中的几点心得关于网络监听实验我最后再分享一些经验层面的东西。第一抓包之前先确认网卡模式。很多时候抓不到包不是工具问题而是混杂模式没有开启或者在虚拟机里被虚拟网络策略限制了。看PROMISC标志、确认虚拟网络类型这五分钟的预检查能省下半小时的排障时间。第二pcap文件是宝贵的实验产物。一次完整的攻击监听实验会生成多个pcap建议按时间、场景、协议分门别类保存。后续做流量分析、编写检测规则、写实验报告都离不开这批数据。我每次实验完都会用capinfos看一眼文件信息和流量统计对整体流量有一个快速画像capinfos arp_test.pcap第三分析流量时别只盯着Wireshark图形界面。命令行工具在批量处理和分析时更高效。比如用tshark按协议统计包数用tcpdump按IP快速过滤处理几个G的大文件时图形界面会卡到怀疑人生命令行反而毫无压力。第四也是最重要的一条这类实验一定要在授权环境中进行。自己搭靶场、做课程实验完全没问题但施用于未经授权的网络很容易把自己推到违法的位置而且对真实网络环境的干扰也可能造成通信故障。这些工具是中性技术攻击者利用它造成破坏防守者利用它发现风险方向取决于使用者的意图。网络监听这个主题看似基础但它横跨了协议原理、抓包实操、中间人攻击、加密对抗、检测响应等多个知识面。把这一条线走通之后再去看那些复杂的渗透过程和流量分析场景会觉得顺畅很多。希望大家在动手实验时多抓几次包、多看几眼协议细节、多把工具说明书变成自己的操作习惯慢慢你会发现在攻防的世界里“看得见数据”本身就是一种巨大的优势。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进