A la découverte du x64 d’Internet Explorer

Avec la diffusion de deux versions majeures de Windows pour l’architecture x64 (connue également sous le nom « AMD64 »), Microsoft a ouvert les portes de l’informatique 64 bits bon marché au grand public. A l’occasion de la conférence Virus Bulletin 2005, j’ai présenté un article [1] sur l’architecture x64 et sur la manière dont les virus 32 bits et les rootkits connus allaient interagir avec elle.

Cette présentation suscita de nombreuses questions dans le public et la question la plus intéressante fut posée par un chercheur du centre européen de recherche antivirus de Symantec. Elle portait sur Internet Explorer dans Windows x64 et sur la manière dont les objets ActiveX et BHO (Browser Helper Objects), exclusivement en 32 bits jusqu’à présent, fonctionnaient (ou pas) dans l’environnement Windows x64. A l’origine de cette question, il y a bien sûr la pléthore de logiciels espion ou publicitaire qui s’installent via les vulnérabilités d’IE grâce à l’utilisation de technologie ActiveX ou d’applications Java.

Cet article est une réponse à cette question.

Voici Internet Explorer x64

Dans la mesure où toutes les applications système dans Windows x64 sont des fichiers PE 64 bits, on pourrait penser qu’Internet Explorer a également été compilé en tant qu’application 64 bits native. Cette supposition est correcte : la version la plus récente de Windows XP pour la plate-forme x64 propose une version 64 bits d’Internet Explorer (version 6.0.3790). La boîte de dialogue “A propos de” est illustrée dans la Figure 1.


Figure 1: Version 64-bit d’Internet Explorer.

Toutefois, ce qui apparaît moins clairement, c’est également d’une version 32 bits d’Internet Explorer accessible depuis le menu Démarrer (cf. Figure 2). Une fois lancée, la version 32 bits d’Internet Explorer ressemble à s’y méprendre à son jumeau de 64 bits mais une vérification rapide dans le Gestionnaire des tâches permet de voir qu’il s’agit bel et bien d’un processus 32 bits.


Figure 2: La version 32-bit de ce produit est disponible dans le menu « Démarrer ».

Les développeurs de Windows ont donc décidé d’offrir aux utilisateurs la possibilité de choisir entre les deux versions d’Internet Explorer. Cette décision qui peut paraître étrange est parfaitement justifiée pour des raisons de compatibilité.

Dans Windows x64, les applications 64 bits peuvent utiliser IPC pour appeler du code 32 bits plus ancien, tout comme les applications 32 bits peuvent appeler des DLL 16 bits dans Win32 via le code de conversion de changement. Donc, en théorie, n’importe quelle application 64 bits peut être amenée à utiliser des DLL 32 bits. Toutefois, l’appel de code 32 bits par une application 64 bits possède des inconvénients, principalement au niveau de la vitesse et de la sécurité.

En dépit des questions de performance et de sécurité, la version 64 bits d’Internet Explorer aurait pu utiliser les objets et les modules externes ActiveX 32 bits. Pourquoi, dès lors, Microsoft a-t-il décidé d’inclure une version 32 bits d’Internet Explorer dans Windows XP x64 ?

Une explication simple serait que pour faire fonctionner les objets ActiveX 32 bits au départ d’IE 64 bits, Internet Explorer devrait ouvrir un VM 32 bits, y charger l’objet COM 32 bits et communiquer avec lui. L’effort technique requis ne serait pas insignifiant, mais pour une entreprise de la taille de Microsoft, cela ne devrait pas être insurmontable.

L’autre possibilité est que l’activation d’objets ActiveX de 32 bits dans la version 64 bits d’Internet Explorer ouvre la porte à un grand groupe de menaces qui nuisent à Internet depuis des années. Cela requiert également le codage d’une passerelle d’application spéciale : un emballeur 64 bits pour les objets ActiveX qui réduit l’écart entre le monde 64 bits et le monde 32 bits dans Windows x64. Ceci est important car, par exemple, les applications 64 bits et 32 bits « voient » des versions différentes de la base de registres et peuvent avoir bien entendu des configurations différentes, ce qui entraîne des comportements différents.

Quelle que soit l’explication correcte (ou les possibilités inexplorées), le fait est que Windows x64 propose deux versions d’IE. Voyons comment elles traitent les contrôles ActiveX.

La technologie ActiveX

ActiveX est le nom générique d’un ensemble de technologies qui ont été développées afin de pouvoir partager des informations entre diverses applications. ActiveX est apparenté à COM et OLE mais dans la majorité des cas ActiveX est utilisé en référence aux « contrôles ActiveX ». Dans ce cas, il s’agit de la technologie qui peut être appelée depuis un navigateur Internet.
Lorsqu’ActiveX fut introduit il y a plusieurs années de cela dans Internet Explorer, il fut considéré comme un concurrent direct de Java. Toutefois, le navigateur Internet Explorer de Microsoft était le seul navigateur du marché compatible avec cette technologie. Un des principaux arguments avancés contre ActiveX était le fait que la technologie reposait sur un code exécutable x86, ce qui compliquait son exécution sur d’autres processeurs tels que les PowerPC ou les Sparc. Par conséquent, les entreprises qui développaient de véritables applications multiplateformes ne pouvaient les exécuter que via le navigateur de Microsoft et uniquement sur des ordinateurs compatibles Intel.

En réalité, Microsoft s’est même tiré une balle dans le pied avec ActiveX car utiliser Internet Explorer ne signifie pas automatiquement que l’environnement est compatible avec ActiveX ! Ainsi, la version d’Internet Explorer (version la plus récente : 5.2.3) pour MacOS est incapable de charger et d’exécuter des contrôles ActiveX. Il y avait donc d’un côté Java qui permettait l’exécution d’applications sur un vaste éventail d’architectures système et matériel et de l’autre, ActiveX qui autorisait l’exécution du code uniquement sur des processeurs Intel x86 32 bits sous Windows.

L’introduction de Windows X64 signifiait de nouveaux maux de tête pour les développeurs ActiveX liés à la prise en charge des contrôles ActiveX par la version 64 bits d’Internet Explorer.

Particularités des versions 32 bits et 64 bits d’Internet Explorer dans Windowsd x64

La version 64 bits d’Internet Explorer pour Windows x64 se trouve dans le répertoire « Programmes », séparée de la version 32 bits. Il est compatible avec les modules externes et comme on pouvait s’y attendre, il est capable de charger les contrôles ActiveX de 64 bits.

Toutefois, il est intéressant de constater que dans la plupart des cas Windows x64 utilise par défaut la version 32 bits d’Internet Explorer. Ainsi, c’est la version 32 bits qui est lancée lorsque vous cliquez sur le raccourci IE dans la barre des tâches, sur l’élément Mise à jour du menu Démarrer ou sur le raccourci d’IE dans le Bureau. Par contre, lorsque vous voulez ouvrir une adresse URL depuis l’Explorateur Windows, qui est lui-même une application 64 bits, c’est la version 64 bits d’IE qui est utilisée.

Le comportement de la « Mise à jour Windows » sous Windows x64 est également intéressant. Comme nous l’avons déjà dit, l’élément « Mise à jour » du menu Démarrer lance la version 32 bits d’Internet Explorer qui charge toutes les commandes de mise à jour (des applications 32 bits elles-mêmes). Toutefois, si vous accédez au site des mises à jour de Windows au départ de la version 64 bits d’Internet Explorer, le message illustré dans la figure 3 s’affiche.


Figure. 3. Ouverture du site Windows Update dans Internet Explorer version 64-bit

Je ne dispose malheureusement pas maintenant d’une machine Itanium IA64 pour tester si la mise à jour Windows possède une contrôle ActiveX IA64 native ou si la mise à jour est exécutée en tant que code 32 bits émulé, mais cela vaut la peine d’être vérifié.

Dans le registre des particularités des versions 32 bits et 64 bits d’IE pour Windows x64, il convient de noter qu’elles partagent certains paramètres tels que répertoire des fichiers temporaires Internet (par défaut Documents and Settings%Username%Local SettingsTemporary Internet Files), le répertoire de l’Historique et le répertoires des favoris.

Avec la version IE 6 SP2, Microsoft introduit une fonction très utile pour gérer les modules externes IE. Cette fonction est accessible au départ du menu Outils : “Outils->Gérer les modules complémentaires”. Le gestionnaire de modules externes permet de désactiver ou de réactiver les commandes Active X ou les extensions de navigateur mais il ne permet pas de les désinstaller. L’utilisateur a ainsi une meilleure idée des extensions utilisées actuellement par IE et il possède également un contrôle moyen sur celles-ci.

Modules externes pour IE 64 bits

Aucune des deux versions d’IE pou Windows x64 ne prend en charge Java par défaut. Il faut installer le module de prise en charge séparément. Il existe bien sûr un JRE 32 bits dans la dernière version de Sun (J2SE Runtime Environment 5.0 Mise à jour 5), mais le site de Sun ne mentionne rien au sujet de la compatibilité avec Windows AMD64. Il existe une version AMD64 de J2SE Runtime Environment 5.0 dans la mise à jour 4 accessible chez Sun. Toutefois, cela ne semble pas marcher dans Windows XP x64. L’installation se produit sans aucun message d’erreur, mais IE ne le reprend pas dans la liste des modules complémentaires ajoutés et les applets Java ne fonctionnent pas lorsqu’ils sont appelés sur une page Web.

De plus, Macromedia ne propose pas de lecteur Flash pour Windows x64, Adobe n’offre pas Acrobat Reader x64 et il n’y a pas de compatibilité directe dans le navigateur avec Quick Time d’Apple. En fait, alors que j’écris cet article, je n’ai pu trouver des modules externes pour la version 64 bits d’IE ou des commandes ActiveX 64 bits de tiers.

Cela signifie que Internet Explorer, dans sa version 64 bits, ne prend pas (encore) en charge les applets Java, le contenu Shockwave ou les PDF, ce qui limite son utilité à un tel point que les utilisateurs n’ont aucune raison de l’utiliser. Sauf bien sûr si ce qu’ils recherchent, c’est l’absence de prise en charge des contenus cités ci-dessus.

Attaques des logiciels malveillants

Vu que la version 64 bits d’IE est incapable d’appeler le code x86 32 bits, les attaques de logiciels malveillants 32 bits sont considérablement réduites. Dans la pratique, aucune des méthodes actuelles utilisées pour diffuser les logiciels malveillants via une page Web ne fonctionne, sauf peut-être le téléchargement et l’exécution directe par l’utilisateur.

Il n’en va pas de même pour la version 32 bits d’Internet Explorer sous Windows x64. J’ai mené des essais avec une série de programmes malveillants qui s’installent au départ de diverses page Web dont (tous les noms sont des noms de KAV) :

Ces programmes se propagent tous au départ de pages Web par le biais de divers exploits d’IE (brèches qui ont déjà été comblées dans IE6 pour Windows XP x64 et qui ne peuvent plus être exploitées) et via l’utilisation de contrôles ActiveX. Certains d’entre eux utilisent des rootkits du mode noyau Win32 pour se dissimuler (ce qui ne fonctionne pas sous Windows x64) et d’autres reposent sur des rootkits du mode utilisateur, efficaces contre d’autres applications Win32 dans Windows XP x64 mais pas contre les applications 64 bits.

La mauvaise nouvelle est qu’ils parviennent non seulement à infecter le système (bien qu’ils requièrent tous la confirmation de l’utilisateur avant l’installation), mais qu’ils fonctionnent également sans aucun problème sous WOW64. Ils survivent au redémarrage même si les objets BHO sont désactivés dans IE avant le redémarrage et il est très difficile de s’en débarrasser sans un programme antivirus 64 bits complet.

En fait, il est très difficile pour un utilisateur inexpérimenté de se débarrasser d’un programme malveillant 32 bits sur Windows x64 sans l’utilisation d’un scanneur antivirus 64 bits (et malheureusement, l’offre en la matière est toujours très réduite). Bien sûr, un utilisateur expérimenté peut toujours arrêter les processus 32 bits dans le Gestionnaire de tâches puis utiliser un scanneur 32 bits pour réparer ou supprimer les fichiers infectés, mais la séparation entre les processus 32 bits dans Windows x64 complique fortement la tâche d’un scanneur antivirus 32 bits qui tente de supprimer certains des programmes malveillants cités ci-dessus lorsqu’ils sont actifs.

Conclusion

Il semblerait que Microsoft ait finalement livré avec Windows x64 une version d’IE qui soit relativement bien à l’abri des attaques malveillantes contre Internet Explorer. Je veux parler bien entendu de la version 64 bits d’IE. La mauvaise nouvelle est que nous ne devons pas cette situation à une révolution dans la sécurité chez Microsoft mais qu’il s’agit plutôt d’un effet secondaire de l’absence totale de prise en charge de Java, des contrôles ActiveX 32 bits, du contenu Shockwave et des PDF. Et en raison de ce manque de compatibilité, la majorité des utilisateurs continuera à travailler avec la version 32 bits d’IE qui, comme nous venons de le voir, est tout aussi attrayante pour les programmes malveillants que n’importe quelle version d’Internet Explorer tournant sous Windows XP 32 bits.

Toutefois, l’utilisation d’un scanneur antivirus 64 bits dont le composant O/A serait activé devrait permettre à la majorité des utilisateurs de faire face aux programmes malveillants 32 bits. En fait, il devrait être plus facile de traiter les programmes malveillants 32 bits en raison de la bonne séparation entre le monde 32 bits et le monde 64 bits dans Windows x64. Dans ce cas, les utilisateurs de Windows x64 auront moins de problèmes causes par les programmes malveillants que les utilisateurs qui utilisent toujours la version 32 bits. Jusqu’à temps bien sûr que les programmes malveillants 64 bits gagnent en popularité.

Sources:

  1. Costin Raiu, « Enhanced » virus protection, Proceedings of the Virus Bulletin International Conference 2005, ññ. 131–138.
  2. Microsoft: List of limitations in 64-Bit Windows
  3. Microsoft: Differences between the 32-bit and 64-bit versions of Internet Explorer that are included in the x64-based versions of Windows Server 2003 and in Windows XP Professional x64 Edition

Posts similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *