1.4 OWASP Docker Top 10
La fundación OWASP ofrece desde hace años el OWASP TOP 10 y nos orienta sobre los 10 aspectos más críticos a tener en cuenta para securizar nuestras aplicaciones web según las tendencias que se han detectado en años anteriores.
Para docker existe un proyecto similar conocido como OWASP Docker Top 10. En este libro, expondremos de forma específica, como mitigar los retos que nos presenta la lista.
Haremos de esta sección, un índice rápido y alternativo para este libro que está muy relacionado con el modelo de amenazas (sección 1.2).
D01 - Secure User Mapping
Los privilegios en Docker pueden ser muy contraproducentes para nuestro host, para evitarlo debemos tener claro cómo manejar root
(capítulo 2.1.3).
D02 - Patch Management Strategy
A lo largo del tiempo se van descubriendo vulnerabilidades en los sistemas que utilizamos y que los fabricantes o maintainers van parcheando. Es importante tener una política clara sobre cómo llevar a cabo el parcheado de nuestro sistema Host, así como de los contenedores asociados. Puedes encontrar toda la información en los capítulos 2.2.5 y 2.2.1.
Recordemos que a su vez este punto está conectado con el OWASP top 10 general. En esta edición se conoce como A06:2021 – Vulnerable and Outdated Components, ya que es común que no actualicemos, incluso cuando existen vulnerabilidades conocidas que están siendo explotadas de forma activa.
D03 - Network Segmentation and Firewalling
El diseño y la evolución de las redes que organices en tu sistema condiciona bastante los posibles vectores de ataque entre contenedores y sobre todo entre el host y los contenedores.
A lo largo de los últimos años se han realizado diversos cambios en el demonio de Docker, depreciando ciertos comandos que se han usado de forma asidua. Puedes encontrar todas las referencias en el capítulo 2.2.4
D04 - Secure Defaults and Hardening
Independientemente de cómo controlemos el ciclo de vida de nuestros contenedores, necesitaremos tener claro que tanto los contenedores, como el host y el orquestador si lo hubiera, deben ser revisados y bastionados desde un principio, independientemente de que el entorno en el que nos encontremos sea local o productivo. Para ello dedicamos el capítulo 2 y especialmente la sección 2.2.1 a ello
D05 - Maintain Security Contexts
Independientemente del sistema de orquestación que utilices, es importante evitar que los contenedores se mezclen o compartan recursos entre sí, cuando no sea necesario o por errores de diseño.
Por esta razón es importante introducir políticas de límites y artefactos que permitan mantener los contextos aislados, de lo que hablamos en el capítulo 2.3
D06 - Protect Secrets
La gestión de secretos siempre es un reto, porque podemos acabar filtrando de forma accidental en los logs, o quedar expuestos a actores maliciosos. A esto dedicamos el capítulo 2.3.3.
D07 - Resource Protection
La limitación de recursos es necesaria cuando usamos contenedores para evitar escenarios de tipo Denegación de Servicios (DoS) en el host por falta de recursos. Ver capítulo 2.2.5
D08 - Container Image Integrity and Origin
Docker parte de la premisa como vimos en la sección anterior (capítulo 1.3), que los contenedores que usamos en nuestro sistema consumen imágenes seguras y verificadas por nosotros.
Esto en ocasiones supone un reto porque debemos de elegir entre las muchas imágenes potenciales desarrolladas por la comunidad. Para ello hemos dedicado las secciones 2.2.1 y 3.1.1. También podemos hacer uso de mecanismos avanzados como la validación de la firma de imágenes (sección 2.3.3)
D09 - Follow Immutable Paradigm
La inmutabilidad es uno de los pilares que tenemos en el DevOps moderno, es fácil romper la inmutabilidad aunque Docker de base ya nos ofrezca un marco de trabajo con las herramientas para lograr la inmutabilidad de nuestras imágenes.
Para lograr la inmutabilidad debemos tener claro cómo elegir imágenes base y sus tags (secciones 2.2.1 y 3.1.1) , así como la gestión de dependencias (sección 3.1.3 y 3.1.4)
D10 - Logging
A lo largo del libro recomendamos algunas herramientas que pueden hacernos la vida más fácil en cuanto a revisar nuestras imágenes y asegurarnos que seguimos las mejores prácticas de una forma implícita (ver capítulo 4). Pero independientemente de las herramientas que usemos, es importante al menos tener logs de lo que pasa con nuestros contenedores, sobre todo en entornos productivos, de lo que hablamos en el capítulo 2.1.4