La aplicación de parches en directo necesita compilaciones reproducibles, y los contenedores son la contestación

por calpee
9 / 100

Sabemos que los parches en directo tienen beneficios reales pues dismuyen significativamente el tiempo de inacción asociado con los parches usuales. Pero el parche en vivo es relativamente difícil de poder sin causar otros inconvenientes y, por esa razón, el parche en vivo no se implementa con tanta continuidad como debería. Después de todo, lo último que desean los gestores de sistemas es un parche activo que bloquee un sistema.[

Las compilaciones reproducibles son una de las herramientas que pueden ayudar a los programadores a llevar a cabo parches en vivo de forma consistente y segura. En el presente artículo, explico por qué razón las compilaciones reproducibles son importantes para los parches en vivo, qué son precisamente las compilaciones reproducibles y de qué forma los contenedores están llegando al salve.[

Parches en vivo: una herramienta clave para la administración de amenazas

La app de parches es una sección primordial del cuidado de los sistemas pues la aplicación de parches corrige el código deficiente y con errores. Más importante aún, los equipos de seguridad confían en los parches para tapar los agujeros de seguridad, y existe una auténtica urgencia para esto. Esperar una ventana de cuidado conveniente para parchear es arriesgado porque deja una ocasión a fin de que los piratas informáticos utilicen un exploit.[

Crea un misterio bien difícil: sostener una alta disponibilidad pero correr un riesgo de seguridad, o aplicar parches con cierta frecuencia pero acabar con partes interesadas frustradas. Live parcheando puentes esa brecha. Con el parche en vivo, el código ofensivo se intercambia mientras que un desarrollo se está corriendo activamente, sin reiniciar la aplicación o el servicio que es dependiente de ese proceso.[

Llevar a cabo parches en vivo no es moco de pavo

La aplicación de parches en vivo no es tan simple de poder: el código directo debe “cuadrar” de forma similar, o pueden suceder todo tipo de cosas no deseadas. Hágalo mal y la aplicación, o todo el servidor, se bloqueará.[

El código detrás de un proceso en ejecución normalmente procede de un archivo ejecutable binario, un bloque de código legible por máquina recopilado desde el código fuente. Un kernel, por poner un ejemplo, tiene miles de ficheros fuente, todos compilados en unos pocos binarios.[

Con el parche en directo, el código del parche en vivo debe encajar en un nivel exacto. Sí, el fichero binario que contiene el código de parche va a ser diferente del archivo binario que tiene dentro el código incorrecto. Sin embargo, el nuevo código debe cuadrar en su sitio con precisión y debe depender de exactamente la misma versión de las bibliotecas importadas. El código de parche en vivo también debe compilarse empleando las mismas opciones y banderas del compilador. El bit endianness también es esencial: el archivo binario debe ordenarse exactamente de la misma manera.[

En principio, todo lo mencionado se puede lograr, pero en la práctica es un desafío. Por servirnos de un ejemplo, las actualizaciones diarias del sistema de forma frecuente afectan a las bibliotecas. Estas bibliotecas podrían ser ligeramente distintas, generando por su parte binarios que son levemente distintas al compilar código.[

Si se crea un parche en un sistema donde hay una pequeña diferencia en una sola biblioteca, ese parche puede denegar fácilmente el proceso al que se aplica. O todo el sistema si es un parche del kernel.[

Por qué las compilaciones reproducibles son importantes para la aplicación de parches en directo[

En otras palabras, el entorno en el que se desarrolla un parche es verdaderamente importante. En el momento en que se desarrolla un parche, es esencial recrear el entorno del código que se está parcheando. Sin normas para proseguir, esto puede ser bastante desafiante.[

Para los equipos de código abierto que admiten código, puede ser mucho más simple, en tanto que estos equipos tienen que tener registros que señalen el estado ambiental original, y lo mismo sucede con los distribuidores de software. Pero a veces, los desarrolladores detrás del programa pueden no lanzar un parche de inmediato.[

En el momento en que las organizaciones o cualquier otro tercero intentan crear parches desde adentro, el desarrollo de intentar replicar el ambiente de colección original puede ser impresionantemente desafiante, lento e impredecible, requiriendo cierto nivel de prueba y fallo.[

Es por eso que los desarrolladores de software se han esforzado por desarrollar una forma de recrear más de manera fácil el entorno de compilación original, y por qué razón algo llamado colección reproducible ha surgido como un sendero a proseguir.[

Error de error informáticoEntonces, ¿qué es una construcción reproducible?[

En lenguaje fácil, una colección es reproducible cuando dos desarrolladores de programa independientes tienen la capacidad de compilar código fuente legible por humanos en código legible por máquina a fin de que los 2 intentos independientes generen un fichero binario idéntico bit a bit.[

En Reproducible Builds, los autores sugieren tres criterios clave para una construcción reproducible. Primero, el desarrollo de construcción ha de ser determinista: no se registran variables como fechas u horas, y la salida debe generarse en el mismo orden, una referencia al bit endianness.[

Ahora, las herramientas necesarias para reproducir el entorno de construcción tienen que proporcionarse o describirse con todo detalle. Finalmente, los programadores tienen que poder validar la compilación que generan.[

Podría decirse que uno de los elementos más importantes es la capacidad de reproducir el ambiente de construcción, pero asimismo pertence a los mucho más difíciles de poder dados los varios causantes cambiantes comprometidos en un entorno de construcción.[

Las compilaciones reproducibles no son un concepto absolutamente nuevo, el proyecto GNU ha estado utilizando compilaciones reproducibles desde la década de 1990, pero la herramienta de las compilaciones reproducibles es quizás mayor que jamás.[

Hágalo bien y su colección reproducible afirma que puede producir un parche que se inserta en un proceso en vivo sin romper nada. Asimismo puede confiar en el desarrollo de compilación reproducible para cerciorarse de que el código binario que está usando no haya sido manipulado. De hecho, esto asegura que se pueda verificar una ruta directa desde la fuente al archivo binario de salida.[

Contenedores: el Huevo de Colón del parche vivo …[

He explicado por qué razón las compilaciones reproducibles son un concepto increíble, pero asimismo por qué las compilaciones reproducibles tienen la posibilidad de ser bien difíciles de poder. Una ruta que posibilita la reproducción coherente del entorno de colección es la utilización de máquinas virtuales. Los programadores fundamentalmente empaquetan y distribuyen todo el entorno de compilación en una máquina virtual.[

Sin embargo, las máquinas virtuales son complicadas de dirigir: el archivo de VM es grande y todo el sistema operativo debe iniciarse para adaptarse a una solicitud de cambio, o para ver “dentro” de la VM para analizar el ambiente de compilación. En el momento en que existen varios equipos en la mezcla, las máquinas virtuales tienen la posibilidad de ser una auténtica molestia.[

Los contenedores son una forma mucho más ligera y ágil de emular el ambiente de construcción original. En comparación con las máquinas virtuales, los contenedores ofrecen virtualización a nivel de sistema operativo, lo que quiere decir que las imágenes de contenedores son mucho más compactas.[

Tomemos a Docker, por ejemplo, un producto popular que permite la contenedorización. En el momento en que los desarrolladores desean emular el entorno de colección original, el desarrollador simplemente descarga un archivo de configuración para un contenedor, llamado Dockerfile. En este fichero de configuración hay un grupo de instrucciones que reproduce el entorno de construcción exacto.[

En vez de regentar archivos de VM grandes, cualquier cambio en el ambiente de compilación sencillamente se redacta en el Dockerfile, que se almacena al lado de todo el código que se requiere para reproducir una compilación. Los contenedores permiten a los desarrolladores eludir muchas de las dificultades impuestas por las compilaciones reproducibles al mismo tiempo que ofrecen un proceso de colección que se puede auditar.[

El parcheo en directo como práctica diaria[

La capacidad de reproducir packs binarios idénticos (compilaciones reproducibles) es fundamental a fin de que los parches en directo funcionen. No obstante, fué un desafío lograr compilaciones reproducibles, lo que paralelamente limita la disponibilidad de parches en directo.[

Los contenedores hacen que el trabajo de generar parches que sean aptos para parchear en vivo sea bastante, mucho más fácil. Abre la puerta para que los usuarios empresariales desarrollen parches a sabiendas de que estos parches se colocarán en su lugar en directo, sin ocasionar ninguna interrupción.[

Quiere decir que la aplicación de parches en vivo se puede implementar de manera mucho más amplia y extensa, lo que ahorra a muchas organizaciones de los efectos disruptivos del tiempo de inactividad de la aplicación de parches y, en consecuencia, optimización su posición de seguridad general, ya que la app de parches en este momento se puede realizar tan veloz y con tanta frecuencia como sea necesario.[

You may also like