Snort预处理器之`DNP3`

编程入门 行业动态 更新时间:2024-10-07 20:34:33

<a href=https://www.elefans.com/category/jswz/34/1640185.html style=Snort预处理器之`DNP3`"/>

Snort预处理器之`DNP3`

文章目录

    • 1 DNP3 预处理器简介
    • 2 DNP3 预处理器的依赖
    • 3 DNP3 预处理器的配置
    • 4 DNP3 预处理器的规则选项
    • 5 DNP3 预处理器的事件

1 DNP3 预处理器简介

DNP3 预处理器是一个用于解码 DNP3 协议的 Snort 模块。它还提供了访问某些协议字段的规则选项。这允许用户为 DNP3 包编写规则,而无需使用一系列 “content” 和 “byte_test” 选项对协议进行解码。

DNP3 是一种在 SCADA 网络中使用的协议。如果您的网络不包含任何支持 dnp3 的设备,我们建议关闭这个预处理器。

2 DNP3 预处理器的依赖

为了预处理器的正常运行:

  • 必须启用流会话跟踪,即 stream5。必须在 stream5 中启用 TCP 或 UDP。预处理器需要一个会话跟踪器来保存它的数据。
  • 必须启用协议感知刷新(PAF)。
  • 应该启用 IP 碎片整理,即应该启用并配置 frag3 预处理器。

3 DNP3 预处理器的配置

首先,必须启用 DNP3 预处理器。预处理器的名称是 dnp3。

默认配置如下:

preprocessor dnp3

选项的语法:

OptionArgumentRequiredDefault
ports<ports>NOports { 20000 }
memcap<number>NOmemcap 262144
check_crcNONENOOFF
disabledNONENOOFF

选项的解释:

  • ports

    这指定了在哪些端口上检查 DNP3 消息。通常,这将包括20000。

    语法:ports { <port> [<port>< ... >] }

    举例:ports { 1237 3945 5067 }

    注意:在 “{” 和 “}” 的前后有空格。

  • memcap

    这设置了分配给 DNP3 预处理器用于会话跟踪的最大内存量。参数以字节为单位给出。每个会话需要大约 4 KB 来跟踪,默认是256 KB。这使得预处理器能够同时跟踪63个 DNP3 会话。将 memcap 设置在4144字节以下将导致一个致命错误。当使用多个配置时,非默认配置中的 memcap 将被默认配置中的 memcap 覆盖。如果默认配置不打算检查 DNP3 流量,使用 disabled 关键字。

  • check_crc

    这个选项使预处理器验证 DNP3 链路层帧中包含的校验和。带有无效校验和的帧将被忽略。如果启用了相应的预处理器规则,无效的校验和将生成警报。相应的规则是GID 145, SID 1。

  • disabled

    此选项用于加载预处理器而不检查任何 DNP3 流量。 只有在单独的策略中打开了 DNP3 预处理器时,disabled 关键字才有用。

4 DNP3 预处理器的规则选项

DNP3 预处理器添加了4个新的规则选项。这些规则选项在 DNP3 头的各个部分上匹配。

dnp3_func
dnp3_obj
dnp3_ind
dnp3_data

要使这些规则选项工作,必须启用预处理器。

  • dnp3_func

    此选项与 DNP3 应用层请求/响应头中的函数代码相匹配。代码可以是一个数字(十进制格式),也可以是下面列表中的字符串。

    语法:

    dnp3_func:<code>code = 0-255 |"confirm" |"read" |"write" |"select" |"operate" |"direct_operate" |"direct_operate_nr" |"immed_freeze" |"immed_freeze_nr" |"freeze_clear" |"freeze_clear_nr" |"freeze_at_time" |"freeze_at_time_nr" |"cold_restart" |"warm_restart" |"initialize_data" |"initialize_appl" |"start_appl" |"stop_appl" |"save_config" |"enable_unsolicited" |"disable_unsolicited" |"assign_class" |"delay_measure" |"record_current_time" |"open_file" |"close_file" |"delete_file" |"get_file_info" |"authenticate_file" |"abort_file" |"activate_config" |"authenticate_req" |"authenticate_err" |"response" |"unsolicited_response" |"authenticate_resp"
    

    举例:

    dnp3_func:1;
    dnp3_func:delete_file;
    
  • dnp3_ind

    此选项与 DNP3 应用程序响应头中的内部指示器标志匹配。与 TCP 标志规则选项非常相似,在一个选项中提供多个标志将导致在设置任何一个标志时触发规则。要在标志组合上发出警报,请使用多个规则选项。

    语法:

    dnp3_ind:<flag>{,<flag>...]flag = "all_stations""class_1_events""class_2_events""class_3_events""need_time""local_control""defice_trouble""device_restart""no_func_code_support""object_unknown""parameter_error""event_buffer_overflow""already_executing""config_corrupt""reserved_2""reserved_1"
    

    举例:

    # Alert on reserved_1 OR reserved_2
    dnp3_ind:reserved_1,reserved_2;# Alert on class_1 AND class_2 AND class_3 events
    dnp3_ind:class_1_events; dnp3_ind:class_2_events; dnp3_ind:class_3_events;
    
  • dnp3_obj

    此选项与请求或响应中出现的 DNP3 object headers 匹配。

    语法:

    dnp3_obj:<group>,<var>
    group = 0 - 255
    var = 0 - 255
    

    举例:

    # Alert on DNP3 "Date and Time" object
    dnp3_obj:50,1;
    
  • dnp3_data

    当 Snort 处理 DNP3 数据包时,DNP3 预处理器将收集链路层帧,并将其重新组合成应用程序层片段。 此规则选项将光标设置为应用层片段的开头,以便其他规则选项可以对重新组合的数据起作用。

    使用 dnp3 数据规则选项,您可以基于分片中的数据编写规则,而无需拆分数据并每16个字节添加 CRC。

    语法:

    dnp3_data;
    

    举例:

    dnp3_data; content:"badstuff_longer_than_16chars";
    

5 DNP3 预处理器的事件

DNP3 预处理器使用 GID 145 作为它的预处理器事件。

SIDDescription
1链路层帧包含无效的 CRC。(在预处理器配置中启用 check_crc 来得到这个警告)
2DNP3 链路层帧被删除,原因是长度无效
3重组过程中删除了一个传输层段。 当段的序列号无效时,会发生这种情况
4DNP3 重组缓冲区在完整片段重组前被清除。当带 FIR 标志的段在其他段排队之后出现时,就会发生这种情况
5DNP3 链路层帧大于260字节
6DNP3 链路层帧使用一个保留的地址
7DNP3 请求或响应使用保留函数代码

更多推荐

Snort预处理器之`DNP3`

本文发布于:2024-02-07 11:08:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Snort

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!