icsnpp-ge-srtp

Build Status

Source main Status main Timestamp
CISAGOV Build Status Last Build
Development Build Status Last Build

ICSNPP-GE-SRTP

Industrial Control Systems Network Protocol Parsers (ICSNPP) - GE SRTP

Overview

ICSNPP-GE-SRTP is a Zeek plugin (written in Spicy) for parsing and logging fields used by the GE SRTP protocol, as defined in Leveraging the SRTP protocol for over-the-network memory acquistion of a GE Fanuc Seris 90-30

This parser produces the following log files, defined in scripts/main.zeek:

  • ge_srtp_general.log

For additional information on this log file, see the Logging Capabilities section below.

Installation

Package Manager

This script is available as a package for Zeek Package Manager. It requires Spicy and the Zeek Spicy plugin.

$ zkg refresh
$ zkg install icsnpp-ge-srtp

If this package is installed from ZKG, it will be added to the available plugins. This can be tested by running zeek -NN. If installed correctly, users will see [Analyzer] spicy_GE_SRTP_TCP (ANALYZER_SPICY_GE_SRTP_TCP, enabled) under the list of Zeek::Spicy analyzers.

If users have ZKG configured to load packages (see @load packages in the ZKG Quickstart Guide), this plugin and these scripts will automatically be loaded and ready to go.

Protocol Detection and Custom Ports

GE SRTP detection is port-based. By default, the TCP analyzer is registered for TCP port 18245. The Spicy parser validates payload after Zeek assigns traffic to the analyzer, but this package does not provide a DPD payload signature for discovering GE SRTP on otherwise unregistered ports.

To analyze GE SRTP on an additional TCP port, add the port to GE_SRTP::tcp_ports in a Zeek site policy loaded after this package:

redef GE_SRTP::tcp_ports += { 12345/tcp };

GE_SRTP::tcp_ports is used both to register the TCP analyzer and to populate Zeek's likely_server_ports direction heuristic. Adding a port only to likely_server_ports does not enable parsing; the port must be present in GE_SRTP::tcp_ports.

Port configuration is read when Zeek initializes. Restart a standalone Zeek process, or redeploy/restart Zeek cluster workers, after changing the site policy. Port-only configuration changes do not require rebuilding or reinstalling the parser.

Registering a port assigns every TCP connection whose inferred server port matches it to the GE SRTP analyzer. Configure only ports dedicated to GE SRTP; unrelated or malformed traffic on those ports adds parsing overhead and is rejected when it does not parse as GE SRTP.

This parser does not support GE SRTP over UDP, so there is no UDP port set to configure.

Logging Capabilities

GE SRTP Log (ge_srtp_general.log)

Overview

This log summarizes, by connection, GE SRTP frames transmitted to ge_srtp_general.log.

Fields Captured

Field Type Description
ts time Timestamp (network time)
uid string Uinque ID for this connection
id conn_id Default Zeek connection info (IP Addresses, Ports, etc.)
proto string Transport protocol
srtp_type string Type: Request (0x02) Reply (0x03)
sequence_number_1 count Sequence number identifying request/reply pairs. Repeated twice in message structure.
text_length count Length of the message for messages greater than 56 bytes
time_seconds count Time in seconds
time_minutes count Time in minutes
time_hours count Time in hours
sequence_number_2 count Second sequence number
message_type string Message type
mailbox_source count Mailbox source
mailbox_destination count Mailbox destination
packet_number count Packet number
total_packet_number count Total packet number
service_request_code string Service request code based on the type of memory being requested
segment_selector string Segment selector determining which memory register is accessed
memory_offset count Memory offset starting with zero
data_length count Data length for the memory type accessed.
status_code string Status code
minor_status_code string Minor status code
data_requested string Data requested
control_program_number count The number of the control program task the master is currently logged into.
current_privilege_level count Current privilege level of the master device
last_sweep_time count The last elapsed time to fully execute program task.
oversweep_flag string Oversweep flag. Meaningful only if constant sweep mode is active
constant_sweep_mode string Constant sweep mode. Active (0x01); Not Active (0x00)
plc_fault_entry_last_read string PLC Fault Entry since last read.
io_fault_entry_last_read string I/O Falut Entry since last read.
plc_fault_entry_present string PLC Fault Entry present.
io_fault_entry_present string I/O Fault Entry present.
programmer_attachment string Programmer attachement flag. Attachment found (0x01); No Attachement found (0x00)
front_panel_enable_switch string Front panel ENABLE/DISABLE switch setting.
front_panel_run_switch string Front panel RUN/STOP switch setting.
oem_protected string OEM protected bit.
plc_state string PLC State

Service Request Codes

The following request codes are present in the service_request_code field within ge_srtp_general.log. More detailed logging for information specific to each request code is not currently availiable.

Service Request Code Logging Level
Plc Short Status Request Logged - Header Only
Return Control Program Names Logged - Header Only
Read System Memory Logged - Header Only
Read Task Memory Logged - Header Only
Read Program Memory Logged - Header Only
Write System Memory Logged - Header Only
Write Task Memory Logged - Header Only
Write Program Block Memory Logged - Header Only
Programmer Logon Logged - Header Only
Change Plc Cpu Privilege Level Logged - Header Only
Set Control Id Cpu Id Logged - Header Only
Set Plc Run Vs Stop Logged - Header Only
Set Plc Time Date Logged - Header Only
Return Plc Time Date Logged - Header Only
Return Fault Table Logged - Header Only
Clear Fault Table Logged - Header Only
Program Store Upload From Plc Logged - Header Only
Program Load Download To Plc Logged - Header Only
Return Controller Type And Id Information Logged - Header Only
Toggle Force System Memory Logged - Header Only

ICSNPP Packages

All ICSNPP Packages:

Full ICS Protocol Parsers:

  • BACnet
    • Full Zeek protocol parser for BACnet (Building Control and Automation)
  • BSAP
    • Full Zeek protocol parser for BSAP (Bristol Standard Asynchronous Protocol) over IP
    • Full Zeek protocol parser for BSAP Serial comm converted using serial tap device
  • Ethercat
    • Full Zeek protocol parser for Ethercat
  • Ethernet/IP and CIP
    • Full Zeek protocol parser for Ethernet/IP and CIP
  • Genisys
    • Full Zeek protocol parser for Genisys
  • OPCUA-Binary
    • Full Zeek protocol parser for OPC UA (OPC Unified Architecture) - Binary
  • S7Comm
    • Full Zeek protocol parser for S7comm, S7comm-plus, and COTP
  • Synchrophasor
    • Full Zeek protocol parser for Synchrophasor Data Transfer for Power Systems (C37.118)
  • Profinet IO CM
    • Full Zeek protocol parser for Profinet I/O Context Manager

Updates to Zeek ICS Protocol Parsers:

  • DNP3
    • DNP3 Zeek script extending logging capabilities of Zeek's default DNP3 protocol parser
  • Modbus
    • Modbus Zeek script extending logging capabilities of Zeek's default Modbus protocol parser

License

Copyright 2023 Battelle Energy Alliance, LLC. Released under the terms of the 3-Clause BSD License (see LICENSE.txt). ~

Package Version :