10.81. LDAP 关键词

10.81.1. LDAP 请求与响应操作

ldap.request.operation 和 ldap.responses.operation 关键词的操作值

代码

操作类型

0

bind_request

1

bind_response

2

unbind_request

3

search_request

4

search_result_entry

5

search_result_done

6

modify_request

7

modify_response

8

add_request

9

add_response

10

del_request

11

del_response

12

mod_dn_request

13

mod_dn_response

14

compare_request

15

compare_response

16

abandon_request

19

search_result_reference

23

extended_request

24

extended_response

25

intermediate_response

关键词 ldap.request.operation 和 ldap.responses.operation 既支持操作代码也支持操作名称作为参数。

10.81.2. ldap.request.operation

Suricata 提供 ldap.request.operation 关键词,可用于签名中以识别和基于轻量目录访问协议请求操作过滤网络数据包。

语法:

ldap.request.operation: 操作;

ldap.request.operation 使用 无符号8位整数

该关键词映射到 EVE 字段 ldap.request.operation

10.81.2.1. 示例

以下签名示例会在数据包包含 LDAP 绑定请求操作时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 绑定请求"; ldap.request.operation:0; sid:1;)

alert ldap any any -> any any (msg:"测试 LDAP 绑定请求"; ldap.request.operation:bind_request; sid:1;)

10.81.3. ldap.responses.operation

Suricata 提供 ldap.responses.operation 关键词,可用于签名中以识别和基于轻量目录访问协议响应操作过滤网络数据包。

语法:

ldap.responses.operation: 操作[,索引];

ldap.responses.operation 使用 无符号8位整数

该关键词映射到 EVE 字段 ldap.responses[].operation

一个 LDAP 请求操作可能收到多个响应。默认情况下,ldap.responses.operation 关键词匹配所有索引,但也可以指定特定索引进行匹配,并使用 allany 等标志。

10.81.3.1. 示例

以下签名示例会在数据包包含 LDAP 绑定响应操作时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 绑定响应"; ldap.responses.operation:1; sid:1;)

alert ldap any any -> any any (msg:"测试 LDAP 绑定响应"; ldap.responses.operation:bind_response; sid:1;)

以下签名示例会在数据包在索引1处包含 LDAP search_result_done 响应操作时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; ldap.responses.operation:search_result_done,1; sid:1;)

以下签名示例会在所有响应类型均为 search_result_entry 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; ldap.responses.operation:search_result_entry,all; sid:1;)

关键词 ldap.responses.operation 支持使用负数进行从后向前索引,即-1表示最后一个索引,-2表示倒数第二个索引,依此类推。以下签名示例会在最后一个索引处找到 search_result_entry 响应时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; ldap.responses.operation:search_result_entry,-1; sid:1;)

10.81.4. ldap.responses.count

基于响应数量进行匹配。

语法:

ldap.responses.count: [操作符]数量;

可以精确匹配或使用 op 设置进行比较:

ldap.responses.count:3    # 精确匹配3个响应
ldap.responses.count:<3   # 少于3个响应
ldap.responses.count:>=2  # 大于或等于2个响应

ldap.responses.count 使用 无符号32位整数

该关键词映射到 EVE 字段 len(ldap.responses[])

10.81.4.1. 示例

以下签名示例会在数据包包含0个 LDAP 响应时触发告警:

alert ldap any any -> any any (msg:"数据包包含0个 LDAP 响应"; ldap.responses.count:0; sid:1;)

以下签名示例会在数据包包含超过2个 LDAP 响应时触发告警:

alert ldap any any -> any any (msg:"数据包包含超过2个 LDAP 响应"; ldap.responses.count:>2; sid:1;)

10.81.5. ldap.request.dn

匹配请求操作中的 LDAP 专有名称。

比较区分大小写。

语法:

ldap.request.dn; content:"<要匹配的内容>";

ldap.request.dn 是 'sticky buffer',可用作 fast_pattern

该关键词映射到以下 EVE 字段:

  • ldap.request.bind_request.name

  • ldap.request.add_request.entry

  • ldap.request.search_request.base_object

  • ldap.request.modify_request.object

  • ldap.request.del_request.dn

  • ldap.request.mod_dn_request.entry

  • ldap.request.compare_request.entry

10.81.5.1. 示例

以下签名示例会在数据包包含 LDAP 专有名称 uid=jdoe,ou=People,dc=example,dc=com 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAPDN"; ldap.request.dn; content:"uid=jdoe,ou=People,dc=example,dc=com"; sid:1;)

可以在同一条规则中使用 ldap.request.operation 关键词指定要匹配的操作。

以下签名示例会在数据包包含 LDAP 搜索请求操作且包含 LDAP 专有名称 dc=example,dc=com 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAPDN 和操作"; ldap.request.operation:search_request; ldap.request.dn; content:"dc=example,dc=com"; sid:1;)

10.81.6. ldap.responses.dn

匹配响应操作中的 LDAP 专有名称。

比较区分大小写。

语法:

ldap.responses.dn; content:"<要匹配的内容>";

ldap.responses.dn 是 'sticky buffer',可用作 fast_pattern

ldap.responses.dn 支持多缓冲区匹配,参见 多缓冲区匹配

该关键词映射到以下 EVE 字段:

  • ldap.responses[].search_result_entry.base_object

  • ldap.responses[].bind_response.matched_dn

  • ldap.responses[].search_result_done.matched_dn

  • ldap.responses[].modify_response.matched_dn

  • ldap.responses[].add_response.matched_dn

  • ldap.responses[].del_response.matched_dn

  • ldap.responses[].mod_dn_response.matched_dn

  • ldap.responses[].compare_response.matched_dn

  • ldap.responses[].extended_response.matched_dn

Note

如果数组中的某个响应不包含专有名字段,该字段将被解释为空缓冲区。

10.81.6.1. 示例

以下签名示例会在数据包包含 LDAP 专有名称 dc=example,dc=com 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAPDN"; ldap.responses.dn; content:"dc=example,dc=com"; sid:1;)

可以在同一条规则中使用 ldap.responses.operation 关键词指定要匹配的操作。

以下签名示例会在数据包在响应数组的索引1处包含 LDAP 搜索结果条目操作且包含 LDAP 专有名称 dc=example,dc=com 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAPDN 和操作"; ldap.responses.operation:search_result_entry,1; ldap.responses.dn; content:"dc=example,dc=com"; sid:1;)

10.81.7. ldap.responses.result_code

Suricata 提供 ldap.responses.result_code 关键词,可用于签名中以基于 LDAP 结果代码识别和过滤网络数据包。

语法:

ldap.responses.result_code: 代码[,索引];

ldap.responses.result_code 使用 无符号32位整数

该关键词映射到以下 EVE 字段:

  • ldap.responses[].bind_response.result_code

  • ldap.responses[].search_result_done.result_code

  • ldap.responses[].modify_response.result_code

  • ldap.responses[].add_response.result_code

  • ldap.responses[].del_response.result_code

  • ldap.responses[].mod_dn_response.result_code

  • ldap.responses[].compare_response.result_code

  • ldap.responses[].extended_response.result_code

ldap.responses.result_code 的结果代码值

代码

名称

0

success

1

operations_error

2

protocol_error

3

time_limit_exceeded

4

size_limit_exceeded

5

compare_false

6

compare_true

7

auth_method_not_supported

8

stronger_auth_required

10

referral

11

admin_limit_exceeded

12

unavailable_critical_extension

13

confidentiality_required

14

sasl_bind_in_progress

16

no_such_attribute

17

undefined_attribute_type

18

inappropriate_matching

19

constraint_violation

20

attribute_or_value_exists

21

invalid_attribute_syntax

32

no_such_object

33

alias_problem

34

invalid_dns_syntax

35

is_leaf

36

alias_dereferencing_problem

48

inappropriate_authentication

49

invalid_credentials

50

insufficient_access_rights

51

busy

52

unavailable

53

unwilling_to_perform

54

loop_detect

60

sort_control_missing

61

offset_range_error

64

naming_violation

65

object_class_violation

66

not_allowed_on_non_leaf

67

not_allowed_on_rdn

68

entry_already_exists

69

object_class_mods_prohibited

70

results_too_large

71

affects_multiple_dsas

76

control_error

80

other

81

server_down

82

local_error

83

encoding_error

84

decoding_error

85

timeout

86

auth_unknown

87

filter_error

88

user_canceled

89

param_error

90

no_memory

91

connect_error

92

not_supported

93

control_not_found

94

no_results_returned

95

more_results_to_return

96

client_loop

97

referral_limit_exceeded

100

invalid_response

101

ambiguous_response

112

tls_not_supported

113

intermediate_response

114

unknown_type

118

canceled

119

no_such_operation

120

too_late

121

cannot_cancel

122

assertion_failed

123

authorization_denied

4096

e_sync_refresh_required

16654

no_operation

更多关于 LDAP 结果代码值的信息可参考: https://ldap.com/ldap-result-code-reference/

一个 LDAP 请求操作可能收到多个响应。默认情况下,ldap.responses.result_code 关键词匹配任意索引,但也可以指定特定索引进行匹配,并使用 allany 等标志。

10.81.7.1. 示例

以下签名示例会在数据包在任意索引处包含 success LDAP 结果代码时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 结果代码"; ldap.responses.result_code:0; sid:1;)

alert ldap any any -> any any (msg:"测试 LDAP 结果代码"; ldap.responses.result_code:success,any; sid:1;)

以下签名示例会在数据包在索引1处包含 unavailable LDAP 结果代码时触发告警:

alert ldap any any -> any any (msg:"测试索引1处的 LDAP 结果代码"; ldap.responses.result_code:unavailable,1; sid:1;)

以下签名示例会在所有响应均包含 success LDAP 结果代码时触发告警:

alert ldap any any -> any any (msg:"测试所有 LDAP 响应均为成功结果代码"; ldap.responses.result_code:success,all; sid:1;)

关键词 ldap.responses.result_code 支持使用负数进行从后向前索引,即-1表示最后一个索引,-2表示倒数第二个索引,依此类推。以下签名示例会在最后一个索引处找到 success 结果代码时触发告警:

alert ldap any any -> any any (msg:"测试最后一个索引处的 LDAP 成功"; ldap.responses.result_code:success,-1; sid:1;)

10.81.8. ldap.responses.message

匹配响应操作中的 LDAP 错误消息。

比较区分大小写。

语法:

ldap.responses.message; content:"<要匹配的内容>";

ldap.responses.message 是 'sticky buffer',可用作 fast_pattern

ldap.responses.message 支持多缓冲区匹配,参见 多缓冲区匹配

该关键词映射到以下 EVE 字段:

  • ldap.responses[].bind_response.message

  • ldap.responses[].search_result_done.message

  • ldap.responses[].modify_response.message

  • ldap.responses[].add_response.message

  • ldap.responses[].del_response.message

  • ldap.responses[].mod_dn_response.message

  • ldap.responses[].compare_response.message

  • ldap.responses[].extended_response.message

Note

如果数组中的某个响应不包含错误消息字段,该字段将被解释为空缓冲区。

10.81.8.1. 示例

以下签名示例会在数据包包含 LDAP 错误消息 Size limit exceeded 时触发告警:

alert ldap any any -> any any (msg:"测试 LDAP 错误消息"; ldap.responses.message; content:"Size limit exceeded"; sid:1;)

10.81.9. ldap.request.attribute_type

匹配请求操作中的 LDAP 属性类型。

比较区分大小写。

语法:

ldap.request.attribute_type; content:"<要匹配的内容>";

ldap.request.attribute_type 是 'sticky buffer',可用作 fast_pattern

ldap.request.attribute_type 支持多缓冲区匹配,参见 多缓冲区匹配

该关键词映射到以下 EVE 字段:

  • ldap.request.search_request.attributes[]

  • ldap.request.modify_request.changes[].modification.attribute_type

  • ldap.request.add_request.attributes[].name

  • ``ldap