Un groupe de chercheurs de l'Université technique de Graz (Autriche), auparavant connu pour le développement de méthodes d'attaque , et , des informations sur une nouvelle technique d'analyse par canaux latéraux, permettant de déterminer la version exacte du navigateur, le système d'exploitation utilisé, l'architecture du CPU et l'utilisation d'extensions pour lutter contre l'identification cachée.
Pour déterminer ces paramètres, il suffit d'exécuter dans le navigateur un code JavaScript préparé par les chercheurs. En pratique, cette méthode peut être utilisée non seulement comme source complémentaire d'identification indirecte de l'utilisateur, mais aussi pour définir les paramètres de l'environnement système afin d'appliquer des exploits en tenant compte du système d'exploitation, de l'architecture et du navigateur. La méthode est efficace même en utilisant des navigateurs qui mettent en œuvre des mécanismes de blocage de l'identification cachée, tels que Tor Browser. Les codes sources du prototype implémentant la méthode sous licence MIT.
La détermination est effectuée en se basant sur l'extraction de modèles de propriétés d'état propres à différents navigateurs en JavaScript et les caractéristiques temps d'exécution des opérations, dépendant des spécificités de fonctionnement du JIT, du CPU et des mécanismes de gestion de la mémoire. La détermination des propriétés se fait par la génération d'une liste de tous les objets accessibles depuis JavaScript. Il s'est avéré que le nombre d'objets corrèle directement avec le moteur du navigateur et sa version.
function getProperties(o) {
var result = [];
while (o !== null) {
result = result.concat(Reflect.ownKeys(o));
o = Object.getPrototypeOf(o);
}
return result;
}
Par exemple, pour Firefox, la documentation indique le support de 2247 propriétés, alors que le nombre réel de propriétés définies, compte tenu des éléments non documentés, est de 15709 (dans Tor Browser — 15639), pour Chrome, 2698 propriétés sont déclarées, tandis que 13570 sont réellement proposées (dans Chrome pour Android — 13119). Le nombre et les valeurs des propriétés changent d'une version de navigateur à l'autre et avec l'utilisation de différents systèmes d'exploitation.
Les valeurs et la disponibilité de certaines propriétés peuvent être utilisées pour déterminer le type de système d'exploitation. Par exemple, dans Kubuntu, la propriété window.innerWidth est définie à 1000, tandis que dans Windows 10, elle est à 1001. Dans Windows, la propriété window.navigator.activeVRDisplays est disponible, alors qu'elle n'est pas présente sous Linux. Android propose de nombreux appels spécifiques, mais il n'existe pas de window.SharedWorker. Pour identifier le système d'exploitation, l'analyse des paramètres WebGL, qui dépendent des pilotes, est également suggérée. De plus, l'appel à WEBGL_debug_renderer_infoextension permet d'obtenir des informations sur le moteur de rendu OpenGL, qui diffère selon le système d'exploitation.
Pour déterminer le CPU, on évalue les différences de temps d'exécution de divers blocs de code standard, dont le traitement dépend de l'architecture de l'ensemble d'instructions, en tenant compte du comportement du JIT (cela détermine combien de registres CPU seront utilisés et dans quels cas le JIT générera du code efficace avec des optimisations et l'utilisation d'instructions avancées, et quand ce ne sera pas le cas). Pour déterminer le type de répartition de la mémoire et le système d'exploitation, on mesure également la différence de temps d'allocation de mémoire pour différentes structures, ce qui permet d'inférer la taille des blocs de mémoire.
Les paramètres définis pendant l'exécution du script sont comparés à des valeurs de référence, spécifiques aux environnements préalablement testés. Au cours de la vérification, la technique développée a permis d'identifier précisément 40 environnements de test différents, en déterminant les versions des navigateurs utilisés, le fabricant du CPU, le système d'exploitation appliqué et le fait qu'il soit exécuté sur du matériel réel ou dans une machine virtuelle.
Il convient également de noter la possibilité d'identifier les extensions de navigateur et même certains paramètres d'extensions, y compris celles destinées à bloquer des méthodes d'identification dissimulée ou l'activité en mode de navigation privée. Dans le contexte de la méthode proposée, ces extensions deviennent une autre source de données pour l'identification. Les extensions sont identifiées par l'évaluation des distorsions des paramètres de l'environnement d'origine, introduites par les extensions.
Parmi d'autres méthodes d'identification, on peut citer la prise en compte de données indirectes telles que , la liste des types MIME pris en charge, les paramètres spécifiques dans les en-têtes ( et ), l'analyse des plugins installés , la disponibilité de certaines API Web spécifiques aux cartes graphiques le rendu avec WebGL et , avec CSS, l'analyse des particularités de l'interaction avec et .
Source : opennet.ru
