Por Sandino Araico el June 5, 2007
Seguridad por virtualización es una combinación de técnicas de hardening con técnicas de virtualización con las que se busca minimizar el impacto de los ataques al sistema manteniendo bajos costos y sin sacrificar la eficiencia.
Las implicaciones de combinar estas técnicas resultan en un nuevo modelo de seguridad cuya aplicación no hubiera sido posible utilizando las técnicas tradicionales sobre instalaciones tradicionales.
La seguridad por virtualización se puede aplicar de manera modular. Los módulos de seguridad por virtualización se combinan de distintas maneras para adaptarse a las necesidades de seguridad de distintas organizaciones.
Linux-vserver + GR Security
Esta es la capa básica de la seguridad por virtualización. Consiste en un servidor anfitrión con una instalación mínima en donde el acceso es restringido y uno o más servidores virtuales que son los que ejecutan todos los servicios y aplicaciones de producción.
La combinación de Linux-vserver + GR Security se utiliza para prevenir la mayor parte de los ataques al servidor. Los pocos ataques que resultaran exitosos quedan confinados al directorio donde se está ejecutando el servidor virtual mientras que desde el servidor anfitrión pueden ser detectados, observados y detenidos.
Los abusos de los recursos del sistema que pudieran resultar en una negación de servicio pueden ser controlados limitando los recursos disponibles a cada servidor virtual. Mientras queden reursos disponibles que no hayan sido asignados a servidores virtuales es posible abrir una sesión dentro del sistema operativo anfitrión para recuperar el sistema del estado degradado.
Los ataques directos al kernel siguen siendo posibles pero se pueden utilizar las ACLs de GR Security con una configuración de mínimos privilegios para limitar sus posibilidades de ejecución desde dentro de un servidor virtual que haya sido comprometido además de usar la randomización de la base del stack del kernel para minimizar las probabilidades de éxito de ataques a las interfaces de red y a los sistemas de archivos.
Se pueden utilizar un firewall y un IPS a la entrada de la red para filtrar otros posibles ataques al kernel.
Al final tenemos un sistema operativo anfitrión que es prácticamente inaccesible desde el exterior y desde donde se puede manejar y auditar la seguridad de los servidores virtuales y los procesos que corren dentro de ellos.
Se eligió Gentoo hardened para estar instalado como sistema operativo del servidor anfitrión por estar diseñado para ayudar a GR Security por medio del uso de un compilador GCC habilitado con PIE y SSP además de la generación de binarios elf con los nuevos headers reservados para el uso de paxctl que en algún momento podría resultar necesario.
LVM2
LVM se utiliza para que cada servidor virtual viva dentro de su propia unidad lógica.
LVM provee la capacidad de tomar snapshots de una unidad lógica que se encuentra montada y está siendo utilizada…. Esta capacidad se utiliza para propósitos de respaldo y de análisis forense con cero downtime.
El respaldo de una base de datos se puede hacer tan sencillo como copiar los archivos de la base de datos desde el punto donde está montado el snapshot hacia la unidad de respaldo garantizando que no va a haber movimientos de datos durante la copia mientras que en la unidad original el manejador de bases de datos sigue trabajando sin interrupción.
Un análisis forense que se practica sobre un snapshot de LVM puede durar todo el tiempo que sea necesario sin la preocupación de regresar los servicios a producción ya que éstos siguen operando ininterrumpidamente. El tiempo de espera necesario para tener disponible la imágen para ser analizada es instantáneo y ningún bloque del disco es alterado ya que todas las escrituras sobre la unidad original se llevan a cabo sobre bloques nuevos que van siendo utilizados bajo demanda.
LVM junto con el sistema de archivos ReiserFS proveen la capacidad de aumentar el tamaño de las unidades lógicas aún cuando éstas se encuentren montadas y estén siendo utilizadas. Mientras quede espacio disponible en los discos se puede manejar dinámicamente la capacidad de almacenamiento de los servidores virtuales con cero downtime.
LVM es compatible con el Global Filesystem por lo que los sistemas de archivos que se encuentran sobre estas unidades lógicas se pueden replicar en modo multimaster.
AIDE
Se utiliza AIDE para firmar los archivos de los servidores virtuales. Los procesos de firmado de archivos se ejecutan desde el servidor anfitrión, de tal manera que para los procesos que corren en los servidores virtuales la firma de binarios resulta indetectable.
Al momento de instalar un rootkit dentro de un servidor virtual no se puede saber si hay un AIDE firmándolo ya que los procesos de AIDE corren fuera de los límites del servidor virtual. Sería imposible para un rootkit que se instala en un servidor virtual modificar las bases de datos de AIDE que están duera de su alcance; la siguiente vez que AIDE corra en el servidor anfitrión se dará cuenta de los archivos que fueron modificados por el rootkit y alarmará a los administradores.
Incluso se podría ejecutar AIDE desde dentro de un servidor virtual con acceso restringido en el cual se encuentren también montados los sistemas de archivos de los servidores virtuales que se van a firmar.
Chkrootkit
Chkrootkit puede ser ejecutado desde el servidor anfitrión para revisar los servidores virtuales buscando evidencias de rootkits conocidos.
Al igual que en el caso de AIDE, se podría ejecutar chkrootkit desde dentro de un servidor virtual con acceso restringido en el cual se encuentren también montados los sistemas de archivos de los servidores virtuales que se van a revisar.
Tolerancia a fallas de hardware
Cuando se tiene una unidad de almacenamiento externa o un sistema de archivos distribuído como el GFS se puede tener un agente que esté monitoreando los servidores virtuales de tal manera que cuando ocurre una falla de hardware y deja de funcionar la máquina donde estaban los servidores virtuales inmediatamente son levantados en otras máquinas. El downtime es equivalente al de un reboot.
Snort y tcpdump
Se utiliza Snort como herramienta para la detección de ataques conocidos. El snort puede correr dentro de un servidor virtual que tenga acceso a las interfaces de red que se quieren monitorear para que un ataque al Snort no pueda comprometer el sistema.
Algunos ataques con zerodays no son detectables por el Snort, pero los intrusos son detectables por las técnicas de firma de binarios. Se utiliza el Tcpdump para grabar todo el tráfico de red que entra y sale de la máquina de tal manera que al detectar la intrusión por el método de firma de binarios (o algún otro) se pueda hacer un análisis postmortem de todo el ataque y en algún momento presentarlo como evidencia para una acción legal.
Clustering
Los servicios que tienen sus propios mecanismos de replicación como MySQL 5 deben funcionar dentro de un servidor virtual exactamente igual que si estuvieran en un servidor dedicado.
Cuando se trata de sistemas de archivos replicados como el GFS o de algún director de alta disponibilidad éstos tienen que ser controlados desde el servidor anfitrión para después proporcionarlos a los servidors virtuales como un servicio más.
Firewall y enrutamiento
Todas las reglas de filtrado de paquetes y enrutamiento que trabajan sobre el netfilter de Linux se aplican en el servidor anfitrión. Los servidores virtuales no tienen acceso a estas reglas y no las pueden modificar, luego entonces no pueden desprotegerse a sí mismos.
Por Sandino Araico el February 1, 2007
Este parche lo tengo en producción desde hace un par de semanas y parece estar tan estable como los anteriores.
Los parches que fueron aplicados:
Mon Jan 15 23:45:58 CST 2007
grsecurity-2.1.10-2.4.34-200701032218.patch.gz
patch-2.4.34-vs1.2.10.diff.bz2
patch-2.4.27-vs1.29-q0.14.diff.bz2
linux-2.4.28-pre4-devmapper-ioctl.patch
linux-2.4.22-VFS-lock.patch
Downloads:
linux-2.4.34-grsec-2.1.10-vserver-1.2.10-KB2.patch.gz (firma gpg)