El Verdadero Origen de Tu Software: ¿De Dónde Proviene Realmente?

Elena Digital López

El software es una entidad curiosa y compleja: cada componente es una máquina invisible, aparentemente hecha de palabras mágicas, diseñada para ejecutarse en la máquina definitiva y universal. Aunque no está vivo, tiene un ciclo de vida. Comienza como código fuente, alojado en algún repositorio, y luego, a través de un proceso particular, se transforma en diferentes formas. Estas pueden incluir un fragmento de Javascript minimizado para un servidor web, una imagen de contenedor llena de código de marco y lógica empresarial, o un binario compilado para una arquitectura de procesador específica. Esta etapa final se conoce como el «artefacto de software».

Tras su creación, estos artefactos permanecen en registros de paquetes o contenedores, esperando ser utilizados. Cuando alguien decide usar uno de estos artefactos, lo descomprime, ejecuta el código o lanza el contenedor, y así comienza su operatividad. Este ciclo de vida de producción puede implicar muchas horas de trabajo humano y recursos económicos, conllevando también altos riesgos dado que el software es crucial para el funcionamiento del mundo moderno.

Sin embargo, no siempre se puede garantizar que el artefacto ejecutado sea exactamente lo que se construyó originalmente. Los detalles del viaje del artefacto se pueden perder, y es difícil conectar el artefacto final con el código fuente y las instrucciones de construcción originales. Esta falta de visibilidad es una de las principales causas de los problemas de seguridad actuales. Durante el ciclo de vida del desarrollo de software (SDLC), hay múltiples oportunidades para asegurar el flujo del código, reduciendo el riesgo de que actores maliciosos manipulen el software final.

Un desafío de la ciberseguridad es garantizar que un archivo no haya sido manipulado. Una forma efectiva de hacerlo es utilizando un algoritmo hash seguro para generar un «digest» del archivo, como el algoritmo SHA-256. Esto se puede lograr con OpenSSL:

openssl dgst -sha256 ~/important-file.txt

El resultado es una cadena de 64 caracteres que actúa como una huella digital única del archivo. Si el archivo cambia en lo más mínimo y se vuelve a ejecutar la función de hash, se obtendrá una cadena diferente. Este proceso nos permite detectar cualquier manipulación.

Además de identificar cambios, también es crucial poder hacer una declaración sobre la autenticidad del artefacto. Aquí es donde entran las firmas de artefactos de software, que certifican que un determinado sistema vio y aprobó ese artefacto. Esto se logra mediante la encriptación asimétrica, firmando el digest con una clave privada y proporcionando la clave pública correspondiente para su verificación.

Sistemas operativos como Windows, macOS, iOS y Android ya implementan mecanismos de firma para garantizar la autenticidad de los artefactos ejecutables. Estos sistemas son fundamentales para la seguridad del software moderno. Sin embargo, para mejorar la seguridad del SDLC, es necesario ir más allá de las firmas y considerar las atestaciones.

Una atestación es una afirmación sobre un artefacto, firmada por una entidad confiable. La más importante es la atestación de procedencia, que declara el código fuente y las instrucciones de construcción de donde proviene el artefacto. El proyecto SLSA ofrece un marco común para razonar sobre la seguridad de la cadena de suministro de software, proporcionando esquemas estandarizados para generar atestaciones de procedencia basadas en in-toto, un proyecto de la CNCF.

GitHub ha estado trabajando en desarrollar un servicio de atestación que incluiría la emisión de certificados, la firma segura de artefactos y la verificación de firmas. Esto podría lograrse estableciendo una Autoridad de Certificación (CA) y utilizando una aplicación cliente para autenticar firmas. Para evitar el mal uso de certificados, se podrían utilizar Listas de Revocación de Certificados o certificados de vida corta con firmas secundarias de una autoridad de estampado de tiempo.

Sigstore es un proyecto de código abierto que proporciona tanto una CA X.509 como una autoridad de estampado de tiempo, facilitando el uso de firmas de software de manera sencilla y transparente. GitHub, junto con otras organizaciones, contribuye a la gobernanza y operación de Sigstore. Este sistema hace posible crear un rastro de papel a prueba de manipulaciones que vincule los artefactos al CI, permitiendo a los consumidores de software validar la procedencia y autenticidad del código que ejecutan.

Con estas herramientas, los consumidores tienen los medios para imponer sus propias reglas sobre el origen del software que utilizan, lo que representa un avance significativo en la seguridad del SDLC. GitHub seguirá compartiendo más detalles sobre estos desarrollos en el futuro cercano. ¡Manténganse atentos y aprovechen el poder de GitHub Advanced Security!

Scroll al inicio