DCE TCP 检查器

DCE TCP 检查器概述

类型

检查器(服务)

使用方式

检测

实例类型

多实例

所需其他检查器

已启用

true

DCE/RPC 协议使不同网络主机上的进程可以像在同一主机上一样进行通信。这些进程间通信一般通过 TCP 在主机之间传输。在 TCP 传输中,DCE/RPC 也可以进一步封装在 Windows 服务器消息块 (SMB) 协议或 Samba 中;Samba 是一种在由 Windows 和类似 UNIX 或 Linux 操作系统组成的混合环境中用于进程间通信的开源 SMB 实现。

虽然大多数 DCE/RPC 漏洞出现在针对 DCE/RPC 服务器(实际上可能是网络上运行 Windows 或 Samba 的任何主机)的 DCE/RPC 客户端请求中,但在服务器响应中也可能出现漏洞。

IP 封装所有 DCE/RPC 传输。TCP 传输所有面向连接 DCE/RPC。DCE TCP 检查器检测面向连接的 DCE/RPC,并使用协议特定的特征(例如,报头长度和数据分片顺序)来:

  • 检测封装在 TCP 传输(包括使用版本 1 RPC over HTTP 的 TCP 传输 DCE/RPC)中的 DCE/RPC 请求和响应。

  • 分析 DCE/RPC 数据流并检测 DCE/RPC 流量中的异常行为和逃避技术。

  • 对 DCE/RPC 进行分片重组。

  • 规范化 DCE/RPC 流量,以便规则引擎进行处理。

下图说明了 DCE TCP 检查器开始为不同传输处理 TCP 流量的点。

已知 TCP 端口 135 识别 TCP 传输中的 DCE/RPC 流量。图中未包含 RPC over HTTP。对于 RPC over HTTP,面向连接 DCE/RPC 在完成 HTTP 初始设置序列后直接通过 TCP 传输(如图所示)。

基于目标的策略

Windows 和 Samba DCE/RPC 的实现有很大不同。例如,在对 DCE/RPC 流量进行分片重组时,所有 Windows 版本都在第一个分片中使用 DCE/RPC 上下文 ID,而所有 Samba 版本都在最后一个分片中使用上下文 ID。再如,Windows Vista 在第一个分片中使用操作编号报头字段来识别特定函数调用,而 Samba 及其他所有 Windows 版本都在最后一个分片中使用操作编号字段。

因此, dce_tcp 检查器使用基于目标的方法。在配置 dce_tcp 检查器实例时, policy 参数指定 DCE/RPC TCP 协议的特定实施。将此信息与主机信息相结合,建立默认的基于目标的服务器策略或者,您可以配置以其他主机和 DCE/RPC TCP 实施为目标的其他检查器。由默认的基于目标的服务器策略指定的 DCE/RPC TCP 实施适用于其他 dce_tcp 检查器实例不作为目标的任何主机。

DCE TCP 检查器可以使用 policy 参数确定的 DCE/RPC 实现包括:

  • WinXP(默认)

  • Win2000

  • WinVista

  • Win2003

  • Win2008

  • Win7

  • Samba

  • Samba-3.0.37

  • Samba-3.0.22

  • Samba-3.0.20

解除分区

DCE TCP 检查器支持在将分片的数据包发送到检测引擎之前对其进行重组。此功能在内联模式下非常有用,可以在完整的分片重组完成之前于检测流程的早期阶段捕获漏洞攻击,或捕获利用分段隐藏自身的漏洞攻击。请注意,禁用分片重组可能会导致大量的漏报。

DCE TCP 检查器参数

DCE TCP 端口配置

绑定程序 检查器定义 DCE TCP 端口配置。有关详细信息,请参阅绑定程序检查器概述

示例:
[
   {
        "when": {
            "role": "any",
            "proto": "tcp",
            "service": "dcerpc",
            "ports": ""
        },
        "use": {
            "type": "dce_tcp"
        }
    }
]

max_frag_len

指定分片重组允许的最大分片长度(以字节为单位)。为了处理较大的分片,检查器会在进行分片重组之前将数据包内容视为指定的大小。



在此参数中指定的值必须大于或等于规则检查数据所需的深度以确保 检测到。要确保所有数据都通过检测,请使用默认值。


类型: 整数

有效范围: 151465535

默认值: 65535

disable_defrag

指定是否对 DCE/RPC 流量进行分片重组。当此参数为 true时,检查器仍会检测异常并向规则引擎发送 DCE/RPC 数据,但可能会检测不出分片 DCE/RPC 数据中的漏洞。

尽管此参数提供了不对流量进行碎片整理的灵活性,并且可以加快处理速度,但大多数 DCE/RPC 漏洞都试图利用碎片来隐藏漏洞。启用此参数将会忽略大多数已知漏洞,从而造成大量误报。

类型: boolean

有效值:truefalse

默认值:false

limit_alerts

指定是否将 DCE 警报限制为每个签名每个流最多一个。

类型: boolean

有效值:truefalse

默认值: true

reassemble_threshold

指定将重组的数据包发送到规则引擎之前,DCE/RPC 取消分片和分片重组缓冲区中待排队的最小字节数。此参数在内联模式下非常有用,因为它可以在内联模式下检测到潜在的漏洞攻击,可以在完整的分片重组完成之前提前捕获漏洞。

值越小,实现早期检测的可能性越高,但可能会对性能造成负面影响。如果启用此参数,应当测试性能所受的影响。

0 将禁用重组。

类型: 整数

有效范围: 065535

默认值:0

策略

指定目标主机或受监控网段上主机使用的 Windows 或 Samba DCE/RPC 应用。

类型: enum

有效值: 从以下列表中选择的字符串: Win2000WinXPWinVistaWin2003Win2008Win7SmbSmb-3.0.37Sack-3.0.22Smb-3.0.20

默认值: WinXP

DCE TCP 检查器规则

启用 dce_tcp 检查器规则,以 生成事件并在内联部署中丢弃攻击性数据包

表 1. DCE TCP 检查器规则

GID:SID

Rule Message

133:27

面向连接的 DCE/RPC - 主版本无效

133:28

面向连接的 DCE/RPC - 无效的次版本

133:29

面向连接的 DCE/RPC - 无效的次版本

133:30

面向连接的 DCE/RPC - 分片长度小于信头大小

133:31

面向连接的 DCE/RPC - 剩余分片长度小于所需大小

133:32

面向连接的 DCE/RPC - 未指定情景项目

133:33

面向连接的 DCE/RPC - 不指定传输语法

133:34

面向连接的 DCE/RPC - 非最后分片上的分片长度小于客户端的最大协商分片传输大小

133:35

面向连接的 DCE/RPC - 分片长度大于协商的最大分片传输大小

133:36

面向连接的 DCE/RPC - 更改与绑定不同的上下文字节顺序

133:37

面向连接的 DCE/RPC - 非第一个/最后一个分段的呼叫 ID 与为分段请求建立的呼叫 ID 不同

133:38

面向连接的 DCE/RPC - 非第一个/最后一个分片的 opnum 与为分片请求建立的 opnum 不同

133:39

面向连接的 DCE/RPC - 非第一个/最后一个分段的情景 ID 与为分段请求建立的情景 ID 不同

DCE 检查器入侵规则选项

dce_iface

指定以下以逗号分隔的元素:

  • 服务接口的 UUID。

  • 接口版本(可选)。默认设置会与任何版本匹配。

  • 规则是否应匹配请求中的任何分段的指示符(可选)。默认设置仅匹配第一个分段。

在 DCE/RPC 协议中,客户端调用某个服务之前必须先绑定该服务。当客户端向 服务器发送绑定请求时,它可以指定要绑定的一个或多个服务接口。每个接口均由一个 UUID 表示,并且每个接口 UUID 都与一个唯一索引(或情景 ID)配对,将来的请求可用于引用客户端调用的服务。服务器使用其接受为有效的接口 UUID 进行响应,并允许客户端向这些服务发出请求。当客户端发出请求时,它将指定情景 ID,以便服务器知道客户端向哪个服务发出请求。

使用 dce_iface 规则选项,规则可以询问检查器客户端是否已绑定到特定接口 UUID,以及此客户端请求是否向该接口发出请求。这可以消除多个服务成功绑定到 的误报,因为检查器可以将绑定 UUID 与请求中使用的情景 id 相关联。

dce_iface 选项需要在检查器中跟踪面向连接的 DCE/RPC 的客户端绑定和修改情景请求以及服务器绑定确认和修改情景响应。对于每个“绑定和修改情景”请求,客户端指定一个接口 UUID 列表以及将在 DCE/RPC 会话期间用于引用接口的每个接口 UUID 的句柄(或情景 ID)。服务器响应指示它允许客户端向哪些接口发出请求 — 它要么接受或拒绝客户端绑定到特定接口的希望。此跟踪是必需的,以便在处理请求时,可以将请求中使用的情景 ID 与其作为句柄的接口 UUID 相关联。

在以下条件下, dce_iface 规则选项匹配:

  • 指定的接口 UUID 与 DCE/RPC 请求的接口 UUID(通过情景 ID 引用)相匹配

  • 未提供 版本 参数,或提供了 版本 参数且该参数与 DCE/RPC 请求的接口 UUID 匹配

  • 提供了 any_frag 参数,或者不存在 any_frag 参数并且 dce_iface 选项与初始请求分片中的 UUID 和版本条件匹配

示例:

dce_iface:4b324fc8-1670-01d3-1278-5a47bf6ee188;
dce_iface:4b324fc8-1670-01d3-1278-5a47bf6ee188, <2;
dce_iface:4b324fc8-1670-01d3-1278-5a47bf6ee188,any_frag;
dce_iface:4b324fc8-1670-01d3-1278-5a47bf6ee188, =1, any_frag;

dce_iface.uuid

DCE/RPC 请求可以指定 UUID 编号是以大端字节还是小端字节表示。接口 UUID 在请求中的表示形式根据请求中指定的字节顺序而不同。 dce_rpc 检查器会对 UUID 进行规范化。这意味着 dce_iface 规则选项中的 UUID 规范必须以相同的方式写入,而无论请求的字节顺序如何。

例如,小端字节绑定请求将表示如下 UUID:

|f8 91 7b 5a 00 ff d0 11 a9 b2 00 c0 4f b6 e6 fc|

高字节在前绑定请求将表示相同的 UUID,如下所示:

|5a 7b 91 f8 ff 00 11 d0 a9 b2 00 c0 4f b6 e6 fc|

在使用 dce_iface 选项的 Snort 3 规则中,无论请求的字节序如何,UUID 必须使用大端字节顺序在字符串中表示:

5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc

类型: 字符串

语法: dce_iface: <UUID>;

有效值: 其中: UUID 是 32 个十六进制数字,以连字符分隔五组,显示格式为: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

示例: dce_iface:5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc;

dce_iface.version

服务接口具有与其关联的版本。某些接口版本可能不容易受到某些漏洞攻击。为此,您可以在 dce_iface 选项中指定一个或多个版本号,以确定是否需要检查特定攻击程序。

类型: 间隔

语法: dce_iface: <range_operator><positive integer>; or dce_iface: <positive integer><range_operator><positive integer>;

有效值:范围格式表 中指定的一个或多个正版本号和 range_operator的集合。

示例: dce_iface:=6;

dce_iface.any_frag

可以将 DCE/RPC 请求分为一个或多个分段。在 DCE/RPC 信头中设置标志以指示当前分段是请求的第一个分段、中间分段还是最后一个分段。仅当 DCE/RPC 请求是第一分段(或完整请求)时,对 DCE/RPC 请求中数据的许多检查才具有相关性。因此,第一个分段之后的分段包含 DCE/RPC 请求更深层次的数据。例如,在请求的前五个字节(例如,长度字段)中查找数据的规则会在除第一个字节之外的分段上找到错误的数据。后续分段的开头距离请求的开头偏移一段长度。这可能是分段 DCE/RPC 流量中误报的一个来源。

因此,默认情况下,DCE_RPC 检查器仅匹配请求中的初始分片。要强制检查器检查匹配请求中的所有分片,请将 any_frag 添加到 dce_iface 规则选项。请注意,已进行分片重组的 DCE/RPC 请求被视为完整请求。

语法: dec_iface: any_frag;

示例: dce_iface: any_frag;

dce_opnum

匹配 DCE RPC 操作编号、操作编号范围或操作编号列表。此选项表示可对接口进行的一个或多个特定函数调用。客户端绑定到特定服务接口并向其发出请求后,规则需要确定客户端对服务进行的函数调用,以检查是否存在可能存在于函数调用中的漏洞。函数调用被指定为用双引号括起来的操作编号 (opnums) 列表

类型: 字符串

语法: dce_opnum: <opnum_list>;

其中, opnum_list 是下列各项之一:

  • 单个整数。

  • 以逗号分隔的整数列表。

  • 指定的整数范围,用连字符分隔范围内的最小和最大数字。

  • 以上各项的任意。

有效值: DCE/RPC 请求 opnum 的列表。

示例:

dce_opnum: "15";
dce_opnum: "15-18";
dce_opnum: "15, 18-20";
dce_opnum: "15, 17, 20-22";

dce_stub_data

此选项将检测光标(用于在规则处理中遍历数据包负载)放在 DCE/RPC 末节数据的开头,不考虑前面的规则选项。如果存在 DCE/RPC 末节数据,则此选项匹配。

语法: dce_stub_data;

示例: dce_stub_data;

表 2. 范围格式

范围格式

Operator

说明

operator i

<

少于

>

大于

=

平分

不等于

小于或等于

大于或等于

j operator k

<>

大于 j 且小于 k

<=>

大于或等于 j 且小于或等于 k