SMB2介绍

概要

SMB2是一种网络文件共享协议,用于客户端和服务器之间进行文件共享和访问。本文将介绍SMB2工作原理、数据结构、关键特性等。持续更新中...

TCP/IP中的位置

在TCP/IP模型中,SMB位于应用层,依赖于传输层(TCP)和网络层(IP)来传输数据。在实际的网络通信中,SMB数据包会被封装在TCP段中,进一步封装在IP数据报中,最后转换为比特流在物理网络上传输。接收方在收到比特流后,逐层解封装,最终将SMB请求或响应交给高层的应用程序处理。

在这里插入图片描述

工作原理

在这里插入图片描述

  1. Negotiate Protocol Request: 在在用户输入“\服务器名\”之后,首先要做的就是把服务器名解析为IP,可以通过DNS还是NetBIOS解析。得到IP地址后,客户端就向服务器发送第一个SMB请求:“Negotiate Protocol Request”。这个请求包含了客户端所支持的各种 SMB Dialect。

  2. Negotiate Protocol Response: 服务器收到该请求后,选择一个它支持的最新版本(比如NT LM 0.12),再通过“Negotiate Protocol Response”回复给客户端

  3. Session Setup Request: Negotiation 结束之后,,客户端请求和服务器建立一个session,在客户端发送的Session Setup Request里,包含了身份验证请求(如Kerberos的AP_REQ)。

  4. Session Setup Response: 服务器回复Session Setup Response,包含了验证结果(如Kerberos的AP_REP)。关于认证协议Kerberos和NTLM,以后会再学习结束

  5. Tree Connect Request: Session Setup通过后,客户端就成功的连上了服务器。客户端发送的Tree Connect Request来访问具体的共享,如果前面没有指定共享名(\服务器名),客户端访问的是命名管道$IPC , 如果指定了\服务器\共享名 ,那么这儿就是访问共享名的部分了。

  6. Tree Connect Response:,服务器在检查过用户对该路径的权限后,回复Tree Connect Response。检查用户权限是这样进行的:服务器从Session Setup Request中已经得到用户所属的组,再通过和该路径上的ACL对比,即可得到用户权限。至此,用户就进入了共享文件夹。

  7. 下面就是文件或文件夹操作的相关命令,如新建,打开,重命名,删除,关闭。读写操作等。

SMB2共有如下19个命令字:

· 0x00 SMB2/NegotiateProtocol

· 0x01 SMB2/SessionSetup

· 0x02 SMB2/SessionLogoff

· 0x03 SMB2/TreeConnect

· 0x04 SMB2/TreeDisconnect

· 0x05 SMB2/Create

· 0x06 SMB2/Close

· 0x07 SMB2/Flush

· 0x08 SMB2/Read

· 0x09 SMB2/Write

· 0x0a SMB2/Lock

· 0x0b SMB2/Ioctl

· 0x0c SMB2/Cancel

· 0x0d SMB2/KeepAlive

· 0x0e SMB2/Find

· 0x0f SMB2/Notify

· 0x10 SMB2/GetInfo

· 0x11 SMB2/SetInfo

· 0x12 SMB2/Break

SMB2数据结构

smb2数据结构及关系(例)
在这里插入图片描述
结构含义不在此赘述。

主要特性

Multichannel、ABE、CopyTrunk、硬链接、Oplock/lease、Notify、OfflineFile、SMB签名、Encryption(加密)

Multichannel

• 将多个通道(Connection)绑定到一个SMB的session上;此时session与connect不是一一对应。

• 允许客户端与服务器之间同时使用多个网络连接。在多个网络连接的基础上,客户端与服务器可以进行更大数据量的传
输,增大了网络吞吐能力。

• 更好的实现客户端CPU上的负载均衡

• 允许在其中一些网络连接中断的情况下继续工作,增加了容错能力。
在这里插入图片描述

ABE
ABE 基于访问的枚举(AccessBasedEnumeration)
• 基于权限的目录项枚举,客户通过CIFS访问共享时,针对用户权限进行文件或目录的显示过滤,因此需要在读目录过程中对每一项文件或目录进行ACL鉴权,过滤掉用户没有权限的文件或目录,实现了基于权限的目录项显示管理,从而提高用户体验。
• 鉴权逻辑
1)非管理员用户来访,需要同时具有“读取数据、读取属性、读取扩展属性、读取权限”这四种特殊权限,其中一条权限被拒绝或不存在,对应文件/目录不进行显示(Owner用户默认具有读取权限的权限,并不在安全界面示);
2)管理员用户来访,显示所有文件/目录。该规则只用于目录项显示与否,若要打开文件/目录,需要对文件/目录本身进行ACL鉴权。
https://learn.microsoft.com/zh-tw/previous-versions/windows/it-pro/windows-server-2003/cc784710(v=ws.10)

SMB支持硬链接
• 硬连接主要用于多个文件名指向同一个文件。从而可以使得一份文件无需多次拷贝,通过创建硬链接给予多个用户使用,进而节省了存储空间。Windows硬链接主要可以通过windows API CreateHardLink以及UnxUtils工具来触发。
Windows通过发送SetInformation命令的子命令FileLinkInformation发起创建硬链接命令。

Oplock/Lease
• 客户端在文件打开中请求了Oplock/Lease,服务端也授予了,则文件读写会先进行Windows客户端缓存。Windows会伺机将缓存数据刷回服务端。如果有另外的用户也打开了该文件,将触发Oplock/Leasebreak,则Oplock进行降级甚至失去Oplock,客户端收到break通知后会进行缓存刷盘。Lease是Oplock的改进,作用域更广,在同一客户端内LeaseKey相同不会发生break冲突,而Oplock作用域较小,同一客户端内不同进程打开文件也会相互冲突。

CopyChunk
• 传统文件拷贝流程为:客户端从服务端读取数据回客户端,然后在发起写命令向Server端目标文件进行写.导致数据来回传输
• 先打开源文件,获取一个24byte的resumekey(FSCTLSRV_REQUEST_RESUME_KEY,Server实现自己定义,IOCTL)QpenlD+fid
• 打开目的文件
• 进行Chunk拷贝(FSCTL_SRV_COPYCHUNK),在阵列侧进行

Notify
Notify:客户端对关注的文件夹进行Notify注册,当该文件夹下的文件变化后,通知客户端变化事件,客户端收到该事件后会主动刷新目录。

OfflineFiles
• 客户端会在本地缓存共享文件,当客户端和服务端网络失去网络连接后,客户端可以继续访问本地文件。当网络连接回复后,客户端同步数据到服务端,从而实现离线目录访问的功能。
• 主要有:不使用缓存、手动模式、自动模式几种模式。

SMB签名
• 用于校验报文是否被篡改,报文发送过程中通过签名算法计算出key,并且打包到报文中,客户端收到后用同样算法进行解密,秘匙为Session相关信息,如果计算出的key值和服务端带回来的一致则签名通过。
• aes_ccm_128用于SMB3签名计算:hamc_sha256用于SMB2签名计算;MD5用于SMB1签名计算。

小结

待补充

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值