A behavioural detection system written in Rust produces alerts that are preserved as immutable legal evidence for NIS2.

Providing proof for every alert

  • authenticity: identifiable and recognised source of information;
  • integrity: content unmodified since creation;
  • traceability: every step recorded;
  • reliable timestamping: date and time securely sourced;
  • attribution: actor or system that generated the data identified;
  • contextualisation: document inserted into a described process;
  • availability during the required period;
  • long-term readability (PDF/A, signed JSON).

Chain of custody for an SSA alert

An SSA alert is generated by the Rust engine with metadata (IP source, account identity). Each alert carries a UUID, a timestamp and the identifier of the producing service. A call to the internal TSA obtains a signed timestamp. The SHA-256 hash of the full payload is stored in an immutable log. Writing is performed on a WORM layer or within an S3 Object Lock bucket in Compliance mode.

NIS2 evidence register - example

FieldExample value
IDUnique UUID v4
Proof typeBehavioural alert
SourceRust SSA Plugin
FormatSigned JSON
TimestampTSA Certificate
HashSHA-256
StorageS3 Object Lock
Retention7 years

The register is maintained in a Git repository; any modification triggers a pull request validated by the DPO or the CISO.

Audit scenario: from detection to submission of evidence

An SSA alert is triggered and appears on the SOC dashboard. The CSIRT isolates the account, applies a patch, and logs the action in a ticket. Upon an audit request from an authority, a script extracts the event from the S3 bucket, verifies the hash, adds the TSA certificate, and packages everything into audit-package.zip containing the JSON, certificate, and evidence register.

Pragmatic implementation for SMEs and Mid-caps

  • map NIS2 obligations in a requirement/evidence table;
  • define an evidence register (simple tool: Git, immutable database);
  • assign a lead for each category (alerts, backups, policies);
  • specify source, frequency, format and duration;
  • automate collection: the Rust plugin pushes directly to S3 with TSA signature;
  • protect via strict ACLs, encryption at rest, and multi-zone replication.

Limitations not to be overlooked

  • an immutable record may contain erroneous information: source quality is paramount;
  • GDPR / NIS2 conflict requiring an impact analysis;
  • immutability is not a substitute for prevention.

Further reading

Further reading:

Read the Challenges article on KARL →

Discover KARL →

KARLStorage that remembers.