Un gruppo di ricercatori della Technische Universität Graz (Austria), precedentemente noto per lo sviluppo di metodi di attacco , e , ha rivelato una nuova tecnica di analisi attraverso canali laterali, che consente di determinare la versione esatta del browser, il sistema operativo utilizzato, l'architettura della CPU e l'uso di estensioni per combattere l'identificazione nascosta.
Per determinare i suddetti parametri è sufficiente eseguire nel browser un codice JavaScript preparato dai ricercatori. Nella pratica, il metodo può essere utilizzato non solo come fonte secondaria per l'identificazione indiretta dell'utente, ma anche per stabilire i parametri dell'ambiente di sistema per l'applicazione mirata di exploit, tenendo conto del sistema operativo, dell'architettura e del browser. Il metodo è efficace anche quando si utilizzano browser con meccanismi di blocco dell'identificazione nascosta, come il Tor Browser. I codici sorgente del prototipo con implementazione del metodo sotto licenza MIT.
La determinazione avviene sulla base dell'estrazione di modelli di stato caratteristici per diversi browser in JavaScript e delle caratteristiche relative ai tempi di esecuzione delle operazioni, che dipendono dalle specificità del JIT, della CPU e dei meccanismi di allocazione della memoria. La determinazione delle proprietà avviene generando un elenco di tutti gli oggetti disponibili da JavaScript. È risultato che il numero di oggetti è direttamente correlato al motore del browser e alla sua versione.
function getProperties(o) {
var result = [];
while (o !== null) {
result = result.concat(Reflect.ownKeys(o));
o = Object.getPrototypeOf(o);
}
return result;
}
Ad esempio, per Firefox la documentazione dichiara il supporto di 2247 proprietà, mentre il numero reale di proprietà definite, considerando quelle non documentate, è 15709 (in Tor Browser è 15639), per Chrome sono 2698 proprietà, mentre quelle realmente disponibili sono 13570 (in Chrome per Android sono 13119). Il numero e i valori delle proprietà variano da versione a versione del browser e in base ai diversi sistemi operativi.
I valori e la disponibilità di determinate proprietà possono essere utilizzati per determinare il tipo di sistema operativo. Ad esempio, in Kubuntu la proprietà window.innerWidth è impostata su 1000, mentre in Windows 10 è impostata su 1001. In Windows è disponibile la proprietà window.navigator.activeVRDisplays, mentre in Linux non ci sono. Per Android sono disponibili molte chiamate specifiche, ma non esiste window.SharedWorker. Per identificare il sistema operativo si suggerisce anche di analizzare i parametri WebGL, il cui stato dipende dai driver. Inoltre, la chiamata WEBGL_debug_renderer_infoextension consente di ottenere informazioni sul motore di rendering OpenGL, che è diverso per ciascun sistema operativo.
Per determinare la CPU si utilizza la valutazione delle differenze nel tempo di esecuzione di diversi blocchi di codice, la cui elaborazione dipende dall'architettura del set di istruzioni, considerando il comportamento JIT (si determina quanti registri della CPU saranno coinvolti e in quali casi JIT genererà codice efficace con ottimizzazioni e utilizzo di istruzioni estese, e quando no). Per identificare il tipo di sistema di distribuzione della memoria e il sistema operativo si misura anche la differenza nel tempo di allocazione della memoria per diverse strutture, da cui è possibile giudicare la dimensione dei blocchi di memoria.
I parametri definiti durante l'esecuzione dello script vengono confrontati con i valori di riferimento caratteristici degli ambienti testati in precedenza. Durante il controllo, la tecnica sviluppata ha consentito di identificare con precisione 40 diversi ambienti di test, determinando le versioni dei browser utilizzati, il produttore della CPU, il sistema operativo impiegato e il fatto che fosse in esecuzione su hardware reale o in una macchina virtuale.
Si segnala separatamente la possibilità di identificare le estensioni del browser e persino impostazioni specifiche delle estensioni, comprese quelle destinate a bloccare i metodi di identificazione occulta o l'attività della modalità di navigazione privata. Nel contesto del metodo proposto, tali estensioni diventano un'ulteriore fonte di dati per l'identificazione. Le estensioni vengono identificate attraverso la valutazione delle distorsioni nei parametri dell'ambiente originale, apportate dalle estensioni.
Tra gli altri metodi di identificazione, si può notare il considerare dati indiretti, come , elenco dei tipi MIME supportati, parametri specifici nelle intestazioni ( e ) analisi dei plugin e dei font installati caratteristiche le rappresentazioni tramite WebGL e , il mouse e .
Fonte: opennet.ru
