OSI 七层,我拿它记的是攻击面,不是协议表
OSI
文中涉及的网络探测操作,均在自己的电脑与自有测试环境上完成。
关于OSI很多人都会遇到这些问题
在使用抓包软件时只看到五层,但是教科书上写着七层,后面使用namp干活的时候在四层,ARP出事的时候是在第二层。同一个网络但是四个数字却对不上。
OSI背过了很多遍,但是在用的时候还是不知道怎么用,后来在排查一个连不上的问题时,从上往下一层一层试的时候才明白,这个表不应该按照协议清单来读。
教科书上的知识只能告诉你每层叫什么,但是在干活的时候就要关注另一件事:这个问题大概率出现在哪一层。
一、先解决数字对不上的问题
七层模型是ISO(国际标准化组织)定的参考模型,主要用来规范怎么讨论网络;但是真正在网络里运作的是TCP/IP,两者的区别就是TCP/IP把OSI的会话层和表示层合并进了应用层,把数据链路层和物理层统一合并成了网络接口层。所以只剩下了四层
两个模型不是说谁是错的,它们是分工不同。参考模型的作用是怎么把事情说清楚,TCP/IP管的是怎么真正的跑起来。
| OSI七层 | TCP/IP四层 | 说明 |
|---|---|---|
| 应用层 | 应用层 | 叫法统一 |
| 表示层 | 应用层 | 归为应用层 |
| 会话层 | 应用层 | 归为应用层 |
| 传输层 | 传输层 | 叫法统一 |
| 网络层 | 网际层 | 也可以都叫网络层 |
| 数据链路层 | 网络接口层 | 合并 |
| 物理层 | 网络接口层 | 合并 |

所以说抓包软件永远没办法到会话层,因为它不存在于真实的数据包中,分层得到的好处也很实在,换一种介质传输也不会影响上面的应用,出了毛病还可以一层层往下排查。
二、最底下的两层:同一个网段你可以接触到谁
这个图我们从下往上看,数据链路层负责MAC地址和帧,以太网中每个网卡都带有全球唯一的MAC,交换机就是靠MAC来辨别帧往哪里发。
其实这一层最大的问题在于没有身份校验,ARP干的事情很简单,问这个IP是谁的,谁先给你答复了那就是谁的,至于答复的人身份是否正确就不知道了。
交换机的那个MAC表叫CAM表,它的容量是有限的,塞满之后交换机就变成了集线器,所有的端口都可以得到帧,CAM泛洪就是这么来的。
广播帧网段里每台机器都可以收得到,VLAN做的事情就是把一个物理网络分为几个互不干扰的广播域。分完之后你在这段里发送的ARP,隔壁根本听不见。
再说明一下交换机和路由器两者的关系,很多人把这两个混为一谈。交换机主要看MAC,在同一个网段中搬帧;路由器看的是IP,负责在各个网段,顺手把广播限制在原地。

就比如你电脑上的那张IP到MAC的对照表,直接在cmd中输入arp -a就可以看到,几分钟就会过期一次,然后再访问一遍。
第三层:地址和路径
再按照表格网上看就是网络层,它负责给IP,负责管理这个包的下一跳往哪里走。每台路由器的手里都会有一张路由表,也就是往哪个口丢的清单。
TTL在这一层很容易被忽视。每个包在出生时都会有一个跳数上限,每过一台路由器数字减一,直到零就会丢掉,这么做是为了防止成环。
后来出现了两样东西。
- 一个是traceroute的原理,就是故意发TTL很小的包,看看是在哪一跳死掉。
- 另一个是判断系统的依据,因为TTL初始值各家是不一样的,Linux大部分是64,Windows大部分是128,看看剩多少就能知道对方的大致系统,
namp -O有一部分判断就是这样得到的。

IP包有一个分片机制,包太大过不去就会被分成几片,然后等到端了就拼回去,报文头里的表示位就是用于标记哪些片是同一批。这个机制留了一个空子,把关键的内容拆到不同的片里,只通过检查点单片的设备是看不全的。
ICMP也是在这一层,负责传差错和控制信息,用ping使用的就是它。所以有时候ping不通只能说明ICMP没有回来,并不能说明那台主机不在。
第四层:端口与连接
按照图标的再上一层就是传输层,这个协议只有两个值得记,TCP和UDP,TCP有连接,DUP没有。
TCP头部是20个字节,六个标志位各管一件事,SYN建立连接,ACK表示确认号有效,FIN关连接,RST直接重置。三次握手讲的就是SYN、SYN+ACK、ACK这三步。
UDP头部只有8个字节,源端口、目的端口、长度、校验和,就只有这四项。它不管先后顺序,也不管丢没丢,还不重传,重传是TCP负责的。
之前再信息收集的文章里提到过的nmap -sS,它不光快还不容易被发现,原理就是在这一层上。它发送一个SYN过去,对方回一个SYN加上ACK就说明端口正开着,如果不回第三次握手就会直接RST断掉,完整链接没有建立,日志里就会少一条记录。
换成UDP扫描就没有这么可靠了,因为UDP没有连接,端口关着的时候很多系统根本不回,你也分不清楚是包丢了的问题,还是端口真的已经被关着了。SYN泛洪也是同一层的另一个问题,攻击者可以通过只发SYN并且不回复第三次握手,服务器的半连接队列很快被占满,正常的业务就会被影响。

五、最上面的三层:加密、通话与应用
最上面的三层直接在TCP/IP里合并了,但是看攻击面的时候还是要分开来看。表示层负责管:翻译、加密、压缩,TLS就属于这一层;会话层负责管:建立、维持、终止会话;应用层是最后一层负责管:HTTP、DNS、SMTP、FTP都是在这里。
只有分开才能看清楚责任,证书的不校验是表示层的问题,会话固定是会话层的问题,SQL注入式应用层的问题,混在一起讲不清楚谁应该负责。
DNS是最特殊的,它存在于应用层,走的是UDP的53端口,工作的时候就是把域名换成IP。信息收集的那一篇就有讲到查子域名的操作,翻的就是DNS没有对外公开的部分。
HTTP是应用层最常见的,它本身没有状态,但是每次请求都要自己带齐身份,也就是为什么Cookie能够存在,走明文的时候链路的每一跳都可以看到内容,但是换成更安全的HTTPS后,抓包就只剩加密后的乱码了。
| 层 | 这一层会被什么攻击 | 我能查到什么内容 | 这一层封装出来的东西 |
|---|---|---|---|
| 应用层 | 注入、xss、越权、未授权 | 应用本身的逻辑 | 报文 |
| 表示层 | TLS降级、证书不校验、编码绕过 | 加密套件、证书时谁签的 | 没有自己的封装 |
| 会话层 | 会话固定、会话劫持 | 登录状态怎么维持、会不会变 | 没有自己的封装 |
| 传输层 | 端口扫描、SYN泛洪、会话劫持 | 哪些端口还开着、运行的是什么系统 | 段(UDP 叫数据报 |
| 网络层 | IP伪造、ICMP隧道、分片攻击 | 路线通不通、跳了几朓、像是什么系统 | 包 |
| 数据链路层 | ARP欺骗、CAM泛洪、VLAN跳跃 | 同一个网段有扫描机器、MAC是否正确 | 帧 |
| 物理层 | 物理接入、线路接听 | 能否接入、有没有多出来的设备 | 比特 |
这七行从下往上读,就能从物理层分析能不能够得着——代码写的对不对。
六、工具在第几层工作
直接上表
| 工具 | 层 | 只在什么范围内有效 |
|---|---|---|
arp -a、arp-scan |
2 | 同一个网段,出了网段就没有用 |
ping、traceroute |
3 | 跨网段可达,被禁不代表主机不在 |
nmap -sS、masscan |
4 | 跨网段,端口级别的探测 |
curl、sqlmap、Web扫描器 |
7 | 打的是应用本身,端口开着才谈得上 |
这个表用处在于排顺序。端口扫不到那就先不注入,往下看看,有没有通。
反过来也是,能达到第七层,也就能证明下面的六层都是好的,如果还有问题就是应用本身了。
七、防
分层防护不是每一层都堆一些设备,是要知道每一层都能挡下什么。
| 措施 | 能挡住什么 | 挡不住什么 |
|---|---|---|
| VLAN隔离 | 跨网段广播和二层欺骗 | 同一层VLAN内的ARP欺骗 |
| 端口安全、DHCP Snooping | 私接设备、伪造的ARP应答 | 已经在网段内某台机器的攻击者 |
| 防火墙封端口 | 外部直接访问和一些不该开的端口 | 出站方向和本来就允许的那个端口 |
| TLS和证书校验 | 链路上的窃听于篡改 | 端点本身被控、被信任的错误CA |
| 应用层输入校验 | 注入、XSS这些 | 逻辑漏洞和越权 |
这个表最重要的是最右边那一列,没有哪条可以单独把事情做完,分层的用处是让你知道缺口具体在哪层,不是让每一层都固若金汤。
最后
回到一开始的问题,那四个数字是指同一个事情站在四个角度:书上的七层是分工图纸,扫描器在第四层,traceroute数的是第三层的跳,ARP的问题出现在第二层。
如果下次连不上,那就往下走一层,同网段是否能看见,ping不ping的通,端口是否打开,最后看看应用给不给数据,很多时候问题都不在最后那层。