SeizeLOG è uno strumento DFIR per l'acquisizione forense di log, configurazioni, metadati filesystem e contesto runtime da server Linux remoti. Automatizza la fase di evidence collection del framework NIST SP 800-86 (Guide to Integrating Forensic Techniques into Incident Response) e produce un pacchetto probatorio pronto per le fasi successive di examination, analysis e reporting. Un singolo binario Go statico, zero dipendenze, operativo via SSH. Clicca su ogni immagine per ingrandirla.
Cos'è SeizeLOG e quando si usa
SeizeLOG risponde al caso d'uso dominante dell'incident response moderno: il server compromesso è in cloud, in data center o in container, accessibile solo via SSH. L'acquisizione deve avvenire mentre il sistema è in esecuzione (live acquisition), con tracciabilità completa dell'operazione e documentazione della non-dimostrabile inalterazione del sistema target durante la raccolta.
SeizeLOG non è un tool di imaging disco. Non produce una copia 1:1 del filesystem. Produce una raccolta forense mirata dei dati volatili e semi-volatili — log ruotati, processi in memoria, connessioni attive, stato NTP, metadati filesystem — che vengono normalmente sovrascritti o cancellati dopo poche ore. È complementare a SeizeDB (acquisizione contenuto database) e a tool di imaging tradizionali per i casi in cui lo spegnimento del server non è praticabile.
Destinatari: consulenti tecnici d'ufficio (CTU), consulenti tecnici di parte (CTP), incident responder, team SOC / CSIRT, auditor NIS2 e GDPR, auditor ISO/IEC 27001, periti informatici.
Allineamento al framework NIST SP 800-86
NIST SP 800-86 identifica quattro fasi del processo forense: Collection, Examination, Analysis, Reporting. SeizeLOG copre integralmente la Collection e automatizza parti significative di Examination e Analysis:
- Collection — identificazione, labeling, recording e acquisizione dei dati con procedure che preservano l'integrità (hash SHA-256 per file, timestamping RFC 3161, chain of custody). Copre le quattro major categorie di data source NIST: files, operating systems, network traffic, applications.
- Examination — analisi automatica dei log raccolti con metodi documentati: discovery a 3 livelli, categorizzazione automatica per servizio, cross-log correlation.
- Analysis — 10 moduli con findings tipizzati secondo MITRE ATT&CK tactic/technique e CIS Benchmarks, risk scoring con metodologia documentata.
- Reporting — tre formati (TXT autoritativo timestampato, PDF forense, HTML interattivo a 16 pagine) con Executive Summary e Remediation Roadmap.
Architettura: binario Go statico via SSH
SeizeLOG è un singolo eseguibile Linux compilato con CGO_ENABLED=0: gira su qualunque distribuzione senza installazione. Il flusso operativo standard:
scp seizelog-linux-amd64 config.json root@server:/tmp/ ssh root@server "/tmp/seizelog-linux-amd64 --config /tmp/config.json --apikey CHIAVE" scp -r root@server:/tmp/seizelog_* ./ ssh root@server "rm -rf /tmp/seizelog-linux-amd64 /tmp/config.json /tmp/seizelog_*"
Supporto nativo per Debian/Ubuntu, RHEL/CentOS/Rocky/Alma/Fedora/Amazon Linux/Oracle Linux, Alpine (OpenRC), SUSE, Gentoo. Rilevamento automatico via /etc/os-release, adattamento percorsi log (/var/log/auth.log su Debian, /var/log/secure su RHEL, /var/log/messages su Alpine).
Flusso di esecuzione: 8+1 step
Acquisizione reale: 1259 log sources, 1220 file raccolti, 367 MB originali compressi in 42.9 MB, 10 moduli di analisi, report generati, ZIP cifrato — in 3 minuti e 32 secondi.
- Preflight & NTP — verifica sincronia orologio via NTP (offset in ms registrato per opponibilità temporale), rileva modalità root/non-root.
- Log Discovery 3 livelli — L1 percorsi noti; L2 runtime via
lsof/systemd; L3 scan ricorsivo con pattern configurabili. File binari di indice (dovecot.index*, Maildir/mdbox/sdbox) esclusi automaticamente. - Collect Logs — copia, SHA-256 per file, categorizzazione (auth/web/db/mail/system/app), decompressione trasparente di
.gz/.xz/.bz2. - Collect Configurations — configurazioni dei servizi rilevati (SSH, web, database, mail, firewall, cron, sudoers).
- Filesystem Timeline — scan con metadati MACB (mtime/ctime/atime/mode/owner), SUID/SGID, world-writable, eseguibili sospetti in
/tmp. - System Context — uname, os-release, kernel, moduli, processi, interfacce, route, porte, ARP, connessioni, firewall, pacchetti, utenti loggati, cron, timer systemd, servizi attivi/abilitati.
- Security Analysis — 10 moduli (dettaglio sotto).
- Reports — TXT + PDF + HTML (16 pagine), inventario file, marca temporale RFC 3161 su
report.txt. - Escrow & Package — ZIP cifrato AES-256-CBC con chiave dal server, record pending locale.
Server Identification: FQDN, domini ospitati, rete
Identificazione univoca del target secondo i requisiti di chain of custody ISO/IEC 27037: hostname, FQDN primary, hosted domains aggregati da sei sorgenti autoritative con tracciamento della provenienza (system-fqdn, hostname-alias, reverse-dns, letsencrypt, nginx, apache, postfix). Un server multitenant con 15 vhost produce 15 righe con sorgente annotata. Hardware (vendor, product, serial, System UUID), CPU, RAM, uptime, timezone. Infrastruttura di rete: Primary IPv4, Public IPv4 (filtro RFC1918/CGNAT), IPv6 globale, gateway, DNS resolvers, reverse DNS, custom /etc/hosts.
La pagina System del report HTML estende l'Overview con tutto il contesto di sistema: OS release completa, uname, uptime, hardware a basso livello (CPU flags, virtualizzazione, microarchitettura, vulnerabilità hardware note come Spectre/Meltdown).
Executive Summary e Risk Score 0-100
Ogni report si apre con un Executive Summary che sintetizza i risultati dei 10 moduli in un Risk Score 0–100 (media pesata), verdict (CRITICAL/HIGH/MEDIUM/LOW), module status con stato e contributo al punteggio, Priority Recommendations IMMEDIATE con comando da eseguire. Metodologia di scoring documentata e riproducibile — nessun valore arbitrario.
I 10 moduli di analisi forense
Ogni modulo produce un JSON strutturato in analysis/, findings tipizzati con severity (CRITICAL/HIGH/MEDIUM/LOW) e referenze MITRE ATT&CK + CIS Benchmarks.
1. IOC — Indicators of Compromise
Rileva cron persistence (T1053.003), systemd persistence (T1543.002), OpenRC persistence, bashrc anomalies (T1546.004), SSH authorized_keys recenti (T1098.004), webshell PHP con scoring multi-segnale (T1505.003): eval + obfuscation, chr() chain, preg_replace /e, call_user_func, base64 + eval. Whitelist per pannelli di controllo noti (CloudPanel, cPanel, Plesk, Webmin, Virtualmin, HestiaCP, ISPConfig, DirectAdmin) per eliminare falsi positivi.
2. Brute Force Analysis
Tentativi falliti raggruppati per IP/user (MITRE T1110). Soglia FailedAttempts ≥ 5 per classificare un IP come compromesso — un singolo typo non viene più scalato a indicatore. Integrazione fail2ban. Geolocalizzazione con database DB-IP Lite offline per rappresentazione su mappa mondiale.
3. Sessions — SSH + Web Access
Ogni login SSH con timestamp, IP sorgente, paese (GeoIP), metodo di autenticazione, durata. Web access log: percorsi standard + CloudPanel (/home/*/logs/nginx/), Plesk, cPanel, DirectAdmin. Attack detection: SQL injection (T1190), path traversal, XSS, LFI, RCE attempt, scanner activity. Cross-log correlation SSH ↔ web access per identificare attaccanti che usano multipli vettori.
4. CVE Scan
Vulnerabilità note sui pacchetti installati con CVSS score, stato fixed/unfixed, distinzione fra servizi attivi (contribuiscono al Risk Score) e inattivi (documentati ma non contati). Database NVD integrato. Output utile per compliance NIS2 art. 21 (gestione vulnerabilità) e per remediation planning.
5. Attack Surface — Audit CIS Benchmarks
Audit configurazione secondo CIS Benchmarks e MITRE ATT&CK: SSH config (CIS 5.2.x), sudoers (NOPASSWD), PAM (pam_exec, pam_permit), open ports process-aware, capabilities (T1548.001), Docker exposure, kernel hardening (sysctl), NFS/SMB, SSL certs, backup exposure, world-writable, compiler presence. Whitelist per configurazioni standard distro (common-auth Debian, system-auth RHEL, common-auth-pc SUSE) e file distribuiti con CMS (phpMyAdmin, WordPress) per zero falsi positivi.
6. Compromise Assessment
Sei detection methods con correlazione temporale: IP pubblici con fallimenti + successi autenticazione, modifiche a file sensibili entro 30 minuti dal login, integrity check binari via dpkg --verify (T1554), network threats via AbuseIPDB, orphan processes (T1055), malware hash via MalwareBazaar. Soglia FailedAttempts ≥ 5 + deduplica per (IP, user). Whitelist admin_ips nel config. Verdict finale: LIKELY_CLEAN, SUSPICIOUS, COMPROMISED con confidence score.
7. Recon & TLS
Probe TLS sui servizi rilevati: protocollo negoziato, cipher suite, detection di cipher deboli (RC4, 3DES, NULL, MD5). Certificate validation: expiry, self-signed, whitelist snakeoil/panel. HTTP security headers: CSP, HSTS, X-Frame-Options, Referrer-Policy, X-Content-Type-Options. OSINT + Certificate Transparency lookup. Utile per audit pre-GDPR (art. 32 sicurezza del trattamento).
8. Mail Services — stack completo
Copertura: Postfix, Dovecot, Exim, Sendmail, OpenDKIM, OpenDMARC, SpamAssassin, ClamAV, Amavis. Parsing avanzato con supporto !include/.include ricorsivo e blocchi nidificati (protocol imap { }, service { }). Postfix: postconf -n con fallback diretto. Mailbox mbox + Maildir, virtual users da virtual_alias_maps.
Mail log analysis — 26+ metriche con distinzione rigorosa: delivery outcomes (delivered, bounced, deferred, discarded, held, expired), reject categories auto-classificate (relay, RBL/DNSBL, HELO, PTR, sender_domain, recipient_unknown, greylist, rate_limit, milter, SASL), connection events (timeout, rate-limited, too-many-errors, protocol violations), SMTP AUTH SASL, Dovecot IMAP/POP3 login ok/fail per IP, TLS per protocollo e cipher, verdetti DKIM/DMARC/SPF (pass/fail/none/softfail/neutral), AV/spam.
Distinzione mittenti legittimi vs spoofing: top senders = accettati dal postfix/qmgr; top recipients = status=sent; top spoofed senders tracciati separatamente dai reject. Security findings: open relay, TLS disabilitato, cert/key mancanti, SASL senza reject_unauth_destination, banner che rivela versione, VRFY abilitato, Dovecot ssl=no, TLS < 1.2, plaintext auth, OpenDKIM non firmante, chiave privata con permessi leaky, spoof di domini locali nei reject.
9. Processes, Ports & Active Connections
Enumerazione runtime da /proc/[pid]/: PID, PPID, UID, user, comm, cmdline, binary path, flag (deleted). Classificazione automatica in 4 categorie: well-known (~100 daemon riconosciuti + prefissi /usr/lib/postfix/, /usr/lib/dovecot/, /usr/lib/openssh/), user-service, unknown, suspicious (deleted binary T1070.004, /tmp/, /dev/shm/ T1036.005). Listening ports via ss -tulnp con deduplica per tupla (proto, addr, port, pid). Active connections ESTAB/TIME-WAIT via ss -tunpa, direzione classificata inbound/outbound/local.
Findings CRITICAL su processi da directory temporanee (MITRE T1036.005), HIGH su binari cancellati (T1070.004), MEDIUM su root listener non atteso. Whitelist per daemon multi-processo (nginx, apache2, php-fpm, varnishd, cupsd) che mantengono master come root e fanno privilege drop sui worker.
10. GeoIP
Database DB-IP Lite offline per geolocalizzazione degli IP attaccanti. Alimenta la mappa mondiale del report HTML e le tabelle top countries by attack count. Nessuna chiamata di rete durante l'acquisizione (offline-first).
Open Files Snapshot — lsof Volatile Data
Snapshot completo dei file descriptor aperti dal sistema al momento esatto dell'acquisizione, conforme al data source OS volatile di NIST SP 800-86. Cattura via lsof -nP +c 0: file regolari, socket di rete, pipe, dispositivi, librerie mappate in memoria, e file cancellati ancora referenziati da processi (evidence MITRE T1070.004 — Indicator Removal: File Deletion).
Quattro tab consolidate: By process (tabella aggregata con badge colorati per categoria REG/DIR/IPv4/IPv6/unix/FIFO/CHR/BLK/sock e flag network/deleted); By type (distribuzione percentuale); Deleted & held (sezione critica con alert sulla forensic significance); Browse all (filtro full-text). Stat card riassuntive: file descriptor totali, processi con fd aperti, processi con socket di rete, file deleted ancora aperti.
Memory Composition — /proc/meminfo con TOC sticky
Pagina dedicata alla composizione della memoria con donut chart SVG inline (zero dipendenze esterne), divisa in 13 sezioni navigabili tramite indice sticky in cima alla pagina.
Stat card RAM (Total, Used, Buffers+Cache, Available), donut chart per RAM composition e Swap con pressure indicator (OK/MEDIUM/HIGH), Quick figures box (Memory pressure, Dirty pages, Anonymous, Mapped, Slab), output free -h raw, e tabella dettagliata raggruppata per categoria con barra orizzontale e percentuale per ogni voce di /proc/meminfo: Memory totals, Active/Inactive, Swap, Anonymous & file pages, Kernel & slab, Writeback/dirty, Huge pages, Commit. La barra sticky in alto consente di saltare a qualsiasi sezione con un click.
DFIR Artifacts — Shell history, SSH, Login, Persistence, Containers
Pagina consolidata che raccoglie gli artefatti DFIR seguendo le metodologie UAC (Unix-like Artifact Collector), Velociraptor e SANS FOR577. Cinque tab consolidate per artefatti tipicamente sparsi su decine di file.
- Shell history per utente:
.bash_history,.zsh_history,.python_history,.mysql_history,.psql_history,.sqlite_history,.node_repl_history,.lesshst,.viminfo. Forensic gold per ricostruire i comandi eseguiti dall'attaccante (MITRE T1059, T1078). - SSH artifacts per utente:
authorized_keys,known_hosts,config, public keys. Server-sidesshd_config+ drop-in. Le chiavi private non sono mai raccolte. - Login history forensic-grade da binari
wtmp/btmp/lastlogvialast -Faiwx,lastb -Faiwxeutmpdump. - Persistence: cron content full dump (
/etc/crontab,/etc/cron.{d,daily,hourly,weekly,monthly}/*, user crontabs), XDG autostart, at queue. - Containers: snapshot Docker, Podman, crictl, kubectl, lxc.
Integrity Verification & Rootkit Detection
Pagina dedicata alla verifica integrità del sistema e detection rootkit, con sei tab che coprono package verification, anti-rootkit, LD_PRELOAD/getcap, kernel runtime, PAM stack, mail queue.
Package verify — actionable filtering
Su un server con installazioni complesse l'output di dpkg --verify può contenere decine di migliaia di righe, di cui il 99% rumore (file installer estratti in /tmp, package cache, locale, manpage). SeizeLOG produce due output paralleli: il raw completo per la forensic completeness e una versione actionable filtrata e categorizzata per severity (CRITICAL/HIGH/MEDIUM/LOW).
Il filter rimuove path effimeri (/tmp/, /var/tmp/, /run/, /dev/shm/), package cache (/var/cache/{apt,dnf,yum,zypper}), locale e manpage. Ogni voce restante viene categorizzata: CRITICAL (binari di sistema in /usr/bin, /usr/sbin, /lib — candidati rootkit T1554), HIGH (auth/persistence: sudoers, pam.d, security, systemd, cron.daily), MEDIUM (config /etc generic), LOW (user-data). Output con STATUS CODE LEGEND che spiega il formato 9-character verify code (S/M/5/D/L/U/G/T/P) e l'interpretazione human-readable per ogni riga.
Kernel runtime — dmesg, sysctl, modules, mounts
Stato runtime del kernel: ring buffer messaggi via dmesg -T (OOM kill, hardware errors, USB plug/unplug, segfaults), sysctl -a snapshot completo dei parametri kernel runtime, lsmod moduli caricati, /proc/swaps, /proc/mounts, /etc/fstab. Utile per audit kernel hardening, identificazione anomalie hardware e rilevamento moduli kernel sospetti (rootkit kernel-mode T1014).
PAM stack full dump
Snapshot completo di /etc/pam.d/ file per file. Il modulo Attack Surface ha già scansionato per pattern sospetti (pam_exec, pam_permit non-standard); questa pagina mostra il contenuto integrale di ogni file PAM per analisi forense manuale, con whitelist per stack standard Debian/Ubuntu (common-auth), RHEL (system-auth), SUSE (common-auth-pc). Permette di documentare in perizia la configurazione effettiva di autenticazione (MITRE T1556 — Modify Authentication Process).
Log Explorer e Filesystem Timeline
Log Explorer: naviga i file di log raccolti filtrati per categoria (auth, web, db, mail, system, app). Per ogni file: path originale sul target, categoria, dimensione, SHA-256 verificabile. Servizi rilevati nell'acquisizione visibili come tag filter.
Filesystem Timeline: calendario visuale di attività giornaliera. Ogni giorno mostra conteggi per categoria (Security, Auth Success/Failed, Config, Package Update, Suspicious, Hits, Normal). Cliccando un giorno si espande la timeline eventi — utile per identificare l'intervallo temporale di una compromissione.
report.txt: il documento autoritativo con RFC 3161
Nella filosofia di SeizeLOG il file ZIP è solo un contenitore di trasporto: il documento legalmente autoritativo è report.txt, accompagnato dal token RFC 3161 report.txt.tsr.
report.txt contiene header (UUID, date UTC, versione tool, operatore, fascicolo), Server Identification completa, Executive Summary, Acquisition File Inventory (ogni JSON/TXT/PDF con path, size, SHA-256, purpose description), chain of custody dichiarazione. L'inventory rende report.txt autosufficiente: chiunque può verificare l'integrità di ogni file del pacchetto partendo dal solo report autoritativo.
La marca temporale RFC 3161 è applicata direttamente ai byte di report.txt: il token TSR dimostra data certa opponibile a terzi. Provider freetsa (default, gratuito, non qualificato) o infocert (qualificato eIDAS art. 41, +2 slot). Funziona anche senza API key (FreeTSA è pubblica).
Remediation Roadmap
Piano d'azione operativo con priorità (IMMEDIATE ≤ 24h, SHORT ≤ 1 settimana, MEDIUM ≤ 1 mese), categoria (IOC, CVE, Attack Surface, Mail, Processes), severity dell'evidence motivante, comando concreto eseguibile (es. sudo apt-get install --only-upgrade nginx), riferimento CIS Benchmark + MITRE ATT&CK tactic. Output utilizzabile direttamente come piano di remediation per NIS2 art. 21.
Conformità normativa: NIS2, GDPR, quadro italiano
Direttiva NIS2 (UE 2022/2555) e D.Lgs 138/2024
La NIS2 è stata recepita in Italia con D.Lgs 138/2024, in vigore dal 16/10/2024. Dal 1° gennaio 2026 i soggetti NIS2 hanno l'obbligo di notificare al CSIRT Italia / ACN gli incidenti significativi secondo una procedura in tre fasi:
- Pre-notifica / Early Warning — entro 24 ore dalla conoscenza dell'incidente significativo: notifica rapida senza dettagli tecnici completi.
- Notifica di Incidente — entro 72 ore: aggiornamento con assessment iniziale di severity, impatto, indicators of compromise.
- Report finale — entro 30 giorni: descrizione dettagliata dell'incidente, cause, mitigazioni adottate.
Il pacchetto SeizeLOG fornisce direttamente gli IoC richiesti nella notifica a 72h: ogni indicator è classificato con severity, MITRE ATT&CK technique, timestamp. I findings del Compromise Assessment e dell'Attack Surface alimentano l'assessment iniziale. La Remediation Roadmap è la base del report finale a 30 giorni.
GDPR art. 33 — Notifica al Garante Privacy
Il Titolare del Trattamento che subisce una violazione di dati personali ha l'obbligo di notifica al Garante per la protezione dei dati personali senza ingiustificato ritardo e comunque entro 72 ore dalla conoscenza, salvo che la violazione sia improbabile comporti un rischio per diritti e libertà delle persone. La notifica si effettua tramite la procedura telematica obbligatoria su servizi.gpdp.it/databreach/, operativa dal 1° luglio 2021.
Se il rischio è elevato, occorre notificare anche gli interessati ex art. 34 GDPR. SeizeLOG produce evidence documentali — hosted domains (quali servizi sono coinvolti), brute force sources (quali IP hanno attaccato), compromise assessment (se l'attaccante è entrato), mail spoofing (se è stata tentata esfiltrazione via mail) — direttamente utilizzabili nella descrizione della natura della violazione richiesta dal Provvedimento Garante 30/07/2019 [9126951].
Allineamento con framework forensi internazionali
- NIST SP 800-86 — Guide to Integrating Forensic Techniques into Incident Response. SeizeLOG automatizza la fase Collection (4-step process: identify, label, record, acquire) preservando l'integrità dei dati.
- ISO/IEC 27037:2012 — Identificazione, raccolta, acquisizione e preservazione di prove digitali. SeizeLOG è conforme ai principi di repeatability, reproducibility, auditability.
- ISO/IEC 27042:2015 — Analisi e interpretazione delle prove digitali.
- ISO/IEC 27035 — Incident management.
- MITRE ATT&CK — ogni finding mappato a tactic/technique.
- CIS Benchmarks — Attack Surface e hardening.
Riferimenti italiani
- D.Lgs 138/2024 — recepimento NIS2
- D.Lgs 82/2005 art. 20 — efficacia probatoria dei documenti informatici
- L. 48/2008 — ratifica Convenzione di Budapest sul cybercrime
- Art. 234 c.p.p. — ammissibilità delle prove documentali informatiche
- Regolamento eIDAS art. 41-42 — validazione temporale elettronica qualificata
- GDPR art. 32-34 — sicurezza, notifica al Garante, comunicazione agli interessati
- Provvedimento Garante Privacy 30/07/2019 n. 9126951 — notifica violazioni dati personali
Inventario file con SHA-256 e purpose
Il blocco Acquisition File Inventory in report.txt è il cuore del valore probatorio. Tabella filePurposeTable mappa ~40 pattern di file a descrizione semantica:
analysis/ioc-report.json
size: 3.9 KB
sha256: c0a4377781fdd0705fd83b397d4efc00edab6cc90feafdef7e98515bcf7ea757
purpose: IOC indicators (cron, systemd, bashrc, webshells, SUID, SSH keys)
analysis/processes-report.json
size: 87.2 KB
sha256: ...
purpose: Processes, listening ports, active TCP/UDP connections
operations-log.txt
size: 5.0 KB
sha256: ...
purpose: Per-step operations log with NTP offsets and timings
Tariffazione a slot e marca temporale qualificata
1 MB di pacchetto compresso = 1 slot (minimo 1 slot). Marca temporale InfoCert qualificata eIDAS: +2 slot. Gli slot vengono scalati solo al momento dello sblocco (non al momento dell'acquisizione). --dry-run per stima preventiva.
Supporto distribuzioni, modalità root/non-root, admin_ips
Debian, Ubuntu, RHEL, CentOS, Rocky, Alma, Fedora, Amazon Linux, Oracle Linux, Alpine (OpenRC), SUSE, Gentoo. Rilevamento automatico via /etc/os-release. Whitelist distro-specific per cron (dnf-automatic, yum-cron, anacron, updatedb, mandb, sysstat, zypper) e PAM (common-auth Debian, system-auth RHEL, common-auth-pc SUSE).
Modalità --notroot: acquisisce tutto ciò accessibile all'utente, documenta in system/not-collected.txt cosa non è stato raccolto. Adatto a container e account limitati.
Config admin_ips: lista IP pubblici dell'operatore (home ISP, office VPN) che bypassano l'heuristic "suspicious login from public IP" del Compromise Assessment.