domingo, 8 de mayo de 2016

Garantice la seguridad de los contenedores de virtualización en un mundo de apps


El rápido ascenso de los contenedores de virtualización en el mundo de las aplicaciones cimienta su creciente importancia para los administradores de TI de producción. Aunque similares en el enfoque a las máquinas virtuales, los contenedores tienen algunas diferencias fundamentales que provocan que los departamentos de TI revisen sus enfoques de seguridad.
Cada vez más, TI se ve obligado a cambiar sus formas para no implementar modelos de VM full-stack que los limiten. Una organización funciona sobre procesos, y estos procesos tienen que ser flexibles. Con una máquina virtual, si el proceso cambia, entonces toda la VM tiene que cambiar.
Mientras que las VM suelen apuntalar modelos históricos de aplicaciones monolíticas, los contenedores pueden proporcionar un mejor soporte para las aplicaciones compuestas.
Una VM contiene absolutamente todo lo necesario para una aplicación que trabaja. Esto incluye la aplicación, sus bases de datos, analítica, así como una versión virtualizada del hardware, BIOS y cada servicio necesario para que la aplicación funcione. Por lo tanto, cada VM es un sistema completo, y el enfoque de la seguridad es esencialmente el mismo que si la VM fuera un sistema físico. La desventaja es que, ya que es una pila completa, iniciar una VM significa que el BIOS tiene que ser iniciado, seguido por el sistema operativo, seguido por todo el resto de la pila de software. Aunque ejecutarlo contra un conjunto de recursos virtualizados es rápido, no es instantáneo, a menos que se usen imágenes VM calientes –preprovisionadas e implementadas– lo cual desperdicia recursos. Los contenedores de virtualización quitan muchos de estos problemas.
Un contenedor tiene mayores dependencias en el mundo exterior, pero no desde dentro del propio contenedor. A pesar de que todavía crea la abstracción del nivel físico, los contenedores de virtualización comparten la mayoría de sus recursos de una manera dinámica, y un contenedor accede a la mayoría de sus dispositivos a través de la plataforma base. El uso de contenedores es más un enfoque de aplicación que presume que el BIOS y el sistema operativo ya se están ejecutando, a diferencia de las VM. Crea un entorno de sandbox holgado de los recursos compartidos, en los cuales cada contenedor entonces pone en capas la función, servicio o aplicación.
En los contenedores de virtualización, una aplicación puede ser dividida en conjuntos de funciones contenerizadas que se integran prácticamente sobre la marcha, creando un sistema que soporta un proceso de una manera mucho más flexible. Una aplicación compuesta puede reunir un contenedor que está configurado y optimizado solo para ejecutar analítica, una base de datos específica o lógica de aplicación. Los contenedores son mejores en la gestión de este encadenamiento de servicios que las máquinas virtuales, ya que están diseñados para trabajar contra una plataforma compartida y utilizar funciones y dispositivos compartidos de forma mucho más eficaz que las máquinas virtuales.

Más flexibilidad significa más consideraciones de seguridad

Aunque este uso de contenedores aumenta la flexibilidad general, introduce requisitos adicionales de gestión, y cuestiones de seguridad adicionales. Con una VM, todo está en un solo lugar: la VM puede ser gestionada y asegurada como una sola entidad; con una aplicación compuesta, basada en contenedores, hay una serie de funciones que están más débilmente ensartadas, cada una de las cuales necesita gestión y aseguramiento.
Si la seguridad de la plataforma base se ve comprometida, también lo estará la seguridad de todos los contenedores en ella. Esto puede funcionar en ambas direcciones. Vamos a suponer que una imagen de contenedor tiene privilegios completos de superusuario. A medida que el contenedor tiene que hablar de nuevo a la plataforma subyacente constantemente, un intruso que ha tenido acceso al contenedor podría, en teoría, meterse desde el entorno de contenedores hacia la plataforma subyacente y retener esos privilegios.
Aunque esto suena como un muy mal defecto de diseño, es la única manera en que los contenedores pueden trabajar, y es cómo proporcionan las mejoras de densidad sobre las VM que han cosechado un gran interés. La clave para la adopción de contenedores en las TI de producción es asegurarse de que no solo los contenedores están seguros dentro de sí mismos, sino también que el enfoque para crear los entornos en contenedores es seguro.
Asegurar contenedores de virtualización debe estar en los primeros puestos en la lista de prioridades para cualquier grupo que los usa. Donde sea posible, aíslelos mediante el uso de su propio espacio de nombres. Proporcione contenedores virtualizados con su propia pila de red, evitando cualquier acceso privilegiado a través de diferentes contenedores a los puertos físicos. Utilice grupos de control para gestionar la asignación y el uso de recursos; esto mejora la seguridad externa, ya que ayuda en la gestión de ataques de denegación de servicio distribuido.

Atienda el contenido de los contenedores de virtualización

Solo use privilegios mejorados cuando sea absolutamente necesario con los contenedores virtualizados, y reduzca esos privilegios de nuevo a los estándar tan pronto como sea posible. Nunca deje los privilegios establecidos como mejorados, por si acaso; el ligero aumento de la latencia interna necesario para establecer y restablecer los privilegios mejoradas vale la pena en aras de una mayor seguridad global de la plataforma de TI.
Trate de ejecutar los servicios como non-root: Si es necesario utilizar la raíz (root), sea tan cuidadoso aquí como lo sería en la infraestructura de TI física. El contenedor no es una caja de arena, tiene agujeros por todas partes. Los desarrolladores no están codificando en un espacio completamente sellado; lo que sea que se codifique mal en un contenedor puede tener importantes efectos de seguridad en todos los otros contenedores que se ejecutan en la misma plataforma física. La gran mayoría de los contenedores no necesitan privilegios de root. La mayoría de los servicios que requieren privilegios deroot ya deberían estar funcionando fuera del contenedor como parte de la plataforma subyacente. Ejecutarse con privilegios reducidos permite al contenedor negar cualquier petición de montaje, negar la creación de archivos o actividades de cambio de atributos, evitar la carga de módulos y por lo demás proteger el sistema.
La única área importante en la plataforma subyacente que debe tratarse de manera diferente a la virtualización convencional cuando se trata de seguridad es la parte funcional del núcleo de los contenedores de virtualización. Con Docker, el daemon Docker se ejecuta con privilegios completos en un entorno de raíz físico para crear un entorno de contenedor virtualizado. Cualquier persona con acceso al daemon tiene completa libertad para hacer lo que quiera. Por lo tanto, controle el acceso al daemona través de controles dedicados de administrador del sistema.
La seguridad de los contenedores virtualizados también significa ver cómo los contenedores utilizan interfaces de programación de aplicaciones (API). Solo se necesitan pequeños errores en cómo se hace una llamada a la API para permitir que un ataque malicioso cargue un nuevo contenedor o cambie el contenido de uno ya existente para acceder al entorno de raíz con privilegios elevados. Cuando se ejecutan contenedores en sistemas empresariales, invierta en herramientas de monitoreo y gestión de APIs, como los de Akana, Apigee o CA Technologies.