Analisi della sequenza temporale · Lezione 4 di 5
Pivoting e riscontro incrociato tra fonti
12 min di lettura
Il Modulo 2 ha trattato ciascun artefatto di Windows singolarmente; la Lezione 3.3 li ha riuniti in una super timeline. Questa lezione illustra il metodo che trasforma le righe in risultanze: eseguire il pivoting attraverso identificatori condivisi, esaminare gli eventi vicini a un punto di ancoraggio, riscontrare ogni fatto chiave in una fonte indipendente e dichiarare con trasparenza le discrepanze e il grado di confidenza, ossia ciò che verificano le domande dell'esame CFX sulla correlazione.
Punti di pivoting
Un punto di pivoting è un valore che compare in più di un artefatto e che, pertanto, li collega.
| Punto di pivoting | Dove compare (esempi) | Avvertenza |
|---|---|---|
| Nome o percorso del file | LNK, Jump List, MRU, Shellbag, file referenziati in Prefetch, $MFT, $UsnJrnl, cronologia del browser | I nomi non sono univoci; le lettere di unità vengono riutilizzate |
| Voce MFT e numero di sequenza | Record di $MFT, $UsnJrnl e $LogFile, elementi della shell nei file LNK con destinazioni NTFS | I numeri delle voci vengono riutilizzati dopo l'eliminazione; il numero di sequenza distingue i diversi utilizzi |
| Numero di serie del volume (VSN) | VBR, LinkInfo dei file LNK, Jump List, informazioni sul volume di Prefetch, Vbr0 di Partition/Diagnostic 1006 | Cambia quando il volume viene riformattato |
| Numero di serie del dispositivo | USBSTOR, USB, dati di MountedDevices, setupapi.dev.log, 1006, eventi Kernel-PnP | Un ID il cui secondo carattere è & è generato da Windows |
| SID utente | ProfileList, chiave BAM, UserId di SRUM, registri eventi, $Recycle.Bin\<SID> | Anche un hive specifico dell'utente identifica l'utente tramite il profilo da cui proviene |
| ID di accesso | Security 4624, 4672, 4688, 4634 | Univoco solo fino al riavvio successivo |
| Nome o percorso del processo | Prefetch, Amcache, BAM, Shimcache, AppId di SRUM, 4688 | Un nome non costituisce un'identità; associarlo al percorso e a un hash |
| SHA-1 o SHA-256 | FileId di Amcache (SHA-1), file nelle immagini, threat intelligence | Per i file di dimensioni superiori a 31.457.280 byte, Amcache calcola l'hash solo dei primi 31.457.280 byte |
| Indirizzo IP | IpAddress di 4624, eventi RDP, log di firewall e proxy | NAT e DHCP modificano chi si trova dietro un indirizzo |
| Finestra temporale | Ogni fonte | Risoluzione, fuso orario e ritardo di scrittura variano in base alla fonte |
La tecnica di pivoting
- Ancoraggio. Partire da qualcosa di noto e specifico: un avviso, un file menzionato nel caso, un dispositivo, un account.
- Estrarre ogni identificatore contenuto nel punto di ancoraggio: numeri di serie, GUID, percorsi, SID, hash, orari.
- Cercare ogni identificatore in tutte le fonti, non solo dove ci si aspetta di trovarlo: nella super timeline, nei CSV prodotti dal parsing e mediante una ricerca per parole chiave nelle immagini grezze.
- Aggiungere ogni nuovo identificatore a un elenco di lavoro, annotandone la provenienza.
- Ripetere finché le nuove ricerche non restituiscono più nulla di pertinente al quesito.
L'elenco di lavoro costituisce la traccia di verifica. Preferire identificatori specifici (un numero di serie, un VSN, un hash) a quelli generici, come report.docx o la lettera E:.
Prossimità temporale
Quando gli identificatori si esauriscono, eseguire il pivoting in base al tempo: elencare tutto ciò che rientra in una finestra attorno al punto di ancoraggio, ad esempio ±10 minuti attorno all'ultimo collegamento di un dispositivo. Dimensionare la finestra in base alla fonte con la risoluzione più grossolana tra quelle coinvolte: secondi per le fonti FILETIME, 2 secondi per gli orari di scrittura FAT, circa un'ora per SRUM.
La prossimità suggerisce una relazione, ma non la dimostra: Windows scrive numerosi eventi in background ogni minuto e uno qualsiasi di essi può trovarsi vicino al punto di ancoraggio per caso. Un programma eseguito due minuti dopo un collegamento USB è una pista; diventa una risultanza quando un identificatore condiviso collega i due eventi, ad esempio un riferimento Prefetch a un percorso sul volume con quel VSN. Descrivere la prossimità come tale ("6 minuti dopo il collegamento del dispositivo"), mai come causa.
Riscontro incrociato e indipendenza
Una risultanza è solida quando due fonti indipendenti la registrano. Indipendenti significa che meccanismi diversi scrivono record diversi, in modo che un errore, una lacuna o una manomissione in una fonte non influisca allo stesso modo sull'altra. Due parser applicati a un unico file costituiscono una sola fonte verificata due volte: ciò convalida lo strumento, non l'evento.
| Risultanza | Fonte 1 | Fonte 2 | Indipendenza |
|---|---|---|---|
| File aperto | Ultimo accesso in DestList della Jump List | Orario di modifica $SI del file LNK recente | Parziale: file separati scritti dalla shell per un'unica registrazione di elemento recente |
| Programma eseguito | Orario dell'ultima esecuzione in Prefetch | Valore BAM sotto il SID dell'utente | Buona: il prefetcher e il driver BAM scrivono in archivi diversi |
| Ultimo collegamento USB | Ultimo collegamento in USBSTOR 0066 | Partition/Diagnostic 1006 | Buona: proprietà del dispositivo nel registro di sistema rispetto a un record del registro eventi |
| Primo collegamento USB | USBSTOR 0065 | Inizio della sezione in setupapi.dev.log | Buona: FILETIME del registro di sistema (UTC) rispetto a un log testuale (ora locale) |
| Dati inviati | BytesSent di SRUM | Cronologia del browser, log del proxy o di audit del cloud | Buona: contatore delle risorse rispetto a un record applicativo o di rete |
La prima coppia è la più debole: una sola operazione di pulizia o impostazione di privacy le rimuove entrambe, quindi aggiungere un terzo meccanismo, come l'elenco MRU dell'applicazione stessa. Due valori concordano quando la loro differenza è inferiore alla risoluzione della fonte meno precisa più il suo ritardo di scrittura noto.
Quando le fonti non concordano
Le discrepanze sono solitamente dovute ai meccanismi di registrazione:
- Risoluzione. Un orario di scrittura DOS ha incrementi di 2 secondi; una riga SRUM copre un intervallo di circa un'ora. Un orario DOS e un FILETIME che differiscono di meno di 2 secondi non costituiscono una discrepanza.
- Ora locale rispetto a UTC. Gli orari DOS di FAT e setupapi.dev.log sono in ora locale; i FILETIME di registro di sistema, EVTX, LNK e Prefetch sono in UTC. Una differenza pari esattamente allo scostamento del fuso orario è il segnale caratteristico.
- Ritardi di scrittura. Shimcache viene scritto all'arresto, SRUM viene salvato su disco circa una volta all'ora, un file Prefetch viene scritto circa 10 secondi dopo l'avvio del programma e il LastWrite di una chiave riflette la sua ultima modifica, che può essere successiva all'evento di interesse.
- Modifiche dell'orologio. Un salto dell'orologio di sistema (evento Kernel-General 1, Security 4616) sposta tutto ciò che è stato scritto prima di esso. La Lezione 3.5 mostra come misurarlo e correggerlo.
Dichiarare apertamente ogni discrepanza: entrambi i valori e le fonti, la spiegazione, il valore su cui ci si basa e il motivo. Non omettere mai un valore che non si adatta; se non è possibile spiegarlo, dichiararlo e ridurre il grado di confidenza.
Formulare il grado di confidenza
ISO/IEC 27042 fornisce indicazioni sull'analisi e sull'interpretazione delle prove digitali. In pratica: separare ciò che un artefatto registra da ciò che si deduce, considerare le alternative e scegliere parole adeguate al supporto probatorio.
| Formulazione | Quando usarla | Esempio |
|---|---|---|
| "registra" | Per riportare ciò che contiene una fonte | "La voce DestList registra un ultimo accesso alle 13:54:29Z." |
| "è compatibile con" | Le prove sono coerenti, ma rimangono alternative ragionevoli | "La riga SRUM è compatibile con un caricamento dell'archivio." |
| "indica" | Forte supporto da una o più fonti; alternative improbabili ma non escluse | "Il file LNK e la Jump List indicano che il file è stato aperto dal volume USB." |
| "dimostra" | Fonti indipendenti concordano e le alternative sono state verificate ed escluse | "Il VSN in 1006 e nell'immagine dimostra che il volume acquisito era su quel dispositivo." |
Gli artefatti registrano account e processi, non persone: scrivere "l'account di ana", non "ana", a meno che altre prove collochino la persona alla tastiera.
Timeline del caso e super timeline
La super timeline (Lezione 3.3) contiene milioni di righe. La timeline del caso elenca solo gli eventi che rispondono al quesito, solitamente alcune decine di righe, ciascuna con l'orario UTC alla precisione della fonte, l'evento descritto in parole semplici, la fonte (file più record, offset o percorso della chiave), la fonte di riscontro e qualsiasi nota sulle discrepanze. Includere gli eventi che indeboliscono l'ipotesi. Si ricerca nella super timeline; si presenta la timeline del caso.
Esempio svolto: furto di dati il 2026-03-14
Un file di budget è comparso all'esterno dell'azienda. Il pacchetto contiene una raccolta di triage di Windows 11 (ActiveTimeBias 180, quindi UTC = ora locale + 3 h) e un'immagine E01 di un'unità USB FAT32. Il punto di ancoraggio è il numero di serie dell'unità, 4C530001230411109384.
| Passaggio | Fonte | Identificatore utilizzato | Nuovo identificatore trovato | Orario (UTC) |
|---|---|---|---|---|
| 1 | SYSTEM Enum\USBSTOR\...\4C530001230411109384&0, proprietà 0066 | Numero di serie del dispositivo (punto di ancoraggio) | Orario dell'ultimo collegamento | 2026-03-14T13:52:05Z |
| 2 | Partition/Diagnostic 1006 | Numero di serie del dispositivo | Byte di Vbr0 all'offset 0x43 4D 3C 2B 1A: VSN 1A2B-3C4D | 2026-03-14T13:52:06Z |
| 3 | SYSTEM MountedDevices | Numero di serie del dispositivo all'interno del percorso del dispositivo | GUID del volume {a9d9c980-…}, lettera E: | nessuno |
| 4 | C:\Users\ana\NTUSER.DAT MountPoints2; ProfileList | GUID del volume | Account ana, SID S-1-5-21-…-1001 | LastWrite della chiave 2026-03-14T13:52:09Z |
| 5 | Recent\budget-q3.xlsx.lnk di ana e Jump List di Excel | VSN 1A2B3C4D, tipo di unità rimovibile | Percorso E:\Clients\budget-q3.xlsx | DestList 2026-03-14T13:54:29Z; modifica LNK 13:54:30Z |
| 6 | Prefetch 7ZG.EXE-<hash>.pf; BAM sotto …-1001 | Nome BUDGET-Q3.XLSX; VSN nelle informazioni sul volume | Programma 7zG.exe; i file referenziati includono \CLIENTS\Q3-FILES.7Z | Ultima esecuzione 2026-03-14T13:58:41Z; BAM 13:58:49Z |
| 7 | Immagine USB, voce di directory FAT32 | Nome q3-files.7z; VSN 1A2B-3C4D | Dimensione 64.108.233 byte | Orario di scrittura 2026-03-14T13:59:12Z (convertito) |
| 8 | Utilizzo dei dati di rete di SRUM | SID …-1001; finestra 13:52Z–14:31Z | AppId chrome.exe; BytesSent 66.912.404 | Intervallo da 13:31:09Z a 14:31:09Z |
| 9 | History di Chrome di ana, tabelle visits e urls | Processo chrome.exe; finestra | URL https://transfer.example.com/upload | 2026-03-14T14:09:47Z |
I passaggi 1 e 2 concordano entro un secondo, così come gli orari DestList e LNK nel passaggio 5; gli orari Prefetch e BAM nel passaggio 6 differiscono di 8 secondi, entro la normale variabilità.
La discrepanza nel passaggio 7. La word dell'orario di scrittura all'offset 0x16 della voce di directory è 66 57, letta come 0x5766, e la word della data all'offset 0x18 è 6E 5C, letta come 0x5C6E. Data: 0x5C6E >> 9 = 46, quindi 1980 + 46 = 2026; (0x5C6E >> 5) & 0xF = 3; 0x5C6E & 0x1F = 14. Ora: 0x5766 >> 11 = 10; (0x5766 >> 5) & 0x3F = 59; (0x5766 & 0x1F) × 2 = 6 × 2 = 12 s. Uno strumento che etichetta questo valore come UTC mostra 2026-03-14T10:59:12Z, quasi tre ore prima dell'ultimo collegamento dell'unità e in contrasto con il passaggio 6. FAT memorizza l'ora locale, quindi la correzione mancante è lo scostamento: 10:59:12 + 3 h = 13:59:12Z, 31 secondi dopo l'avvio di 7zG.exe. La timeline del caso conserva entrambi i valori con questa spiegazione.
Passaggio 8. BytesSent supera la dimensione dell'archivio di 66.912.404 − 64.108.233 = 2.804.171 byte (circa il 4,4 %), plausibile per l'overhead e altre attività di navigazione. SRUM non può indicare quale file sia stato inviato, né quando.
Passaggio 9. Il visit_time di Chrome conta i microsecondi trascorsi dal 1601 (Lezione 3.1). Il valore 13.417.970.987.412.318 ÷ 1.000.000 = 13.417.970.987,412318 s; − 11.644.473.600 = Unix 1.773.497.387,412. Sottraendo 1.773.446.400 (2026-03-14T00:00:00Z) rimangono 50.987 s = 14 h 09 min 47 s, quindi 2026-03-14T14:09:47.412Z.
Risultanza dichiarata. "Il dispositivo con numero di serie 4C530001230411109384 è stato collegato per l'ultima volta alle 2026-03-14T13:52:05Z (USBSTOR, riscontrato da Partition/Diagnostic 1006). Il suo volume, VSN 1A2B-3C4D, è stato montato nella sessione dell'account ana (SID S-1-5-21-…-1001). Il file LNK e la Jump List indicano che questo account ha aperto E:\Clients\budget-q3.xlsx da quel volume alle 13:54:29Z. Prefetch e BAM dimostrano che 7zG.exe è stato eseguito alle 13:58:41Z, sotto tale account secondo BAM; q3-files.7z sul volume acquisito è stato scritto per l'ultima volta alle 13:59:12Z. SRUM e la cronologia del browser sono compatibili con un caricamento dell'archivio tramite chrome.exe tra le 14:09:47Z e le 14:31:09Z, ma non identificano il file inviato." Prefetch mostra che 7zG.exe ha referenziato entrambi i file; solo il contenuto dell'archivio, elencato a partire dall'immagine, mostra che budget-q3.xlsx si trova all'interno di q3-files.7z.
Rispondere con precisione ai quesiti d'esame
- Distinguere il valore esatto richiesto: un numero di serie senza
&0non è l'ID di istanza, un percorso senza la lettera di unità è incompleto e un SID o un hash troncato è un valore diverso. - Fornire gli orari in formato ISO 8601 UTC con
Z, come2026-03-14T13:52:05Z, troncati ai secondi, salvo che sia richiesta una precisione maggiore. - Leggere il verbo: "collegato per la prima volta" (
0065, setupapi) non equivale a "collegato per l'ultima volta" (0066); "aperto", "eseguito" e "copiato" rimandano ad artefatti diversi. - Verificare il valore confrontandolo con un secondo artefatto prima di inviare la risposta; una differenza pari esattamente allo scostamento indica un valore non convertito.
Focus sull'esame: Sono previste domande basate su scenari che richiedono due o tre passaggi, ad esempio dal numero di serie di un dispositivo a un SID utente, oppure da un file sull'unità USB al programma che lo ha utilizzato. Le domande possono verificare quali fonti siano considerate indipendenti, come spiegare un orario FAT che differisce da un FILETIME esattamente dello scostamento del fuso orario e quale formulazione sia supportata da una risultanza.
Punti chiave
- I punti di pivoting sono valori condivisi tra artefatti, come percorsi, VSN, numeri di serie dei dispositivi, SID, hash e finestre temporali.
- Eseguire il pivoting cercando in ogni fonte gli identificatori del punto di ancoraggio e ripetendo il processo; la prossimità temporale fornisce piste e un identificatore condiviso trasforma una pista in una risultanza.
- Il riscontro indipendente richiede meccanismi diversi, non parser diversi dello stesso file; spiegare le discrepanze in base a risoluzione, fuso orario, ritardo di scrittura o modifica dell'orologio.
- Adeguare la formulazione al supporto probatorio ("registra", "è compatibile con", "indica", "dimostra") e presentare una timeline del caso selezionata, non la super timeline.
Domande di esercitazione
Verifica la tua comprensione. Queste domande non contano per l’esame.
Accedi per salvare i tuoi progressi e riprendere da dove hai lasciato. È gratuito. Accedi