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

资讯详情

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

从攻防视角拆解TCP/IP四层模型:协议栈才是渗透测试的底层主战场

从攻防视角拆解TCP/IP四层模型:协议栈才是渗透测试的底层主战场 搞安全的第一课学的不是工具而是协议。很多时候我们拿着扫描器、漏洞利用框架一顿操作遇到瓶颈才发现卡在协议理解上。前阵子一个内网巡检的活同事盯着应用日志查了半天业务进程一切正常但网络连接数就是异常飙高最后抓包一看全是半开连接堆在传输层。那一刻我越发确认一件事TCP/IP四层模型这套基础设施才是网络渗透底层真正的主战场。这篇文章我想从攻防视角重新拆一遍四层模型不聊考试题式的概念罗列而是回答一个更实在的问题搞渗透测试和防御建设的人为什么必须把协议栈吃透。内容会覆盖链路层、网络层、传输层、应用层各层的核心机制与典型风险面也会带上可落地的抓包分析思路。适合刚入行的安全新人、做等保测评的同学也适合经常和网络问题缠斗的运维和开发。1. 四层模型不是八股文而是渗透排查的作战地图1.1 为什么安全从业者必须重新学一遍协议栈很多教程讲TCP/IP四层模型讲完分层、讲完封包就结束了留下一个印象这是网络基础考试用得上实际工作好像不太想得起。但等你真正处理过一次内网横向问题、排查过一次可疑外联就会发现协议栈不是抽象理论它是一张精确到字节的作战地图。我见过不少科班出身的测试同学漏洞库背得滚瓜烂熟但一开Wireshark就懵搞不清为什么三次握手之后数据就断了也见过运维老手端口、防火墙规则门儿清遇到内网ARP欺骗却排查了整整两天。差距不在经验而在对每一层协议应该长什么样缺乏直觉。这种直觉怎么建立答案就是把四层模型当成一套完整的流程去看。从应用层把数据交出来到传输层给它加端口信息再到网络层编上IP地址最后链路层套上MAC地址发到网线上每一层都在做一件事为数据找到正确的通路。攻击者的思路恰好反过来他们不按规矩来而是琢磨每一层协议里哪些字段可以伪造、哪些机制可以滥用。1.2 数据包的一生从应用层到网线的完整流转为了把渗透视角讲明白先过一遍数据包的正常流转。你打开浏览器访问一个网站实际上做了一连串事应用层把请求封装成HTTP报文里面带着方法、路径、请求头这些业务数据传输层在HTTP报文前面加上TCP头关键字段是源端口和目的端口端口的作用是告诉接收方这个数据要交给哪个进程网络层再在前面加上IP头写上源IP和目的IPIP的作用是跨网络寻址保证数据能从你的网段跑到服务器的网段链路层最后加上以太网头填上源MAC和目的MAC这一步解决的是同一物理链路内下一跳是谁的问题数据真正在网线上跑的时候靠的是交换机根据MAC转发。接收方收到数据就按相反顺序拆包每拆一层丢掉这层的头部把剩余数据交给上层。整个过程像寄快递应用层写好信件内容传输层贴上收件人部门标签网络层写上收件人城市和街道链路层则贴上驿站配送码。任何一环的信息出错邮件就到了错误的地方——而攻击者恰恰就爱在这些标签上做手脚。1.3 每层多出来的字段都是潜在的攻击面这里要特别提醒一点每一层协议头里的字段绝大多数时候是固定的、标准化的。安全人员要对异常敏感首先得知道正常长什么样。四层模型里的攻击面基本都藏在字段设计上。链路层的ARP协议没有认证所以可以伪造网络层的IP分片偏移字段允许乱序所以能用来做规避传输层的TCP序列号可预测所以有会话劫持问题应用层协议结构灵活所以能塞各种乱七八糟的数据。这种字段级的敏感性不是靠背CVE编号能获得的必须回到协议本身去理解。2. 链路层与网络层内网横移绕不开的寻址暗战2.1 ARP广播与MAC欺骗最经典的中间人入口先说一个我在内网排查里见过最多的问题ARP欺骗。它的根源在于ARP协议的设计目标——在同一个广播域内告诉所有人某个IP对应哪个MAC地址。正常工作流里主机A要跟主机B通信先在本地ARP缓存里查B的MAC查不到就发一个广播帧问谁是192.168.1.10这个广播所有同网段主机都能收到B收到后回应自己的MAC地址A收到回应后缓存下来开始通信。问题在于A无条件信任这条回应不验证发回应的人到底是不是B。安全测试里通过伪造ARP回应可以让目标主机把流量发给测试机从而被动嗅探或中转流量。理解这个机制的重点不是为了教人攻击而是为了真正明白为什么静态ARP表、交换机端口安全这些措施能起作用。静态ARP表直接跳过了询问环节端口安全限制了同一个端口能学习的MAC数量DHCP Snooping则进一步绑定IP与MAC的关系让伪造的ARP报文无法以合法身份进入交换网络。2.2 IP分片与重组藏在字段里的绕过艺术很多人对IP层的理解停留在IP地址路由但IP协议里还有一个容易忽略的特性分片。当数据包超过链路层最大传输单元MTU时发送方或中间路由器会把数据切成多个分片每个分片带着同一个标识符和不同的分片偏移值接收方再按偏移重组。分片机制本身是为了兼容各种物理网络但它天然给安全设备出了难题。一个完整的数据包被切成好几片后很多基于特征匹配的检测设备只检查第一个分片后续分片直接放行攻击者可以把恶意载荷藏在后续分片里。这就是分片绕过思路的由来。防御思路也很清楚对分片做完整重组后再检测或者用防火墙限制分片数量、丢弃非必要的分片包。我见过不少单位的IDS规则很完善但分片重组性能跟不上最后被这种方法穿透。协议理解不到位安全设备形同虚设这句话在这里体现得最明显。2.3 TTL与ICMP被低估的网络探测手段再讲一个渗透测试里很常见、但很多人知其然不知其所以然的点TTL和ICMP。TTLTime To Live是IP头里的一个字段每经过一个路由器减1减到0就丢弃目的是防止数据包在环路里无限转发。日常网络故障排查里ping命令用的就是ICMP协议返回的TTL值能粗略判断目标系统类型——Windows默认TTL一般是128Linux一般是64某些网络设备可能是255。但TTL和ICMP的价值远不止判断操作系统。通过向目标发送目的不可达类型的ICMP报文或者结合TTL变化可以绘制内网路由拓扑推测目标所在网段和边界设备位置。在授权测试中这种探测是内网资产梳理的重要一步。要注意的是很多人以为禁ping就能防止探测实际上不回应ICMP只是增加了点难度TCP连接、ARP探测等手段照样能拿到存活信息。协议层的对抗永远是攻防双方都在这张地图上博弈。链路层和网络层常见风险面可以整理成下面这张表层核心协议容易出问题的机制常规防御手段链路层ARP无认证的广播与回应静态ARP、端口安全、DHCP Snooping网络层IP分片重组、源地址伪造分片重组检测、入口过滤网络层ICMP/TTL信息泄露、网络探测限制ICMP类型、监控异常探测流量3. 传输层TCP状态机与端口扫描的识别攻防3.1 三次握手与半连接队列SYN Flood到底在打什么传输层的TCP协议最大的特点是有状态。有状态意味着通信双方要维护连接的全过程从建立到传输再到释放每一个状态迁移都有严格定义。这个状态机设计让TCP可靠、有序但也给攻击者提供了靶子——你维护状态我就用海量半连接来消耗你的状态资源。正常建立TCP连接要三次握手客户端发SYN服务端回SYNACK客户端再回ACK连接建立。问题出在第二步之后。服务端收到SYN会为这个连接分配一个半连接条目放进半连接队列然后等待客户端的ACK。如果客户端一直不发ACK这个半连接就要等超时才能清理。SYN Flood的原理就是大量发送源地址造假的SYN包让服务端半连接队列瞬间被塞满后续正常连接无法建立。理解这个原理比背防御命令更有意义。为什么SYN Cookie能防因为它干脆不分配半连接队列资源而是把连接信息编码进SYNACK的序列号里等客户端ACK回来说再还原状态。为什么RAID限速也有效因为能限制单位时间内新SYN的到达速率给合法连接留出队列空间。3.2 端口扫描的本质利用TCP标志位做探测搞渗透测试扫描是第一步。端口扫描的底层逻辑就是通过构造不同标志位的TCP包观察目标回应推断端口是开放、关闭还是被过滤。三种最常见的扫描方式本质区别就在flags字段的使用上TCP全连接扫描完整走一遍三次握手connect成功说明端口开放。最稳但会在目标系统留下完整连接日志审计系统很容易发现SYN半开扫描只发SYN收到SYNACK就知道端口开放然后立刻发RST断开。速度快、隐蔽性更好因为不建立完整连接FIN扫描发一个FIN包按RFC规范关闭端口会回RST开放端口则直接丢弃。这种方式对Windows系统无效Windows不管什么标志位都回RST但能绕过一些只记录SYN连接的防护设备。安全测试人员和防守方的对抗很多都发生在这一步。防守方明确了这些扫描逻辑之后才能针对性做检测——不是盯有没有连接而是盯反常的标志位组合和异常频率的连接请求。3.3 从连接状态识别异常一次扫描行为的抓包复盘实操层面tcpdump或者Wireshark是看清这一切的最佳工具。分享一段我经常用的抓包姿势假设要排查某个内网IP是否在搞SYN扫描tcpdump -i eth0 tcp[tcpflags] (tcp-syn) ! 0 and tcp[tcpflags] (tcp-ack) 0 -nn这条命令只过滤出纯SYN包忽略带ACK的SYN。正常访问一个网站几乎不会出现大量纯SYN包如果一段时间内某个源IP对多个目的IP发起这种请求基本可以判定存在扫描行为。再配合连接状态统计netstat -ant | awk {print $6} | sort | uniq -c | sort -n显示大量SYN_RECV状态堆积多半就是半连接攻击或扫描在起作用。我排查过的案例里这个组合拳基本能定位七八成问题。剩下两三成需要看应用层和协议特征去进一步判断。4. 应用层DNS与HTTP里的隐蔽通道识别4.1 DNS隧道为何防不胜防53端口天然放行的代价应用层协议里DNS是最容易被安全团队忽略又最容易被利用的协议之一。原因在于几乎任何网络环境都会放行DNS流量——毕竟谁都要解析域名。攻击者盯上的就是这个必须放行的通道。DNS隧道的基本思路是把要传输的数据编码进DNS查询报文里。比如把数据切成小块作为子域名前缀拼成一个看似随机的域名去查询比如xm9a2f8c3d.example.com每次查询的一部分数据就跟着请求出去了。更隐蔽的做法是利用TXT、MX这些可以承载较长文本的记录类型让DNS服务器回包时把数据带回来。防守方怎么识别最明显的特征是预设流量特征与正常用户不符。一个普通客户端查域名量和频率都不会太高查询的域名通常是已知的、可解析的隧道行为则表现为长时间、高频次地查询固定域名且子域名前缀几乎没有可读性。另外一个内网主机反复向外部权威DNS服务器发起TXT记录查询本身就是风险信号。4.2 HTTP隐蔽通道把数据伪装成正常网页流量和DNS隧道相比HTTP隧道更贴近用户日常识别起来反而更难。它的核心思路是让恶意通信长得和普通浏览行为一样。常见做法包括把数据藏在HTTP请求头里、塞进Cookie字段、伪装成图片或静态资源的请求。实测里最头疼的是HTTPS流量数据加密后不部署解密网关根本看不到内容只能从流量元数据层面做分析。识别HTTP隧道的可落地方向有几个连接的目标域名是否长期固定、数据包大小是否呈周期性规律、请求时间间隔是否过于均匀正常人的点击行为是有随机性的。还有一个经验看上行流量和下行流量的比例关系。正常浏览下行远大于上行如果一台内网主机上行流量长期偏高就得留个心眼了。4.3 从协议异常反查风险流量特征清单把DNS和HTTP隧道的典型特征列一份清单方便对照排查异常特征可能的问题排查建议高频查询随机子域名DNS隧道检查域名注册时间、解析记录TXT记录请求异常增多DNS数据外传限制内网到外部DNS服务器的TXT查询固定目标IP、固定UA命令行控制通信结合威胁情报查看目标IP信誉请求时间间隔规律性强自动化心跳连接统计会话时长与间隔、标记可疑上行流量长期大于下行数据外传通道对异常主机做双向流量审计当然流量特征只能提供怀疑方向不能凭一条特征就定性。排查时要把多条特征叠加起来看再结合主机侧进程、计划任务等做交叉验证。这也是我总是强调协议理解要结合系统排查的原因单点证据容易误判多维证据才能形成闭环。5. 实战复盘一次内网可疑外联的完整排查链路5.1 症状与初步判断高连接数背后的状态分析分享一次真实排查经历这个案例很适合说明TCP/IP四层模型怎么在实际工作中派上用场。现象是一台应用服务器外联异常业务没报错但网络监控显示并发连接数持续走高已经超过正常峰值的两倍。运维同事先查了CPU和内存正常查了进程也没看到明显可疑程序。最后把问题丢给我时我第一反应就是看连接状态分布。netstat -ant | grep -v LISTEN | awk {print $6} | sort | uniq -c | sort -n结果很有意思ESTABLISHED状态占了一大半但来源IP分散在好几个不同网段流量方向都是这台服务器主动外联。这个特征一出来基本排除了端口扫描扫描的话应该是SYN_RECV或大量TIME_WAIT堆积更像是业务侧被植入了一个持续外联的任务。5.2 抓包定位从TCP标志位到应用协议光看连接状态还不够要落地还要看流量内容。我用了两分钟抓包tcpdump -i eth0 host x.x.x.x and port 443 -nn -c 500抓到的流量全是TLS加密看不到明文内容。但如果只看TCP层特征仍然能发现问题这个外联目标IP在短时间内建立了大量长短不一的连接每次数据量很小而且连接间隔非常规律大约每三分钟一次。这个规律性是最关键的突破点。正常的业务请求受用户行为影响时间分布是随机的如此精确的周期行为十有八九是用了定时任务或者常驻内存的通信模块。后来配合主机侧排查在计划任务里找到了一个伪装成系统日志清理的脚本下载后执行了反弹通信。整个链路网络层发现异常外联IP传输层发现规律性连接应用层确认是加密通信主机侧定位到任务。5.3 排查链路对四层模型认知的验证这次排查的每一步都对应着某一层协议的知识网络层确定了目标IP的归属和流量方向传输层通过连接状态和频率特征找到了行为模式应用层确认了通信内容是加密的、无法直接读取主机侧最终把问题落实到进程和计划任务。如果缺乏协议层的分析思路很可能只停留在网络异常层面让问题继续潜伏。这也是我写这篇文章最想传达的一点TCP/IP四层模型不是一张需要背下来的图纸它是一套诊断语言。你说得出连接状态是哪一层的事扫得出异常标志位在哪一层才有可能在攻击链中断掉它。这里还要强调一点合规边界。所有网络协议的测试方法、抓包分析技巧只应该在合法授权的范围内用于安全建设、漏洞评估和攻防演练。未经授权对他人网络实施扫描、嗅探和测试触及法律红线这个底线不管技术多熟练都不能破。安全从业者的价值不是打得穿而是看得透、防得住。在我处理过的所有协议相关事件里印象最深的永远是那些字段层面的小问题引发大故障的案例。一个被忽略的TTL值、一段异常的TCP重传、一个看起来只是有点奇怪的DNS查询背后可能藏着一整条攻击路径。初学者总觉得搞渗透要会很多工具需要的信息都在漏洞库里实际上最该先找的是回到协议栈本身把每一层的数据流、状态机和标志位彻底弄明白。那时候再看扫描结果你看到的就不再是一堆端口和CVE编号而是一条条清晰的行为轨迹。
返回列表