
Un motore di ricostruzione forense per la risposta agli incidenti nel cloud e nell'identità.
Un motore di ricostruzione forense per la risposta agli incidenti su cloud e identità.
Dati telemetria frammentati di cloud, SaaS e identità — log del control-plane, eventi di accesso, attività di token e consenso — NV ricostruisce come un'intrusione si è molto probabilmente mossa tra account e servizi, enumera gli altri percorsi più probabili che avrebbe potuto seguire e riporta ogni passo con una confidenza calibrata e spiegabile. Si rifiuta di affermare ciò che le prove non possono sostenere.
Il rilevamento ti dice che qualcosa è successo. Nimbus Vestige ti dice come — e cos'altro.
Le intrusioni moderne non "sfondano". Effettuano l'accesso. L'identità è ormai il principale vettore d'attacco, coinvolta nella grande maggioranza delle indagini IR sul cloud, e la maggior parte delle intrusioni attraversa più superfici — identità più cloud più SaaS più endpoint. La telemetria che le registra è frammentata e incoerente, il che costringe già i responder a ricostruire la storia a mano da dati incompleti.
Quella ricostruzione manuale è lenta e fallisce in modo prevedibile: il responder si ancora alla prima narrazione plausibile e manca quella reale. NV automatizza la ricostruzione e attacca direttamente quella modalità di fallimento presentando sempre lo spazio classificato dei percorsi plausibili, non una singola storia.
Fondamentalmente, NV lo fa con l'onestà come prodotto. Il nemico dichiarato del mercato è la confidenza black-box — uno strumento che afferma una conclusione senza mostrare il proprio lavoro. Ogni numero prodotto da NV è riconducibile alle prove specifiche che lo hanno guadagnato, e tutto ciò che non può sostenere viene omesso anziché indovinato.
NV non è un rilevatore, uno scanner, un auditor o un esecutore di attacchi. Quegli strumenti ti dicono che qualcosa è successo e lo misurano. NV lavora all'indietro — ricostruzione abduttiva del meccanismo a partire da pattern, attraverso un patrimonio identitario frammentato.
Il blue team si rigenera; il red team si commoditizza. Il tooling offensivo trova un insieme finito e correggibile di falle e si sta integrando nelle pipeline automatizzate di sicurezza CI/CD. Ricostruire come è avvenuta un'intrusione non si esaurisce mai — gli attaccanti continuano a inventare, quindi il bisogno è permanente e auto-rinnovantesco.
Il motore è indipendente dal substrato. La logica centrale — ricostruire il meccanismo dai pattern, con confidenza calibrata e una barriera di arresto — è impegnata prima su cloud/identità, ma si trasferisce poi a rete, endpoint e OT. L'obiettivo può cambiare senza riscrivere la tesi.
La ricostruzione abilita l'irrobustimento. Una volta che sai come sono entrati — e quali altre porte erano aperte — costruisci le difese. I percorsi non intrapresi ma plausibili sono un backlog di irrobustimento, spesso più prezioso della ricostruzione stessa, perché la maggior parte delle violazioni sfrutta esposizioni prevenibili, non tecniche d'attacco innovative.
Degrada con grazia sull'intrusione nuova — proprio l'incidente che conta di più. Un motore a firme/regole diventa cieco su uno zero-day; il nucleo abduttivo di NV produce comunque un percorso più probabile, onestamente segnalato come a confidenza inferiore.
L'onestà è un fossato. La confidenza calibrata e basata sui casi con alternative classificate è esattamente ciò che il mercato dice di volere e ciò che i concorrenti black-box strutturalmente non possono offrire senza una riprogettazione.
Log grezzi del provider → grafo normalizzato di eventi/entità → motore di ricostruzione → JSON → GUI.
O365 / Entra audit logs nv_extract_identity_events.py
AWS CloudTrail (IAM/STS/S3) nv_extract_cloudtrail_events.py (ingest + normalize)
▼
normalized identity events (JSONL) ← one event model, any substrate
│ nv/graph.py (typed per-actor timelines)
▼
reconstruction engine
├─ nv/patterns.py known layer: ATT&CK identity pattern library
├─ nv/providers.py provider packs: per-substrate op→ATT&CK vocab (Entra + AWS)
├─ nv/validation.py Phase 3: provenance + integrity gate on every pattern
├─ nv/feeds.py live ATT&CK STIX / TAXII / Sigma clients + scheduler
├─ nv/confidence.py evidence-corroboration scorer (calibratable weights)
├─ nv/calibration.py fit + measure confidence against labeled ground truth
├─ nv/reconstruct.py most-likely chain + ranked competing paths + trust floor
└─ nv/scope.py authorized-scope gate (refuses unauthorized tenants/accounts)
│ run_nv.py
▼
reconstruction.json ──► nv_gui.html (embedding canvas + two-column view + trust slider)
La GUI è un puro livello di visualizzazione — esegue il rendering dell'output del motore e consente all'analista di spostare il livello minimo di affidabilità. Non contiene alcuna logica di ricostruzione propria.
Ogni passaggio porta con sé una confidenza in [0, 1], costruita tramite corroborazione delle evidenze:
confidence = per-technique base rate
+ bonus for each independent corroborating signal
(source IP, device, successful outcome, temporal adjacency, broad-consent flags)
− penalty for missing signals (e.g. no source IP to corroborate origin)
I punteggi dei percorsi compongono i loro collegamenti tramite media geometrica, così un collegamento debole trascina onestamente verso il basso un percorso anziché essere mediato e annullato.
Ogni peso sopra indicato — i tassi di base per tecnica, i bonus per segnale, le penalità per dati mancanti — risiede in un'unica tabella PARAMS in nv/confidence.py. Questi sono i prior della v1 di NV, e sono calibrabili: nv/calibration.py può riadattarli rispetto a una ground truth etichettata e il motore caricherà il risultato, ricadendo sui prior della v1 quando non viene fornita alcuna calibrazione (vedi sotto).
La regola di sospensione, integrata nel contratto di output del motore — non solo nell'interfaccia utente. Sotto la soglia, un passo viene sospeso. Trascinare la soglia è il compromesso tra onestà e copertura reso concreto: verso l'alto per una modalità rigorosa/ad alta affidabilità, verso il basso per una modalità permissiva/ad alta copertura. La soglia predefinita è una decisione editoriale su dove si colloca NV prima che l'analista lo tocchi.
I pesi della v1 sono difendibili, ma sono prior. nv/calibration.py li ottimizza rispetto a una ground truth etichettata — eventi per i quali sappiamo quali facevano parte dell'intrusione e quali erano benigni — e, cosa cruciale, misura se l'ottimizzazione ha effettivamente aiutato, così una calibrazione viene adottata solo se riduce l'errore di calibrazione anziché limitarsi a spostare i numeri.