<?xml version="1.0" encoding="UTF-8" ?><OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"><responseDate>2026-10-14T03:37:03Z</responseDate><request identifier="10.35097/bx5337kcykte438h" metadataPrefix="oai_dc" verb="GetRecord">https://www.radar-service.eu/oai/OAIHandler</request><GetRecord><record><header><identifier>10.35097/bx5337kcykte438h</identifier><datestamp>2026-10-09T10:51:57Z</datestamp><setSpec>radar4kit</setSpec></header><metadata><oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/"
           xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ https://www.openarchives.org/OAI/2.0/oai_dc.xsd">
   <dc:identifier>https://dx.doi.org/10.35097/bx5337kcykte438h</dc:identifier>
   <dc:creator>Kellerer, Nicolai</dc:creator>
   <dc:creator>Hagenmeyer, Veit</dc:creator>
   <dc:title>Dataset: GridStratLLM: Agent Framework for Coordinated Cyberattacks on the Smart Grid with Large Language Models</dc:title>
   <dc:publisher>Karlsruhe Institute of Technology</dc:publisher>
   <dc:date>2026</dc:date>
   <dc:subject>Computer Science</dc:subject>
   <dc:type>dataset</dc:type>
   <dc:subject>Dataset</dc:subject>
   <dc:rights>info:eu-repo/semantics/openAccess</dc:rights>
   <dc:rights>https://creativecommons.org/licenses/by/4.0/legalcode</dc:rights>
   <dc:description>A new cybersecurity threat emerges: Recent Large Language Models (LLMs) with advanced reasoning and tool calling enable even attackers lacking expert knowledge to coordinate large-scale attacks on Smart Grids (SG).&#xD;
These LLMs can orchestrate multiple malware instances, select appropriate signals and deltas, and execute data-modification attacks on the S7 and Modbus protocols.&#xD;
Thereby, the automatically generated attack progresses towards the targeted unsafe state and evades detection by the Intrusion Detection System (IDS).&#xD;
To assess this emerging threat, we introduce GridStratLLM, a novel agent framework for coordinated attacks on industrial networks.&#xD;
Furthermore, we evaluate attack plans generated by four frontier Large Language Models using the open-source Network Security Monitor (NSM) Zeek and a commercial NSM.&#xD;
Finally, we contribute a dataset recorded in a Hardware-in-the-Loop (HIL) testbed to support the training of IDS solutions against these attacks.&#xD;
The dataset is 24 hours and 11 minutes long, containing 436 attacks with 212 coordinated attacks.</dc:description>
   <dc:description># GridStratLLM Dataset&#xD;
&#xD;
This dataset contains coordinated cyberattacks generated using the GridStratLLM agent framework against a hardware-in-the-loop testbed of a distributed generation environment.&#xD;
It covers one normal operation and five attack datasets, each using a different LLM.&#xD;
Every dataset captures network traffic, process data from SCADA, log messages, and metadata from the attack scripts.&#xD;
&#xD;
Paper: https://doi.org/10.1145/3765611.3815147&#xD;
GridStratLLM source code: https://github.com/nbke/GridStratLLM&#xD;
&#xD;
Each dataset directory contains:&#xD;
- `attack_session_llm.parquet`: LLM prompts, plans, chain-of-thought reasoning, token usage&#xD;
- `attack_worker.parquet`: Network interface info (MAC, IP, interface name)&#xD;
- `packet_metadata.parquet`: Packet metadata (timestamps, addresses, ports, protocol)&#xD;
- `packets.pcap`: Raw packet capture&#xD;
- `attack_datamod_history.parquet`: Packet modification log with delta values&#xD;
- `attack_exec_steps.parquet`: Attack execution timeline per worker&#xD;
- `process_data.parquet`: WinCC SCADA data&#xD;
- `logs.parquet`: Logs from PLC 1512 and PLC 1516&#xD;
&#xD;
See `network.json` for a list of network devices. `modbus.json` contains a mapping of Modbus registers to signal names.&#xD;
`s7_connections.json` contains all signals transmitted via S7.&#xD;
&#xD;
## Parquet Files&#xD;
&#xD;
### attack_session_llm.parquet&#xD;
&#xD;
The structure of the `plan` column is explained in appendix E of the paper.&#xD;
`coordinated` is true if an attack session uses multiple attack workers.&#xD;
The column `all_messages` may be NULL due to a data capture issue.&#xD;
&#xD;
### packet_metadata.parquet&#xD;
&#xD;
The entries in packet_metadata.parquet are in the same order as packets.pcap.&#xD;
If the UUID of a packet (id in packet_metadataparquet) is contained in the packet_id column in attack_datamod_history.parquet, then the packet originates from an attack script.&#xD;
&#xD;
### SCADA process data: `process_data.parquet`&#xD;
&#xD;
PV:&#xD;
- Control Signals: on_off&#xD;
- Monitor Signals: temp_air, poa_direct, wind_speed, poa_diffuse, cell_temperature, inverter_ac_power, inverter_dc_power&#xD;
&#xD;
Wind:&#xD;
- Control Signals: blade_rotation, rotation_speed&#xD;
- Monitor Signals: power, height, pressure, wind_speed_a, wind_speed_b, temperature_a, temperature_b&#xD;
&#xD;
Battery:&#xD;
- Control Signals: on_off, target_power&#xD;
- Monitor Signals: current, voltage, temperature, state_of_charge, actual_charge_power&#xD;
&#xD;
### Log messages: `logs.parquet`&#xD;
&#xD;
Log messages are in German and only sent when the signal value changes. Example:&#xD;
```&#xD;
Wertänderung "SysLogDaten".Inverter_ac_power Altwert: 239,0 aktueller Wert: 20,0 CPU:SECCPU16&#xD;
```&#xD;
&#xD;
## DuckDB File: `merged_datasets.duckdb`&#xD;
&#xD;
The combined `merged_datasets.duckdb` file contains all data from the Parquet files plus raw packet data.&#xD;
Differences from the Parquet files:&#xD;
&#xD;
- `process_data` is split into four tables: `wind_process_data`, `pv_process_data`, `battery_process_data`, `demand_process_data` (one column per signal instead of JSON `values`).&#xD;
- `attack_session_llm` is renamed to `attack_session`.&#xD;
- `attack_exec_steps` is renamed to `exec_steps` and `setup_duration` is stored as an `interval` instead of a bigint.&#xD;
- `packet_metadata` is renamed to `packets`. The packets from the PCAP files are stored in the `raw_packet` BLOB column.&#xD;
   The `l2_flow_id`, `l3_flow_id`, and `l4_flow_id` columns are omitted, which are always null in the Parquet files.&#xD;
- `id` columns use `uuid` type instead of `blob`.&#xD;
- Categorical columns (`model_name`, `transport`, `state`, `kind`, etc.) use DuckDB `enum` types instead of `string`.&#xD;
&#xD;
Column name prefix for process data tables:&#xD;
- `C_`: Control signals (commands sent to power plants)&#xD;
- `M_`: Monitor signals (measured values sent to SCADA)&#xD;
&#xD;
# Funding&#xD;
&#xD;
This research is supported in part by funding from the topic Engineering Secure Systems of the Helmholtz Association (HGF) and by KASTEL Security Research Labs (structure 46.23.02).</dc:description>
   <dc:subject>Attack Plan</dc:subject>
   <dc:subject>LLM</dc:subject>
   <dc:subject>Smart Grid</dc:subject>
   <dc:subject>Modbus</dc:subject>
   <dc:subject>S7</dc:subject>
   <dc:subject>Data Modification</dc:subject>
   <dc:relation>https://publikationen.bibliothek.kit.edu/1000193145</dc:relation>
   <dc:format>application/x-tar</dc:format>
</oai_dc:dc></metadata></record></GetRecord></OAI-PMH>