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
选项的语法:
Option | Argument | Required | Default |
---|---|---|---|
ports | <ports> | NO | ports { 20000 } |
memcap | <number> | NO | memcap 262144 |
check_crc | NONE | NO | OFF |
disabled | NONE | NO | OFF |
选项的解释:
-
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 作为它的预处理器事件。
SID | Description |
---|---|
1 | 链路层帧包含无效的 CRC。(在预处理器配置中启用 check_crc 来得到这个警告) |
2 | DNP3 链路层帧被删除,原因是长度无效 |
3 | 重组过程中删除了一个传输层段。 当段的序列号无效时,会发生这种情况 |
4 | DNP3 重组缓冲区在完整片段重组前被清除。当带 FIR 标志的段在其他段排队之后出现时,就会发生这种情况 |
5 | DNP3 链路层帧大于260字节 |
6 | DNP3 链路层帧使用一个保留的地址 |
7 | DNP3 请求或响应使用保留函数代码 |
更多推荐
Snort预处理器之`DNP3`
发布评论