pt
Moulé à la louche depuis 1999
Les trucs qui m'énervent... et je vais pas prendre de pincettes
Internet, informatique, logiciel libre, économie, politique, vie courante et tout le reste...

Pourquoi Windows est-il si difficile à sécuriser ?

Mercredi 11 mars 2009

Pourquoi autant de problèmes de sécurité sous Windows ? Pourquoi Windows reste-il aussi difficile à sécuriser alors qu'il en a toutes les possibilités techniques ?

En effet il faut bien garder à l'esprit qu'il est techniquement possible de sécuriser et verrouiller Windows aussi solidement que Linux. Tous les mécanismes de sécurité sont bien là, en place et utilisables.

Mais dans la pratique, ce n'est pas le cas. Pourquoi ?

Un lourd héritage

Microsoft a toujours essayé, à tout prix, de rester compatible avec le passé. Le passé, ça remonte à MS-DOS. Et de fait, la majorité des programmes conçus pour MS-DOS 3 fonctionnent encore de nos jours sous Windows XP ou Vista. Ce n'est pas rien, mais c'est un lourd boulet à traîner.

Et l'impact sur la sécurité est important. Je m'explique: Le DOS (ainsi que les versions grand public de Windows comme Windows 95/98) a toujours été conçu pour un usage mono-utilisateur, mono-session.

Mono-utilisateur, cela veut dire que le système ne garde les réglages (couleurs, fonds d'écran, favoris, fichiers...) que pour un seul utilisateur. Donc aucun besoin de cloisonner les fichiers entre les utilisateurs. Mono-session, cela veut dire qu'un seul utilisateur travaille à la fois sur l'ordinateur.

Dans cette optique, aucun besoin de sécuriser le système (pas de gestion des droits d'accès aux fichiers, par exemple). Pourquoi embêter l'utilisateur avec une sécurité complexe alors qu'il est le seul à utiliser l'ordinateur ? Un programme pouvait donc prendre le contrôle d'un périphérique, aller écrire partout où il veut sur disque ou modifier un fichier système.

On sait bien sûr que c'était une très mauvaise idée, et que Microsoft a dû au final faire comme Unix: Mettre en place un système de sécurité pour cloisonner le système.

Seulement voilà, depuis le début, les programmeurs sous Windows ont pris une sale habitude: Ils considèrent que leur programme peut tout faire sur la machine. Comme par exemple écrire le fichier de configuration à l'endroit où est installé le programme ("C:\Program Files\nomduprogramme").

Avec la nouvelle sécurité en place, ces programmes ne fonctionneraient plus. Un programme qui essaierait d'écrire sa configuration dans le dossier où il est installé provoquerait une erreur.

Pour éviter ce problème, sous Windows XP, l'utilisateur a par défaut le droit de presque tout faire, comme aller écrire dans "\Program Files" (ou des tas d'autres choses). Bien sûr, c'était encore une mauvaise idée pour la sécurité, car si l'utilisateur peut modifier ces fichiers, les programmes malveillants le peuvent aussi. Microsoft a mis rustine sur rustine sur Windows XP pour pallier à ça (restauration système, DLL surveillées, base de registre de secours...). Mais ça n'a pas suffi.

Comment garantir la sécurité tout en permettant quand même aux programmes de fonctionner ?

Ainsi naquit l'UAC

Microsoft a donc créé - sous Vista - l'UAC. En gros, chaque fois qu'un programme essaie de faire quelque chose contraire aux règles de sécurité, on demande confirmation à l'utilisateur. Étant donné que les programmeurs ont rarement fait l'effort de corriger leur programme, l'utilisateur passe son temps à cliquer sur des boutons de confirmation. C'est pénible.

C'est un secret de polichinelle: L'UAC de Vista n'a jamais été conçu pour ennuyer les utilisateurs, mais pour ennuyer les programmeurs. Microsoft s'est dit: Les programmeurs ne vont pas vouloir que les utilisateurs soient ennuyés par des tonnes de fenêtre popup: Ils vont corriger leur programme (par exemple en écrivant leur configuration dans le répertoire utilisateur ("C:\Documents and Settings\nomutilisateur\Local Settings\nomduprogramme") au lieu du répertoire d'installation ("C:\Program Files\nomduprogramme").

Sauf que beaucoup de programmeurs n'ont pas corrigé et beaucoup de programmes sous Vista continuent de provoquer ces myriades de popups.

Du coup Microsoft a promis de revoir sa copie de l'UAC dans Windows 7. Les premiers échos que j'ai eu sont que les programmes ont la possibilité de désactiver l'UAC afin de ne pas embêter l'utilisateur... ce qui a pour effet de contourner toute la sécurité en place. Espérons que j'ai mal lu.

La façon de voir de Linux/Unix/BSD

A contrario, les programmes sous Linux (ainsi que Unix, BSD et dérivés (MacOSX)) sont tous conçus dans l'optique de respecter la sécurité dès le départ (De toute manière, sans ça, ils ne fonctionnent pas). Un programme lancé par un utilisateur ne pourra jamais modifier la configuration du système (/etc) et se cantonnera au répertoire utilisateur (/home/nomutilisateur).

Petit aparté: En plus de la sécurité, cela a une autre vertu: Quel que soit le bordel que peut mettre un utilisateur non-administrateur, il n'a aucun risque de flinguer le système ou de l'infecter, ni même de gêner les autres utilisateurs.

Au pire, il va perdre ses propres fichiers, et il suffit de supprimer et recréer son profil, et c'est reparti.

Cela permet de donner nettement plus de confiance en l'outil informatique. On peut dire à l'utilisateur: "Allez-y à fond, faites tout ce que vous voulez, explorez, essayez, testez, amusez-vous. Vous ne risquez pas de casser quoi que ce soit.".

D'expérience, je peux vous dire que cette "peur de casser quelque chose" est un frein MAJEUR pour la plupart des utilisateurs débutants. Avec ce système, on peut leur redonner confiance.

Et des Windows "cassés", j'en ai vu assez, merci bien.

Une mécanique de sécurisation complexe

La gestion des droits sous Linux (ainsi que Unix/BSD) est relativement simple et se comprend après quelques explications.

Sous Windows (depuis NT4 jusqu'a 7 en passant par 2000, XP et Vista), Microsoft a voulu voir grand. Le résultat ? Un système trop complexe à gérer (droits sur les fichiers, base de registre, etc.). Tellement compliqué que Microsoft a même inventé un langage pour décrire la sécurité des éléments du système: Le SDDL (Security Descriptor Definition Language).

De l'aveu même des ingénieurs de Microsoft, c'est trop compliqué. Vous comprenez quelque chose à "O:BAG:SYD:PAI(D;OICI;FA;;;BG)(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;BU)S:AI(AU;OICINPFA;RPDTSDWD;;;BU)(AU;OICINPSA;CCSWRPDTLOSD;;;BU)" ? Moi non.

Un système trop complexe ne sera pas utilisé, ou pire: mal utilisé. D'où - pour simplifier - les tonnes d'utilisateurs qui sont tous "administrateur" sous Windows. Seules certaines entreprises prennent la peine de sécuriser les droits, ce qui leur demande une énergie considérable (et avec des résultats parfois mitigés).

(Ceci dit, je dis que la sécurisation de Windows est complexe, mais je n'ai pas creusé SELinux et autres méthodes de sécurisations fines qui existent sous Linux.)

De fausses bonnes idées

Depuis le début, un certain nombre de personnes (dont moi) se tapent la tête contre les murs face aux fausses-bonnes idées de Microsoft.

Pourquoi, mais pourquoi inclure du code exécutable dans un document texte ? (Macros Word). Pourquoi inclure du code exécutable dans des des vidéos (WMV), des musiques (WMA), des pages web (ActiveX) ? Cette fausse bonne idée a été à la source d'innombrables problèmes de sécurité, et l'est encore aujourd'hui.

Pourquoi lancer automatiquement les CD, DVD et clé USB dès leur insertion (Autorun) ? L'utilisateur est-il trop con pour double-cliquer sur l'icône ?

Pourquoi ouvrir par défaut les services sur toutes les interfaces, toutes les IP ? (port 139 (NetBIOS/SMB), port 445 (RPC), etc.)
C'est ce qui a permis à des virus comme Blaster/Sasser d'infecter à distance des millions de PC sans la moindre intervention de l'utilisateur. C'était une connerie monumentale, encore perpétuée aujourd'hui, même si le risque est maintenant réduit par la présence d'un firewall activé par défaut.

Microsoft a toujours plein de fausses-bonnes idées de ce genre.

Système monolithique, logiciels trop intégrés

Windows est monolithique (fait d'une seule pièce) (Essayez de retirer l'explorateur de fichiers ou Internet Explorer, vous m'en direz des nouvelles.)

Cette volonté de tout faire d'un seul bloc pose des problèmes. Par exemple: La volonté acharnée de Microsoft d'intégrer le navigateur (Internet Explorer) au système (Windows). Du coup, toute faille de sécurité du premier devient une faille de sécurité du second. Mauvaise idée !

Microsoft a promis, dans Windows 7, d'isoler IE de Windows.

A contrario, Linux est modulaire. (En fait, il contient une partie monolithique (le noyau), le reste est modulaire):

  • lignes de commande (shell: bash, zsh, ksh... là où Windows n'a qu'une seul ligne de commande (cmd.exe) (si on oublie PowerShell)
  • systèmes de fichier (ext3, ext4, ReiserFS, XFS, JFS, HFS+... là où Windows se cantonne à FAT/NTFS).
  • interfaces graphiques (KDE, Gnome, XFCE... là où Windows se cantonne à son propre système (Explorer/MFC))
  • navigateurs (Firefox, Iceweasel, Konqueror, Galeon, Epiphany... là où Microsoft impose toujours IE)
  • systèmes de packaging de logiciels (deb, rpm...là où Microsoft utilise msi, voir de simples .exe)
  • organisation de l'arboresence des fichiers (FHS ou arbo spécifiques de distributions)
  • etc.

Certes c'est déroutant au début, mais cette grande variété a un impact positif sur la sécurité: Pour faire une analogie avec la biologie, une grande variété génétique assure une meilleure survie de l'espèce. Une population génétiquement très homogène risque d'être décimée plus facilement par un virus trop efficace (Non je n'utiliserai pas le terme de "consanguinité" pour qualifier Windows, juste "monoculture" ;-)

La grande variété des Linux, Unix et BSD fait qu'il est très difficile pour un virus de parvenir à infecter tous ces systèmes avec succès, à cause des légères différences.

Trop lent à corriger et délicat à mettre à jour

Tous les systèmes ont des failles de sécurité, de Windows à Linux en passant par MacOSX. Mais le nombre de failles est sans importance. L'important, c'est qu'elles soient corrigées le plus rapidement possible, afin de laisser le moins longtemps possible les utilisateurs exposés aux risques.

Et c'est là que Microsoft pêche. D'abord avec sa manie du "patch tuesday", c'est à dire la correction mensuelle des patchs, le mardi. Laisser des failles de sécurité béantes ouvertes pendant un mois ne me semble pas une bonne idée. Et encore, je ne vous parle pas de certaines failles que Microsoft a mis des mois à corriger (plus de 7 mois pour certaines). Un exemple ? La faille critique de "token kindnapping" qui date de plus d'un an, et que Microsoft n'a toujours pas corrigé.

A contrario, les autres éditeurs sont généralement plus rapides à corriger. Un exemple ? En 2006, Internet Explorer était dangereux 286 jours dans l'année. Firefox, 9 jours. Opera, 1 jour. Il ne faut pas s'étonner qu'il y ait plus de problèmes de sécurité sous Windows.

Ensuite, quand Microsoft publie une mise à jour, encore faut-il qu'elle soit installée. Microsoft a bien conçu WindowsUpdate, mais beaucoup d'internaute le désactivent. Pourquoi ? Parce qu'il y a dans la nature un nombre important de Windows piratés, et que les internautes ne veulent pas de se faire "repérer" par Microsoft. Des fois c'est le conseil "avisé" d'un "copain qui s'y connaît" et qui a désactivé WindowsUpdate "parce que c'est plus sûr" (GGGRRRRRR!).

Donc un paquet de Windows ne sont pas à jour du point de vue sécurité.

Quant aux logiciels, WindowsUpdate ne les met pas à jour. Utiliser une vielle version de Flash ou Acrobat Reader peut vous valoir une infection rien qu'en affichant une page web. C'est également une des sources majeures d'infection (J'avais déjà abordé ce point ici et ). Il n'y a pas vraiment de solution à ce problème.

Il est trop tard

De toutes manières, quelles que soient les rustines que Microsoft pourra poser sur le système de sécurité de Windows, il est trop tard. Ce qu'il faudrait à Microsoft, c'est tout casser et tout refaire. Et ça veut dire casser la compatibilité avec tous les anciens programme Dos et Windows, ce que Microsoft n'est pas prêt à faire.

Pourtant, c'est faisable.

Linux a osé casser des choses entre le noyau 2.4 et 2.6. Apple a fait encore plus fort, en mettant à la poubelle son système entier, qu'elle avait pourtant créé et fait évoluer pendant 17 ans (MacOS) pour tout refaire (MacOSX) sur la base d'un Unix. C'est couillu, et ça a payé: En plus d'être facile pour l'utilisateur et très beau graphiquement (c'est la marque d'Apple), le système a pour base un Unix solide et fiable (Darwin, basé sur BSD). Très beau travail. Il fallait oser.

C'est une course sans fin

Correctifs de sécurité de Windows, mise à jour des logiciels, antivirus, antispyware, antirootkits, firewall... ça n'aura jamais de fin tant que Microsoft sera prisonnier de sa volonté de rester compatible.