10.28. SMB关键词

适用于SMB1和SMB2协议的SMB关键词。

10.28.1. smb.named_pipe

匹配树连接中的SMB命名管道。

示例:

smb.named_pipe; content:"IPC"; endswith;
smb.named_pipe; content:"strange"; nocase; pcre:"/really$/";

smb.named_pipe 是'sticky buffer'。

smb.named_pipe 可作为 fast_pattern 使用。

10.28.2. smb.share

匹配树连接中的SMB共享名。

示例:

smb.share; content:"shared"; endswith;
smb.share; content:"strange"; nocase; pcre:"/really$/";

smb.share 是'sticky buffer'。

smb.share 可作为 fast_pattern 使用。

10.28.3. smb.ntlmssp_user

匹配会话建立中的SMB ntlmssp用户。

示例:

smb.ntlmssp_user; content:"doe"; endswith;
smb.ntlmssp_user; content:"doe"; nocase; pcre:"/j(ohn|ane).*doe$/";

smb.ntlmssp_user 是'sticky buffer'。

smb.ntlmssp_user 可作为 fast_pattern 使用。

10.28.4. smb.ntlmssp_domain

匹配会话建立中的SMB ntlmssp域。

示例:

smb.ntlmssp_domain; content:"home"; endswith;
smb.ntlmssp_domain; content:"home"; nocase; pcre:"/home(sweet)*$/";

smb.ntlmssp_domain 是'sticky buffer'。

smb.ntlmssp_domain 可作为 fast_pattern 使用。

10.28.5. smb.version

用于匹配SMB事务中出现的SMB版本的关键词。

签名示例:

alert smb $HOME_NET any -> any any (msg:"SMBv1版本规则"; smb.version:1; sid:1;)

alert smb $HOME_NET any -> any any (msg:"SMBv2版本规则"; smb.version:2; sid:2;)

10.28.5.1. 从SMBv1过渡到SMBv2的匹配

在初始协议协商请求中,支持SMBv1和SMBv2的客户端可以发送初始SMBv1请求,并从服务器接收SMBv2响应,表明将使用SMBv2。

服务器发出的第一个SMBv2响应将被视为SMBv1,因为整个事务将被视为SMBv1事务。

10.28.5.2. smb.version 能否匹配SMBv3流量?

可以,它将使用 smb.version:2; 匹配SMBv3消息,这会匹配SMBv2和SMBv3,因为它们在SMB头中使用相同的版本标识符。

此关键词将使用SMB头中指定的协议ID来确定版本。以下是协议ID代码的摘要:

头中的协议ID仅区分SMBv1和SMBv2,因为它们是具有完全不同消息格式、类型和实现的完全不同的协议。

另一方面,SMBv3更像是SMBv2的扩展。使用SMBv2时,我们可以为客户端和服务器之间的对话选择以下方言之一:

  • 2.0.2

  • 2.1

  • 3.0

  • 3.0.2

  • 3.1.1

当我们为对话选择3.x方言时,我们说我们正在使用SMBv3,因此您可以使用SMB 3.0、SMB 3.0.2或SMB 3.1.1。选择越高,功能越多,但消息语法和消息命令号保持不变。

SMB版本和方言是独立的组件。例如,在SMBv3的情况下,SMB版本将为2,但方言将为3.x。目前无法通过关键词指定方言。

10.28.6. file.name

file.name 关键词可在SMB应用层使用。

签名示例:

alert smb any any -> any any (msg:"SMB file.name使用"; file.name; content:"file.txt"; classtype:bad-unknown; sid:1; rev:1;)

有关 file.name 关键词的更多信息,请参阅 文件关键词