Présentation de la fonctionnalité "Kill bit" permettant de désactiver un contrôle Active X
Date : 22 Juin 2005
Les contrôles ActiveX sont de petites applications (on parle souvent de "code mobile") qui sont chargées et exécutées sur le poste de l'utilisateur lorsque celui-ci visite certaines pages Web. Les contrôles ActiveX sont supportés uniquement par le navigateur Internet Explorer de Microsoft (il existe cependant des extensions, par exemple pour Netscape Navigator, permettant d'implémenter cette fonctionnalité sur d'autres navigateurs Web), et leur utilisation est fortement déconseillée d'un point de vue sécurité (du fait des dangers des codes mobiles).
Dans certains contextes, il est cependant difficile de s'en passer :
- Microsoft utilise abondamment cette technologie (dont il est à l'origine). Par exemple, la fonctionnalité de mise à jour "Windows Update" utilise des contrôles ActiveX.
- D'autres applications populaires (par exemple QuickTime d'Apple, ou Acrobat de Adobe) l'utilisent également.
Il nous est donc apparu intéressant de présenter une des fonctions de sécurité prévues par Internet Explorer pour les contrôles ActiveX : le "Kill bit".
La fonctionnalité de "Kill bit" permet d'indiquer à Internet Explorer qu'un contrôle ActiveX donné (celui sur lequel le "Kill bit" va être positionné) ne doit plus jamais être utilisé. Pour positionner le "Kill bit", il faut éditer la Base de Registres Windows (dans la section dédiée à Internet Explorer), créer une entrée pour ce contrôle ActiveX, et positionner à une valeur spécifique ("dword:00000400") la clé "Compatibility Flag". L'opération est complexe à réaliser manuellement, essentiellement parce que le contrôle ActiveX est désigné dans la base de registres sous forme d'un "CLSID" (nombre hexadécimal de 32 caractères). On se reportera à l'article 240797 de la Knowkledge Base de Microsoft (voir l'URL donnée en fin d'article) pour plus de précisions. Par contre, Microsoft u tilise assez souvent le "Kill bit" dans ses correctifs de sécurité (il est positionné automatiquement lors de l'application du correctif) pour "révoquer" un ActiveX jugé inutile et dangereux. Ainsi, le dernier "patch cumulatif" pour Internet Explorer (voir l'avis CERT-IST/AV-2003.267) positionne le "Kill bit" sur le contrôle ActiveX "BR549.dll".
Une fois que le "Kill Bit" a été positionné, Internet Explorer n'essayera plus d'exécuter le contrôle ActiveX ainsi marqué. En effet, la séquence de traitement type de Internet Explorer, que nous listons ci-dessous, montre bien que cet indicateur est l'un des premiers contrôles effectué lorsqu'un contrôle ActiveX doit être traité :
- Internet Explorer (et plus précisément la librairie dynamique "Mshtml.dll") rencontre dans le source HTML un tag "OBJECT" et détermine le "CLSID" (identifiant) du contrôle ActiveX invoqué.
- Si la base de registre indique qu'un "Killbit" a été positionné sur ce contrôle ActiveX, le traitement est abandonné ; sinon Internet Explorer tente de le lancer (si ce contrôle ActiveX est déjà installé sur le système, le navigateur n'a pas besoin de le télécharger).
- Si le lancement de l'ActiveX échoue, le navigateur va télécharger et installer le contrôle ActiveX sur le système, en invoquant la librairie dynamique "Urlmon.dll".
Il est important de noter qu'il n'est pas nécessaire que le contrôle activeX soit déjà présent sur le système (i.e. installé) pour lui associer un "Kill Bit" : le fait de positionner un "Kill Bit" dans ce cas empêche en fait toute tentative d'installation (au travers Internet Explorer) du contrôle ActiveX.
La fonctionnalité "Kill Bit" est utilisée pour un contrôle ActiveX lorsque l'on craint que ce code mobile soit utilisé pour attaquer un poste utilisateur. Le cas le plus classique est celui où un débordement de pile est découvert sur un composant ActiveX connu. La crainte dans ce cas est que des pirates développent des pages Web provoquant l'installation du contrôle ActiveX vulnérable, puis son exécution avec des paramètres provoquant le débordement de pile.
Le "Kill bit" est cependant une solution extrême qui ne peut pas toujours être appliquée. Par exemple, il n'est pas possible par ce moyen d'interdire l'exécution des "vieilles" versions d'un ActiveX (les versions vulnérables) tout en conservant la possibilité d'exécuter des versions récentes (les versions non vulnérables). Ainsi, dans le cas de l'avis CERT-IST/AV-2002.313 (débordement de pile dans le contrôle ActiveX "Quicktime"), Apple a décidé de ne pas utiliser la fonction de "Kill bit", car cette solution aurait obligé de déclarer un nouveau contrôle ActiveX (avec un nouveau "CLSID") et de mettre à jour toutes les pages Web faisant appel à ce contrôle ActiveX.
Pour plus d'information :
- Article 240797 de la base de connaissance Microsoft : http://support.microsoft.com/?kbid=240797
- Compte-rendu WebCast "How Does Internet Component Download Work ? : http://support.microsoft.com/default.aspx?scid=%2Fservicedesks%2Fwebcasts%2Fen%2Fwc042500%2Fwct042500.asp