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 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大