Project

General

Profile

Actions

Bug #7612

open

Modbus regression from Suricata 6 to 7

Added by Andreas Herz 12 days ago. Updated 11 days ago.

Status:
Assigned
Priority:
Normal
Assignee:
Target version:
Affected Versions:
Effort:
Difficulty:
Label:

Description

There seems to be a regression in the modbus parser between Suricata 6 and 7 when replaying https://github.com/ITI/ICS-Security-Tools/blob/master/pcaps/bro/modbus/modbus.pcap as a source.

Output with Suricata 6.0.20 where we have 4 flows with `app_proto` set to `modbus`:

{
  "timestamp": "2004-08-26T14:01:18.945447+0200",
  "flow_id": 1453545012427633,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2579,
  "dest_ip": "10.0.0.8",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 6,
    "pkts_toclient": 5,
    "bytes_toserver": 374,
    "bytes_toclient": 302,
    "start": "2004-08-26T14:05:53.490353+0200",
    "end": "2004-08-26T14:06:16.747072+0200",
    "age": 23,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "3b",
    "tcp_flags_ts": "3b",
    "tcp_flags_tc": "13",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "urg": true,
    "state": "closed" 
  }
}

{
  "timestamp": "2004-08-26T14:01:18.945447+0200",
  "flow_id": 1755588569702907,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2578,
  "dest_ip": "10.0.0.3",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 20,
    "pkts_toclient": 12,
    "bytes_toserver": 1254,
    "bytes_toclient": 800,
    "start": "2004-08-26T14:01:21.696827+0200",
    "end": "2004-08-26T14:07:47.391775+0200",
    "age": 386,
    "state": "established",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "3b",
    "tcp_flags_ts": "3b",
    "tcp_flags_tc": "1b",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "urg": true,
    "state": "fin_wait2" 
  }
}
{
  "timestamp": "2004-08-26T14:01:18.945447+0200",
  "flow_id": 1806557029495883,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2585,
  "dest_ip": "10.0.0.8",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 8,
    "pkts_toclient": 7,
    "bytes_toserver": 1384,
    "bytes_toclient": 422,
    "start": "2004-08-26T14:22:26.554059+0200",
    "end": "2004-08-26T14:23:43.116262+0200",
    "age": 77,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "3b",
    "tcp_flags_ts": "1b",
    "tcp_flags_tc": "3b",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "urg": true,
    "state": "closed" 
  }
}
{
  "timestamp": "2004-08-26T14:01:18.945447+0200",
  "flow_id": 44881663135779,
  "event_type": "flow",
  "src_ip": "10.0.0.9",
  "src_port": 3082,
  "dest_ip": "10.0.0.3",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 16,
    "pkts_toclient": 9,
    "bytes_toserver": 998,
    "bytes_toclient": 575,
    "start": "2004-08-26T14:12:06.102435+0200",
    "end": "2004-08-26T14:15:03.198170+0200",
    "age": 177,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "1b",
    "tcp_flags_ts": "1b",
    "tcp_flags_tc": "1b",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "state": "closed" 
  }
}

Output with Suricata 7.0.8 where we have 3 flows with `app_proto` set to `modbus`:

{
  "timestamp": "2004-08-26T14:25:39.878395+0200",
  "flow_id": 417201198152419,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2579,
  "dest_ip": "10.0.0.8",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 6,
    "pkts_toclient": 5,
    "bytes_toserver": 374,
    "bytes_toclient": 302,
    "start": "2004-08-26T14:05:53.490353+0200",
    "end": "2004-08-26T14:06:16.747072+0200",
    "age": 23,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "1b",
    "tcp_flags_ts": "1b",
    "tcp_flags_tc": "13",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "state": "closed",
    "ts_max_regions": 1,
    "tc_max_regions": 1
  }
}
{
  "timestamp": "2004-08-26T14:25:39.878395+0200",
  "flow_id": 459578595248221,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2578,
  "dest_ip": "10.0.0.3",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 20,
    "pkts_toclient": 12,
    "bytes_toserver": 1254,
    "bytes_toclient": 800,
    "start": "2004-08-26T14:01:21.696827+0200",
    "end": "2004-08-26T14:07:47.391775+0200",
    "age": 386,
    "state": "established",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "1b",
    "tcp_flags_ts": "1a",
    "tcp_flags_tc": "1b",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "state": "fin_wait2",
    "ts_max_regions": 1,
    "tc_max_regions": 1
  }
}
{
  "timestamp": "2004-08-26T14:25:39.878395+0200",
  "flow_id": 1847331805319692,
  "event_type": "flow",
  "src_ip": "10.0.0.9",
  "src_port": 3082,
  "dest_ip": "10.0.0.3",
  "dest_port": 502,
  "proto": "TCP",
  "app_proto": "modbus",
  "flow": {
    "pkts_toserver": 16,
    "pkts_toclient": 9,
    "bytes_toserver": 998,
    "bytes_toclient": 575,
    "start": "2004-08-26T14:12:06.102435+0200",
    "end": "2004-08-26T14:15:03.198170+0200",
    "age": 177,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "1b",
    "tcp_flags_ts": "1b",
    "tcp_flags_tc": "1b",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "state": "closed",
    "ts_max_regions": 1,
    "tc_max_regions": 1
  }
}

So this specific flow is missing it now in 7:

{
  "timestamp": "2004-08-26T14:25:39.878395+0200",
  "flow_id": 690817311456706,
  "event_type": "flow",
  "src_ip": "10.0.0.57",
  "src_port": 2585,
  "dest_ip": "10.0.0.8",
  "dest_port": 502,
  "proto": "TCP",
  "flow": {
    "pkts_toserver": 8,
    "pkts_toclient": 7,
    "bytes_toserver": 1384,
    "bytes_toclient": 422,
    "start": "2004-08-26T14:22:26.554059+0200",
    "end": "2004-08-26T14:23:43.116262+0200",
    "age": 77,
    "state": "closed",
    "reason": "shutdown",
    "alerted": false
  },
  "tcp": {
    "tcp_flags": "1b",
    "tcp_flags_ts": "1b",
    "tcp_flags_tc": "13",
    "syn": true,
    "fin": true,
    "psh": true,
    "ack": true,
    "state": "closed",
    "ts_max_regions": 1,
    "tc_max_regions": 1
  }
}

Actions #1

Updated by Victor Julien 11 days ago

  • Status changed from New to Assigned
  • Assignee changed from OISF Dev to Andreas Herz

Please create some SV tests.

Actions

Also available in: Atom PDF