Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Abstract
Entre los servicios que brinda la computación en la nube estan los contenedores de aplicaciones, los cuales son un tipo de
virtualización que necesita los recursos del sistema operativo host para poder operar. Los contenedores de aplicaciones permiten
la portabilidad de estas, es decir, que pueden ser transferibles de un entorno a otro sin sufrir ningún problema cuando se ejecuten.
La tecnologı́a de contenedores resuelve uno de los grandes problemas a los que se enfrentan las compañı́as el cual es satisfacer
la demanda de aplicaciones que pueden poseer, ya que con el método tradicional para obtener el mismo comportamiento de una
aplicación en un entorno diferente muchas veces tendrı́a que rediseñarse para el nuevo entorno, con los contenedores se pueden
olvidar de este problema. Esta tecnologı́a resulta ser bastante conveniente, pues contener una aplicación no resulta ser difı́cil,
pero actualmente esta tecnologı́a enfrenta grandes desafı́os en cuanto a seguridad los cuales serán compartidos en la siguiente
investigación, se darán a conocer las ventajas que ofrece la contenedorización, ası́ también como las desventajas y posibles
problemas de seguridad que se pueden enfrentar al utilizarlos.
Index Terms
Computación en la nube, contenedores de aplicación, virtualización, seguridad, protección.
I. I NTRODUCCI ÓN
Actualmente muchas compañı́as están usando servicios de la web, entre ellos los servicios de computación en la nube los
cuales proveen alta escalabilidad y bajos costos de TI (Tecnologı́as de la Información). Los usuarios por medio de este modelo
acceden a recursos de computación, almacenamiento, redes, servidores y aplicaciones los que se encuentran disponibles en
linea a través de un proveedor remoto (1).
La computación en nube evolucionó a partir de tecnologı́as de virtualización que ya existı́an en el ecosistema de TI. La
virtualización es un término que se refiere a la abstracción de los recursos informáticos. El propósito de este tipo de tecnologı́a
es mejorar la utilización de los recursos proporcionando una plataforma unificada e integrable para usuarios y aplicaciones
(2). La virtualización oculta las complejidades subyacentes y permite múltiples clientes, con diversas aplicaciones y demandas,
que usan la nube simultáneamente. La plataforma puede ofrecer una amplia gama de servicios que emplean los servicios
virtualizados. La nube ofrece una vista única de sus recursos y servicios, promoviendo la facilidad de uso, la rentabilidad, la
elasticidad, estas caracterı́sticas provocaron importantes intereses en la computación en la nube en todo el mundo (3).
Una de las más grandes necesidades de las empresas es ofrecer aplicaciones de una manera más rápida, esto se debe
a que las aplicaciones cada vez se están volviendo más complejas y existe una demanda por un desarrollo más rápido en
distintos entornos. Se sabe que las aplicaciones en tiempo de su ejecución poseen dependencias, por lo que las compañı́as
están optando por un enfoque basado en la nube el cual consiste en utilizar contenedores de aplicaciones para deshacerse de
estas dependencias. Con un contenedor de aplicaciones, se puede ejecutar un formato de paquete común en las instalaciones
fı́sicas, ası́ como en todos los proveedores principales de la nube pública y nube privada. Un contenedor encapsula un programa
con todas sus dependencias. Este nivel de paquetización permite que una aplicación pueda ser trasladada de un ambiente a
otro y no afecta su ejecución.
Los contenedores de aplicaciones proveen los recursos necesarios para la ejecución de aplicaciones y maximizan su
portabilidad. Los contenedores permiten la “virtualización” de aplicaciones de sofware, es decir, que estas sean transferibles
entre diferentes entornos y sistemas. Todos los contenedores que se ejecutan en una plataforma comparten el sistema operativo,
por lo que el consumo de recursos de almacenamiento, CPU y hardware se reducen y los hace muy rápidos. Gracias a
la tecnologı́a de contenedores, las aplicaciones se pueden desarrollar de forma aislada, con la garantı́a de que trabajarán
exactamente de la misma manera en cualquier máquina que soporte contenedores (4)
En esencia, los contenedores pueden moverse de nube a nube y de sistema a sistema, por lo tanto, también pueden
proporcionar automatización para este proceso. Es decir, No solo se puede aprovechar los contenedores, sino que también
se puede tenerlos automáticamente ”migrar en vivo” desde la nube a la nube según sea necesario (5). Actualmente el uso de
la tecnologı́a de contenedores esta aumentando debido a sus caracterı́sticas interesantes e inspiradoras. Los contenedores son
bastante ligeros, fácil de transportar y proveen alta escalabilidad en tiempo real. Dentro de los contenedores, tı́picamente, se
encuentran binarios, archivos, dependencias, etc. para ejecutar la aplicación en cualquier sitio. Los contenedores comparten el
núcleo del sistema operativo subyacente (6).
2
Si bien los contenedores se han convertido en una de las tecnologı́as más usadas para la virtualización de aplicaciones y
proporcionan múltiples ventajas, aún existen ciertos desafı́os con respecto a la seguridad de los mismos, los cuales se darán
a conocer en esta investigación. La seguridad de los contenedores consiste en proteger su integridad tanto de las aplicaciones
que estos contienen como de la infraestructura en la que estos se basan.
2) LXC - Contenedores Linux: Los contenedores LXC o Linux son el predecesor de Docker, estos proporcionan virtualización
a nivel de sistema operativo y tienen su propio proceso y espacio de red (11). LXC garantiza el aislamiento de los contenedores.
LXC también desarrolló el método de compartir y administrar recursos (2).
3) Rocket – Project rkt: Rocket es un entorno de ejecución de contenedores, es el rival de Docker, además ofrece ventajas
como ser compatible con otros contenedores y asegura poder convertir cualquier otro formato de contenedor existente en su
propio formato. A diferencia de Docker rkt no depende exclusivamente de funciones del kernel de Linux (2).
4) OpenVZ: Es una tecnologı́a basada en contenedores que permite que un servidor fı́sico ejecute varias instancias de un
sistema operativo llamado contenedores. Cada contenedor tiene su propia pila de red, puertos serie, árbol de procesos y sistema
de archivos. Utiliza un kernel de Linux y solo puede ejecutar linux. Podrı́a ser una desventaja usar openVZ en caso de que
los contenedores necesiten una versión diferente del kernel, ya que todos los contenedores de openVZ comparten la misma
arquitectura y la misma versión del kernel. Además, como el contenedor se ejecutan sobre un sistema operativo, es mucho más
eficiente y escalable. También, existe una asignación de memoria dinámica, es decir, la memoria asignada a un contenedor de
Linux se puede utilizar para otro contenedor sin el requisito de reiniciar todo el sistema (11).
Fig. 2: Diferentes entornos sobre los que se pueden mover los contenedores de aplicaciones
2) Fáciles de manipular: El proceso de crear, replicar o eliminar contenedores es muy sencillo, esto permite la facilidad
de agregar nuevas funcionalidades, quitar funcionalidades o corregir errores. También el proceso de desarrollo se vuelve más
sencillo por ejemplo el manejo de nuevas versiones. El proceso de actualización de las aplicaciones se vuelve fácil pues
4
solo es necesario modificar el archivo de configuración, crear nuevos contenedores y eliminar los anteriores. Los tiempos de
construcción son rápidos. Esto permite tiempos reducidos en pruebas, desarrollo y despliegue. Una vez que se ha construido
el contenedor, se puede enviar a los entornos de prueba y de allı́ al entorno de producción (2).
3) Mayor producción de aplicaciones en poco tiempo: Las empresas actualmente presentan una alta demanda de aplicaciones
lo que las obliga a ofrecerlas de una manera más rápida, ası́ también como realizar el desarrollo de las mismas en diferentes
entornos. Los contenedores proveen todos los recursos para facilitar la ejecución de las aplicaciones en los diferentes entornos,
esto hace posible que las empresas puedan satisfacer las demandas de sus clientes de forma eficiente sin preocuparse de
desarrollar las aplicaciones para diferentes entornos.
4) Soporte en plataformas multinube: Los contenedores pueden ser transportables entre nubes, siempre y cuando el sistema
operativo host sea compatible con el contenedor. Este es uno de los mayores beneficios pues en la actualidad los principales
proveedores de computación en la nube ofrecen soporte para los contenedores más conocidos.
5) Ahorro de recursos: Un contenedor proporciona la mayorı́a de los recursos necesarios para que una aplicación pueda
ejecutarse, todo lo que se requiere es el sistema operativo, esto hace que las empresas no tengan que invertir en infraestructura
ni en altas tecnologı́as, además también existe un ahorro al no tener que invertir en el desarrollo de una aplicación para entornos
distintos.
2) Es una tecnologı́a muy nueva: Esta tecnologı́a viene comenzando y esta en continuo crecimiento. El uso y la adminis-
tración de los contenedores de aplicaciones aún no están bien comprendidos y adoptados por la comunidad (desarrolladores,
personal de TI). Esto hace que el proceso de adaptarse y comprender bien la tecnologı́a sea difı́cil. Es complicado encontrar
a personal capacitado para que realice un buen manejo de los contenedores.
3) La portabilidad tiene limitaciones: Los contenedores de aplicaciones están diseñados para que se ejecuten sobre el mismo
sistema operativo sobre el que fueron creados, es decir, un contenedor que fue creado para trabajar sobre Linux no va a ser
compatible con Windows y viceversa.
1) Problemas de seguridad dentro de un contenedor: Un contenedor puede sufrir daños causados por las aplicaciones
que posee, ya que estas pueden ser mal intencionadas. Si una aplicación pudiera obtener control sobre el administrador de
contenedores, podrı́a ser capaz de apuntar al sistema host y otros contenedores dentro del sistema. Sin embargo, una aplicación
de ataque podrı́a tomar el control de un contenedor vulnerable especı́fico (12). A continuación se detallan los posibles ataques
que pude sufrir un contenedor cuando alberga este tipo de aplicaciones.
5
Las imágenes pueden ser de tipo maliciosas estas pueden contener vulnerabilidades, estar mal configuradas o configuradas
para causar daño. Pueden tener algún virus para intentar dañar al contenedor, incluso un atacante podrı́a crear un backdoor y
obtener acceso al contenedor logrando ası́ realizar modificaciones al mismo y dañando otras aplicaciones que se encuentren
en el contenedor, para evitar este tipo de problemas pueden monitorizarse las aplicaciones con un antivirus (12).
Si un desarrollador no muy experimentado en el tema desea incluir alguna aplicación al contenedor, puede dejar mal las
configuraciones de la imagen por ejemplo proporcionándole más accesos de los que esta necesita, esto causarı́a que la aplicación
obtenga un acceso total al contenedor. También podrı́a habilitar el acceso remoto al contenedor y ası́ ofrecerle oportunidades
a atacantes externos los cuales pueden obtener acceso al contenedor. Esta situación se puede controlar al proporcionarle a la
aplicación accesos de mı́nimo privilegio, es decir, solamente brindarle los accesos necesarios para su ejecución y realizando
una inspección sobre las configuraciones que están habilitadas, para ası́ deshabilitar toda aquella configuración que pueda dar
lugar a un acceso no autorizado al contenedor.
Otro problema es la divulgación de la información, albergar en el contenedor texto claro sobre información secreta puede
traer serios problemas, por ejemplo proporcionar contenido explicito sobre alguna base de datos darı́a acceso a la posible
modificación de la misma. Es por esto que la información secreta no se debe contener en la imagen (12). Es importante
mantener en constante revisión las aplicaciones para detectar vulnerabilidades, además conceder el mı́nimo acceso a las mismas
reduce las posibilidades de ataques, como un ataque de denegación de servicio (DoS) el cual afectarı́a la disponibilidad del
contenedor.
2) Problemas de seguridad entre contenedores: Existen contenedores maliciosos que pueden acceder a otros contenedores
y ası́ modificar, dañar o robar los datos del otro. También uno de estos contenedores podrı́a dañar la disponibilidad de otro
contenedor apropiándose de todos los recursos disponibles para utilizarlos a su favor.
Una imagen mal intencionada puede establecer un proceso que analice las imágenes que existan en otros contenedores y
ası́ tomar el control de estos. Puede evitarse este problema si solamente se utilizan imágenes confiables, sin vulnerabilidades.
Un contenedor malicioso puede acceder a la red donde operan otros contenedores y de esta manera lograr un ataque de
degeneración de servicio, por esta razón no debe existir comunicación entre contenedores a menos que sea necesaria. También
si un contenedor obtiene acceso a la red de otros podrı́a realizar un análisis de los puertos del mismo para ası́ encontrar
vulnerabilidades.
3) Problemas de seguridad en el host que hospeda el contenedor: Uno de los más grandes problemas que suceden al utilizar
contenedores es que el host que alberga a este contenedor es propenso a múltiples ataques. Una de las caracterı́sticas de todos
los contenedores es que estos funcionan sobre el sistema operativo del host, aunque esta caracterı́stica les proporciona grandes
ventajas al ser muy rápidos y ligeros, esta misma los hace bastante inseguros.
Una aplicación que se cree en un contenedor con privilegios root también tendrá los mismos privilegios sobre el sistema
operativo en el que se encuentra, es decir, es bastante importante considerar los derechos de acceso que se tienen, pues si un
atacante logra obtener acceso sobre un contenedor con accesos root podrá obtener también todo el acceso al sistema operativo
causando ası́ múltiples ataques. Con este tipo de acceso se puede hacer uso de todos los recursos del sistema operativo incluso
de la memoria, ocasionando de esta manera un ataque de denegación de servicio dañando no solo la disponibilidad de los otros
contenedores que se encuentren en el mismo host sino también afectarı́a al mismo sistema dejándolo sin recursos disponibles
para atender otras solicitudes. Al usar contenedores es esencial que el sistema operativo sobre el que estos se encuentran posea
todos los requerimientos de seguridad y sea totalmente confiable. La administración de recursos proporciona una manera de
limitar la cantidad de recursos disponibles para cada contenedor dependiendo de la carga del sistema. Esto es necesario para
evitar que un atacante agote los recursos fı́sicos disponibles en un dispositivo, como el espacio en disco o los lı́mites de E/S
del disco, los ciclos de la CPU, el ancho de banda de la red y la memoria (13).
4) Aspectos a tomar en cuenta para la elección del host al utilizar contenedores: Si bien un contenedor puede operar sobre
cualquier host, existe la posibilidad de que este no cuente con la preparación necesaria para brindar la mayor seguridad al
contenedor, puesto que si el sistema operativo del host se ve expuesto por algún ataque de un contenedor, no solamente se
verá afectado este sistema sino también todos los otros contenedores que contenga. La mayorı́a de amenazas que puede sufrir
un contenedor son por la compartición de datos o por vulnerabilidades en el uso de comunicaciones. Es por esta razón la
importancia de mencionar que requerimientos debe presentar el host para que sea adecuado al manejar contenedores.
• Separación de Procesos: El sistema operativo del host debe ofrecer un mecanismo para determinar cuales procesos están
siendo ejecutados por los diferentes contenedores y cuales esta ejecutando el mismo. De esta manera se limita el acceso
a los contenedores si tratan de realizar alguna instrucción indebida (13).
6
• Aislar el sistema de Archivos: Debe considerarse que el sistema operativo separe el sistema de archivos entre contenedores,
ya que este sistema es el que permite la interacción entre procesos como compartir datos. De esta manera se evita que
los distintos contenedores puedan tener comunicación, y realicen ataques entre ellos (13).
• Aislamiento de red: El objetivo principal del aislamiento de la red es evitar los ataques basados en la red como ataques
de denegación de servicio, backdoors y man-in-the-middle. Además, para poder admitir aplicaciones que puedan competir
por el mismo tipo de recurso de red (como el enlace al mismo puerto de red), También debe proporcionar una vista
virtualizada de la pila de red. Los métodos de aislamiento de red difieren en términos de la capa OSI de la pila TCP /
IP donde se implementa el aislamiento. FreeBSD y Linux-VServer implementan el aislamiento de red en la Capa 3 con
la ayuda del filtrado de enlaces. Restringen una llamada bind realizada desde dentro de un contenedor a un conjunto de
direcciones IP especı́ficas y, por lo tanto, los procesos solo pueden enviar y recibir paquetes desde estas direcciones (13).
• Aislar el manejo de dispositivos: Se debe tomar en consideración un sistema operativo host que no permita instanciar
cualquier tipo de dispositivo a los contenedores, ası́ para proteger a otros contenedores y al host. Los dispositivos que se
deben permitir instanciar a un contenedor deben ser virtuales de esta manera el único que posee información sobre estos
dispositivos es el contenedor, lo que permite que estos no sean compartidos. También se pueden permitir dispositivos
sin estado como por ejemplo nulos, estos no afectarı́an ya que no poseen ningún estado y por último dispositivos que
posean espacios de nombres, si un dispositivo admite a un contenedor en su espacio correspondiente entonces es seguro
exponerlo al uso en el contenedor (13).
• Buena administración de recursos: Si se provee una buena administración de recursos cada contenedor en el host solo
tendrá acceso a los recursos necesarios para su ejecución y no se podrá aprovechar de los demás recursos del sistema
operativo para generar un ataque y deshabilitar a otros contenedores o a los procesos del host.
R EFERENCES
[1] P. V. Beserra, A. Camara, R. Ximenes, A. B. Albuquerque, and N. C. Mendonça, “Cloudstep: A step-by-step decision
process to support legacy application migration to the cloud,” in 2012 IEEE 6th international workshop on the maintenance
and evolution of service-oriented and cloud-based systems (MESOCA). IEEE, 2012, pp. 7–16.
[2] T. Vase, “Advantages of docker,” 2015.
[3] H. Rajaei and E. A. Aldakheel, “Ac 2012-4956: Cloud computing in computer science and engineering education.”
[4] L. Baresi, S. Guinea, A. Leva, and G. Quattrocchi, “A discrete-time feedback controller for containerized cloud
applications,” in Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software
Engineering. ACM, 2016, pp. 217–228.
[5] D. S. Linthicum, “Moving to autonomous and self-migrating containers for cloud applications,” IEEE Cloud Computing,
vol. 3, no. 6, pp. 6–9, 2016.
[6] R. Madhumathi, “The relevance of container monitoring towards container intelligence,” in 2018 9th International
Conference on Computing, Communication and Networking Technologies (ICCCNT). IEEE, 2018, pp. 1–5.
[7] J. Cito, V. Ferme, and H. C. Gall, “Using docker containers to improve reproducibility in software and web engineering
research,” in International Conference on Web Engineering. Springer, 2016, pp. 609–612.
[8] R. HAT, “Modernizar la entrega de aplicaciones con contenedores,” pp. 1–6, 2017.
[9] S. Singh and N. Singh, “Containers & docker: Emerging roles & future of cloud technology,” in 2016 2nd International
Conference on Applied and Theoretical Computing and Communication Technology (iCATccT). IEEE, 2016, pp. 804–807.
[10] R. R. Gupta, G. Mishra, S. Katara, A. Agarwal, M. K. Sarkar, R. Das, and S. Kumar, “Data storage security in
cloud computing using container clustering,” in 2016 IEEE 7th Annual Ubiquitous Computing, Electronics & Mobile
Communication Conference (UEMCON). IEEE, 2016, pp. 1–7.
[11] U. Gupta, “Comparison between security majors in virtual machine and linux containers,” arXiv preprint
arXiv:1507.07816, 2015.
[12] S. Sultan, I. Ahmad, and T. Dimitriou, “Container security: Issues, challenges, and the road ahead,” IEEE Access, vol. 7,
pp. 52 976–52 996, 2019.
[13] K. Bernsmed and S. Fischer-Hübner, Secure IT Systems: 19th Nordic Conference, NordSec 2014, Tromsø, Norway, October
15-17, 2014, Proceedings. Springer, 2014, vol. 8788.