stringtranslate.com

preenlace

En informática , la previnculación , también llamada preenlace , es un método para optimizar los tiempos de carga de las aplicaciones mediante la resolución de los símbolos de la biblioteca antes del lanzamiento.

Fondo

La mayoría de los programas informáticos están compuestos de código que requiere bibliotecas compartidas externas para ejecutarse. Estas bibliotecas normalmente se integran con el programa en tiempo de ejecución mediante un cargador , en un proceso denominado enlace dinámico .

Si bien la vinculación dinámica tiene ventajas en cuanto al tamaño y la administración del código, también tiene desventajas. Cada vez que se ejecuta un programa, el cargador debe resolver (encontrar) las bibliotecas relevantes. Dado que las bibliotecas se mueven por la memoria, existe una penalización de rendimiento para la resolución. Esta penalización aumenta por cada biblioteca adicional que necesite resolución.

La previnculación reduce esta penalización al resolver las bibliotecas por adelantado. Posteriormente, la resolución solo ocurre si las bibliotecas han cambiado desde que se previncularon, por ejemplo, después de una actualización.

Sistema operativo Mac

Mac OS almacena los ejecutables en el formato de archivo Mach-O .

Sistema operativo Mac X

Mac OS X realiza la previnculación en la etapa de "Optimización" de la instalación del software del sistema o de ciertas aplicaciones.

La previnculación ha cambiado algunas veces dentro de la serie Mac OS X. Antes de la versión 10.2, la previnculación solo se producía durante el procedimiento de instalación (la etapa de "Optimización" mencionada anteriormente). Desde la versión 10.2 hasta la 10.3, el sistema operativo verificaba la previnculación en el momento del lanzamiento de las aplicaciones, y la primera vez que se ejecutaba una aplicación se previnculaba, lo que aceleraba los lanzamientos posteriores. Esto también se podía ejecutar manualmente, lo que hacían algunas instalaciones a nivel de sistema operativo. En la versión 10.4, solo se previnculaban las bibliotecas del sistema operativo. En la versión 10.5 y posteriores, Apple reemplazó la previnculación con un mecanismo de caché compartida dyld , [1] que proporcionaba un mejor rendimiento del sistema operativo.

Linux

En Linux, la previnculación se logra a través del programa prelink , un programa gratuito escrito por Jakub Jelínek de Red Hat para binarios ELF .

Los resultados de rendimiento han sido mixtos [ se necesita aclaración ] , pero parece ayudar a los sistemas con una gran cantidad de bibliotecas, como KDE . [2]

aleatorización previa al enlace

Cuando se ejecuta con la opción "-R", prelink seleccionará aleatoriamente la base de direcciones donde se cargan las bibliotecas. Esta selección hace que un ataque de retorno a libc sea más difícil de realizar porque las direcciones son exclusivas de ese sistema. La razón por la que prelink hace esto es porque las funciones del núcleo que proporcionan aleatorización del diseño del espacio de direcciones (ASLR) para las bibliotecas no se pueden usar junto con prelink sin anular el propósito de prelink y forzar al enlazador dinámico a realizar reubicaciones en el momento de carga del programa.

Como se indicó, la aleatorización de direcciones de biblioteca por proceso y prelink no se pueden usar en conjunto. Para evitar eliminar por completo esta mejora de seguridad, prelink proporciona su propia aleatorización; sin embargo, esto no ayuda a evitar una fuga de información general causada por prelink. Los atacantes con la capacidad de leer ciertos archivos arbitrarios en el sistema de destino pueden descubrir dónde se cargan las bibliotecas en los daemons privilegiados; a menudo, libc es suficiente, ya que es la biblioteca más común utilizada en los ataques de retorno a libc .

Al leer un archivo de biblioteca compartida como libc, un atacante con acceso local puede descubrir la dirección de carga de libc en todas las demás aplicaciones del sistema. Dado que la mayoría de los programas se vinculan a libc, el archivo de biblioteca libc siempre debe ser legible; cualquier atacante con acceso local puede recopilar información sobre el espacio de direcciones de procesos con mayores privilegios. El acceso local puede obtenerse comúnmente mediante cuentas de shell o cuentas de servidor web que permitan el uso de scripts CGI, que pueden leer y generar cualquier archivo en el sistema. [ cita requerida ] Las vulnerabilidades de recorrido de directorio pueden ser utilizadas por atacantes sin cuentas si hay vulnerabilidades de scripts CGI disponibles.

Debido a que prelink se ejecuta a menudo de forma periódica, normalmente cada dos semanas, la dirección de cualquier biblioteca dada tiene la posibilidad de cambiar con el tiempo. prelink se utiliza a menudo en un modo incremental en el que las bibliotecas ya preenlazadas no se modifican a menos que sea absolutamente necesario, por lo que una biblioteca no puede cambiar su dirección base cuando se vuelve a ejecutar prelink. Esto le da a cualquier dirección derivada una vida media del período en el que se ejecuta prelink. Tenga en cuenta también que si se instala una nueva versión de la biblioteca, las direcciones cambian.

Jakub Jelínek señala que los ejecutables independientes de la posición (PIE) ignoran el preenlace en Red Hat Enterprise Linux y Fedora , y recomienda que los programas de red y SUID se creen PIE para facilitar un entorno más seguro.

Asuntos

Ocasionalmente, la previnculación puede causar problemas con las bibliotecas de reinicio y de puntos de control de la aplicación como blcr, [3] así como con otras bibliotecas (como OpenMPI ) que se usan blcrinternamente. Específicamente, cuando se realiza un punto de control de un programa en un host y se intenta reiniciar en un host diferente, el programa reiniciado puede fallar con un error de segmentación debido a las diferencias en la aleatorización de la dirección de memoria de la biblioteca específica del host. [4] [5] [ ¿ fuente poco confiable? ]

Véase también

Referencias

  1. ^ "Página del manual para update_prebinding". Conexión para desarrolladores de Apple . Apple Computer Inc.
  2. ^ Crasta, James (17 de mayo de 2004). "ELF Prelinking y lo que puede hacer por usted" . Consultado el 10 de mayo de 2006 .
  3. ^ blcr
  4. ^ "Preguntas frecuentes sobre BLCR" . Consultado el 5 de enero de 2012 .
  5. ^ Hursey, Josh (29 de diciembre de 2011). "Error de segmentación al reanudar en un host diferente". Usuarios de OpenMPI (lista de correo) . Consultado el 5 de enero de 2012 .

Lectura adicional

Enlaces externos