十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从TCP/IP四层模型到网络渗透实战:协议原理与攻防应用

从TCP/IP四层模型到网络渗透实战:协议原理与攻防应用 各位做安全测试、做网络运维、或者单纯对“数据包在网络上到底怎么跑”这件事感兴趣的朋友这篇东西你们应该能读进去。我最早接触TCP/IP四层模型还是在背面试题的时候什么“应用层、传输层、网络层、网络接口层”背得滚瓜烂熟但说实话没吃透。真正干了好几年渗透和组网之后回头看才意识到当年没理解透的东西恰恰是搞懂网络攻击与防御手法的钥匙。这个标题里的关键词是“网络渗透”很多人觉得渗透就是拿工具扫一扫、打一打但实际上工具只是表象底层全是协议原理。只要你能把TCP/IP这四层模型真正吃透再去看那些攻击手法、加固方案基本就是俯视视角而不是被工具推着走。这篇文章我打算从网络渗透实战的角度把这四层逐层拆开讲。每一层我会讲清楚它到底管什么事再落到渗透里它对应哪些攻击面、哪些排查思路。学完之后你再抓包看数据或者分析流量告警思路会清晰很多。1. 内容整体设计与思路拆解1.1 为什么搞渗透必须先啃TCP/IP四层模型先说明一个观点市面上很多讲TCP/IP的文章要么太偏理论、全是协议术语要么太偏做题、对着分层背概念。而真正做渗透测试或者防御的人需要的是另一种视角——把每一层当成一个攻击面和防守面去理解。打个比方。你把TCP/IP四层模型想成一栋楼的四个楼层每一层都有明确的职责最上面那层管“给用户提供什么服务”比如浏览器要访问网页、邮件客户端要收发邮件这都是应用层的活儿再往下这层管“给数据做运输规划”数据要可靠到达还是快速到达、要不要分段传输层说了算第三层管“在复杂的网络环境里找到通往目标的路”这就是网络层IP协议是主角最底下这层管“把数据转成物理信号在网线、光纤里送出去”你电脑的网卡驱动、交换机转发都属于这层的范畴。搞渗透的人为什么要对所有楼层都门儿清因为任何一个攻击动作最终都要落到某几层上。你扫描端口本质是在传输层做探测你判断目标操作系统本质是看网络层和传输层数据包的指纹特征你搞中间人攻击可能要同时操控ARP网络接口层/网络层、DNS应用层这些不同楼层的信息。所以不能说“我只需要懂应用层渗透”那是非常危险的认知偏差。1.2 四层模型与渗透实战的对应关系我见过不少新人上来就学SQL注入、学XSS也很努力但一到真实环境中就懵了目标网站做了CDN真实IP找不到内网横向移动的时候不知道怎么判断主机在不在线抓包分析半天不知道一个告警到底对应哪层的问题。把这些状况拉回到四层模型里捋一遍立刻就清楚了。应用层对应的是各种业务逻辑漏洞SQL注入、文件上传、越权、逻辑绕过全是在这一层搞事传输层对应的是端口服务排查、TCP握手特征分析、UDP服务探测很多扫描器的主要工作区域就是这一层网络层对应的是路由追踪、IP伪装、ICMP探测判断目标网络拓扑就是靠它网络接口层对应的是ARP欺骗、MAC地址过滤、VLAN跳跃这些跟二层交换环境密切相关的操作。所以这篇文章和我之前写过的东西有个很大的不同我不打算孤立地讲“TCP协议三次握手怎么回事”“IP报文头部长啥样”然后让你自己去联想怎么用。我打算把每一层的关键协议拆开同时直接指出来“这一个细节在渗透中能用来干什么”把原理和用途绑在一起讲。这样不管你是刚入门的新手还是已经干了一阵子觉得知识体系有点散的人都能从这里拿到一个可以复用的分析框架。2. 核心细节解析与实操要点2.1 网络接口层二层环境的攻防战场网络接口层是整个模型的最底层很多人觉得这层没什么好研究的不就是网卡驱动和物理链路吗这么想就亏大了。现实中大量内网渗透动作其实都发生在这层尤其是ARP协议可以说是二层世界里最经典的攻防焦点之一。先补充一个基本功ARPAddress Resolution Protocol地址解析协议解决的是“已知IP地址怎么找到对应的MAC地址”这个问题。同一局域网内的设备通信数据链路层靠的是MAC地址而不是IP地址所以发送方必须先把目标IP解析成目标MAC才能把数据帧送出去。具体流程是发送方在局域网内广播一个ARP请求“谁的IP是192.168.1.10请把你的MAC地址告诉我”目标主机收到后单播回复“我是我的MAC是xx:xx:xx:xx:xx:xx”发送方拿到这个对应关系后缓存在ARP表里。渗透和防御的视角里这个协议最出名的问题就是ARP欺骗。因为ARP请求和回应在设计上不校验身份局域网里任何一台主机都可以伪造回应告诉受害主机“网关的IP对应我的MAC地址”。受害主机一旦相信了所有发往网关的流量实际上都会先到攻击者这里形成了典型的中间人位置。防御侧最简单的排查手段就是查看ARP表命令在Windows和Linux下都可以执行arp -a然后核对网关IP对应的MAC地址是否和真实网关的MAC一致。一旦发现同一IP出现两个不同MAC或者网关MAC突然变化基本可以判定ARP缓存中毒。另外一个容易被忽略的二层细节是MAC泛洪攻击。交换机维护着一张MAC地址表用来决定某个帧应该从哪个端口转发出去但这张表是有容量上限的。攻击者向交换机发送大量源MAC地址各不相同的伪造帧把MAC表塞满之后交换机无法正常查表只能把帧向所有端口广播这样一来攻击者就能嗅探到本不该到达自己端口的数据。这招现在防御方案已经比较成熟比如端口安全、动态ARP检测这些手段但作为理解二层攻击面的起点依旧值得认真研究。2.2 网络层IP协议是互联网的寻址地基往上一层到网络层。IP协议是这层的绝对核心它定义了一套逻辑寻址体系让全球几十亿台设备可以相互找到对方。你要理解网络层重点抓三件事IP地址怎么划分、数据包怎么路由、ICMP怎么辅助探测。先说IP地址本身。IPv4地址是32位二进制数习惯上写成点分十进制例如192.168.1.100。为了适应不同规模的网络IP地址被划分成了网络部分和主机部分具体区分方式由子网掩码决定。比如255.255.255.0这个掩码意味着前24位是网络号后8位是主机号一个子网里最多能有254个可用主机地址去掉网络地址和广播地址。在渗透排查场景里我经常要快速判断两个IP是不是同一个子网方法就是把两个IP和掩码都转成二进制做一次按位与运算结果相同就说明在同一个子网。听起来麻烦但熟练了之后基本都是条件反射。比如/24这个段只要前三个数字一样基本就在同一子网攻击者在同子网内可以直接用ARP进行欺骗和嗅探跨了子网就得靠网关转发攻击路径和手法又会完全不同。再说路由。网络层的核心任务就是为数据包选择一条通往目标网络的路径。每个主机和路由器都有路由表路由表记录着“要去哪个网段下一跳应该发给谁”。渗透过程中经常用到traceroute命令它的原理就是利用IP头部里的TTL字段通过TTL超时来逐跳暴露路径上的路由器地址这在前期信息收集中用来判断目标前面的网络拓扑和中间设备非常实用。ICMP协议也值得一提。它工作在网络层主要负责传递控制消息和差错报告大家最熟知的ping命令就是基于ICMP Echo请求和回应实现的。渗透里有一类场景叫ICMP隧道原理就是利用ICMP报文的载荷区域携带任意数据从而在防火墙只放行ICMP的情况下建立隐蔽通信隧道。不过目前很多防火墙已经做了ICMP报文检测能检测异常长度或异常频率的ICMP流量所以实用性有所下降但思路非常经典。2.3 传输层端口、握手与状态管理传输层是渗透测试中打交道最多的一层没有之一。原因很简单所有应用服务都要监听在某个端口上而端口正是传输层的概念。TCP和UDP这两个协议构成了传输层的主体它们都要用到端口号来区分不同进程。先讲TCP。TCP是面向连接、可靠的传输协议它的核心是用三次握手建立连接、四次挥手断开连接。三次握手的过程是客户端先发一个SYN报文服务端收到后回复SYNACK客户端再回一个ACK连接建立完成。这个过程中存在半开连接状态扫描器里的SYN扫描利用的就是这个特性——只发SYN收到SYNACK说明端口开放收到RST说明端口关闭不完成最后一步握手所以不会在目标上留下完整的连接日志。这就是为什么Nmap默认扫描方式选用SYN扫描既快又相对隐蔽。TCP还有个容易被忽略但极其重要的机制叫序列号。TCP为了保证数据有序到达给每个字节都编了号接收方通过确认号来告知“下一个我期望收到的字节编号”。序列号如果可预测就可能被攻击者利用来伪造TCP数据包这类攻击手段叫TCP会话劫持或TCP盲注入。现代操作系统早已实现了随机化初始序列号但这个知识依然值得理解因为很多TCP层面的异常检测本质上都是在看序列号和确认号是否符合预期。UDP相对TCP就简单得多它是无连接的不保证可靠交付也没有握手和状态管理。但正因为它简单、开销小很多实时性要求高的服务都基于UDP比如DNS查询、DHCP、NTP。从渗透视角看UDP端口扫描比TCP慢得多且不怎么准因为UDP没有明确的“关闭”信号通常只能靠ICMP端口不可达来推断端口关闭。实际做UDP扫描需要耐心同一端口同时向目标发送多个不同载荷测试结合回应来判断服务指纹。2.4 应用层业务逻辑与攻击入口应用层是最接近用户的一层HTTP、HTTPS、DNS、SMTP、FTP、SSH这些常见的协议都属于应用层。从我的角度看这一层是攻防对抗最密集的区域因为所有业务功能都暴露在这里攻击面最大漏洞带来的影响也最直接。HTTP协议是应用层里最有代表性的例子。早期HTTP/1.1时代每个请求都得单独建立或复用TCP连接请求头里的Host字段决定了访问哪个域名。到了HTTPS普及之后传输内容被TLS加密抓包软件看到的不再是明文HTTP数据这直接影响了中间人攻击的难度。不过应用层的攻击逻辑并没有变SQL注入、XSS、CSRF、SSRF这些手法本质都是利用应用对输入的处理缺陷和底层传输加密与否没有关系。DNS是另一个应用层重要的协议。它负责把域名解析成IP地址默认使用UDP 53端口。DNS设计上也存在很多历史遗留问题比如响应包不校验来源、缓存机制容易被污染。经典的DNS劫持攻击就是先伪造一个DNS响应让客户端把域名解析到恶意IP上用户访问“正常网站”时实际上访问的是攻击者搭建的钓鱼服务器。防御上现在推荐启用DNSSEC域名系统安全扩展对DNS响应做签名验证但部署率始终不高这也是DNS领域长期存在的安全问题。很多人觉得搞懂应用层协议就是学会报文的格式解析实际上更重要的是理解业务与协议的关系。一个登录接口的请求参数是不是存在逻辑漏洞一个文件上传接口对文件类型和内容的校验是否能绕过这些判断需要协议基础但更需要对业务形态的理解。所以学习TCP/IP四层模型时应用层不应该只停留在协议格式层面要往业务逻辑方向多想一步。3. 实操过程与核心环节实现3.1 用抓包工具把四层模型“看”出来理论讲得再多都不如实际抓一次包来得直观。我建议每个学习四层模型的人都亲自做一遍抓包实验工具选择Wireshark免费又强大。这个实验不需要复杂的实验环境自己一台电脑就可以完成。抓包前先把Wireshark装好打开后选择正在上网的网卡接口点击开始捕获。然后打开浏览器随便访问一个HTTP网站为了看到明文建议访问HTTP站点而不是HTTPS站点访问完成后停止抓包。在过滤栏输入http就能看到一堆HTTP请求和响应报文。点开其中一个HTTP请求报文Wireshark会自动按TCP/IP模型的层级把报文展开最上面是Frame物理层帧接着是Ethernet II网络接口层、Internet Protocol Version 4网络层、Transmission Control Protocol传输层、Hypertext Transfer Protocol应用层一个报文完整对应四层模型非常直观。再往下展开IP层能看到源IP地址、目标IP地址、TTL、协议号TCP是6UDP是17这些关键字段。展开TCP层能看到源端口、目标端口、序列号、确认号、各种标志位。把这些字段和前面讲的四层知识逐一对上号你对模型的理解会比看十篇文章都扎实。3.2 以端口扫描为例串起四层思维端口扫描是渗透测试里最基础的信息收集动作但想要扫得准、扫得好依然需要四层模型思维。我拿一个典型的扫描场景来拆解思路。假设目标IP是192.168.1.20我们要对它的常见端口进行探测。用Nmap执行nmap -sS 192.168.1.20这里的-sS就是SYN扫描。Nmap会发送一个TCP SYN包到目标端口端口如果开放会回应SYNACK端口如果关闭会回应RST。整个过程没有完成最后的ACK握手所以目标应用不会感知到一次完整的TCP连接这是SYN扫描最大的特点。这里就涉及四层模型的综合运用了。SYN扫描工作在传输层但Nmap在扫描前会先引起ICMP探测或者ARP解析视网络环境而定这属于网络层和网络接口层的操作。拿到端口开放列表后再针对开放端口做服务版本探测比如nmap -sV这时它会让Nmap主动和端口所在的应用完成应用层协议交互通过分析响应特征来判断服务类型和版本号。可以说一次完整的扫描过程从二层到四层全部都走了一遍。这里顺便分享一个我踩过不少次的坑扫描海外目标或者跨运营商目标时丢包非常严重导致扫描结果漏报。我的经验是先探一下目标是否在线ICMP或TCP Ping再决定用哪种扫描方式如果丢包率高可以把Nmap的重试次数降低默认是10次参数是--max-retries并增加并发数这样能有效减少无谓的等待时间。3.3 局域网内ARP欺骗的复现与防御实验聊网络接口层的时候提到ARP欺骗这里我把实验细节展开给有兴趣在自己实验环境里复现的人一份参考。注意所有操作务必在自己的虚拟机或实验网络里进行不要对其他人或公共网络做这类测试。实验环境需要三台机器一台充当攻击机一台是受害机一台是网关。攻击机上用专门工具比如Ettercap或Bettercap或者自己写脚本发送伪造的ARP响应。我在测试环境里用Bettercap做过启动后在交互终端输入net.probe on开启主机发现然后net.arp.spoof on对目标IP和网关IP进行双向欺骗。开启之后受害机访问网关的流量都会先经过攻击机攻击机再转发给网关形成一个中间人链路。验证是否生效的方法是在受害机上查ARP表执行arp -a如果看到网关IP对应的MAC地址变成了攻击机的MAC说明欺骗已经生效。此时攻击机上可以开启端口转发如果攻击机是Linux需要用sysctl -w net.ipv4.ip_forward1开启IP转发保证受害机的流量能正常转发出去不让对方断网暴露异常。同时可以开启抓包软件观察经过的流量如果受害机访问的是HTTP明文网站网络层和传输层的信息一目了然。做完实验后记得恢复环境把攻击机关闭ARP欺骗再把受害机的ARP表清空或重启网络不然ARP表中的错误缓存会一直保留。这个实验做一遍你对“为什么二层攻击可以控制同网段所有流量”这件事会有非常具象的认知。3.4 内网渗透实战中的分层排查思路日常做内网渗透时我习惯按层自上而下排查目标。应用层先看目标开放了哪些Web服务有没有明显的已知漏洞比如某个版本的管理后台存在未授权访问传输层看端口开放情况找那些容易被忽视的高端口服务网络层看目标网段划分找网络设备的管理入口和访问控制策略网络接口层看同网段内有多少活跃主机判断哪些设备可以做ARP层面的横向移动。这里举一个例子。之前在某次授权测试中目标内网允许我们访问一个/24的网段应用层扫描只发现了一台Windows主机开了3389远程桌面常规弱口令爆破也试了但没有成功。后来我改用网络层的思路用ping扫描和ARP扫描把整个网段过了一遍发现还有个IP没有被应用层扫描覆盖到。检查发现这个IP是网络打印机虽然它不做端口扫描看起来平平无奇但进一步查看它的Web管理页面发现存在未授权访问漏洞可以直接读取网络配置和打印任务记录获取了部分内网拓扑信息。这就是分层排查思路的典型价值——不要只盯着常见端口和服务把目光放到每一层去答案往往就在你忽略的那个角度里。4. 常见问题与排查技巧实录4.1 TCP三次握手相关的问题排查搞网络分析的人几乎都会遇到一个问题客户端连不上服务端抓包看到三次握手没有完成。这类问题按层排查会非常高效。先在客户端抓包看SYN包是否发出去了。如果SYN都没发出去问题基本出在客户端本地检查防火墙是否拦截出站流量、是否有路由问题。如果SYN发出去了但没收到任何回应重点查中间设备。用ping测一下到目标IP的连通性通了说明链路基本OK再继续用traceroute看每一跳是否正常找到断在哪一跳。如果中间设备把TCP端口给过滤了traceroute能看到路由可达但TCP握手就是没回应这时需要用端口连通性测试工具比如tcping确认端口是否可达。还有一种常见情况SYN发出后收到了RST回应说明目标端口上有服务在运行但主动拒绝了连接。这个可能是防火墙主动RST也可能是目标服务配置了白名单只允许特定IP来源。RST回应的源地址如果是目标服务器本身大概率是应用层拒绝如果是中间防火墙的地址大概率是防火墙策略拦截。4.2 网络延迟与抓包顺序不一致的问题我最早做网络分析时遇到一个很困惑的现象抓包软件里看到的TCP包顺序和数据包重传情况和业务侧感知的延迟完全对不上。后来才明白抓包软件抓到的包只是本机网卡看到的数据包如果中间链路存在负载均衡器、透明代理、或者硬件加速设备抓包结果和真实网络路径可能并不完全一致。排查延迟问题最有效的手段是分段定位。先在本机入口和出口各放置一个抓包点计算每个阶段消耗的时间确认延迟在哪个环节。如果在客户端侧抓包看到TCP握手很快完成但数据传输阶段有大量重传和窗口缩小现象那大概率是链路质量问题比如带宽满、丢包率高等。这时候用丢包测试工具比如mtr测一下路径上的丢包情况基本能锁定问题。Windows环境下还有一个常见坑抓包时开启了大包如巨型帧导致部分设备不支持而分片表现就是小数据包正常、大数据包不通。排查这类问题可以锁定MTU逐步减小测试包大小找到链路支持的最大值再对端设备同步调整。这个操作在排查某些“间歇性访问很慢”的问题时非常有效。4.3 防火墙和安全设备对渗透测试的影响日常测试中目标网络几乎都会部署防火墙、IDS/IPS这些安全设备对测试结果影响非常大。很多人扫不到端口就以为目标没开服务实际上很可能是防火墙做了端口过滤。这类情况怎么判断呢我一般的思路是如果SYN扫描没回应可以再用TCP全连接扫描试试如果依旧没有回应但ping能通大概率是防火墙过滤了端口如果全端口基本都呈现过滤状态说明大概率有防火墙或者主机安全策略在起作用。针对有安全设备防护的目标测试策略也需要调整。第一个原则是控制扫描速率不要高频扫描尽量把流量伪装成正常形态比如加延迟、随机源端口。第二个原则是先用被动信息收集方法比如查询证书透明度日志、查看域名解析历史、搜索公开的代码仓库尽量在主动扫描前拿到更多目标信息减少主动探测的必要。第三个原则是测试行为要尽量轻量避免触发规则导致IP被封锁。当然这些内容说到底都是在讲“理解协议层之后如何调优测试策略”。防御侧的逻辑刚好反过来理解了这些扫描特征就能更精准地设计检测规则。比如防火墙检测到短时间内大量只有SYN没有ACK的流量就可以判定为扫描行为进一步联动封锁或告警。双方都在和同一套协议体系打交道谁能理解得更深谁就在对抗中占据主动。4.4 实操心得三层、四层与七层工具如何配合最后分享一个我个人的工具使用心得。我常用的工具有很多按层分一下很清晰二层工具有Nmap用于ARP扫描、Ettercap、Bettercap、macchanger这些三层主要是各种路由追踪和ICMP工具比如traceroute、ping、fping四层就是Nmap、nc、masscan这些端口扫描工具七层就是Burp Suite、sqlmap、nuclei这些Web层工具。新手最容易犯的错误是用七层工具解决所有问题。遇到一个目标直接上Burp Suite扫目录、测漏洞忽略了底层信息收集的重要性。我个人的习惯是接触任何目标的第一天先跑一轮全网的IP存活探测和端口扫描把网络层的拓扑关系和传输层的开放服务搞清楚再进入应用层阶段。这样有个好处对目标的攻击面有全局认知后续针对web应用的测试会更容易联想到底层链路是否也存在问题。另外任何工具的结果都不能盲信抓包才是终极验证手段。命令行输出显示端口开放最好用nc手连一下看服务banner是否对应扫描结果说某个服务版本存在漏洞最好再仔细核对版本号的准确度。这套“工具先跑、抓包验证、人工确认”的流程能避免大量误判。结尾实战中的一点个人体会写到这里其实还有很多协议细节没展开比如TCP拥塞控制、路由协议BGP与OSPF、HTTP/2与QUIC的区别这些内容每一个都值得单独写一篇。但如果你能把文章里讲的四层链路、每层核心协议、关键字段用途先消化掉再回头看各种渗透工具会有一种“工具不过是对协议原理的封装”的顿悟感。我个人在实际项目中最大的体会是所有攻击手法追根溯源都是对协议设计信任的滥用。ARP信任局域网对端设备所以有了ARP欺骗TCP信任握手状态所以有了序列号预测和连接劫持应用层信任用户输入所以有了注入类漏洞。理解这套底层逻辑之后不管做攻击还是做防御思路都会清晰很多。最后一句话送给大家协议不是你背下来的知识点而是你手里的地图多抓包、多实验、多复盘这张地图才会真的属于你。
返回列表