Comment sécuriser nos systèmes d'exploitation ?
Bien naïf sont ceux qui pensent qu'utiliser Linux, Mac OS X ou *BSD les met à l'abri des virus, des logiciels espions et autres malwares du genre... Pour le moment tout va bien car les OS précédents sont minoritaires et donc moins soumis aux attaques. Mais lorsque Linux se démocratisera (ce qui n'est qu'une question de temps), les problèmes seront les mêmes.Quels sont les problèmes ?
Tout d'abord, la protection des données. Sur un ordinateur le système d'exploitation est un moyen, pas une fin. Ce qui compte réellement, c'est les données. Il faut donc trouver une solution pour que même si le système est corrompu, les données soient protégées.
Le second problème est l'utilisateur, l'utilisateur d'un ordinateur doit être considéré bête. Il faut bien reconnaître que ni ma mère, ni le gamin du voisin, ni ma boulangère ne s'y connaît en sécurité. Il faut donc protéger ces utilisateurs de leur ignorance.
Prenons pour exemple les pare-feux applicatifs. Question typique :
Le programme win32_toto.exe tente d'accéder à l'ordinateur distant 56.96.128.173 sur le port 12569 en utilisant le port local 28965. Souhaitez vous autoriser cette opération ?
[OUI] [NON]
Elle en pense quoi Mme Michu de cette question ? Pour éviter les ennuis elle va répondre "Oui", bien qu'elle ne connaisse absolument pas les conséquences de son action. Idem pour les pilotes non signés par Microsoft, encore idem pour les applications Java dont la signature n'est pas valide, ...
L'utilisateur est bête, il ne faut pas lui poser de question !
Quelles solutions alors ?
Poser les problèmes c'est bien, apporter des solutions c'est mieux. C'est un domaine très complexe. Je n'ai pas la prétention d'apporter LA solution, juste exposer quelques idées qui, selon moi, méritent d'être creusées.
Système de fichiers versionnés
Selon Apple, seulement 30% des gens font des sauvegardes dont 4% le font de manière automatique. Autant dire que les utilisateurs sont à la merci d'un virus qui écraserait toutes leurs données. Une des solutions consiste à interdire à l'écriture tous les fichiers. Difficilement envisageable car les utilisateurs ont besoin de modifier leurs données et puis un virus pourrait toujours passer super-utilisateur et obtiendrait alors les droits qu'il veut.
Une solution est le versionnage des fichiers, un peu à la manière de Subversion. Lorsqu'un fichier est modifié, son ancienne version est automatiquement conservée. Il faut évidemment s'assurer que personne ne puisse supprimer l'historique d'un fichier, sans quoi ce système n'a plus d'intérêt. Pour éviter la consommation abusive des ressources, on peut envisager une purge régulière des versions trop anciennes (une à deux semaines).
Dans les systèmes de fichiers pouvant proposer le versionnage il y a les systèmes de fichiers versionnés "pur" et les systèmes de fichiers gérant le snapshot. Dans la première catégorie on trouve cvsfs ou svnfs qui se basent respectivement sur CVS et Subversion. Dans la seconde catégorie on trouve entre autre ZFS, système de fichiers dont j'ai plusieurs fois parlé ici.
Les cages logiciels
Un malware ne doit pas pouvoir accéder aux données des utilisateurs. Comment distinguer un malware d'un logiciel légitime ? La solution des anti-virus est clairement la mauvaise voie, un anti-virus aura toujours un train de retard. Il faut donc être plus radical : aucun logiciels ne doit pouvoir accéder aux fichiers des utilisateurs. Très beau concept qui nous permet de mettre à la poubelle presque tous les logiciels qui nous sont utile, comme les traitements de texte.
La meilleure politique de sécurité envisageable est l'interdiction totale puis l'autorisation au cas par cas. Faisons de même pour notre traitement de texte. L'idée est que chaque logiciel s'exécute dans une cage logicielle (sandbox). De cette façon, un logiciel n'a accès à aucun fichiers sauf ceux nécessaires à son propre fonctionnement (fichier de configuration, librairie, ...). Toute la complexité réside dans la possibilité à rendre certains fichiers personnels accessible au logiciel sans que l'utilisateur novice en ait conscience. Principe de base : l'utilisateur doit être à l'origine de la mise à disposition du fichier pour l'application. Généralement, lorsque l'on souhaite ouvrir un fichier dans notre traitement de texte, on a le droit à une belle boite de dialogue ouvrir un fichier. C'est par là que l'inclusion du fichier dans la sandbox doit se faire, lorsque l'utilisateur choisit d'ouvrir un fichier, celui ci est rendu disponible au logiciel le temps de la session (jusqu'à la fermeture du logiciel).
Bien que cette approche soit valide dans un monde graphique, le monde console existe également. À ce niveau, la boite de dialogue ne peut être envisagée. Il faut donc trouver une autre solution
Note : J'ai commencé la rédaction de ce billet il y a un bon moment. Depuis j'ai découvert ce projet qui met exactement en œuvre ce dont je parle : http://plash.beasts.org/, et qui en plus l'applique indifféremment au monde graphique ou console !
L'accès au réseau
Dans un monde où le réseau tiens de plus en plus de place, il est là aussi nécessaire d'effectuer un contrôle rigoureux des communications. Exit les logiciels espions et les bots qui spamment où lancent des attaques en règles. Comme à chaque fois, on va commencer par interdire tous les accès au réseau. Premièrement, déterminer quels accès sont légitimes et lesquels sont illégitimes. Par exemple, OpenOffice.org qui nécessite une connexion à Internet pour télécharger les dictionnaires : illégitimes. Par contre, Firefox pour naviguer sur Internet : légitime. Pourtant, elle est bien utile cette fonctionnalité de OpenOffice.org me direz-vous. Oui mais...
Les dépots logiciel
...ce type de fonctionnalité doit être confiées au système d'exploitation. Le système d'exploitation gère l'installation et la désinstallation des logiciels. Pourquoi ne devrait il pas gérer les mises à jour. Les distributions issues du monde libre ont très bien intégré ce principe. Chaque logiciel est un paquet qui peut être installé, désinstallé ou mis à jour. Mais si ce modèle s'applique très bien aux logiciels libre, les logiciels propriétaires ne peuvent pas être redistribués de la même façon, problème de licence. Et bien, si ces logiciels ne peuvent pas être distribué par l'éditeur du système d'exploitation, pourquoi l'éditeur du logiciel ne créerait-il pas son propre dépot avec ses logiciels. Sur ce point, une réflexion mérite d'être menée afin de définir les modalités d'accès au dépot (gratuit/payant, versions disponibles, ...)
Le proxy applicatif
Puisqu'il n'est pas raisonnable de tenir à jour une liste des logiciels qui accèdent au réseau, il faut contrôler les communications afin de tenter de détecter les comportements anormaux.
L'idée est que le système d'exploitation intègre un proxy applicatif :
- un proxy HTTP pour vérifier quel type de données transitent vers le port 21 (pour éviter la fuite d'information vers un serveur FTP),
- un proxy SMTP pour contrôler le nombre de messages électroniques envoyé afin de lutter contre les bots,
- ...
Évidement, toute connexion directe doit être bannie. Néanmoins, certains logiciels comme les jeux ne pourront pas se satisfaire de ce type de barrière car ils implémentent bien souvent des protocoles propriétaires.
Conclusion
Je n'ai abordé ici que les problèmes de sécurité logicielle. Mais toutes les mesures évoquées ici n'ont aucun intérêt si le poste n'est pas physiquement sécurisé. il convient donc de fermer solidement le boitier de l'ordinateur, d'empêcher le démarrage sur CDROM, clé USB ou autre et de verrouiller le BIOS par mot de passe. Enfin, le chiffrement du système de fichiers est à conseiller, sans quoi un intrus pourrait introduire un malware modifiant le disque dur depuis un autre ordinateur.
La sécurité est une science à laquelle je ne suis pas formé, j'ai simplement tenté de décrire mes idées avec leurs points faible. Il semble d'ailleurs que certaines de ces idées ait germé dans d'autres esprits.
Soyez sans crainte, d'autres veillent sur nous...
Commentaires
Linux va se démocratiser, ça me paraît évident. Reste juste à savoir quand. Ça prendra clairement plusieurs années (10-15) pour que le monopole de Windows commence à s'effriter sensiblement. Que MacOS prenne sa part du gâteau me semble normal. Linux ne prendra pas tout, ce n'est pas souhaitable d'ailleurs.
Au final, l'important c'est que le marché se re-équilibre pour éviter l'abus de monopole. C'est comme pour les traitements de texte. Je me fiche du traitement de texte qu'utilise les gens, du moment que le format de fichier est normalisé.
Petite note : ce dont je parle, Apple l'a annoncé dans Leopard le 11/06/2007. Reste juste à l'essayer pour voir ce que ça donne.

Enfin, cher cousin, je t'ai connu plus réaliste ! cela fait 15 ans que j'entends ce discours : "Les gens auront marre de windows, et c'est linux qui sera la pour eux".
Deux erreurs dans ce postulat :
- Les gens sont cons. Windows est une sombre merde, surtout vista (lire le bilan 4 mois après sur Clubic, c'est amusant)... et pourtant ils n'iront pas voir ailleurs.
- Entre temps, le plantogene MacOS 7 est devenu un fiable, stable, élégant MacOS X 10.4... Les macs sont devenus utilisables et surtout, ils sont devenus bons marchés (l'iMac 20'' a 1500 €, par exemple)
Linux aurait pu marché, si les développeurs avaient décidés d'en faire un système simple et fiable. Mais il faut être honete : le développeur typique Linux (barbu, boutonneux et associal -je me fais des amis-) n'est souvent pas un spécialiste de l'IHM de génie. "Comment ca, la ménagère de moins de 50 ans ne maitrise pas le Terminal ?"
Je suis convaincu que Linux ne percera jamais.
C'est fini, baissez le rideau.