09 diciembre 2015

Auditoría y Análisis de Vulnerabilidades en Docker

Supongamos que trabajas en seguridad. Ahora, la empresa para la que trabajas decide ejecutar algunas aplicaciones usando contenedores, la elección es Docker, después de varias semanas o meses de pruebas deciden pasar a producción y alguien, de repente, dice “¿Deberíamos hacer una auditoría de seguridad antes de salir a producción?”, el resto de la película ya te lo sabes, tú y una auditoría de Docker por delante.

Como en cualquier otra auditoría, puedes usar tu arsenal de herramientas y procedimientos para las aplicaciones que funcionan sobre esa infraestructura, analizar permisos de ficheros, logs y demás. Pero  ¿qué pasa con los contenedores, imágenes y dockerfiles o incluso con la seguridad de las herramientas de orquestación y clustering? Este artículo va sobre eso.
 
Algunas consideraciones específicas para esta auditoría:
  1. Comprobar que las imágenes y los paquetes que hay en ellas están actualizados y sin vulnerabilidades.
  2. Automatizar la auditoría, deberíamos ser capaces de automatizar cualquier tarea. Nos ahorrará mucho tiempo y podremos ejecutar dicha auditoría tantas veces como sea necesario, olvida las auditorías manuales a menos que estés aprendiendo.
  3. Links y volúmenes entre contenedores. Usar sistemas de ficheros base en solo-lectura facilitará encontrar problemas fácilmente con el comando “docker diff”.
  4. Cuando más grande sean las imágenes más difícil será la auditoría, reduce las imágenes al máximo.
  5. El kernel del sistema anfitrión es el punto compartido entre todos los contenedores que se ejecutan en el mismo servidor, el kernel siempre actualizado.

Dicho lo anterior, quiero compartir un listado resumen de las herramientas existentes para realizar tareas de auditoría y descubrimiento de vulnerabilidades en Docker. Es posible que se me hayan escapado algunas herramientas, así que si conoces alguna que no esté en este listado te agradecería que nos lo digas en los comentarios.

    • Descripción: Docker Bench for Security es un script que comprueba docenas de buenas prácticas comunes sobre el despliegue de Docker en producción, que ya comentamos aquí en Security By Default en Mayo. Todas las comprobaciones que realiza están basadas en la guía CIS Docker 1.6 Benchmark document.
    • Orientado a: principalmente al servidor Docker y algunos tips básicos para imágenes y contenedores.
    • Lenguaje: Shell script
    • Metodología: Ejecuta el script en el mismo servidor Docker o desde un contenedor. Creará un sencillo informe por pantalla con alertas tipo INFO, WARN o PASS.
    • License: Apache 2.0
    • Nivel Instalación/Usabilidad: Fácil
    • Demo/Presentaciónhttps://youtu.be/8mUm0x1uy7c?t=18m15s
    • Mas datos sobre este tema por parte de Docker Inc: 
      • Project Nautilus: presentado durante la  Docker CON 2015 en Barcelona: https://www.youtube.com/watch?v=fLfFFtOHRZQ& el Project Nautilus es un servicio   de escaneo y detección de vulnerabilidades para repositorios oficiales en Docker Hub. Según palabras de @diogomonica, responsable de seguridad de Docker Inc., “Nautilus ya funciona actualmente para todas las imágenes oficiales de Docker”. Nautilus intenta localizar cualquier trozo de software que sea sospechoso dentro de las imágenes. No depende de bases de datos públicas de vulnerabilidades o de distribuciones Linux como hacen otras herramientas, usa su propia base de datos. Tendremos más información posiblemente en el primer trimestre del 2016 (Gracias Diogo por la información).
    • Mis comentarios: Desde el punto de vista del servidor y demonio de Docker, es la mejor herramienta para seguir las mejores prácticas de configuración y seguridad de Docker. Definitivamente usaría esta herramienta junto con otras que comento, ya que esta solo cubre una parte de la auditoría.
    • Descripción: Está basado en la misma filosofía que su proyecto padre OpenSCAP, principalmente hace un escaneo comprobando bases de datos CVE, y mostrando los resultados en informes de varios formatos, también soporta políticas personalizadas. También proporciona instrucciones específicas y paquetes para RedHat 7 como se puede ver aquí. Nota: SCAP es un estándar norteamericano mantenido por el National Institute of Standards and Technology (NIST). El proyecto OpenSCAP es una colección de herramientas de software libre para ayudar a implementar este estándar.
    • Orientado a: Imágenes y contenedores
    • Lenguaje: Shell script
    • Metodología: ejecuta el script oscap-docker contra una imagen o contenedor y obtendremos un informe bastante útil en html.
    • Licencia: GPL v3
    • Nivel Instalación/Usabilidad: Fácil
    • Demo/Presentatción: N/A 
    • Mis comentarios: Está muy orientado a RedHat/Fedora/CentOS así que si usas contenedores basados en estos SO, es altamente recomendado. Si usas Atomic, recientemente han publicado una nueva característica que permite escanear contenedores usando OpenSCAP, mira este blog para más detalles, el código aquí.
    • Descripción: Clair es un servicio de análisis de vulnerabilidades en contenedores. Funciona mediante una API que analiza cada capa del contenedor buscando vulnerabilidades existentes en las bases de datos de Debian, Ubuntu y Centos. También se puede usar desde la linea de comandos como vemos aquí. Informa de la lista de vulnerabilidades conocidas que afectan a cada contenedor y puede notificar a los usuarios de las mismas. Se usa en https://quay.io/
    • Orientado a: Imágenes y contenedores
    • Lenguaje: Go
    • Metodología: Tanto mediante API o comando, extrae todas las capas de la imagen y notifica de las vulnerabilidades encontradas y almacena la información en una base de datos. También gestiona su propia base de datos que actualiza desde fuentes conocidas como CVE.
    • Licencia: Apache v2
    • Nivel Instalación/Usabilidad: Difícil
    • Demo/Presentaciónhttps://coreos.com/blog/vulnerability-analysis-for-containers/
    • Mis comentarios: Solo he podido ver la demo y leer la documentación, no conseguí hacerlo funcionar en CentOS 7.1. Ampliaré esta información tan pronto como sea posible.
    • Descripción: la gente de BanyanOps son los que publicaron un informe sobre la gran cantidad de imágenes vulnerables que había en el Docker Hub y que fue contestado en detalle por @jpetazzo aquí. Como dicen los autores “es un framework para análisis estático de imágenes de Docker”. Lo que significa analiza más datos además de vulnerabilidades, como se ve en su informe. 
    • Orientado a: Imágenes
    • Lenguaje: Go
    • Metodología: Aunque puede ejecutarse desde un contenedor, se ejecuta desde la linea de comandos y se conecta a un repositorio de Docker que le indiquemos para hacer los análisis. Mira como funciona en detalle aquí.
    • Licencia: Apache 2.0
    • Nivel Instalación/Usabilidad: Medio-Difícil
    • Demo/Presentación: N/A
    • Mis comentarios: Está orientado a registros (docker registries), puede ser útil para registros locales.
  1. Lynis
    • Descripción: Lynis es una herramienta de auditoría y hardening válido para Linux, Mac y Unix, adicionalmente incluye un módulo de análisis de Dockerfiles. También muestra algunas estadísticas básicas del servidor Docker y comprueba permisos de ficheros. 
    • Orientado a: Dockerfiles
    • Lenguaje: Shell script
    • Metodología: simplemente ejecuta Lynis con las opciones de docker y la ruta del Dockerfile de turno y Lynis analizará algunos detalles de dicho fichero como paquetes instalados, por ejemplo.
    • Licencia: GPL v3
    • Nivel Instalación/Usabilidad: Fácil
    • Demo/Presentación: N/A
    • Mis comentarios: Podías matar dos pájaros de un tiro analizando el servidor anfitrión y los dockerfiles pero no lo veo muy útil por ahora en lo que a Docker ser refiere ya que los chequeos que ofrece son muy básicos. El autor está trabajando en añadir más funcionalidades.
    • Descripción: En palabras de los autores: Twistlock escanea imágenes de contenedores en registros (docker registries), estaciones de trabajo o en servidores en producción. Detecta y reporta vulnerabilidades a nivel de distribución Linux, framework de aplicaciones e incluso paquetes personalizados de clientes. Además de comprobar vulnerabilidades de bases de datos públicas de software Open Source, disponen de feeds de software comercial. Esta solución también ofrece control granular en cuanto a acciones que pueden realizar usuarios y grupos, autenticación mediante LDAP y Kerberos, dispone de opciones de configuración para controlar comportamientos sospechosos en contenedores, roles y acciones maliciosas que puedan acontecer, lo que ellos llaman Runtime Defense.
    • Orientado a: imágenes, contenedores y paquetes. Hecho para Docker y Kubernetes o Mesos.
    • Lenguaje: Shell script, Javascript y Go.
    • Metodología: Utiliza el NIST para comprobar CVEs así como las comprobaciones del CIS Docker. Hace más que simples test ya que tiene características de control de acceso, defensa a nivel de ejecución, monitorización e integración continua.
    • Licencia: Comercial basado en número de hosts. Disponen de una edición gratuita orientada a desarrolladores con un límite de dos hosts.
    • Nivel Instalación/Usabilidad: No probado aunque he visto en vivo como funciona mediante una demo que me ha hecho el fabricante.
    • Demo/Presentaciónhttps://www.youtube.com/watch?v=SMCYHFDfSzk (solo presentación, demo disponible próximamente)
    • Mis comentarios: He tenido una sesión con el fabricante para ver más detalles de esta solución. Lo cierto es que va más allá de una herramienta de análisis de vulnerabilidades y auditoría, además de esto nos proporciona una forma de gestionar la seguridad de nuestra arquitectura de contenedores (con Docker, Kubernetes o incluso Mesos). Creo que es la herramienta que mejor cubre las necesidades que se pueden tener a nivel empresarial. Tiene un gran margen de mejora, ya que es una herramienta cuya versión es 1.0.2 pero dispone de una amplia lista de características y granularidad en acciones y roles muy necesarias en ciertos casos de uso. Importante destacar, como he comentado antes que no es solamente una herramienta de gestión de vulnerabilidades, sino que va más allá.
    • Descripción: es una herramienta online para generar contenedores personalizados via Dockerfiles (en palabras de Bitnami: es una API declarativa para generar contenedores). Aunque no está orientada a ser una herramienta de seguridad como tal tiene una funcionalidad que merece la pena mencionar ya que detecta y nos avisa por pantalla y correo electrónico cuando un contenedor tiene algún componente no actualizado o vulnerable.
    • Orientado a: Dockerfiles, imágenes y contenedores.
    • Lenguaje: desconocido
    • Metodología: Usa base de datos pública CVE https://cve.mitre.org para buscar CVEs de los componentes que se utilizan.
    • Licencia: SaaS
    • Nivel Instalación/Usabilidad: Fácil 
    • Demo/Presentación: https://www.youtube.com/watch?v=4A24pD-P_N4
    • Mis comentarios: Como herramienta SaaS es muy fácil de utilizar, desde el punto de vista de seguridad, ofrece al usuario una vista clara y útil del estado de cada contenedor. Está limitado a los componentes que ofrecen en la herramienta.
    • Descripción: como casi todas, es una herramienta bastante reciente y en un estado muy inicial, se ha lanzado hace unas semanas, fue presentado en la BlackHat Europe Arsenal. Según el autor: Dockscan es una herramienta de análisis de vulnerabilidades para Docker y contenedores. Reporta problemas de seguridad en la instalación de Docker y configuraciones de contenedores. 
    • Orientado a: principalmente al servidor Docker y algunos consejos básicos para imágenes y contenedores.
    • Lenguaje: Ruby
    • Metodología: usa algunas de las buenas prácticas citadas en el CIS Docker 1.6 Benchmark best practices. Puede funcionar en local y de forma remota mediante la conexión a un servidor Docker.
    • Licencia: GPL v2
    • Nivel Instalación/Usabilidad: Fácil
    • Demo/Presentación: N/A
    • Mis comentarios: Actualmente está muy limitada, aunque parece interesante, no la usaría por ahora, veremos como evoluciona, Docker Bench for Security hace mucho más.
  2. Drydock:  (no confundir con Dry-dock cluster)
    • Descripción: Según el autor: drydock es una herramienta de auditoría de seguridad de Docker escrita en Python. Fue inicialmente inspirada en Docker Bench for Security pero intenta aportar más flexibilidad en las auditorías. Drydock permite la creación y uso de perfiles para reducir falsas alarmas. Genera informes en JSON para poder usarlos fácilmente. Utiliza el cliente docker-py para comunicarse con Docker mediante la API.
    • Orientado a: principalmente al servidor Docker y algunos tips básicos para imágenes y contenedores.
    • Lenguaje: Python
    • Metodología: igual que la herramienta anterior, utiliza las recomendaciones del CIS Docker 1.6 Benchmark best practices para comprobar la configuración del servidor. 
    • Licencia: GPL v2
    • Nivel Instalación/Usabilidad: Fácil 
    • Demo/Presentación: N/A
    • Mis comentarios: Está muy verde todavía, hace algunas cosas más que Dockscan pero no llega a lo que hace Docker Bench for Security. Ya veremos como evoluciona.
    • Descripción: herramienta para auditar y securizar Docker server y contenedores. Es más o menos igual que Drydock o Docker Bench for Security.
    • Orientado a: principalmente al servidor Docker y algunos tips básicos para imágenes y contenedores.
    • Lenguaje: Go
    • Metodología: se ejecuta como contenedor y comprueba el servidor siguiendo la guía CIS Docker 1.6 Benchmark.
    • Licencia: MIT
    • Nivel Instalación/Usabilidad: Fácil 
    • Demo/Presentación: N/A
    • Mis comentarios: Nada diferente a lo que hace Drydock o Docker Bench for Security.
Conclusión:

  • ¿Cual de estas herramientas usaría? Teniendo en cuenta que la mayoría son herramientas con menos de 6 meses de vida, usaría todas para luego ver los resultados que más se acercan a lo que necesito. Pero desde luego hay algunas que no merece la pena usarlas por ahora como indico en los comentarios de algunas de ellas. Dicho esto, desde el punto de vista de características y la orientación empresarial de la aplicación en sí Twistlock sería la que más necesidades cubre en este momento. 
  • Hay mucho margen de mejora y adaptar estas u otras herramientas para que sean realmente útiles a nivel de análisis de seguridad empresarial. No es mal comienzo, al menos para ir testeando lo que tenemos independientemente del estado de nuestros entornos. Habrá que ver que pueden aportar los grandes jugadores sobre este tema y los contenedores (Google, MS, AWS, etc.). 
  • A favor de todos ellos hay que decir que es bastante difícil seguir el ritmo de Docker ya que se publican nuevas versiones con muchos cambios y novedades casi cada semana. Me imagino que es el precio que hay que pagar cuando trabajamos con tecnologías emergentes.
  • En futuros artículos me gustaría añadir más información sobre la seguridad en sistemas de orquestación como Kubernetes o incluso otros despliegues de Docker como AWS ECS.
  • ¿Y que hay de respuesta a incidentes? Es otro punto a cubrir en futuros artículos sobre este tema.
  • Adicionalmente, si quieres conocer algunos detalles en más profundidad sobre buenas prácticas en Docker,  en el curso de Hardening de Securízame puedes encontrar un módulo dedicado a este asunto.  
Toni de la Fuente @ToniBlyx