LDAP 关键词 ============= .. role:: example-rule-action .. role:: example-rule-header .. role:: example-rule-options .. role:: example-rule-emphasis LDAP 请求与响应操作 ------------------------------------ .. table:: **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 既支持操作代码也支持操作名称作为参数。 ldap.request.operation ---------------------- Suricata 提供 ``ldap.request.operation`` 关键词,可用于签名中以识别和基于轻量目录访问协议请求操作过滤网络数据包。 语法:: ldap.request.operation: 操作; ldap.request.operation 使用 :ref:`无符号8位整数 `。 该关键词映射到 EVE 字段 ``ldap.request.operation``。 示例 ^^^^^^^^ 以下签名示例会在数据包包含 LDAP 绑定请求操作时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 绑定请求"; :example-rule-emphasis:`ldap.request.operation:0;` sid:1;) .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 绑定请求"; :example-rule-emphasis:`ldap.request.operation:bind_request;` sid:1;) ldap.responses.operation ------------------------ Suricata 提供 ``ldap.responses.operation`` 关键词,可用于签名中以识别和基于轻量目录访问协议响应操作过滤网络数据包。 语法:: ldap.responses.operation: 操作[,索引]; ldap.responses.operation 使用 :ref:`无符号8位整数 `。 该关键词映射到 EVE 字段 ``ldap.responses[].operation``。 一个 LDAP 请求操作可能收到多个响应。默认情况下,ldap.responses.operation 关键词匹配所有索引,但也可以指定特定索引进行匹配,并使用 ``all`` 和 ``any`` 等标志。 .. table:: **ldap.responses.operation 关键词的索引值** ========= ================================================ 值 描述 ========= ================================================ [默认] 匹配任意索引 all 仅当所有索引都匹配时才匹配 any 匹配任意索引 0>= 匹配特定索引 0< 使用从后向前索引匹配特定索引 ========= ================================================ 示例 ^^^^^^^^ 以下签名示例会在数据包包含 LDAP 绑定响应操作时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 绑定响应"; :example-rule-emphasis:`ldap.responses.operation:1;` sid:1;) .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 绑定响应"; :example-rule-emphasis:`ldap.responses.operation:bind_response;` sid:1;) 以下签名示例会在数据包在索引1处包含 LDAP search_result_done 响应操作时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; :example-rule-emphasis:`ldap.responses.operation:search_result_done,1;` sid:1;) 以下签名示例会在所有响应类型均为 search_result_entry 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; :example-rule-emphasis:`ldap.responses.operation:search_result_entry,all;` sid:1;) 关键词 ldap.responses.operation 支持使用负数进行从后向前索引,即-1表示最后一个索引,-2表示倒数第二个索引,依此类推。以下签名示例会在最后一个索引处找到 search_result_entry 响应时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 搜索响应"; :example-rule-emphasis:`ldap.responses.operation:search_result_entry,-1;` sid:1;) 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 使用 :ref:`无符号32位整数 `。 该关键词映射到 EVE 字段 ``len(ldap.responses[])``。 示例 ^^^^^^^^ 以下签名示例会在数据包包含0个 LDAP 响应时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"数据包包含0个 LDAP 响应"; :example-rule-emphasis:`ldap.responses.count:0;` sid:1;) 以下签名示例会在数据包包含超过2个 LDAP 响应时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"数据包包含超过2个 LDAP 响应"; :example-rule-emphasis:`ldap.responses.count:>2;` sid:1;) 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`` 示例 ^^^^^^^ 以下签名示例会在数据包包含 LDAP 专有名称 ``uid=jdoe,ou=People,dc=example,dc=com`` 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAPDN"; :example-rule-emphasis:`ldap.request.dn; content:"uid=jdoe,ou=People,dc=example,dc=com";` sid:1;) 可以在同一条规则中使用 ``ldap.request.operation`` 关键词指定要匹配的操作。 以下签名示例会在数据包包含 LDAP 搜索请求操作且包含 LDAP 专有名称 ``dc=example,dc=com`` 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAPDN 和操作"; :example-rule-emphasis:`ldap.request.operation:search_request; ldap.request.dn; content:"dc=example,dc=com";` sid:1;) ldap.responses.dn ----------------- 匹配响应操作中的 LDAP 专有名称。 比较区分大小写。 语法:: ldap.responses.dn; content:"<要匹配的内容>"; ``ldap.responses.dn`` 是 'sticky buffer',可用作 ``fast_pattern``。 ``ldap.responses.dn`` 支持多缓冲区匹配,参见 :doc:`multi-buffer-matching`。 该关键词映射到以下 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:: 如果数组中的某个响应不包含专有名字段,该字段将被解释为空缓冲区。 示例 ^^^^^^^ 以下签名示例会在数据包包含 LDAP 专有名称 ``dc=example,dc=com`` 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAPDN"; :example-rule-emphasis:`ldap.responses.dn; content:"dc=example,dc=com";` sid:1;) 可以在同一条规则中使用 ``ldap.responses.operation`` 关键词指定要匹配的操作。 以下签名示例会在数据包在响应数组的索引1处包含 LDAP 搜索结果条目操作且包含 LDAP 专有名称 ``dc=example,dc=com`` 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAPDN 和操作"; :example-rule-emphasis:`ldap.responses.operation:search_result_entry,1; ldap.responses.dn; content:"dc=example,dc=com";` sid:1;) ldap.responses.result_code -------------------------- Suricata 提供 ``ldap.responses.result_code`` 关键词,可用于签名中以基于 LDAP 结果代码识别和过滤网络数据包。 语法:: ldap.responses.result_code: 代码[,索引]; ldap.responses.result_code 使用 :ref:`无符号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`` .. table:: **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 关键词匹配任意索引,但也可以指定特定索引进行匹配,并使用 ``all`` 和 ``any`` 等标志。 .. table:: **ldap.responses.result_code 关键词的索引值** ========= ================================================ 值 描述 ========= ================================================ [默认] 匹配任意索引 all 仅当所有索引都匹配时才匹配 any 匹配任意索引 0>= 匹配特定索引 0< 使用从后向前索引匹配特定索引 ========= ================================================ 示例 ^^^^^^^^ 以下签名示例会在数据包在任意索引处包含 ``success`` LDAP 结果代码时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 结果代码"; :example-rule-emphasis:`ldap.responses.result_code:0;` sid:1;) .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 结果代码"; :example-rule-emphasis:`ldap.responses.result_code:success,any;` sid:1;) 以下签名示例会在数据包在索引1处包含 ``unavailable`` LDAP 结果代码时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试索引1处的 LDAP 结果代码"; :example-rule-emphasis:`ldap.responses.result_code:unavailable,1;` sid:1;) 以下签名示例会在所有响应均包含 ``success`` LDAP 结果代码时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试所有 LDAP 响应均为成功结果代码"; :example-rule-emphasis:`ldap.responses.result_code:success,all;` sid:1;) 关键词 ldap.responses.result_code 支持使用负数进行从后向前索引,即-1表示最后一个索引,-2表示倒数第二个索引,依此类推。以下签名示例会在最后一个索引处找到 ``success`` 结果代码时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试最后一个索引处的 LDAP 成功"; :example-rule-emphasis:`ldap.responses.result_code:success,-1;` sid:1;) ldap.responses.message ---------------------- 匹配响应操作中的 LDAP 错误消息。 比较区分大小写。 语法:: ldap.responses.message; content:"<要匹配的内容>"; ``ldap.responses.message`` 是 'sticky buffer',可用作 ``fast_pattern``。 ``ldap.responses.message`` 支持多缓冲区匹配,参见 :doc:`multi-buffer-matching`。 该关键词映射到以下 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:: 如果数组中的某个响应不包含错误消息字段,该字段将被解释为空缓冲区。 示例 ^^^^^^^ 以下签名示例会在数据包包含 LDAP 错误消息 ``Size limit exceeded`` 时触发告警: .. container:: example-rule alert ldap any any -> any any (msg:"测试 LDAP 错误消息"; ldap.responses.message; content:"Size limit exceeded"; sid:1;) ldap.request.attribute_type --------------------------- 匹配请求操作中的 LDAP 属性类型。 比较区分大小写。 语法:: ldap.request.attribute_type; content:"<要匹配的内容>"; ``ldap.request.attribute_type`` 是 'sticky buffer',可用作 ``fast_pattern``。 ``ldap.request.attribute_type`` 支持多缓冲区匹配,参见 :doc:`multi-buffer-matching`。 该关键词映射到以下 EVE 字段: - ``ldap.request.search_request.attributes[]`` - ``ldap.request.modify_request.changes[].modification.attribute_type`` - ``ldap.request.add_request.attributes[].name`` - ``ldap