La sécurité de la virtualisation : suite et fin

Cet article complète le précédent sur le sujet de la sécurité de la virtualisation en abordant l’aspect réseau de stockage et essaye de présenter les risques réels de sécurité des plateformes de virtualisation. Il s’agira également du dernier billet sur ce sujet bien que je compte revenir sur ce sujet par la suite.

La sécurisation du stockage

La virtualisation n’ajoute pas de risque particulier à partir du moment où l’on suppose que l’attaquant dispose d’un accès physique aux données. Ce type d’exploit est donc uniquement inhérent au stockage sur disque.

Les réseaux de stockage en Fibrechannel n’ajoutent également pas de risque particulier. Seul les hyperviseurs ont accès aux supports de stockage distribués par le réseau de stockage. De plus, il est possible de gérer finement les accès aux différents supports de disque par les biais des techniques de « zoning ». Le zoning est une technique équivalente aux « Private VLAN » de Cisco dans le cas des réseaux Ethernet.

Contrairement à ce qui a été présenté Samedi dernier, la connexion des équipements Fibrechannel au réseau Ethernet n’ouvre pas de faille supplémentaire. Il n’est pas possible d’utiliser cette interface pour accéder aux données transitant sur le réseau de stockage. L’interface Ethernet permet uniquement d’accéder aux informations de configuration du commutateur.

Supposons qu’il soit possible d’accéder aux données transitant sur le réseau Fibrechannel par le biais de cette interface Ethernet. Toute tentative de spoofing d’adresse MAC serait parfaitement inutile car les réseaux Fibrechannel n’utilisent pas d’adresses MAC mais des WWN qui n’ont rien à voir. Les protocoles de communication sont différents et ne sont pas compatibles.

Cette problématique est cependant intéressante dans le cas des réseaux iSCSI qui n’ont même pas été mentionnés. Il n’est absolument pas souhaitable que les LAN iSCSI soient routables vers d’autres réseaux. Il est même recommandé d’avoir des équipements uniquement dédiés aux fonctionnalités iSCSI dans la mesure du possible.

Récapitulons…

Les potentielles interfaces d’attaque vers les hyperviseurs sont très peu nombreuses. Dans le cas de la virtualisation totale et de la virtualisation matérielle assistée, ces interfaces sont même inexistantes. Dans le cas des interfaces de paravirtualisation, leur utilisation est standardisée par le biais d’API mais la découverte de failles reste envisageable bien qu’aucune n’ait été trouvée à ce jour.

Les mécanismes de DoS sont régulés voire supprimés par les mécanismes classiques d’ordonnancement présents dans toutes les solutions de virtualisation.

Quels sont les risques ?

Les risques réels de sécurité inhérents aux plateformes de virtualisation se situent, d’une part, au niveau des interface de gestion. Les interfaces de gestion ne sont pas propres à la virtualisation mais leur utilisation dans ce cas particulier est généralisé.

L’accès aux interfaces de gestion doivent être sécurisés par les mécanismes réseau traditionnels ainsi que par le biais de méthodes d’authentification. Dans le cas d’une compromission de ces interfaces, les données et l’accès aux machines virtuelles reste indemne. Les interfaces ne disposent généralement pas d’accès particulier aux données, elles disposent uniquement d’une vue globale permettant la configuration des supports de stockage. En ce qui concerne l’accès aux VM, il reste protégé par les protections classiques telles que le couple login et mot de passe. Le passage dans des modes plus privilégiés attireraient inévitablement l’attention car cela nécessiterait des redémarrages non planifiés.

Conclusion

Traditionnellement, on considère qu’une technologie est sécurisée jusqu’à preuve du contraire. Il n’est pas utile de céder au sensationnalisme en décriant des potentielles failles qui n’ont pas été découvertes et qui n’ont jamais été exploitées (dans le cas de Xen).

Si nous suivons cette supposition traditionnelle, nous pouvons affirmer que la virtualisation est une technologie sécurisée. Comme toute technologie informatique, il est nécessaire d’être vigilant lors de son implémentation en suivant quelques règles de bon sens.

Pour revenir au sujet de la présentation effectué lors de la nuit du hack, j’ai été largement déçu par cette présentation aux conclusions au mieux hâtives et des nombreuses autres imprécisions que je n’ai pas évoqué ici.

La sécurité de la virtualisation

Ce weekend avait lieu la Nuit du Hack 2010. Il s’agit d’un événement orienté vers tous les types de hacking. De nombreuses conférences étaient proposées au public venu pour l’occasion avec notamment une présentation du hacking de l’iPhone et de la PS3.

Une présentation a particulièrement attiré mon attention mais pas pour de bonnes raisons. En fin de soirée avait lieu une conférence intitulé « Virtualisation et sécurité ». J’attendais donc avec impatience cette conférence. Autant dire que cela a été une grande déception. Le sujet était traité d’un point de vue beaucoup trop global mais, surtout, les informations soutenues étaient plus que discutables.

Je vais donc profiter de cette espace pour tenter d’éclaircir certains points par rapport à la sécurité de la virtualisation.

Classification

Avant de plonger dans l’étude à proprement dit de la sécurité dans la virtualisation, il est intéressant de se replonger dans la classification des solutions. Lors de la présentation, il avait été différencié les types de virtualisation suivants : « full virtualisation », « paravirtualisation » et « hyperviseurs ».

Un hyperviseur n’est pas un type de virtualisation mais une application qui peut effectuer de la virtualisation. Il est possible de les classifier selon deux catégories bien que cette division ne me plaise pas particulièrement.

La sécurisation de l’hyperviseur : DoS & DDoS

Lors de la présentation, le DoS (Denial of Service) et le DDoS (Distributed Denial of Service) ont été désignés comme des solutions simples et efficaces de neutraliser une plateforme de virtualisation.

Dans le cas de Xen, il est pratiquement impossible de communiquer avec l’hyperviseur. Il ne faut bien sur par confondre hyperviseur et domaine 0 (ou console de gestion dans le cas de VMWare). L’attaque DoS est donc difficile à imaginer dès le départ. L’interface de communication avec l’hyperviseur dont nous disposons est l’API des hypercalls, remplaçants des appels systèmes classiques dans le cas de la paravirtualisation.

L’utilisation des ces hypercalls est limitée par les algorithmes d’ordonnancement système ce qui empêche une utilisation abusive. Il s’agit du même mécanisme que celui utilisé pour le partage des ressources physiques. Le DoS semble donc impossible par ce biais.

Les outils d’administration sont également un potentiel point d’entrée supplémentaire. Ces outils ne sont accessibles qu’à partir du domaine 0 qui peut difficilement être considéré en tant que VM comme les autres. Un attaque DoS sur le domaine 0 rendrait les mêmes résultats qu’une attaque DoS sur les autres machines virtuelles étant donné les mécanismes d’ordonnancement.

La communication avec l’hyperviseur n’étant possible que par ces interfaces, il parait impossible d’y effectuer une attaque DoS capable d’atteindre toutes les machines virtuelles de la plateforme.

La sécurisation de l’hyperviseur : cloisonnement

Le cloisonnement des machines virtuelles est bien sûr une caractéristique élémentaire d’une plateforme de virtualisation. Contrairement à ce qui a été dit, l’hyperviseur n’a pas « la main » sur les machines virtuelles. Il a simplement la possibilité de les éteindre, de les démarrer ou de les mettre en pause. Ni plus, ni moins.

Le cloisonnement est géré par la restriction des accès mémoire. Les hyperviseurs ont été spécifiquement prévus afin d’éviter un débordement des accès vers la mémoire. Le seul vecteur d’exploitation de ce type de faille est les hypercalls dans le cas de Xen. A ce jour aucune faille connu permet d’accéder à des zones mémoires non autorisées.

De plus dans le cas de la virtualisation totale et de la virtualisation matérielle assistée, les machines virtuelles ne disposent même pas d’interface spécifique avec l’hyperviseur ce qui rend pratiquement impraticable de ce type de vulnérabilité.

Les risques d’erreur de cloisonnement ne sont pas inexistants bien entendu cependant il ne faut pas perdre de vue qu’il s’agit de l’objectif même de la conception de l’hyperviseur et que les machines virtuelles disposent de très peu ou aucune interface de communication avec l’hyperviseur afin de l’induire en erreur.

Dans le prochain (et dernier épisode), nous étudierons les autres points abordés lors de la présentation et les risques réels associés à la virtualisation. Loin de moi l’idée de prêcher la sécurisation totale de la virtualisation, je pense cependant qu’il est très facile et réducteur d’agiter des menaces sans fondement pratique.

Blogiversaire !

Le premier article de ce blog date du 29 Mai 2009. Ca fait donc juste un peu plus d’un an que ce blog existe désormais ! Je sais, je l’ai raté de quelques jours mais je ne pensais vraiment pas que ca faisait déjà un an que ce blog existait. Un an de blog ca donne une occasion de faire un petit point sur le passé et l’avenir !

Bilan

L’objectif initial de ce blog était de m’occuper pendant mon stage de 4ème année qui devait durer 6 mois. Cet objectif bien que peu louable a été relativement bien rempli. Ce blog m’a permis de faire passer du temps lors de ce stage. Cet objectif a même été dépassé car je continue à écrire régulièrement ici même depuis la fin de ce stage et la reprise de mes études.

Un autre objectif était de partager des informations qui pourraient aider d’autres personnes tombant sur ce blog par divers biais. L’atteinte de cet objectif est relativement difficile à évaluer mais je souhaite croire que c’est le cas. Certains commentaires me l’ont confirmé. Commentaires auxquels j’essaye de répondre assez rapidement (peut être trop des fois d’ailleurs) grâce au Blackberry ainsi qu’au HTC Dream (désormais à la poubelle).

Au niveau des thèmes traités sur ce blog, je pense qu’ils sont assez fortement variés. Si on reprend l’en tête de ce blog, les sujets mentionnés sont les suivants : « Sécurité informatique, virtualisation, administration système et réseaux ». Quel programme ! Je ne pense pas avoir traité beaucoup de sécurité informatique ce qui est un tort car il s’agit d’un sujet qui m’intéresse particulièrement. J’ai beaucoup traité de virtualisation au début bien que ce sujet ait un peu été délaissé récemment. J’ai beaucoup parlé d’administration système récemment alors que j’en parlais relativement peu au début. Le réseau a été évoqué longuement à travers l’Utt Arena et les VRF.

Je pense que ce blog oscille entre ces quatre sujets en fonction de ma motivation ce qui est une bonne chose. Le cantonnement à un seul sujet sera particulièrement difficile à tenir et serait source de démotivation.

En ce qui concerne la gestion de mon identité numérique, j’estime que c’est un très bon début. Ce blog a fait disparaitre de la première page de Google bon nombre de résultats parasites. Pour le reste, on verra bien.

Quelques statistiques pour ceux que ca pourrait intéresser :

  • Nombre de pages vues : 55.000
  • Nombre de visiteurs : 30.000
  • Abonnés au flux RSS : 125

Avenir

J’entends bien entendu continuer ce blog sur cette lancée. Les échanges résultants sont très intéressants et me permettent de confronter ma compréhension de différents sujets à celle d’autres personnes.

Je souhaite tenter l’expérience qui consisterait à publier des billets n’ayant pas de rapport avec l’informatique mais avec mes autres activités.

J’ai déjà prévu d’effectuer une série de billets sur les réseaux de stockage car il s’agit d’un sujet exceptionnellement intéressant. J’ai également prévu de parler plus en détail d’OpenVPN car je passe pas mal de temps dessus en ce moment. Pour le reste, ce sera comme d’habitude, en fonction de mon humeur.

J’ai encore écrit un billet beaucoup trop long ! Je vais supposer que vous êtes habitués aux longs articles depuis le temps. Finalement, je vous remercie de lire mon blog car c’est grâce à cela que je trouve la motivation d’écrire.

Le futur d’OpenSolaris

Ce billet marque une petite pause dans les billets sur la gestion du réseau d’une LAN Party. Au début de ce blog, j’avais annoncé que je ne souhaitais pas être un blog traitant de l’actualité au jour le jour car il en existe déjà de nombreux. Je vais donc traiter aujourd’hui de l’actualité d’OpenSolaris suite au rachat de Sun par Oracle.

Vous le savez sans aucun doute tous, Oracle a racheté Sun suite à de nombreuses négociations avec les différentes autorités notamment européennes. Sun est un grand groupe informatique relativement peu connu du grand public aujourd’hui mais qui a largement participé à l’expansion de l’informatique tel que nous la connaissons aujourd’hui. Les produits les plus connus de Sun sont la base de données MySQL, le système d’exploitation Solaris et la plateforme Java. Oracle est également un grand groupe dont le cœur de métier est la base de données dans toutes ses formes.

Annonces faites par Oracle

Dès l’annonce du rachat, Oracle a manifesté un fort intérêt pour Solaris contrairement aux intentions que certains ont pu lui prêter. L’annonce d’un investissement massif, supérieur à celui de Sun, dans Solaris a rapidement été évoqué. Le futur de Solaris n’a jamais été mis en doute. La réelle modification apportée par Oracle est la suppression de la gratuité de Solaris.  Ceci se comprend dans la mesure où Solaris est un système d’exploitation réellement orienté vers les infrastructures à très haute disponibilité. Qui dit haute disponibilité, dit coûts. C’est donc une évolution relativement logique pour viabiliser cet OS.

La gestion par Sun de Solaris faisait qu’il était possible pour une société de payer une souscription Solaris pour un seul serveur et ensuite de propager toutes les mises à jour sur tous leurs serveurs. Oracle a voulu, assez logiquement, supprimer cela en introduisant la notion de contrats équivalents sur tous les serveurs. De plus, Oracle a annoncé que toutes les fonctionnalités ne seraient pas incluses dans Solaris ce qui était déjà le cas à l’époque de Sun. Il s’agit cependant de fonctionnalités ultra-spécifiques. Le cheminement naturel est plutôt d’introduire les fonctionnalités OpenSolaris vers Solaris.

La situation d’OpenSolaris

Parlons désormais d’OpenSolaris. De la même manière que GNU n’est pas Linux, OpenSolaris n’est pas Solaris. OpenSolaris est à Solaris ce qu’est Fedora à Red Hat.

OpenSolaris est effectivement un logiciel libre bien que pas sous licence GNU/GPL.  Sur les mailing-list associées à ce projet, il a été fait une étude des éléments qui seraient à recréer si Oracle reniait OpenSolaris. Seul une centaine d’éléments non critiques seraient à revoir dont une bonne partie sont déjà en cours de réécriture.

Enfin une annonce !

L’erreur d’Oracle a surement été leur mutisme par rapport au futur d’OpenSolaris. Ceci est cependant terminé car Oracle sont sortis de leur silence et ont annoncé qu’il continueraient à soutenir ce projet. Je vous laisse consulter la présentation qui a été faite afin que vous puissiez vous faire votre propre idée.

Oracle is investing more in Solaris than Sun did prior to the acquisition, and will continue to contribute innovative technologies to OpenSolaris, as Oracle already does for many other open source projects

Oracle will continue to make OpenSolaris available as open source and Oracle will continue to actively support and participate in the OpenSolaris community

Toutes les annonces de la mort d’OpenSolaris sont fausses et basées sur le simple silence d’Oracle à ce sujet. De plus, ces fausses annonces ont été fortement relayées sur tous les sites d’informatique. Par contre, lorsqu’Oracle annonce le maintien du projet, l’annonce est pratiquement inaudible et invisible.

Récit d’une « petite » erreur

Cette journée fut particulièrement mouvementée. Bien évidemment, ce n’était pas prévu et tout s’annonçait paisible tel un Vendredi classique. J’avais prévu deux transferts planifiés de sites dont le transfert avait été minutieusement préparé et répété. Une migration parfaitement classique.

Je me rends compte qu’il est nécessaire de modifier le fichiers de VirtualHost de tous les sites web du serveur Apache. Les Virtualhost sont les fichiers de configuration de site d’Apache. Au lieu de mettre « <Virtualhost IP> », il est nécessaire de mettre « <Virtualhost IP:port> ». Il n’était pas question de tout modifier à la main, il y a plus de 200 fichiers. Par sécurité, j’ai effectué une sauvegarde du répertoire sites-enabled. Dans ce cas, un script était nécessaire. Je code cela rapidement :

for i in `ls -1 .`; do cat $i | sed ‘s/<Virtualhost IP>/<Virtualhost IP:port>/g’ > $i; done

Et là, c’est le drame.

Ce petit script est, hélas, syntaxiquement correct. Il remplace bien les deux chaines de caractère comme je souhaitais qu’il le fasse. Il a été exécuté en root car je travaille toujours en root par simplicité. Si vous regardez de plus près, vous remarquerez qu’il écrit dans le même fichier qu’il lit. Erreur fatale. Ceci signifie la suppression de tous les fichiers du répertoire courant. Tous. Tous les Virtualhost disparus. Quant à la sauvegarde du répertoire sites-enabled ? Inutile car ce sont des liens symboliques.

Houston, we have a problem.

Quelques minutes suffisent pour se rendre compte de l’erreur commise par ce script en apparence anodin. Les sauvegardes, me diriez-vous. J’apprends qu’elles sont en erreur depuis longtemps. Par chance, une copie de la machine virtuelle était présente sur l’ancien serveur VMWare duquelle elle avait été migré avant-hier. La récupération d’une bonne partie des Virtualhost a été possible jusqu’à ce point. Sauf que nous avions transféré 120 sites hier. Cette erreur n’a pas créé d’indisponibilité car Apache mémorise la configuration. Un restart serait par contre fatal.

Il ne reste plus qu’une solution : créer un script à partir de la configuration de l’ancien serveur pour recréer tous les Virtualhost créés hier. Deux heures de développement d’un script pas si simple dans un des langages les plus moches sur Terre : Bash. Une heure de debug du script. Après trois heures de stress intense et d’activité cérébrale, les Virtualhost avaient été recréés. Quelques Virtualhost ont du être récréés à la main car le script n’avait pas fonctionné avec.

Finalement, Apache accepte les Virtualhost créés par mon script. Je suis sauvé.

Je pense qu’il est important de tirer les enseignements de ses erreurs. Dans ce cas, il va falloir que j’apprenne à utiliser sed et à ne plus jamais scripter sur un serveur de production. Nous faisons tous des erreurs et nous devons donc nous assurer que ces erreurs seront inoffensives. Dans ce cas, la protection face à l’erreur a été inutile à cause d’un élément technique dont j’avais parfaitement conscience. Un petit moment d’inattention a suffit pour tout faire basculer.

Au final, il y a deux types d’administrateurs système : ceux qui ont déjà tout cassé à cause d’une erreur de script et ceux qui vont le faire.

Quelques favoris qui pourraient être utiles

L’activité sur ce blog se fait discrète en ce moment, je vous l’accorde. Pour la fin du mois de Décembre et le début du mois de Janvier, j’avais l’excuse des fêtes de fin d’année. Nous en sommes désormais relativement loin. J’avoues que la motivation se fait plus rare en ce moment mais elle devrait revenir.

A travers ce rapide article, je souhaiterais partager avec vous une sélection de pages web que j’ai eu l’occasion de rencontrer. Ceci vous permettra peut être de découvrir de nouveaux sites ou bien d’en redécouvrir d’anciens. Certains de ces liens sont peut être un peu datés mais ils devraient toujours être utiles.

Configurer Ubuntu en tant que routeur Wifi (lien) : Un petit tutoriel qui vous expliquera comment configurer une Ubuntu en tant que routeur wifi. Ca peut paraitre simple mais ca ne l’est pas forcément.

Installation d’un « pack » de détection d’intrusion (lien) : Tutoriel vous expliquant l’installation de Snort, OSSEC, Prelude sur une Ubuntu. Fonctionne sur Debian également.

Interview du Lt. Col. John Bircher sur la cybersécurité (lien) : Interview d’un officier chargé de la cybersécurité dans l’armée américaine.

Tableau de bord de la sécurité réseau (lien) : Excellent livre traitant de nombreux aspects de la sécurité informatique.

Configuration de Xen dans le cas de domaines HVM (lien) : Article extrait de la documentation SuSe explicitant la configuration et l’utilisation d’un domaine HVM sous Xen. Tout à fait applicable à n’importe quelle installation Xen.

Croix Rouge Française de Paris 9ème (lien) : Site de la délégation locale Croix Rouge où je suis bénévole.

Configuration des quotas sous Debian (lien)

Optimisation de performances Postfix (lien) : Page de la documentation détaillant l’optimisation des performances d’un serveur Postfix.

Installation de grsec sur un noyau Linux (lien)

La gestion des services sous Solaris (lien) : Article de documentation détaillant le fonctionnement du SMF de Solaris 10 de la gestion à la création de services.

Installation de Wireshark sur MacOS X (lien) : Documentation indispensable pour pouvoir installer Wireshark sur MacOS.