Seguridad de contenedores: una nueva frontera (Parte 2)
Una serie de blogs de dos partes sobre consideraciones para mantener seguro el uso de contenedores.
Seguridad de contenedores, con una nueva dimensión
Hemos esbozado los desafíos de seguridad que pueden presentar los contenedores en nuestra primera entrada de blog. Esto nos deja con preguntas sobre cómo debemos pensar sobre la seguridad de los contenedores.
Sentimos que deberíamos comenzar con (y aprovechar) el consejo de Kubernetes de usar un enfoque de defensa en profundidad en capas que tenga en cuenta cuatro C: nube, clústeres, contenedores y código. También sentimos que debemos considerar cómo contener las amenazas que comprometen los contenedores, hechas por segmentación.
Siendo este el caso, proponemos la contención como una quinta C.
Anteriormente discutimos la necesidad de no sólo asegurar los contenedores sino asegurar que no puedan ser explotados y utilizados como cabeza de playa para moverse lateralmente dentro de un data center. Ahí es donde entra en juego la necesidad de contención.
Examinemos la guía inicial de Kubernetes sobre las 4 C y luego discutiremos la contención.
Contenedores
Para ejecutar software en Kubernetes, debe estar en un contenedor. Debido a esto, existen ciertas consideraciones generales de seguridad que Kubernetes describe:
- Escanear: Analice sus contenedores en busca de vulnerabilidades conocidas. Herramientas como Clair de CoreOS pueden ser útiles.
- Firmar imágenes de contenedores: Mantenga la confianza para el contenido del contenedor mediante Docker Content Trust, integrado en Docker Engine. El proyecto Portieris de IBM se puede utilizar como controlador de admisión para imponer la confianza del contenido para imágenes firmadas correctamente.
- Controlar privilegios de usuario: Busque crear usuarios dentro de los contenedores que tengan el menor nivel de privilegio del sistema operativo necesario para llevar a cabo el objetivo del contenedor.
Código
Al examinar el nivel de código de la aplicación, la guía de Kubernetes apunta a algunos puntos:
- Permitir acceso solo a través de TLS: Haga que el cifrado predeterminado sea todo en tránsito, incluso entre los servicios de red detrás del firewall.
- Limitar los rangos de comunicación de puertos: Exponga únicamente los puertos de su servicio que son absolutamente esenciales.
- Analizar código estático: Analice el código para cualquier práctica de codificación potencialmente insegura.
- Prueba de ataques de sondeo dinámico: Uso Herramientas OWASP para automatizar ataques comunes como inyección SQL, CSRF, etc.
Nube
Cada proveedor de nube proporciona amplias recomendaciones sobre cómo ejecutar cargas de trabajo de contenedores en su infraestructura de nube. Las ofertas de seguridad pueden ser diferentes para los diferentes proveedores de nube y los usuarios deben ser meticulosos al seguir estas recomendaciones. Los enlaces a proveedores de nube populares y recomendaciones de seguridad se encuentran en https://kubernetes.io/docs/concepts/security/#the-4c-s-of-cloud-native-security.
La orientación general incluye:
- Restringir el acceso a la red: la mayoría de los proveedores de seguridad en la nube proporcionan seguridad de red mediante listas de control de acceso; por ejemplo, AWS proporciona grupos de seguridad que permiten segmentar las cargas de trabajo en grupos y permitir que las ACL se configuren por grupo.
- Restringir el acceso a la API: Idealmente, solo los servidores requeridos para administrar un cluster deberían tener acceso a los servidores API.
- Restringir el acceso a las API de clústeres de Kubernetes: Es mejor proporcionar al clúster acceso de proveedor de nube que siga a principio de privilegio mínimo por los recursos que necesita administrar. Un ejemplo de Kops en AWS se puede encontrar aquí: https://github.com/kubernetes/kops/blob/master/docs/iam_roles.md#iam-roles.
- Restringir el acceso a 'etcd': Este directorio es donde existen los archivos de configuración en la nube para Kubernetes. Utilice siempre TLS para acceder y realizar modificaciones a estos archivos.
- Cifre todas las unidades, especialmente las unidades etcd: Impida que los usuarios no autorizados vean archivos de configuración críticos y almacenes de datos pertenecientes a su clúster de Kubernetes.
Clústeres
- Restrinja el acceso a la API de Kubernetes al clúster mediante RBAC.
- Autenticar todo el acceso a la API que controla el clúster.
- Cifre todas las claves secretas utilizadas por el clúster, incluidos todos los datos en etcd.
- Controlar los aspectos de seguridad de los pods: Los objetos de seguridad del pod definen un conjunto de condiciones con las que un pod debe correr para ser aceptado en el sistema.
- Controle la utilización de recursos: Los nodos de Kubernetes que ejecutan su aplicación dependen unos de otros para obtener confiabilidad y balanceo de recursos. Por lo tanto, debería haber políticas que restrinjan la cantidad de recursos utilizados por estos nodos.
- Controle todas las políticas de red a los pods mediante listas de control de acceso. Se trata de políticas de seguridad Norte-Sur. Para conocer las políticas dentro del centro de datos, consulte Contención a continuación.
- Restrinja todo el acceso de entrada a través de TLS.
Contención
Esto nos lleva a la quinta C de contención que evita la propagación de brechas que se inician desde un contenedor. La contención debe tener en cuenta algunas cosas para que sea su más efectiva:
- Descubra contenedores recién creados en tiempo real.
- Permita la segmentación automatizada para nuevas cargas de trabajo de contenedores para que la seguridad esté presente automáticamente “al nacer”.
- Centralice la visibilidad de los contenedores junto con otros entornos de cómputo para obtener una vista única de las cargas de trabajo en contenedores y las máquinas virtuales, las nubes privadas y públicas, ya que no puede proteger lo que no puede ver.
- Aplique políticas uniformes en todos los contenedores, y todo lo demás, para segmentar con políticas unificadas, independientemente del entorno. Esto evita múltiples herramientas puntuales para la segmentación de máquinas virtuales, servidores bare-metal, nubes y contenedores.
Con un enfoque amplio de defensa en profundidad para contenedores, las organizaciones pueden estar aseguradas de la viabilidad de seguridad de los contenedores para implementarlos con aún mayor confianza.