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

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达