¿Cómo evitar los ciberataques a los contenedores y kubernetes?

Fecha: Mar, 31/03/2020 - 19:37 Fuente: Por Andreas Jaekel, Jefe de Desarrollo de PaaS en IONOS

Hoy en día se hace difícil encontrar un desarrollador que trabaje sin contenedores o Kubernetes, ya que la tecnología de contenedores hace mucho más fácil trabajar con microservicios y en equipos ágiles. Kubernetes ha sido una historia de éxito durante los últimos cinco años y ahora se ha establecido como la herramienta estándar para la orquestación de contenedores. Sin embargo, las tecnologías más populares también reciben más atención de los cibercriminales que quieren propagar el malware. Esto también afecta a los contenedores, puesto que no son completamente seguros. El malware puede presentarse en imágenes o puede estar descargado en contenedores
¿Cómo evitar los ciberataques a los contenedores y kubernetes?

Andreas Jaekel, Jefe de Desarrollo de PaaS en IONOS

Imagen cortesía de IONOS

Los contenedores genéricos deben mantener a los intrusos a raya. Sin embargo, todavía podemos aumentar el nivel de seguridad.   Un enfoque podría consistir en instrumentalizar una función conocida de Linux e indicarle a los contenedores qué llamadas del sistema, y al sistema, respectivamente, se les permite ejecutar.

¿Qué son las llamadas del sistema?
Cada proceso de Linux recibe una porción de memoria cuando se inicia. El código es entonces libre de operar en esta memoria, por ejemplo, para realizar cálculos. Para todo lo demás, escribir un archivo, crear un directorio, iniciar un nuevo proceso… debe pedir permiso al núcleo.  Actualmente hay alrededor de 330 llamadas al sistema y estas son independientes del lenguaje de programación.

¿Por qué filtrar las llamadas al sistema?
A grandes rasgos, hay tres vectores principales de ataque a los contenedores:
•    Puertas traseras en las imágenes de Docker upstream
•    Errores de aplicación explotables
•    Llamadas de sistema vulnerables en el kernel de Linux

Filtrar las llamadas al sistema puede evitar que los programas y contenedores hagan algo que no queremos que hagan. Por ejemplo, deshabilitar aquellas llamadas al sistema que seguro que nunca necesitará.

¿Qué llamadas deberíamos filtrar?
Si se filtran demasiadas llamadas, la aplicación no funcionará. Pero si no se filtran lo suficiente, se deja espacio para los ataques. Es casi imposible crear una lista perfecta de filtros. Sin embargo, hay cinco enfoques diferentes a tener en cuenta:

1.    Lea la fuente: incluyendo todas las bibliotecas. Esta es básicamente la única manera de estar realmente seguro de que se ha excluido el código malicioso. Sin embargo, debido al número casi infinito de cadenas de dependencia, este enfoque es inviable en la práctica.
2.    Prueba y error: por supuesto, se puede probar a poner filtros. Pero con alrededor de 330 llamadas al sistema e infinitas combinaciones posibles, este enfoque tampoco es práctico.
3.    Hacer una suposición informada: una mejor opción es hacer una suposición específica. Esto, por supuesto, sólo tiene sentido si tienes amplios conocimientos de diseño de software y llamadas al sistema. Incluso entonces, el resultado probable es que se establezcan demasiados o muy pocos filtros. Hacer una suposición bien fundada es mejor que nada, pero aún está muy lejos de ser un filtro que funcione bien.
4.    Análisis de los binarios: teóricamente, se puede discernir qué llamadas de sistema se están usando analizando los binarios. La ventaja es que los binarios están siempre en lenguaje de máquina. Sin embargo, los diferentes lenguajes producen diferentes códigos de máquina. Esto hace básicamente imposible determinar automáticamente qué llamadas de sistema están incluidas y cuáles no.
5.    Rastreo de llamadas: las llamadas al sistema ejecutadas por una aplicación pueden ser rastreadas con una herramienta de rastreo. Esto puede hacerse durante una prueba unitaria o un conducto de CI, por ejemplo. Linux ofrece la herramienta strace, que es una gran herramienta para la depuración y la solución de problemas. strace también muestra los parámetros de la llamada.

En definitiva, crear un filtro adecuado no es fácil. Si es demasiado permisivo generoso, no se defenderá contra el malware. Si es demasiado estricto, la aplicación puede no ser ejecutable. Además, la configuración por defecto de Docker ya es bastante sofisticada.
Sin embargo, hay algunos casos en los que tiene sentido invertir tiempo en la creación de su propio filtro. Si conoces bien tu aplicación, puede ser una ventaja. Si necesitas un entorno Docker altamente seguro (por ejemplo, fin-tech), puede valer la pena el esfuerzo. Si eres un host de un contenedor, vale la pena definir por ti mismo qué llamadas al sistema se utilizan y cuáles no.

valorar este articulo:
Su voto: Nada

Enviar un comentario nuevo

Datos Comentario
El contenido de este campo se mantiene como privado y no se muestra públicamente.
Datos Comentario
Datos Comentario
Enviar