Résumé
De plus en plus de personnes et d’entreprises stockent leurs données et déploient leurs applications dans des infrastructures de Cloud computing qui présentent l’avantage d’offrir des ressources informatiques performantes, flexibles et peu coûteuses. L’adoption massive de ces infrastructures qui concentrent des données et des applications parfois sensibles en fait une cible privilégiée des attaques informatiques, d’où l’importance de la supervision de sécurité dans le cloud. Yacine Hebbal et Sylvie Laniepce, ingénieurs de recherche au département sécurité d’Orange, présentent NoGap, une nouvelle technologie de supervision de sécurité qui opère depuis l’infrastructure du cloud. NoGap permet, depuis l’hyperviseur [1], de reconstruire à partir d’une vue binaire, une vue sémantique de l’activité des machines virtuelles hébergées dans le cloud et d’exposer cette vue à des applications notamment de sécurité pour permettre de détecter des intrusions par exemple. Cela permet d’envisager deux familles d’applications de NoGap : des services nouveaux basés sur l’hyperviseur – typiquement du Security-as-a-Service – mais aussi des fonctionnalités enrichies ayant par exemple trait au réseau et à l’allocation de ressources.
Article complet
De plus en plus de personnes et d’entreprises stockent leurs données et déploient leurs applications dans des infrastructures de Cloud computing qui offrent des ressources informatiques performantes, flexibles et pas chers. L’adoption massive de ces infrastructures qui concentrent des données et des applications sensibles les rend une cible privilégiée des attaques informatiques, d’où l’importance de la supervision de sécurité dans le cloud. Cet article présente NoGap, une nouvelle technologie de supervision de sécurité qui opère depuis l’infrastructure du cloud. NoGap a fait l’objet d’une démo au Salon de la Recherche de Orange.
Introduction :
Dans l’architecture d’un environnement cloud [1], on trouve comme illustré dans la figure1 au moins un serveur avec des ressources physiques sur lequel s’exécute une couche logicielle de virtualisation (hyperviseur) [2] qui permet de partager ces ressources entre différents environnements virtuels appartenant à différents utilisateurs du cloud. Ces environnements connus sous le nom de Machines Virtuelles (VMs) s’exécutent simultanément sur un même serveur physique et chacun d’entre eux exécute un système d’exploitation (OS) et de multiples applications comme une machine physique. Notre technologie présentée au Salon de la Recherche s’intéresse à la supervision de sécurité de ces VMs.
Dans un environnement cloud, trois approches de supervision de la sécurité des VMs sont possibles [3], dont deux traditionnelles. Ces approches sont illustrées dans la figure 2 :
Tout d’abord l’approche dite « host-based », représentative d’un antivirus. Dans ce cas, l’entité de supervision a une excellente visibilité sur les activités de la VM, elle voit tout puisqu’elle est à l’intérieur de la VM. Donc elle est d’analyser les activités de la VM et détecter celles qui représentent un caractère malveillant. Par contre, l’entité de supervision de sécurité n’est pas isolée de la VM puisqu’elle se trouve à l’intérieur de celle-ci ; elle est donc aussi exposée aux attaques visant la VM.
Une seconde approche dite « network-based », représentative d’un pare-feu (firewall) au niveau réseau, consiste à examiner l’information que s’échangent via le réseau les VMs pour juger de leur sécurité. Cette fois, la situation est inverse. Le système de supervision de sécurité est correctement isolé des VMs car il se trouve à l’extérieur de celles-ci mais sa visibilité des activités des VMs est moindre puisqu’il faut juger de leur sécurité à partir de la seule visibilité sur les paquets réseau.
En fin, il existe une troisième voie de supervision de sécurité, ouverte grâce à la virtualisation [2]. Dans ce cas, on examine l’empreinte laissée par l’activité des VMs au niveau de l’hyperviseur pour juger de leur sécurité. Cette fois, les deux critères sont bons. Le système de supervision de la sécurité est correctement isolé des VMs puisqu’il est au niveau de l’hyperviseur, donc à l’extérieur de celles-ci. Et il a une bonne visibilité sur leurs activités puisque l’hyperviseur s’interpose entre les VMs et les ressources que celles-ci consomment.
Par contre, l’hyperviseur voit tout mais, dit simplement, « ne comprend rien » car il voit les activités des VMs comme des 0 et des 1 à travers une vue brute comme illustrée dans la figure 3. Or pour superviser la sécurité des VMs, l’hyperviseur a besoin d’une vue sémantique, c’est-à-dire riche qui prend en compte des processus, des fichiers, des appels systèmes, etc. Cet écart entre la vue brute disponible à l’hyperviseur et la vue sémantique dont il a besoin pour superviser la sécurité des VMs est appelé le « gap sémantique » et c’est la difficulté à résoudre pour cette approche basée sur l’hyperviseur. Notre solution NoGap résout ce challenge et franchit le gap sémantique [4].
NoGap est une technique de supervision de la sécurité qui opère depuis l’hyperviseur. Il permet de reconstruire à partir de la vue binaire une vue sémantique exploitable pour superviser la sécurité des VMs hébergées. NoGap peut donc doter nos infrastructures d’une capacité de supervision sémantique de la sécurité des VMs hébergées.
NoGap :
L’idée derrière NoGap est que les activités d’une VM intéressantes pour la supervision de la sécurité soient effectuées par des fonctions dans le code noyau de la VM (fonctions noyau). Par exemple, la gestion de la mémoire (allocation et libération), des processus (lancement, arrêt, ordonnancement), du réseau (ouverture et fermeture de connexion, envoi et réception de paquets) sont toutes effectuées par des fonctions noyau de la VM. Aussi, toutes les données qui concernent ces aspects là sont crées, utilisées et supprimées par des fonctions noyau. Donc les fonctions noyau connaissent les adresses et la structuration de ces données. En fin, l’ensemble des fonctions noyau est auto suffisant, c’est-à-dire que les fonctions noyau connaissent tout ce qu’il faut pour que le noyau d’une VM s’exécute correctement. Donc le code des fonctions noyau est riche en termes d’information sémantique.
Pour franchir le gap sémantique, NoGap procède en deux étapes. Dans la première étape NoGap identifie les adresses et les noms des fonctions noyau dans la mémoire d’une VM puis dans une deuxième étape il les instrumente (c.-à-d. intercepte, appelle ou analyse) pour avoir des informations sémantiques sur les activités et les données de la VM.
Une première difficulté pour cette approche est que l’emplacement du code noyau dans la mémoire de la VM est inconnu pour l’hyperviseur car d’une part il est dépendant du type et de la version de l’OS qui s’exécute dans la VM et d’autre part il change de manière aléatoire au redémarrage de la VM pour des raisons de sécurité. La deuxième difficulté est qu’il n’existe pas d’instructions spécifiques qui marquent les adresses de début et de fin d’une fonction.
Donc, le principal challenge dans l’approche de NoGap réside dans l’identification des adresses et des noms des fonctions noyau dans la mémoire de la VM de façon rapide, automatique, indépendante de l’OS (générique) et sans connaissance au préalable de quel OS s’exécute dans la mémoire de la VM (en boîte noire). Toutes ces propriétés sont requises pour déployer ce genre de technologie dans un cloud de type Infrastructure-as-a-Service (IaaS).
Pour résoudre ces difficultés, NoGap localise le code noyau dans la mémoire de la VM fragment par fragment à partir d’une seule instruction noyau arbitraire identifiée automatiquement depuis l’hyperviseur dans la mémoire de la VM [5]. Ensuite, NoGap déduit les adresses et les noms des fonctions noyau grâce aux adresses et signatures binaire (calculées avec la fonction de hachage MD5 [6]) des fragments localisés dans le code noyau.
NoGap satisfait les propriétés requises pour un déploiement dans un cloud IaaS et permet d’identifier la majorité des adresses et des noms des fonctions noyau dans une VM (près de 75 % des fonctions en moyenne). Il n’existe pas d’équivalent dans l’état de l’art et l’approche de NoGap a été brevetée [7].
Une fois les adresses et les noms des fonctions noyau identifiées, NoGap permet d’instrumenter ces fonctions, c’est-à-dire faire des manipulations au niveau des instructions des fonctions, du processeur ou de la mémoire de la VM pour intercepter, appeler ou analyser ces fonctions noyau depuis l’hyperviseur. L’interception de l’exécution des fonctions noyau permet de suivre le comportement de la VM et de connaitre son activité. Par exemple, lorsque l’exécution de la fonction d’allocation de mémoire est interceptée, l’hyperviseur déduit grâce à NoGap que la VM est en train d’allouer de la mémoire. Lors de cette interception, l’hyperviseur peut aussi déduire la quantité de mémoire que la VM tente d’allouer à partir des paramètres d’appel de la fonction interceptée. Donc NoGap permet à l’hyperviseur d’avoir une compréhension très fine des activités d’une VM supervisée à travers l’interception de l’exécution des fonctions noyau. NoGap permet aussi à l’hyperviseur d’appeler les fonctions noyau pour lire ou modifier l’état d’une VM. Par exemple lire ou modifier des données d’une VM ou faire des actions à l’intérieur de cette VM comme arrêter un processus, fermer l’accès à un fichier, fermer une connexion réseau, etc. En fin, NoGap permet à l’hyperviseur d’analyser les fonctions noyau pour découvrir des informations utiles à la supervision de la sécurité, par exemple des adresses de structures de données pertinentes.
Exemple d’application de sécurité basée sur NoGap :
Pour illustrer comment une application de supervision de sécurité tire parti des possibilités d’interception, d’appel et d’analyse des fonctions noyau depuis l’hyperviseur grâce à NoGap, nous avons choisi d’implémenter une application de détection de processus caché [8]. Nous insistons sur le fait que ce n’est pas tant ce cas particulier d’application qui importe, mais plutôt la façon avec laquelle l’application de sécurité fonctionne grâce aux possibilités d’instrumentation de fonctions noyau offertes par NoGap.
Un processus caché est un processus actif qui grâce à une modification malveillante des données noyau devient invisible dans la liste des processus en cours d’exécution de l’OS de la VM. Donc les outils de sécurité et administration système classiques qui accèdent à cette liste seront trompés et ne verrons pas l’exécution du processus malveillant. Pour détecter l’existence d’un processus actif et caché dans une VM, l’approche implémentée dans cet exemple d’application basée sur NoGap exploite le fait qu’un processus actif est forcément ordonnancé périodiquement par l’OS de la VM à travers une fonction noyau.
Grâce à NoGap, cette application de sécurité peut dans une première étape intercepter depuis l’hyperviseur une fonction noyau responsable d’ordonnancement des processus pour détecter les processus actifs dans la VM. Pour chaque interception d’ordonnancement de processus, l’application de sécurité vérifie dans une deuxième étape si le processus en cours d’ordonnancement existe dans la liste des processus actifs déclarée par l’OS. L’adresse de cette liste de processus actifs ainsi que les positions des différents champs de données intéressants pour cette application de sécurité (ex: pid, processus suivant, précédant, etc.) sont identifiées automatiquement depuis l’hyperviseur grâce à NoGap à travers le mécanisme d’analyse des fonctions noyau qui accèdent à ces données. Si un processus en cours d’ordonnancement n’est pas trouvé dans la liste des processus actifs, l’application de sécurité juge que ce processus est un processus caché. Dans ce cas, elle appelle depuis l’hyperviseur une fonction noyau de la VM à travers NoGap pour arrêter l’exécution du processus caché dont les informations (ex: pid) sont disponibles dans les paramètres de la fonction noyau interceptée dans la première étape.
Cet exemple montre donc qu’à travers l’identification puis l’instrumentation des fonctions noyau grâce à NoGap, l’hyperviseur devient conscient de la sémantique des activités des VMs qu’il voit à son niveau et est capable de détecter une intrusion et réagir face à cette intrusion.
Conclusion :
NoGap permet de produire depuis l’hyperviseur une vue sémantique de l’activité d’une VM et d’exposer cette vue à des applications et en particulier des applications de sécurité qui exploitent cette vue pour faire de la détection d’intrusions par exemple. On peut donc dire que NoGap, grâce à l’identification et l’instrumentation des fonctions noyau, permet de disposer d’une infrastructure cloud qui soit consciente sur le plan sémantique de l’activité des environnements hébergés. Cela permet d’envisager deux familles d’applications de NoGap : tout d’abord des services nouveaux basés sur l’hyperviseur, typiquement du Security-as-a-Service mais aussi peut-être d’enrichir, grâce à la sémantique, les fonctionnalités qui incombent à l’infrastructure : le réseau et l’allocation de ressources par exemple.
En savoir plus :
[1] Peter Mell, Tim Grance, et al. The NIST definition of cloud computing. 2011.
[2] HORNE, Chris. Understanding full virtualization, paravirtualization and hardware assist. White paper, VMware Inc, 2007.
[3] Yacine Hebbal, Sylvie Laniepce, and Jean-Marc Menaud. « Virtual Machine Introspection: Techniques and Applications ». In 10th International Conference on Availability, Reliability and Security (ARES), 2015.
[4] Yacine Hebbal. « Semantic monitoring mechanisms dedicated to security monitoring in IaaS cloud ». Thèse de doctorat. École nationale supérieure Mines-Telecoms Atlantique Bretagne Pays de la Loire, 2017.
[5] Yacine Hebbal, Sylvie Laniepce et Jean-Marc Menaud. « K-binID: Kernel binary code identification for Virtual Machine Introspection ». In IEEE Conference on Dependable and Secure Computing (DSC), 2017.
[6] https://fr.wikipedia.org/wiki/MD5
[7] Yacine Hebbal, Sylvie Laniepce. « Procédé d’identification d’au moins une fonction d’un noyau d’un système d’exploitation », dépôt le 24 mai 2016
[8] Yacine Hebbal, Sylvie Laniepce et Jean-Marc Menaud. « Hidden process detection using kernel functions instrumentation ». In IEEE Conference on Dependable and Secure Computing (DSC), 2017.