// 4 ZERO-DAY · 6 CVE · 9 EXPLOIT · 1 ADVISORY NELLE ULTIME 24H→
Il corso SANS FOR577 ha integrato nel materiale del giorno 5, l'8 ottobre 2026, due script Python per l'analisi forense dei residui lasciati dagli agenti AI di coding.

Il corso SANS FOR577 ha integrato nel materiale del giorno 5, l'8 ottobre 2026, due script Python per l'analisi forense dei residui lasciati dagli agenti AI di coding. Gli strumenti, rilasciati da Jim Clausing, istruttore del corso, estraggono dati dai database SQLite e dai file di log di OpenCode e Hermes senza alterare l'evidenza originale. È la prima volta che un framework didattico di incident response affronta sistematicamente la tracciabilità delle azioni compiute da agenti AI autonomi sulle workstation degli sviluppatori.

Punti chiave
  • Clausing ha pubblicato opencode-chat-replay.py e hermes_forensic_extract.py nel repository GitHub clausing/scripts.
  • Entrambi gli script creano un snapshot temporaneo del database SQLite inclusi i file -wal e -shm prima dell'analisi, preservando l'evidenza originale.
  • Il primo strumento ricostruisce sessioni chat, chiamate a tool e payload API dal database di OpenCode; il secondo estrae dati da tre fonti distinte di Hermes: state.db, request_dump_*.json e log applicativi.
  • Gli script richiedono Python 3.10 o successivo e utilizzano esclusivamente la standard library, eliminando dipendenze esterne.
  • 8 agenti AI coding sono trattati nel corso aggiornato: Claude Code, Codex, Gemini CLI, Cursor, Copilot, Warp, Windsurf e Qwen Code.

Il paradosso dell'autoproduzione forense

Clausing ha reso esplicito un aspetto che complica la lettura tecnica di questi strumenti. Gli agenti AI stessi hanno generato il codice che ora serve a investigarli. "I absolutely had OpenCode write the opencode script and Hermes wrote the hermes script", ha scritto nel post del SANS Internet Storm Center. Questo meccanismo di autoproduzione introduce una variabile non quantificabile nel dossier: la tracciabilità del codice sorgente fino all'agente generativo, e non a un autore umano tradizionale.

La differenza tra i due script, nota lo stesso autore, deriva proprio da questa provenienza eterogenea. OpenCode ha strutturato il proprio strumento con un renderer di output flessibile in Markdown, JSON e JSONL, con un cap predefinito di 2.000 caratteri per il contenuto delle chiamate a tool. Hermes ha invece prodotto un estrattore orientato a JSON Lines con campo _extraction_type per la categorizzazione dei record.

"These are forensic review tools, not tools for running or replaying an agent's actions"
— Jim Clausing, SANS ISC Diary

Cosa estraggono gli script dal filesystem

opencode-chat-replay.py interroga il percorso ~/.local/share/opencode/opencode.db, adattandosi a due schemi relazionali: la struttura storica con tabelle separate message e part, e la tabella consolidata session_message introdotta in versioni più recenti. L'output ricostruisce la sequenza temporale delle richieste utente, delle risposte del modello e delle invocazioni di tool con i relativi payload.

hermes_forensic_extract.py lavora su tre superfici distinte: il database SQLite ~/.hermes/state.db, i file di dump delle richieste ~/.hermes/sessions/request_dump_*.json e i log testuali ~/.hermes/logs/*.log. La combinazione delle tre fonti permette di correlare lo stato interno dell'agente con le tracce di rete e gli eventi applicativi.

Entrambi gli script implementano la funzione snapshot_db, che copia il database e i file associati in una directory temporanea prima dell'apertura. Il meccanismo è read-only rispetto all'evidenza originale: il database sorgente non viene mai aperto in modalità che ne alteri il journal o il WAL.

Cosa fare adesso

Gli analisti che gestiscono workstation con agenti AI installati devono verificare la presenza dei percorsi ~/.local/share/opencode/opencode.db e ~/.hermes/state.db nelle immagini forensi acquisite. Questi file rappresentano fonti primarie di evidenza che rischiano di essere sovrascritti o ignorati se non inclusi esplicitamente nelle procedure di collection.

Per l'analisi, è necessario Python 3.10 o successivo. Gli script non richiedono installazione di dipendenze esterne: è sufficiente scaricare i file dal repository clausing/scripts ed eseguirli sulla copia di lavoro. Il parametro --max-tool-output 0 rimuove il cap di 2.000 caratteri in opencode-chat-replay.py, utile quando i payload delle chiamate a tool superano la soglia predefinita.

Il formato JSONL/NDJSON di hermes_forensic_extract.py, con il campo _extraction_type, si presta all'importazione in strumenti di analisi strutturata come jq o piattaforme SIEM che supportano parsing di JSON Lines. L'output Markdown di opencode-chat-replay.py è invece ottimale per report leggibili da includere nella documentazione di indagine.

La funzione snapshot_db deve essere considerata un requisito minimo, non opzionale: anche su filesystem con journaling attivo, l'apertura del database SQLite in modalità standard può alterare i file -wal e -shm, compromettendo la integrità temporale dell'evidenza.

Il contesto del corso FOR577 e i suoi limiti

I nuovi contenuti del giorno 5 del corso FOR577 trattano 8 agenti AI di coding: Claude Code, Codex, Gemini CLI, Cursor, Copilot, Warp, Windsurf e Qwen Code, oltre ai due per cui esistono script specifici. La scelta di concentrare il lavoro forense su OpenCode e Hermes riflette la loro integrazione nel materiale didattico, ma il dossier non quantifica la loro diffusione rispetto agli altri sei.

Non emergono nel brief casi d'uso documentati di questi script in indagini reali. La loro natura è dichiaratamente didattica e sperimentale. Allo stesso modo, la data esatta dei commit nel repository GitHub non è attestata nel post SANS, se non per inferenza dal riferimento temporale 20261008.

Domande frequenti

Gli script possono essere usati in un tribunale come prova?

Il dossier non affronta la validità legale degli strumenti. Il meccanismo di snapshot read-only gestisce la catena di custodia tecnica, ma la fonte non cita processi di validazione forense o certificazioni di laboratorio.

Perché solo Python 3.10+?

Secondo il post SANS, la scelta deriva dall'uso di caratteristiche della standard library che richiedono quella versione minima. Non è specificato quali API in particolare impongano questo vincolo.

Gli altri agenti AI lasciano tracce simili?

Il corso FOR577 ne tratta 8 oltre a OpenCode e Hermes, ma il dossier non indica se per essi esistano strumenti di estrazione equivalenti o se i loro formati di storage siano documentati pubblicamente.

Le informazioni sono basate sulla fonte citata e aggiornate al momento della pubblicazione.

Fonti


Fonti e riferimenti
  1. isc.sans.edu
  2. github.com