stringtranslate.com

Construcciones reproducibles

Logotipo del proyecto Reproducible Builds de Software Freedom Conservancy

La compilación reproducible , también conocida como compilación determinista , es un proceso de compilación de software que garantiza que el código binario resultante pueda reproducirse . El código fuente compilado mediante compilación determinista siempre generará el mismo binario. [1] [2] [3]

Las compilaciones reproducibles pueden actuar como parte de una cadena de confianza ; [1] el código fuente puede firmarse y la compilación determinista puede probar que el binario se compiló a partir de un código fuente confiable. Las compilaciones reproducibles verificadas proporcionan una contramedida sólida contra los ataques en los que los binarios no coinciden con su código fuente, por ejemplo, porque un atacante ha insertado código malicioso en un binario. Este es un ataque relevante; los atacantes a veces atacan binarios pero no el código fuente, por ejemplo, porque solo pueden cambiar el binario distribuido o para evadir la detección ya que es el código fuente que los desarrolladores normalmente revisan y modifican. En una encuesta a 17 expertos, las compilaciones reproducibles tuvieron una calificación de utilidad muy alta del 58,8% de los participantes, pero también una calificación de alto costo del 70,6%. [4] Se están realizando varios esfuerzos para modificar las herramientas de desarrollo de software para reducir estos costos.

Métodos

Para que el proceso de compilación sea determinista, la entrada al compilador debe ser la misma, independientemente del entorno de compilación utilizado. Esto normalmente implica la normalización de variables que pueden cambiar, como el orden de los archivos de entrada, las marcas de tiempo , las configuraciones regionales y las rutas .

Además, los compiladores no deben introducir el no determinismo por sí mismos. Esto sucede a veces cuando se utilizan tablas hash con un valor de semilla hash aleatorio. También puede suceder cuando se utiliza la dirección de las variables, ya que esto varía de la aleatorización del diseño del espacio de direcciones (ASLR).

Los sistemas de compilación , como Bazel y Gitian, [5] se pueden utilizar para automatizar procesos de compilación deterministas.

Historia

El Proyecto GNU utilizó compilaciones reproducibles a principios de los años 1990. Los registros de cambios desde 1992 indican que el esfuerzo continuaba. [6]

Uno de los proyectos más antiguos [7] que promueven compilaciones reproducibles es el proyecto Bitcoin con Gitian. Más tarde, en 2013, el proyecto Tor (red de anonimato) comenzó a utilizar Gitian para sus compilaciones reproducibles. [8]

A partir de 2011, se desarrolló un sistema de compilación Java reproducible para un proyecto FOSS peer-to-peer descentralizado: DirectDemocracyP2P. [9] Los conceptos de la aplicación del sistema para la recomendación de actualizaciones automáticas se presentaron por primera vez en abril de 2013 en Decentralized Coordination. [10] [11] En 2015, se publicó un tratado centrado en los detalles de implementación de la propia herramienta de compilación Java reproducible. [12]

En julio de 2013, el proyecto Debian comenzó a implementar compilaciones reproducibles en todo su archivo de paquetes. [13] [14] Para julio de 2017, se había demostrado que más del 90% de los paquetes en el repositorio se compilaban de manera reproducible. [15]

En noviembre de 2018, el proyecto Reproducible Builds se unió a Software Freedom Conservancy . [16]

F-droid utiliza compilaciones reproducibles para proporcionar una garantía de que los APK distribuidos utilizan el código fuente gratuito declarado . [17]

El sistema operativo portátil Tails utiliza compilaciones reproducibles y explica a otros cómo verificar su distribución. [18]

NixOS afirma que su compilación en junio de 2021 es 100 % reproducible para sus versiones ISO mínimas. [19]

A partir de mayo de 2020 , Arch Linux está trabajando para hacer que todos los paquetes oficiales sean reproducibles. [20]

Desafíos

Según el proyecto Reproducible Builds, las marcas de tiempo son "la mayor fuente de problemas de reproducibilidad. Muchas herramientas de compilación registran la fecha y hora actuales... y la mayoría de los formatos de archivo registrarán felizmente las horas de modificación sobre sus propias marcas de tiempo". [21] Recomiendan que "es mejor utilizar una fecha que sea relevante para el código fuente en lugar de la compilación: el software antiguo siempre se puede compilar más tarde" si es reproducible. Identifican varias formas de modificar los procesos de compilación para hacer esto:

En algunos casos, se deben realizar otros cambios para que el proceso de compilación sea reproducible. Por ejemplo, algunas estructuras de datos no garantizan un orden estable en cada ejecución. Una solución típica es modificar el proceso de compilación para especificar una salida ordenada de esas estructuras. [22]

Véase también

Referencias

  1. ^ ab "reproducible-builds.org". reproducible-builds.org . Archivado desde el original el 20 de mayo de 2016 . Consultado el 22 de agosto de 2016 . Las compilaciones reproducibles son un conjunto de prácticas de desarrollo de software que crean una ruta verificable desde el código fuente legible por humanos hasta el código binario utilizado por las computadoras.... El sistema de compilación debe ser completamente determinista: la transformación de una fuente dada siempre debe crear el mismo resultado.
  2. ^ Lamb, Chris; Zacchiroli, Stefano (marzo de 2022). "Compilaciones reproducibles: aumento de la integridad de las cadenas de suministro de software". IEEE Software . 39 (2): 62–70. arXiv : 2104.06020 . doi :10.1109/MS.2021.3073045. S2CID  233219473 . Consultado el 26 de marzo de 2023 .
  3. ^ Ratliff, Emily (4 de abril de 2016). "Establecimiento de correspondencia entre una aplicación y su código fuente | SecurityWeek.com". www.securityweek.com . SecurityWeek. Archivado desde el original el 20 de septiembre de 2016 . Consultado el 22 de agosto de 2016 .
  4. ^ Ladisa, Piergiorgio; Plate, Henrik; Martinez, Matias; Barais, Olivier (19 de abril de 2022). "Taxonomía de ataques a las cadenas de suministro de software de código abierto". arxiv.org . arXiv : 2204.04008 . doi :10.1109/SP46215.2023.00010 (inactivo el 1 de noviembre de 2024).{{cite journal}}: CS1 maint: DOI inactivo a partir de noviembre de 2024 ( enlace )
  5. ^ "Gitian: un método seguro de distribución de software". gitian.org . Consultado el 10 de enero de 2018 .
  6. ^ Gilmore, John (24 de enero de 2017). "SOURCE_PREFIX_MAP y la navaja de Occam". rb-general (Lista de correo).
  7. ^ "Archivo de licencia del proyecto Gitian". GitHub . Consultado el 3 de diciembre de 2019 .
  8. ^ Construcciones deterministas, segunda parte: detalles técnicos. 4 de octubre de 2013
  9. ^ "DDP2P". GitHub . 2011.
  10. ^ Alhamed, Khalid, et al. " "Seguridad mediante certificación descentralizada de actualizaciones automáticas para software de código abierto controlado por voluntarios". Citeseer ..", Actas de Coordinación Descentralizada. pp 40-59, Lulu Publisher, 6 de abril de 2013.
  11. ^ Silaghi, MC, Alhamed, K., Dhannoon, O., Qin, S., Vishen, R., Knowles, R., ... y Hirayama, K. (septiembre de 2013). DirectDemocracyP2P: iniciativas deliberativas descentralizadas. En Actas de IEEE P2P 2013 (pp. 1-2). IEEE.
  12. ^ Silaghi, M., Alhamed, K. y Stansifer, R. (diciembre de 2015). Extensiones de herramientas Java para admitir múltiples recomendadores y paquetes distribuidos. En la Conferencia internacional sobre ciencia computacional e inteligencia computacional (CSCI) de 2015 (pp. 722-725). IEEE.
  13. ^ "Charla sobre compilaciones reproducibles en Debian". 21 de septiembre de 2014.
  14. ^ "Historial de compilaciones reproducibles".
  15. ^ "Linux-Distributionen: Mehr als 90 Prozent der Debian-Pakete reproducduzierbar - Golem.de" (en alemán). 2017-07-24 . Consultado el 30 de octubre de 2018 .
  16. ^ "Reproducible Builds se une a Software Freedom Conservancy" . Consultado el 15 de diciembre de 2018 .
  17. ^ "Construcciones reproducibles". F-Droid.
  18. ^ "Verificación de la reproducibilidad de una imagen de Tails". Tails.
  19. ^ "¡El iso_minimal.x86_64-linux de Nixos-unstable es 100% reproducible!". Discurso de NixOS . 20 de junio de 2021. Consultado el 21 de junio de 2021 .
  20. ^ "ArchWiki - Construcciones reproducibles".
  21. ^ "Marcas de tiempo". Compilaciones reproducibles . Consultado el 16 de abril de 2022 .
  22. ^ "Marcas de tiempo". Compilaciones reproducibles . Consultado el 16 de abril de 2022 .

Enlaces externos