Pré requis de lecture
L’annonce de VMware sur la désactivation du TPS par défaut dans les builds à partir de Décembre 2014, a fait couler pas mal de lignes sur les blogs mais suite aux différentes recherches, cela reste tout de même assez confus.
Nous souhaitons donc revenir légèrement dessus.
Avant tout un peu de lexique :
TPS (Transparent Page Sharing)
TPS est le mécanisme VMware qui permet de mutualiser les pages mémoires générées par les VMs sur le même ESX.
Si plusieurs OS similaires tournent sur le même Host, il est très probable que les VMs aient de nombreuses empreintes mémoires identiques. Au lieu de multiplier les pages mémoires, TPS les scan toutes les 60 secondes et il les fait pointer vers une unique sur la RAM Hardware.
TPS Intra-VM (Toujours activer par défaut)
Pages mémoires identiques sur la même VMs
TPS Inter-VM
Pages mémoires identiques entres VMs
Exploit AES
C’est un hack découvert, permettant quand 2 VMs partagent la même page mémoire sous certaines conditions très spécifiques, de casser l’encryption AES de la clef et ainsi accéder à la machine cible depuis une autre machine d’un même ESXi.
Concernant les conditions très spécifiques, nos 2 vSavants d’hypervisor ont dépouillés les bulletins de sécurités avec test de performances avec et sans TPS.
A voir : http://www.hypervisor.fr/?p=5298
Salting :
C’est un mécanisme apparu chez VMware très récemment, depuis les updates :
- ESXi 5.5, Patch ESXi550-201501001, released on January 27, 2015, see the VMware ESXi 5.5, Patch Release ESXi550-201501001 (2099265) for details.
- ESXi 5.1 Update 3 released on December 4, 2014, see the VMware ESXi 5.1 Update 3 Release Notes for details.
- ESXi 5.0 Patch ESXi500-201502001, released on February 26, 2015, see the VMware ESXi 5.0, Patch Release ESXi500-201502001 (2101910) for details.
Grosso modo, une grande partie des utilisateurs, par simplicité, utilisent des mots de passes communs (azerty, p@ssw0rd, ….). Ceux-ci sont attachés à un hash code.
Les hackers ont un dictionnaire de mot de passe commun avec hash correspondant, et comparent donc ce dernier avec ceux de l’utilisateur. Si c’est le même Bingo, ils peuvent craquer le password.
Le salting permet de faire d’un mot de passe commun un non commun, en y ajoutant des données ce qui génère un hash aléatoire donc différents des dictionnaires de password des hackers.
Le problème
Par mesure de sécurité VMware a donc décidé de désactiver par défaut le TPS depuis les derniers Update d’ESXi.
Ainsi l’un des mécanismes rois de VMware se retrouve non fonctionnel.
VMware afin de se dédouaner invite les admins à l’activer manuellement.
Donc suite aux passages des updates ESXi, plusieurs problèmes peuvent apparaître :
- Montée en charge de la consommation dans les clusters de la mémoire utilisée, car elle n’est plus partagée, et ceux immédiatement après update.
- Les Designers d’infrastructures compte toujours lors du sizing les 20 – 30% de consommation RAM à la baisse, donc calculs à revoir selon le contexte.
- Une gestion plus fine des VMs, car il faut voir quelles sont les populations de VMs VIP qui ne doivent en aucun cas être confrontées a cette faille.
- Des discutions interminables inter-service
- …
Résumé
Il n’y a pas de règle générale à appliquer, c’est au cas par cas selon les infrastructures.
Les fournisseurs de cloud public auront du mal à vendre cette faille comme une normalité à leurs clients.
Les cahiers des charges et SLA sont généralement clairs qu’aucune faille de sécurité connue est tolérable, le TPS sera donc à bannir.
Pour les environnements de prod maîtrisés où des applications non sensibles sont hébergées et les environnements VDI, la perte de ressources VS risques, peut être démesuré.
Contrôle
Pour contrôler le fonctionnement des différents mécanismes de récupération de RAM faire:
- Démarrer ESXTOP dans la console de l’ESXi , Passez en mode mémoire en appuyant sur “m"
- ‘free’ de ‘PMEM /MB’ donne la mémoire disponible dans l’ESXi
- ‘curr’ de ‘MEMCTL/MB’ Total mémoire balloonée.
- ‘curr’ de ‘SWAP/MB’ donne la mémoire swappée.
- Dans notre contexte voir ‘PSHARE’, mais plus précisément ‘saving’ qui est le total de la mémoire sauvée via TPS
Réactivation ou désactivation du TPS
Pour Activer / désactiver le TPS il faut Activer ou désactiver le Salting sur un ESXi
- Connectez vous au vCenter ou ESXi
- Sur l’ESXi cible
- Configuration => Advanced Settings
- Dans Advanced Settings => Mem.
- Recherchez Mem.ShareForceSalting et passer la valeur à 0 pour réactiver TPS
- OK.
- Pour activer le changement:
- Migrer les VMs vers un autre host puis les repasser sur l’ESXi d’origine
- OU
- Éteindre et allumer les VMs.
Pour désactiver le TPS pour une VM spécifique
- Éteindre la VM a désactiver le TPS
- Clic droit “Settings”
- General => Advanced section.
- Configuration Parameters….
- Ajouter une ligne via Add Row
- Ajouter le texte sched.mem.pshare.salt et mettre en valeur 2.
- Allumer la VM
Ou via Script pour activation sur ESXi
SCRIPT VMware se trouvant dans le KB 2097593
A utiliser avec les options
- .\pshare-salting.ps1 <vcenter IP/hostname> -s -> Enables pshare salting.
- .\pshare-salting.ps1 <vcenter IP/hostname> -o -> Turn offs pshare salting and falls back to default TPS behavior.
123456789101112131415161718192021222324252627282930313233343536373839404142434445 $reboot = 0$enable = 0$disable = 0if ($args.count -gt 0) {$vCenter = $args[ 0 ]for ( $i = 1; $i -lt $args.count; $i++ ) {if ($args[ $i ] -eq "-s") {$enable = 1}if ($args[ $i ] -eq "-o") {$disable = 1}}# overrideif ($enable -eq 1) {$disable = 0}}# we should specify either -s or -oif ($enable -eq 0 ) {if ($disable -eq 0 ) {Write-Host "Usage: ./pshare-salting.ps1<-s/-o>" Write-Host "-s: turn-on pshare salting (default)"Write-Host "-o: turn-off pshare salting\n"return}}Connect-VIServer $vCenter$esxHosts = Get-VMHost | Sort Nameforeach($esx in $esxHosts){# Revert ShareScaGHz to defaultSet-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareScanGHz -Value 4 -Confirm:$falseif ($enable -eq 1) {Write-Host "Enabling PageShare Salting on $esx"$val = (Get-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting).ValuesSet-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting -Value 2 -Confirm:$false} else {Write-Host "Disabling PageShare Salting on $esx"$val = (Get-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting.).ValuesSet-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting -Value 0 -Confirm:$false}}
En espérant que tout soit plus clair désormais pour vous.
Pour aller plus loin
Leave A Comment