Project

General

Profile

Actions

Feature #5752

open
AL OD

Proposed new DNP3 keywords and operators

Feature #5752: Proposed new DNP3 keywords and operators

Added by Alex Lasky over 3 years ago. Updated almost 2 years ago.

Status:
New
Priority:
Normal
Assignee:
Target version:
Effort:
Difficulty:
Label:

Description

Currently, the usefulness of the DNP3 keywords is severely hindered by their limitations. This is especially true for dnp3_obj, where hundreds of rules may be required to specify the objects you want to filter/detect especially if the var field contains a length in bytes. There is also no current mechanism to filter by point index or (less important) point value, as the Modbus keywords already let you do. To address this I propose the following alternative syntax for the dnp3_obj keyword, with associated detection code:

dnp3_obj:group <ranges> [, var <ranges>] [, index <ranges>] [, value <ranges>]
where:
ranges ::= <range> [, <range> ...]
range ::= <min>-<max>|[<|>|!]<value>

Alternatively you could use the <> operator to indicate max/min range as some of the other keywords do, but that is a poor syntax given its extensive prior use to mean "not-equals". For file or data set objects, value would be the name of the file or data set as a double-quoted string.


Related issues 1 (1 open0 closed)

Related to Suricata - Task #6644: tracking: detect: integer as first-class supportIn ProgressPhilippe AntoineActions

AL Updated by Alex Lasky over 3 years ago Actions #1

Currently, the usefulness of the DNP3 keywords is severely hindered by their limitations. This is especially true for dnp3_obj, where hundreds of rules may be required to specify the objects you want to filter/detect especially if the var field contains a length in bytes. There is also no current mechanism to filter by point index or (less important) point value, as the Modbus keywords already let you do. To address this I propose the following alternative syntax for the dnp3_obj keyword, with associated detection code:

dnp3_obj:group <ranges> [, var <ranges>] [, index <ranges>] [, value <ranges>]
where:
ranges ::= <range> [, <range> ...]
range ::= <min>-<max>|[<|>|!]<value>

Alternatively you could use the <> operator to indicate max/min range as some of the other keywords do, but that is a poor syntax given its extensive prior use to mean "not-equals". For file or data set objects, value would be the name of the file or data set as a double-quoted string.

AL Updated by Alex Lasky over 3 years ago Actions #2

  • Description updated (diff)

PA Updated by Philippe Antoine almost 2 years ago Actions #3

  • Label deleted (Needs backport to 6.0)

PA Updated by Philippe Antoine almost 2 years ago Actions #4

  • Related to Task #6644: tracking: detect: integer as first-class support added
Actions

Also available in: PDF Atom