Dopo aver parlato di memory forensics e mobile forensics, concludiamo questa miniserie sulla digital forensics affrontando un tema certamente meno innovativo rispetto ai precedenti, ma comunque molto attuale: la Windows forensics, ovvero lo studio dei dati acquisiti estratti a fini investigativi da sistemi Windows.
Si tratta di un settore consolidato della digital forensics, ma che riveste una grande importanza, vista la grande diffusione dei sistemi Windows nei computer desktop e laptop. Questo è a maggior ragione vero nell’ambito aziendale, visto che la quasi totalità delle attività di digital forensics effettuate in azienda riguarda la raccolta e l’analisi di evidenze provenienti da postazioni di lavoro Windows.
Trattandosi di un tema molto vasto, in questo articolo, dopo un breve accenno all’acquisizione fisica e logica di immagini di sistemi Windows, ci concentreremo sull’analisi delle evidenze non volatili specifiche dei sistemi operativi Windows, tralasciando quelle evidenze che provengono da software applicativo che gira anche in ambiente Windows.
Come negli articoli precedenti, il focus sarà soprattutto su quali evidenze possono essere raccolte e cosa possono significare, piuttosto che sulla modalità di preservazione e custodia delle evidenze.
Indice degli argomenti
Windows forensics: acquisizione dei dati
L’acquisizione dei dati in ambito forense è il processo con il quale viene creata un’immagine, o vengono comunque estratti dati, dal dispositivo oggetto dell’indagine.
Si parla di acquisizione live quando i dati vengono estratti da un sistema acceso e funzionante. L’acquisizione live è l’unica possibile quando si vogliono raccogliere evidenze volatili, ovvero quelle evidenze che non sopravvivono al riavvio del sistema, come ad esempio il contenuto della memoria.
L’acquisizione statica viene invece effettuata a sistema non attivo, mediante copia degli hard disk, che possono essere stati rimossi dal sistema oggetto dell’indagine (quindi in questo caso l’acquisizione verrà effettuata da un altro sistema), oppure mantenuti nel sistema oggetto, avviato però da un device alternativo (es. USB drive) che contiene un tool per l’acquisizione.
L’acquisizione statica può essere fisica, quando viene fatta una copia bit a bit dell’hard disk, oppure logica, quando vengono copiati solo i file e le directory. Nel secondo caso verranno perse le informazioni relative ai file cancellati ed eventuali dati presenti nello slack space (vedi paragrafo sull’analisi del filesystem). L’acquisizione statica è l’ideale per raccogliere evidenze non volatili, ovvero che permangono negli hard disk del sistema quando il sistema è spento.
È inoltre importante che dopo aver acquisito l’immagine (meglio due) di un hard disk ne venga calcolato l’hash, in modo che sia possibile verificare che non sia stata modificata rispetto all’originale. Le analisi successive andranno effettuate sempre sull’immagine e mai sull’hard disk di origine.
Ci sono diversi tool che possono essere utilizzati per l’acquisizione dei dati: qui vediamo due esempi.
Un primo esempio è quello di acquisire un’immagine RAW utilizzando il tool dd o uno dei suoi derivati da una distribuzione live forense. Il seguente esempio mostra la copia bit a bit dell’intero disco in un file immagine raw (sda.img):
#dd if=/dev/sda of=/mnt/usb/sda.img
Una volta terminata la copia è possibile calcolare l’hash sia dell’hard disk originario che dell’immagine e verificare che i due hash coincidano:
#sha256sum /dev/sda
#sha256sum /mnt/usb/sda1.img
Un secondo esempio di acquisizione mostra l’utilizzo del tool FTK Imager di AccesData:
Windows forensics: analisi del filesystem NTFS
L’analisi del filesystem riveste una grande importanza nell’ambito della digital forensics ed è certamente un argomento molto complesso.
Per capirne l’importanza basti pensare a come attraverso l’analisi del filesystem sia possibile raccogliere evidenze non visibili ad un esame superficiale, come file cancellati, dati nascosti all’interno dello spazio non allocato o nel cosiddetto “slack space” (lo spazio compreso tra la fine dei contenuti del file e la fine dell’ultimo cluster allocato), evidenze sulla manipolazione di file e via dicendo.
L’analisi del filesystem può essere fatta a diversi livelli e ad ogni livello è possibile reperire informazioni diverse:
- physical layer (il drive stesso);
- filesystem layer (informazioni sulle partizioni);
- data layer (i cluster dove sono memorizzati i dati);
- metadata layer (le strutture dati e i loro metadati);
- filename layer (nome dei file e gerarchia delle directory).
Di seguito illustreremo alcune particolarità del filesystem NTFS, a livello di metadata layer filename layer, utili per l’analisi forense.
Il filesystem NTFS (New Technology File System), utilizzato di default dai sistemi Windows, è un filesystem progettato per avere buone performance, sicurezza e resistenza agli errori.
Dal punto di vista forense è importante sapere che le strutture dati che contengono i metadati del filesystem NTFS sono essi stessi file (il cui nome inizia con il carattere “$”).
Il più importante di essi, la Master File Table (MFT), corrispondente al file $mft e duplicata nel file $mftmirror, contiene un record per ogni file e directory contenuta all’interno del volume e per ognuno di essi una serie di attributi, che possono essere residenti all’interno della MFT oppure essere esterni alla MFT: in quest’ultimo caso la MFT conterrà un riferimento alla locazione dove l’attributo è memorizzato. Da notare che il contenuto del file stesso è un attributo ($DATA) della MFT; nel caso quindi di file di piccole dimensioni il contenuto stesso del file è memorizzato all’interno della MFT.
Un altro attributo importanti dal punto di vista forense è l’attributo $STANDARD_INFORMATION, il quale contiene anche i cosiddetti valori MAC del file, ovvero Modified, Accessed, Changed. Per l’NTFS si aggiunge l’attributo di creazione (Birth) ottenendo quindi i valori MAC(b).
Questo il significato di tali valori:
- Modified time (M): il timestamp in cui il file è stato modificato l’ultima volta, o, più precisamente, in cui è stato modificato il contenuto degli attributi $DATA o $INDEX.
- Accessed time (A): il timestamp in cui si è avuto l’ultimo accesso ai contenuti del file.
- Changed (MFT Modified) time (C): il timestamp in cui i metadati del file sono stati modificati;
- Birth fime (b): il timestime in cui il file è stato creato.
Altro attributo importante è $FILE_NAME, che contiene il nome del file, riferimenti alla directory di appartenenza, e attributi MACb analoghi a quelli visti per l’attributo $STANDARD_INFORMATION.
La tabella seguente (fonte: SANS Institute) riporta le modifiche ai valori MACb in seguito alle diverse operazioni effettuate sui file.
$STANDARD _INFORMATION | File Rename | Local File Move | Volume File Move | File Copy | File Access | File Modify | File Creation | File Deletion |
Modified Changed (Y/N) | N | N | N | N | N | Y | Y | N |
Access Changed (Y/N) | N | N | Y | Y | Y (win7-) N (win7+) | N | Y | N |
Creation Changed (Y/N) | N | N | N | Y | N | N | Y | N |
MFT Modified Changed (Y/N) | Y | Y | Y | Y | N | Y | Y | N |
$FILE_NAME | File Rename | Local File Move | Volume File Move | File Copy | File Access | File Modify | File Creation | File Deletion |
Modified Changed (Y/N) | N | Y | Y | Y | N | N | Y | N |
Access Changed (Y/N) | N | N | Y | Y | N | N | Y | N |
Creation Changed (Y/N) | N | N | Y | Y | N | N | Y | N |
MFT Modified Changed (Y/N) | N | Y | Y | Y | N | N | Y | N |
Gli attributi MACb possono essere utilizzati per costruire la cosiddetta timeline, ovvero un elenco di record con timestamp contenenti il nome del file e directory e gli attributi MAC cambiati. Dalla timeline è possibile estrarre informazioni riguardo alla creazione, modifica, accesso di file ed esecuzione di programmi.
Le directory all’interno della MFT sono file a tutti gli effetti e contengono anch’esse gli attributi $STANDARD_INFORMATION e $FILE_NAME. L’unica differenza è che al posto dell’attributo $DATA contengono un indice, formato da due parti: $INDEX_ROOT e $INDEX_ALLOCATION. Quest’ultimo, analogamente all’attributo $DATA per i file, può essere residente all’interno della MFT oppure esterno ad essa.
L’attributo $BITMAP contiene lo stato di allocazione (allocato o libero) di ogni cluster del filesystem. Gli attributi $LOGFILE e $UsnJrnl vengono utilizzati per implementare il cosiddetto Journaling, il meccanismo mediante il quale i moderni filesystem implementano l’integrità in caso di crash del sistema operativo.
Infine, è utile conoscere cosa succede a basso livello quando viene creato e scritto su disco un nuovo file e quando un file viene cancellato. Da ciò sarà possibile capire quali dati di un file cancellato può essere possibile recuperare.
Creazione di un nuovo file:
- vengono aperti uno o più cluster marcati come liberi sulla $BITMAP e vi vengono scritti i dati;
- viene creato un nuovo record sulla $MFT;
- viene modificata la $BITMAP marcando come allocati i cluster utilizzati per la scrittura dei dati;
- viene modificato l’indice della directory che contiene il nuovo file;
- vengono modificati gli attributi $UsnJrnl e $LOGFILE.
Cancellazione di un file:
- il record corrispondente al file cancellato all’interno della $MFT viene marcato come disponibile (ma non immediatamente riutilizzato);
- i cluster contenenti i dati del file cancellato vengono marcati come disponibili all’interno della $BITMAP;
- vengono modificati gli attributi $UsnJrnl e $LOGFILE.
È quindi possibile che per un file cancellato, soprattutto se la cancellazione è recente e non sono state fatte molte operazioni sul filesystem, siano disponibili diverse informazioni: tutto o parte del contenuto, nel caso in cui i cluster che contenevano i dati del file non siano stati sovrascritti, i metadati e il nome file, se il record della $MFT non è stato sovrascritto, la directory nella quale era collocato.
Windows forensics: tool per l’analisi del filesystem
Sleuth Kit è un insieme di tool a riga di comando specifici per l’analisi di tutti i layer dei principali filesystem. Secondo la filosofia Unix, da cui proviene, i tool di Sleuth Kit fanno (bene) un’unica cosa. Si tratta probabilmente del miglior strumento per l’analisi del filesystem, anche se non facile da utilizzare. Proprio per queste caratteristiche, oltre che per il fatto di essere open source, è utilizzato all’interno di diversi software di analisi forense.
Autopsy, strumento open source nato come interfaccia web per Sleuth Kit, è evoluto in un software standalone che gira in ambiente Windows. Vista la provenienza, permette l’analisi di evidenze provenienti dal filesystem Windows.
L’esempio nell’immagine seguente mostra l’evidenza di dati contenuti all’interno dello spazio non allocato del filesystem.
Windows forensics: analisi del registry
Il registry è il repository di tutte le informazioni di un sistema Windows, ed è chiaramente una fonte molto importante di evidenze digitali.
Qui ci limiteremo a una breve descrizione della struttura del registry e alcuni esempi di evidenze digitali estraibili dal registry: avvio automatico di applicazioni, utilizzo di dispositivi USB, creazione ed apertura di file.
Il registry ha una struttura ad albero costituita da chiavi, sottochiavi e valori, che trae origine da cinque sezioni (hives):
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USER
- HKEY_CURRENT_CONFIG
Per l’analisi del registry offline, è necessario conoscere la posizione dei file che contengono i dati del registry. La maggior parte dei file sono collocati nella directory %WINDIR%system32config (file DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM).
Ci sono inoltre altri due file per ogni utente, NTUSER.DAT (in C:Users%username%) e UsrClass.dat (in C:Users%Username%AppDataLocalMicrosoftWindows).
Avvio automatico di applicazioni
Ci sono diverse aree del registry che regolano l’avvio automatico di applicazioni, alcune delle quali riferite regolano l’avvio di applicazioni al boot del sistema, altre al login dell’utente.
Un’analisi di queste aree potrebbe per esempio permettere l’individuazione di eventuale malware avviato al boot del sistema o al login dell’utente. Queste le chiavi del registry:
- HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
- HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
- HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce
- HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce
Uso di dispositivi USB
Windows tiene traccia dei dispositivi USB collegati al sistema, memorizzando nel registry il vendor, il prodotto, la versione, il timestamp dell’ultima volta in cui il dispositivo è stato collegato al sistema. Queste le chiavi del registry coinvolte:
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumUSBSTOR
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumUSB
Inoltre, dalle chiavi:
- HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Portable DevicesDevices
- HKEY_LOCAL_MACHINESYSTEMMountedDevices
è possibile risalire ai device USB mappati con una lettera drive specifica (es H:)
Infine, combinando i contenuti di HKEY_LOCAL_MACHINESYSTEMMountedDevices e NTUSER.DAT è possibile risalire all’utente che ha utilizzato il dispositivo.
Creazione e apertura di file
La chiave:
NTUSER.DATSoftwareMicrosoftWindowsCurrentVersionExplorerComDlg32OpenSavePIDIMRU
tiene traccia dei file aperti o salvati attraverso una finestra di dialogo Windows, come avviene per la maggior parte delle applicazioni Windows con interfaccia grafica. Esistono sottochiavi per ogni estensione utilizzata (* se non usata l’estensione).
La chiave:
NTUSER.DATSoftwareMicrosoftWindowsCurrentVersionExplorerRecentDocs
tiene traccia di file e cartelle aperte a partire dal menù “Recenti” del menù “Start”.
Infine, la chiave:
NTUSER.DATSoftwareMicrosoftWindowsCurrentVersionExplorerComDlg32LastvisitedPidIMRU
tiene traccia degli eseguibili usati da un’applicazione per aprire i file visti nella chiave OpenSavePidIMRU.
Windows forensics: tool per l’analisi del registry
Esistono diversi tool specifici per l’analisi del registry, che permettono di visualizzare tutte le chiavi del registry a partire da uno dei file che contengono di dati del registry. Uno dei più utilizzati è RegRipper, la cui finestra principale è mostrata nella seguente immagine:
Analisi degli artefatti Windows
Prefetch
I prefetch sono un meccanismo di Windows che permette di incrementare le prestazioni del sistema caricando porzioni di codice e dati di applicazioni eseguite frequentemente dal disco alla memoria prima del loro utilizzo effettivo. Il gestore della cache di Windows monitora i file e le directory referenziate da ogni applicazione e li mappa in un file il cui nome è del tipo:
(nome eseguibile)-(hash).pf
collocato nella directory:
C:WindowsPrefetch
Dall’analisi dei prefetch è quindi possibile ricavare le applicazioni che sono state eseguite sul sistema, i timestamp della prima e dell’ultima volta che sono state eseguite e il numero di volte che è stata eseguita.
File shortcut (LNK)
Gli shortcut sono file di link a documenti che vengono creati nella directory C:Users<utente>AppDataRoamingMicrosoftRecent quando i documenti vengono aperti.
Dalla loro analisi è possibile ricavare il timestamp in cui il file è stato aperto per la prima volta, il timestamp in cui il file è stato aperto la prima volta, la collocazione originaria del file, il volume sul quale risiedeva, il MAC time del file. Da notare che vengono creati shortcut anche di file aperti sul sistema da dispositivi esterni.
Analisi dei log
I log di Windows sono registrati in formato binario nella directory c:Windowssystem32winevtlogs in file con estensione .evtx.
Tradizionalmente le tipologie di log di Windows, corrispondenti ai singoli file .evtx e denominate registri all’interno dell’event viewer, sono le seguenti:
- Security: contiene gli eventi di sicurezza e relativi agli accessi configurati per l’audit all’interno delle group policy;
- System: contiene eventi relativi ai servizi di Windows, componenti di sistema, driver ecc.
- Application: contiene eventi relativi alle applicazioni.
A queste tipologie di log, con l’avanzare delle versioni di Windows, se ne sono aggiunte molte altre, ma le tipologie elencate sono sempre presenti.
Dal punto di vista forense i log più utili sono quelli di tipo Security, in quanto forniscono informazioni su autenticazione, accesso e operazioni effettuate dagli utenti, modifiche alle impostazioni di sicurezza, creazione di nuovi account.
Per tutte le tipologie di log sono infine presenti le seguenti tipologie di eventi:
- Error: indica un problema significativo, come l’impossibilità di avviare un servizio o di caricare un driver;
- Warning: indica un problema non significativo, ma che potrà diventare un problema in seguito;
- Information: indica un’operazione eseguita con successo.
Per i log di sicurezza, sono invece presenti le seguenti tipologie di eventi:
- Success audit: audit di un evento di sicurezza concluso con successo, come il login avvenuto correttamente;
- Failure audit: audit di un evento di sicurezza fallito, come l’impossibilità di accedere ad una risorsa a cui l’utente non è autorizzato.
Tool per l’analisi degli artefatti Windows
Come per l’analisi del registry, anche per l’analisi degli artefatti Windows esistono da un lato diversi tool specializzati per la singola tipologia di artefatto e, dall’altro, i tool forensi generici, i quali, pur non avendo generalmente sezioni specifiche, effettuano analisi sugli artefatti.
Conclusioni
In conclusione, alcune considerazioni.
Come già per gli articoli precedenti della miniserie dedicata alla digital forensics, l’argomento è solo stato scalfito: spero tuttavia di aver almeno suscitato curiosità e desiderio di approfondire l’argomento.
Sebbene nella maggior parte dei casi non sia possibile e neanche opportuno per le aziende effettuare analisi forensi in proprio, è bene che le aziende siano preparate ad eventualità di questo tipo, sviluppando competenze e definendo procedure per la raccolta e l’analisi delle evidenze.
Infine, nonostante la presenza di diversi tool forensi permetta di ottenere facilmente risultati dall’analisi di immagini di sistemi Windows, è bene avere almeno alcune conoscenze di come funzionino le cose a basso livello, in modo da essere in grado di scegliere il tool più appropriato secondo le necessità e di essere in grado di verificare la correttezza dei risultati ottenuti.