HEPIA Labo de transmission de données -1- Initiales / 19-09-2011
Titre
Isolation des VMs (ViSaG)
Propriétaire
Penas Cédric
Classification
Public
Date dernière
modification
19.12.11
Chemin et NomFichier
\\10.1.1.2\Doc_Labo\Penas\ViSaG\isolation_vm.doc
Objectif du document
Analyser le comportement d’une VM lors d’accès RAM avec du code (C/Assembleur) afin d’essayer
de déterminer si le niveau de sécurité au niveau de l’isolation entre les VMs est vraiment garanti
comme VMware l’affirme.
4 objectifs atteints avec ce document :
1. Persistance des données en RAM
2. Connaître le niveau de privilège de la VM
3. Adressage RAM (VMM)
4. Test d’instructions nécessitant le RING0
Le code source produit la VM suivante :
HEPIA Labo de transmission de données -2- Initiales / 19-09-2011
Contexte
Utilisation du travail de Christian Abegg portant sur l’étude bas niveau de la mémoire et sur la porte
dérobée de VMware
1
.
Pour résumé, il s’agit d’utiliser le projet SOS
2
(Simple Operating System) afin de disposer d’un noyau
minimal de système d’exploitation qui est censé me donner un accès non restreint aux ressources
physiques.
Ce noyau sera installé dans une VM et permettra de booter sur le code C que j’aurais écrit.
Détails de la VM (sans OS) :
Fichiers utiles
1. Ce rapport :
http://www.tdeig.ch/visag/sos/SOS_Rapport.pdf
2. VM Ubuntu contenant les codes source + script de déploiement :
http://www.tdeig.ch/visag/sos/ova/Ubuntu.ova
3. VM SOS
http://www.tdeig.ch/visag/sos/SOS.ova
4. Code source Abegg modifi par Penas
http://www.tdeig.ch/visag/sos/SOS_penas.tar.gz
1
http://www.tdeig.ch/vmware/Abegg_R.pdf
2
http://sos.enix.org
HEPIA Labo de transmission de données -3- Initiales / 19-09-2011
Utilisation
Pour pouvoir compiler mon code source et l’exécuter, il faut un ESXi 4.0 prêt à l’emploi. Il faudra
ensuite déployer les deux VMs de la section « Fichiers utiles » juste avant.
Dans l’ordre il faudra ensuite :
1. Lancer la VM Ubuntu
2. Exécuter le script de déploiement présent dans Bureau/SOS_penas/extra/deploiement.bash
(voir section suivante)
3. Lancer la VM SOS
Script de déploiement
Pour faciliter le processus de compilation et déploiement du projet sur un ESXi, j’ai réali un script
bash disponible dans SOS_penas/extra/deploiement.bash.
Exécution du script :
1. Prend l’IP du serveur ESXi en paramètre
2. Compile le projet afin de créer l’image bootable .img
3. Transfère cette image dans le datastore1 de l’ESXi
Exemple :
> cd SOS_penas/extra
> ./deploiement.bash 10.1.40.17
Attention : Il faut avoir activé le SSH sur le serveur pour que le script fonctionne correctement.
HEPIA Labo de transmission de données -4- Initiales / 19-09-2011
Objectif 1
Le premier objectif est repris du travail de Christian Abegg qui vise à montrer que la mémoire attribuée
à une VM est réinitialie à chaque démarrage.
Pour faire cette démonstration, il a suffi de lire le contenu d’une partie de la mémoire et de l’afficher
puis écrire par-dessus. Ensuite, exécuter un redémarrage de la VM pour effectivement voir que la
mémoire est complétementinitialisée.
Dans mon code source j’ai simplifié l’exemple d’Abegg en ne faisant une lecture/écriture que sur 2Mo
afin de pouvoir l’afficher sur une seule ligne.
Nous obtenons donc la première lecture au démarrage.
La lecture après l’écriture de motifs aléatoires.
Puis au redémarrage de la VM nous voyons que la mémoire est initialisée.
Les différents motifs verts représentent le pourcentage de bits à 1 dans la zone lue comme nous
pouvons le voir sur la légende ci-dessous.
HEPIA Labo de transmission de données -5- Initiales / 19-09-2011
Objectif 2
Le second objectif de cette étude, vise à trouver le moyen de savoir dans quel niveau de privilège
x86
3
nous nous trouvons dans la VM.
Logiquement cette information se trouve dans un registre du processeur. Pour savoir lequel, il faut se
plonger un peu dans la documentation INTEL x86 pour les veloppeurs
4
.
J’ai trouvé le registre en question à la section 3.4.3 du document. Il s’agit du registre EFLAGS
5
qui
possède 32 bits dans notre cas puisque nous sommes sur une architecture x86.
Il contient de nombreuses informations ou « flags » utiles comme l’overflow, la parité, le zéro etc…
mais ceux qui nous intéressent plus particulièrement, sont les bits 12 et 13.
3
http://en.wikipedia.org/wiki/Privilege_ring
4
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-software-developer-manual-
325462.pdf
5
http://fr.wikipedia.org/wiki/EFLAGS
1 / 11 100%