data -->

[TIP] Habilitar Transparent Page Sharing (TPS) en VMware ESXi

Posted by José Manuel Hernández on

¡Hola a todos! tras unos meses con mucho trabajo y pocas horas de descanso, por el nacimiento de mi segundo hijo, he vuelto a sacar tiempo para escribir varios artículos. Este es un pequeño TIP para recordaros algo sobre TPS de ESXi.



Como sabéis, TPS (Transparent Page Sharing) es un mecanismo que nos permite ahorrar en el uso de memoria de cada host ESXi guardando en memoria física solo bloques únicos, en muchos casos este ahorro es bastante significativo.
A partir de la [KB2080735] por motivos de seguridad se decidió deshabilitar por defecto TPS en las posteriores versiones de ESXi.
Estos cambios están relacionados con una investigación académica reciente que aprovecha transparente Sharing Página (TPS) para obtener acceso no autorizado a los datos en memoria en determinadas condiciones.
En algunas instalaciones normales que he estado revisando me he dado cuenta de que no estaba habilitado TPS. En muchos casos y en entornos controlados, si este pequeño problema de seguridad no te afecta, recuerda habilitar TPS en tu plataforma vSphere para optimizar el uso de memoria en tu ESXi.

Puedes hacerlo de dos modos:

Por GUI:

1 – Entrar con el cliente vsphere y seleccionar el host ESXi
2 – Seleccionar la ficha configuración y luego configuración avanzada (advanced settings)
3 – Haga clic en **Mem**
4 – Buscar la variable **Mem.ShareForceSalting** y establezca el valor en **1** para habilitarlo.
5 – Pulsar aceptar
6 – Migrar todas las máquinas a otro host para poder reiniciar el ESXi sobre el que hemos realizado el cambio.
7 – Reiniciar

Vía Powercli (si tienes muchos esxi):

Si tienes muchos hosts puede que el método anterior sea poco óptimo y lento, para ello VMware ha creado un script (pshare-salting.ps1) que puedes lanzar desde PowerCLI y aplicar este cambio sobre todos los hosts:

*.\pshare-salting.ps1 [vcenter IP/hostname] -s*

script:
# Configure pshare salting options
# - Enables / Disables the salting. 
#

$reboot = 0
$enable = 0
$disable = 0
if ($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
      }
   }
   # override
   if ($enable -eq 1) {
      $disable = 0
   }
}

# we should specify either -s or -o
if ($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 Name
foreach($esx in $esxHosts){
      # Revert ShareScaGHz to default
      Set-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareScanGHz -Value 4 -Confirm:$false    
   if ($enable -eq 1) {
      Write-Host "Enabling PageShare Salting on $esx"
      $val = (Get-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting).Values
      Set-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.).Values
      Set-VMHostAdvancedConfiguration -VMHost $esx -Name Mem.ShareForceSalting -Value 0 -Confirm:$false      
   }
}
Con esto tendrás todos tus hosts con TPS habilitado.

Hasta la próxima.
José M. Hernandez