SMB 协议详解之-process/user/session/tree/message/file ID原理和数据包分析技巧

本文主要是介绍SMB 协议详解之-process/user/session/tree/message/file ID原理和数据包分析技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前面分析SMB协议数据包的过程中,《网络攻防协议实战分析》专栏,这里和《SMB攻击流量数据包分析》专栏,这里,可以看到在SMB协议中存在很多的ID,即Unique Identifiers。那么这些ID表示什么含义?在实际分析数据包的过程中如何根据这些ID进行过滤分析?本文将介绍SMB/SMB2中的process id,User/session id,tree id ,File id,Message ID。并介绍如何通过各种 id 快速的分析SMB数据包中各种命令交互所表示的业务逻辑。

数据包

使用的数据包包含SMB和SMB2协议两种,如下:
SMB协议使用的pcap数据来自于wireshark sample,这里,对smbtorture.cap.gz数据包中的tcp.stream eq 0流, 如下:
在这里插入图片描述
SMB2协议使用的pcap数据来自于wireshark sample,这里,smb2-peter.pcap数据包中的tcp.stream eq 0流, 如下:
在这里插入图片描述
本文的分析主要以SMB2的数据包为主,SMB类似。

各种ID

在前面的介绍SMB协议的过程中,可知承载SMB协议的协议可以是TCP,NetBios,QUIC等,即传输层协议可以使TCP或者UDP,但是传输层只是定义了服务到服务的连接,也就是应用程序到应用程序的连接。对于应用程序内部不同的操作和事务之间的连接,通过传输层是无法区分的,因此就需要SMB在应用层协议加以区分。因此在SMB协议内部就定义了 process ID,User/session ID,tree ID,fileID ,message ID来区分不同粒度操作和事务。

  • process ID 是SMB连接的标识,表示不同的SMB连接。
  • Tree ID是share层次的标识,的目的就是区分不同的share连接,在之前的文章有所介绍,见这里。
  • User ID 是用户层次的标识,表示SMB认证用户的标识,到了SMB2中变成了session id。
  • File ID是文件层次的标识,表示执行的文件句柄。
  • message ID是命令层次的标识,表示执行的命令对。

进程层次标识 Process ID

由于一个TCP上可能承载不同的SMB连接,为了区分一个TCP上不同的SMB连接,因此使用process ID 表示对应的SMB connection,该ID在SMB连接一开始就分配,如下:
在这里插入图片描述
可以看到在SMB的协议协商阶段,客户端就分配了该进程ID,后续基于该SMB连接的都是用该ID。新的SMB连接则会采用新的ID。

用户层次标识Session/User ID

由于SMB连接上可能出现多个用户的认证请求,因此在SMB2中使用session ID 表示对应的用户,SMB中是user ID 表示对应的用户。因此session ID往往是在用户认证的时候进行分配,如下:
在这里插入图片描述
在这里插入图片描述

上图可以看到在SMB2 SESSION_SETUP Request之前session id 为0,开始认证之后,服务器生成了表示该用户的session ID 。在smbtorture.cap.gz使用user id表示同样内容,可以查看之。

共享层次表示 Tree ID

由于SMB连接上可能出现不同的共享连接请求,因此使用在SMB2中使用treeID 表示对应的共享,即SMB2 TREE_CONNECT Request请求后分配。关于tree id 的详细解释,详见《SMB 协议详解之-TreeID原理和SMB数据包分析技巧》,这里。

文件层次标识 File ID

由于SMB连接上可能出现对不同文件的操作,因此使用File ID表示对应操作的文件,即像SMB2 CREATE Request Response请求后分配,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上图可以看到104数据包返回了文件的file ID,106数据包查询该文件信息以及108数据包关闭该文件都是用该文件ID。不同的文件具备不同的文件ID。

命令文件层次标识 Message ID

由于SMB连接上会出现对不同的命令请求和响应,因此在SMB2中使用Message ID表示相关的命令对,即像不同的SMB2 QUERY_INFO Request 请求和SMB2 QUERY_INFO Response响应使用不同的Message id表示不同命令对,如下:

在这里插入图片描述

在这里插入图片描述
上图可以看到数据包43,44使用messsage id 5表示一对命令,数据包45,46使用Message id 6表示一对命令。当然除了信息查询的操作之外,还可以进行文件创建,目录创建,文件搜索等等操作,具体可以使用的命令操作详细可以查看这里,如下:
在这里插入图片描述

Wireshark分析小技巧

在日常的SMB数据包分析的过程中,常见的wireshark技巧是,基于该tree ID 过滤,就可以当得知用户在该路径上做了哪些操作,如下:
在这里插入图片描述
可以看到在2048这个tree id 对应的路径\192.168.114.129\TEST上,产生了文件删除,目录创建,文件写入等操作。因此通过过滤对应的tree id ,结合该tree id上执行的命令,以及本专栏《网络攻防协议实战分析》前面介绍的SMB协议上的用户认证的信息,这里。就可以知道是哪个用户,对于哪个路径下的文件,做了哪些操作。即通过tree id的过程就能够快速了解SMB数据包中的业务逻辑,实现对于SMB数据包中关于share操作部分的解读。

同样也可以通过process id,session id,File id,Message id等过滤,实现不同粒度的操作分析。

以上就是SMB协议中 各种 id相关内容的介绍,希望对你日常工作有所帮助。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。

这篇关于SMB 协议详解之-process/user/session/tree/message/file ID原理和数据包分析技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994590

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads