本文主要是介绍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原理和数据包分析技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!