INFORMATICA - RAM FORENSICS

"Copia ed analisi della memoria centrale del computer: alta velocità e volatilità..."

Novembre 2016

La RAM (Random Access Memory) è la parte di memoria centrale dell'elaboratore caratterizzata da un enorme flusso di dati che variano in posizione e contenuto ad altissima velocità. Essa è ben nota per la sua volatilità, ossia la perdita dati (dopo alcuni secondi) che consegue dal suo spegnimento elettrico. La gestione della RAM da parte del sistema operativo è molto complessa e mentre per una memoria di massa può essere generalmente ravveduto un file system e quindi al massimo settori fisici e cluster o blocchi, nella RAM si possono vedere indirizzate diverse entità a seconda dei processi che vanno ad utilizzarle. Come minimo ci sono celle, parole e pagine ma questa lista non chiude il capitolo.

Volendo copiare il contenuto della RAM, magari a scopo forense, ci sono alcune puntualizzazioni da fare:

a) se la copia avviene attraverso un processo (un software attivo) questi, per essere eseguito, deve essere caricato dal sistema operativo in RAM e quindi altera per definizione ciò che vuole copiare (non si può leggere la RAM con un software senza modificarla);

b) se la copia avviene attraverso un metodo di intrusione hardware (accesso diretto al BUS DMA, Cold Boot Attack, ecc.) il metodo di lettura non è per definizione modificativo come il precedente ma può essere messa in discussione la bontà dell'intera acquisizione dato che elettricamente la RAM altera molto spesso i suoi dati se soggetta a funzionamenti limite;

c) la RAM continua ad operare molto velocemente mentre la si copia e ad una velocità anche superiore a quella della copia per cui è probabile che il risultato sia del tutto inconsistente (non si può cristallizzare la situazione per cui non solo il software di copia l'altera all'atto della sua partenza ma le alterazioni continuano durante tutto il processo di copia).

Sulla base di tali osservazioni appare evidente che la copia forense di una RAM è sicuramente un'attività non ripetibile nel senso procedurale e "live", quindi su di essa le classiche raccomandazioni delle best practice possono ben poco, ad esempio anche l'hashing ha poco senso. Si possono però introdurre (come da letteratura scientifica [70]) delle ipotesi e delle considerazioni per renderla il più possibile garantita e quindi valida dal punto di vista forense:

1) La RAM viene letta per regioni R (di dimensione e struttura variabili) ed è sulle R che si dirigeranno le garanzie invece che su tutta la copia (costituita da tutte le R leggibili dalla RAM);

2) La lettura di una regione R deve essere atomica: non deve essere un'operazione divisibile in altre operazioni dal sistema operativo.

3) La lettura di una regione R è corretta se il contenuto che si ottiene è associabile ad un preciso istante t (o meglio ad un preciso intervallo di tempo (t,t+dt)).

4) La lettura di una regione R è integra se il processo di copia non ha modificato R e quindi il relativo software ed i suoi dati risultano installati su altre regioni della RAM.

La copia forense della RAM per essere perfetta dovrebbe risultare dalla copia istantanea, corretta ed integra al tempo t di tutte le sue regioni. Questo fatto è impossibile nella realtà per diversi ordini di motivi: l'integrità è minata dall'installazione del software di copia ma questo problema si può circoscrivere ed il software stesso ne può tenere conto; la copia però si può fare solo regione per regione (o a blocchi di regioni) in tempi successivi, mai istantaneamente, da cui al massimo avremo una correttezza ed integrità riferita ai singoli tempi di copia parziale e mai a tutto il tempo necessario per il completo dump della RAM.

Avendo quindi la situazione semplificata
RAM = (R1,R2,...,Rn)
si può immaginare il processo di copia (sempre semplificando al massimo) come una lettura a scorrimento di ognuna delle regioni ottenendo il risultato (un file):
FILE COPIA = [R1(t1),R2(t2),...,Rn(tn)]
dove gli istanti discretizzati sono ovviamente ordinati come segue:
t1 < t2 < ... < tn.

La situazione ideale sarebbe poter garantire che durante il periodo di tempo [t1,tn] impiegato per la copia di tutte le regioni della RAM nessuna di esse cambi il contenuto. Questo è escludibile perchè in tale tempo tutti i processi della macchina sono ancora attivi e quindi è altamente improbabile che nessuno faccia modifiche alle regioni della RAM.

Si abbandona quindi il concetto di copia globale della RAM per passare a quello di istantanea di una parte della RAM (copia di un sottoinsieme di regioni della RAM). Nel caso di un'istantanea potranno essere date nuove condizioni di:

Atomicità di un'istantanea (Rj1,Rj2,...,Rjk) al tempo tj1: sussiste se tutte le copie delle regioni ivi considerate sono atomiche, corrette ed integre, inoltre al tempo tj2, quando si legge Rj2, questa regione non deve aver cambiato contenuto in [tj1,tj2], al tempo tj3, quando si legge Rj3, questa regione non deve aver cambiato contenuto in [tj1,tj3], e così via.

Integrità di un'istantanea (Rj1,Rj2,...,Rjk) in [tj1,tjk]: sussiste se tutte le regioni considerate non cambiano durante l'intervallo [tj1,tjk].

Le istantanee nella RAM che possono essere atomiche ed integre ad un dato istante t vengono individuate nelle simulazioni e permettono di calcolare delle misure di attendibilità della copia globale della RAM. Ad esempio se una RAM al tempo t non ha istantanee parziali integre e nemmeno atomiche la sua acquisizione è sicuramente inconsistente. Se ne ha molto grandi è un ottimo segno di stabilità dei contenuti e quindi di affidabilità dei dati copiati, ecc. Va comunque considerato che l'acquisizione della RAM viene più spesso impiegata a scopo investigativo che forense pieno (si pensi al classico recupero delle password) da cui viene ricercata soprattutto l'integrità ed atomicità di piccole istantanee di interesse piuttosto che una su larga scala.