El uso de contenedores permite a los equipos de ingeniería crear un entorno de espacio aislado en el que ejecutar y probar aplicaciones. Los contenedores se componen principalmente de imágenes de código abierto extraídas de DockerHub u otros repositorios de imágenes públicas.

Pero estas imágenes de código abierto a veces pueden contener vulnerabilidades que pueden poner en peligro la seguridad de los contenedores y, a su vez, la del servidor.

Dado que estos contenedores se ejecutan en una máquina host, es posible secuestrar contenedores en producción si no se protegen.

Un buen ejemplo es el ataque de criptojacking hacia Tesla en un cluster de Kubernetes desprotegido. En este ataque, los atacantes pudieron descargar y ejecutar un script malicioso para minar criptomonedas utilizando el GPU de un clúster de Kubernetes de Tesla. Pudieron mantener este ataque indetectable manteniendo el uso de la CPU al mínimo y también ejecutando el script a intervalos de tiempo específicos.

Vulnerabilidades comunes en contenedores y cómo solucionarlas

Los ingenieros de operaciones utilizan contenedores para empaquetar e implementar un software o aplicación en un entorno cerrado y controlado.

En un intento por evitar reinventar la rueda y acelerar el tiempo de comercialización, las imágenes de código abierto ya existentes se incorporan para satisfacer las dependencias necesarias para ejecutar el software. Estas imágenes a menudo contienen ciertas vulnerabilidades que hacen que todo el contenedor y su host sean vulnerables a ataques maliciosos.

A continuación se enumeran algunas vulnerabilidades y exposiciones comunes de los contenedores, así como la forma de mitigarlas.

Cryptojacking

El criptojacking es un tipo de ataque en el que se utiliza un script malicioso para robar los recursos computacionales de un dispositivo para minar criptomonedas.

Recientemente, se descubrió una vulnerabilidad en Docker con la entrada de diccionario CVE-2018-15664. Esta vulnerabilidad hace posible que los atacantes obtengan acceso de root a la máquina de un host.

Además de poder utilizar los recursos de CPU y GPU de la máquina del host para minar criptomonedas, los atacantes también pueden robar credenciales confidenciales, llevar a cabo ataques DDoS, lanzar campañas de phishing y más.

Los contenedores pueden ser susceptibles al cryptojacking si contienen imágenes maliciosas que les dan acceso a los atacantes a todo el contenedor. También son vulnerables si los puntos finales de la API del contenedor de Docker son accesibles públicamente en Internet sin contraseñas o firewalls de seguridad, como en el caso de Tesla.

Imágenes maliciosas de código abierto

Una vulnerabilidad que hace posible sobrescribir el binario runc del host les da a los atacantes el margen de maniobra para ejecutar comandos con acceso root. Los motores Docker que son anteriores a v18.09.2 hacen que los contenedores con imágenes controladas por el atacante sean susceptibles a la vulnerabilidad CVE-2019-5736.

Se aconseja a los ingenieros lo más posible utilizar las imágenes oficiales de Docker proporcionadas por docker. Después de todo, incluso hay un equipo patrocinado por Docker que trabaja en estrecha colaboración con los responsables / editores de software y expertos en seguridad para garantizar la seguridad de las imágenes oficiales de Docker.

Dockerfiles Estáticos

Uno de los principios de los contenedores es que una imagen es inmutable. Esto significa que cuando se crea una imagen, su contenido es inmutable. Eso en sí mismo da lugar a vulnerabilidades que resultan de paquetes / bibliotecas / imágenes obsoletas contenidas en una imagen.

Por lo tanto, es una buena idea incorporar escáneres de vulnerabilidades en los procesos de CI/CD para identificar imágenes de contenedores vulnerables. Dado que las imágenes son inmutables, el despliegue de un contenedor recién construido con dependencias actualizadas ayudará a frenar las vulnerabilidades de seguridad a medida que se desaconseja el parcheo de contenedores.

Cómo encontrar vulnerabilidades en un contenedor

En la sección anterior, analizamos las posibles formas en que las vulnerabilidades pueden darse en los contenedores acoplables.

Encontrar vulnerabilidades en nuestros contenedores antes de que llegue a producción ayudará a evitar posibles infracciones de seguridad y mantendrá alejados a los atacantes maliciosos.

Uso de Docker Bench para seguridad

Docker bench for security es un script que prueba todos los contenedores de docker en la computadora / servidor host para conocer las mejores prácticas para implementar contenedores en producción. Estas pruebas se basan en el benchmark de docker de CIS.

Para auditar que tan seguras son sus imagenes, pueden instalar la imagen de seguridad docker/docker-bench-bench y probar los contenedores existentes en su máquina local de la siguiente manera:

docker run -it --net host --pid host --userns host --cap-add audit_control \
    -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
    -v /etc:/etc:ro \
    -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \
    -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \
    -v /usr/lib/systemd:/usr/lib/systemd:ro \
    -v /var/lib:/var/lib:ro \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    --label docker_bench_security \
    docker/docker-bench-security

Ademas de correr una auditoría de seguridad en sus imágenes docker también existen a disposición herramientas de grado empresarial provistas por empresas solidas como Google Cloud Platform al configurar correctamente la seguridad en las configuraciones de los contenedores

Categorized in: