Introducing the 2024 PKI & Digital Trust Report     | Download the Report

Integración de firma de código seguro en sus prácticas de CI/CD

Firma de códigos

En nuestro mundo cada vez más digital, la confianza lo es todo.

Los usuarios finales deben confiar en el sitio software con el que interactúan, los desarrolladores e ingenieros deben ser capaces de generar esa confianza y los equipos de seguridad deben establecer los controles adecuados para permitir todo el ciclo.

Por supuesto, como todos sabemos a estas alturas, establecer y mantener la confianza digital no siempre es fácil.

Una de las mejores formas de establecer la confianza digital es mediante el uso de identidades y, más concretamente, firma de códigoque verifica la autenticidad de las nuevas versiones. Pero, ¿cómo se utiliza exactamente la firma de código en las organizaciones hoy en día? ¿Cuáles son algunos de los principales retos a los que se enfrentan los equipos a la hora de implantar la firma de código y qué ocurre cuando esos procesos no son seguros? Y lo que es más importante, ¿cómo puede garantizar la seguridad de la firma de código en su proceso CI/CD?

Recientemente respondimos a estas preguntas y más durante nuestro webinar Integración de la firma segura de código en el proceso CI/CD. Siga leyendo para ver lo más destacado de este debate o haga clic aquí para ver la grabación completa.

Establecer la confianza digital: Cada máquina necesita una identidad, y cada identidad debe ser gestionada

Ante todo, hablemos de establecer la confianza digital. En lo que respecta a la firma de código, toda organización necesita crear un entorno de confianza en el que los equipos de seguridad se sientan cómodos con los controles establecidos y en el que los desarrolladores e ingenieros puedan trabajar como y donde quieran sin crear riesgos innecesarios.

Lograr ese equilibrio, especialmente para los equipos de DevOps, no es fácil. Entre los desarrolladores que trabajan a distancia, las cargas de trabajo que se ejecutan en varios entornos y las cadenas de herramientas de DevOps cada vez más complejas, cada vez es más difícil saber qué es de confianza y qué no. 

Aquí es donde la identidad adquiere tanta importancia - especialmente para las máquinas. Sencillamente, cada máquina, cada dispositivo y cada carga de trabajo necesita una identidad, y cada una de esas identidades debe protegerse y gestionarse.

Los certificados de firma de código No son diferentes: son la identidad detrás de su software , ya que se utilizan para autenticar todo, desde las compilaciones y artefactos de software hasta las imágenes de contenedores e incluso el firmware y la configuración de IoT . Como resultado, si esa identidad de firma de código se ve comprometida, se socava la confianza.

Comprender los casos de uso de la firma de código: El componente integral de la confianza digital

En los últimos años, el papel de la firma de código en el establecimiento de la confianza digital se ha vuelto cada vez más crítico. Los usuarios finales que descargan software de Internet esperan que software esté firmado. 

Esta realidad, combinada con el auge de los entornos de confianza cero, significa que casi todos los activos que produce una empresa deben estar firmados: cualquier cosa que se pueda desplegar (por ejemplo, secuencias de comandos, código de infraestructura, imágenes de contenedores, aplicaciones, archivos WAR, archivos EAR, DLL, ejecutables, macros, etc.) debe estar firmada, ya que las actividades maliciosas pueden producirse en cualquier lugar.

Teniendo esto en cuenta, algunos de los casos más comunes de uso de la firma de código incluyen:

  • Proteger la infraestructura: Evitar descargas no autorizadas y ransomware permitiendo que sólo las aplicaciones de confianza se ejecuten en su infraestructura.
  • Protección de dispositivos y firmware: Evitar el acceso no autorizado a los dispositivos protegiendo el firmware y las actualizaciones de firmware con firmas digitales y verificación.
  • Salvaguardar software: Garantizar que software publicado y distribuido está firmado y que las claves están protegidas.
  • Contenedores de confianza: Establecimiento de imágenes base de confianza y firmadas digitalmente para contenedores y máquinas virtuales desplegadas en su entorno.
  • Habilitación de DevSecOps: Establecimiento de la confianza en el proceso CI/CD, desde la firma digital del código fuente registrado en los repositorios hasta la firma de los paquetes después de la compilación.
  • Prevención de macros maliciosas: Prevención de macros no autorizadas o maliciosas en dispositivos internos garantizando que sólo se permite la ejecución de macros firmadas.

Generar confianza y reducir riesgos: El modelo de madurez de la firma de código

Dada la importancia de la firma de código para establecer la confianza digital y la amplia variedad de casos de uso de la firma de código, las organizaciones deben prestar mucha atención a sus prácticas de firma de código. Ahí es donde entra en juego la idea de un modelo de madurez de firma de código. Ese modelo tiene el siguiente aspecto:

Nivel 0: Sin firma

  • No firmar los entregables de software
  • Vulnerable al acceso no autorizado al código
  • No hay auditabilidad ni integridad detrás del software

Nivel 1: Fragmentado

  • Firma de entregables software , pero con herramientas fragmentadas
  • Los desarrolladores manejan sus propias claves privadas sin control centralizado
  • Las claves de firma son vulnerables a un uso indebido o comprometido

Nivel 2: Centralizado

  • Uso de una plataforma centralizada para la política de firma de código, el flujo de trabajo y la auditabilidad.
  • Protección de claves de firma sensibles en un HSM seguro
  • No se integra con los procesos o flujos de trabajo de CI/CD y no cubre todos los casos de uso.

Nivel 3: CI/CD integrado

  • Firma de todos los contenedores, artefactos y entregables software
  • Integración con herramientas de firma y flujos de trabajo nativos
  • Total auditabilidad y gobernanza de todos los procesos de firma

Lamentablemente, muchas organizaciones se sitúan entre el nivel 0 y el nivel 1 de este modelo de madurez. El problema no es que los equipos no reconozcan la importancia de firmar el código, sino que no saben cómo hacerlo o no están al día de las mejores prácticas en este ámbito.

Por ejemplo, a menudo vemos que las claves se pasan de una unidad USB a otra, lo que crea riesgos de exposición. O vemos que distintos equipos utilizan diferentes soluciones puntuales, lo que significa que los procesos están fragmentados y no se traducen bien en toda la organización. 

Esto ocurre porque la firma segura de código es un reto: Hay que hacer que las claves sean accesibles para los equipos que las necesitan, estén donde estén, pero que sean inaccesibles para quienes no deberían firmar con esas claves. Puede parecer un círculo vicioso.

Encontrar una solución: Cómo Keyfactor Signum resuelve los obstáculos habituales a la firma segura de código.

Entonces, ¿cómo se llega exactamente a la centralización y más allá en el modelo de madurez de firma de código? Por lo general, los equipos deben resolver tres retos fundamentales. Afortunadamente, Keyfactor Signum ofrece soluciones a estos desafíos a través de características como la protección de claves, controles de políticas, registros de eventos, interfaces nativas, autenticación y atestación. 

Proteger las llaves

El reto: Para empezar, ¿dónde se almacenan las claves de firma de código? Con demasiada frecuencia, se almacenan en unidades flash, servidores o estaciones de trabajo, lugares todos ellos vulnerables al acceso no autorizado de terceros.

La solución: Keyfactor Signum protege estas claves sensibles generándolas y almacenándolas dentro de un HSM. En particular, Keyfactor impide que estas claves salgan del HSM una vez generadas.

Por qué es importante: En el futuro, esta atestación de claves (o la capacidad de proporcionar una prueba a su CA pública de que las claves se generan en un HSM) será muy importante, ya que el Foro CAB pronto exigirá que las CA públicas tengan esta prueba para firmar cualquier certificado.

Auditabilidad

El reto: A continuación, ¿quién tiene acceso para firmar realmente el código y existe un registro de auditoría de quién firmó qué, cuándo lo hizo y con qué lo hizo? No basta con almacenar y generar claves en un lugar seguro, también hay que controlar quién tiene acceso a ellas.

La solución: Keyfactor Signum establece esta auditabilidad mediante la aplicación de reglas y políticas en torno a quién tiene acceso a las claves, quién puede utilizarlas y para qué pueden utilizarse. También proporciona una pista de auditoría completa para tener visibilidad de todo lo que ocurre en el entorno.

Por qué es importante: A medida que sigue creciendo el volumen de casos de uso que requieren la firma de código, este nivel de visibilidad para verificar y validar las actividades de firma será esencial para escalar de forma segura.

Necesidad de velocidad

El reto: Por último, los desarrolladores quieren algo fácil de usar y que no cambie su proceso. Así que, si almacenas las claves en un lugar seguro y tienes estrictos controles de acceso, ¿cómo puedes hacer que los equipos que las necesitan para firmar código puedan acceder fácilmente a ellas?

La solución: Keyfactor Signum hace que estas protecciones sean operacionalmente efectivas integrándolas en herramientas de firma nativas e incorporándolas a los procesos de compilación y entrega existentes; de este modo, los desarrolladores no tienen que cambiar sus flujos de trabajo.

Por qué es importante: Permitir que tus desarrolladores sigan trabajando como ya lo hacen introduciendo integraciones nativas en sus herramientas actuales les facilita la obtención de claves según las necesiten (evitando así ralentizaciones y/o soluciones provisionales) al tiempo que mantienen la seguridad autenticándose a través de un proveedor de identidades.

Comprender la solución: La arquitectura de la solución de Keyfactor Signum

Saber qué es Keyfactor Signum es una cosa, pero entender cómo funciona exactamente y qué aspecto tiene en la práctica es otra. Teniendo esto en cuenta, a continuación se muestra un flujo de trabajo típico con Keyfactor Signum :

Una vez comprometido el código, venga de donde venga y sea lo que sea, hay que firmarlo. Keyfactor Signum ofrece integraciones con herramientas de firma habituales (por ejemplo, SignTool, jarsigner, Cosign, etc.) para facilitarlo. Dado que Keyfactor está alojado en la nube, permite a los usuarios firmar desde cualquier lugar de forma segura.

Keyfactor Signum también ofrece distintos modelos de autenticación a través de un agente SAML/OAuth y una consola de administración. A través de la consola, los administradores tienen control y visibilidad sobre las políticas de firma y pueden conceder aprobaciones para saber quién puede hacer qué, así como acceder a los registros de auditoría para ver la actividad real.

En conjunto, esta arquitectura ofrece una potente solución que facilita el proceso de firma de código a los desarrolladores, al tiempo que proporciona a los administradores todo el control que necesitan para centralizar la gestión y garantizar que las claves están debidamente protegidas.

Unirlo todo: Integración de la firma segura de código en el proceso CI/CD

Por último, ¿cómo encaja todo esto en el proceso CI/CD? Con una solución como Keyfactor Signum , es posible hacer que cualquier binario que entre en tu repositorio esté firmado y punto. Este es el aspecto del proceso:

Una vez que un desarrollador confirma el código en la canalización de CI/CD, va al repositorio de código fuente y el servidor de CI (ya sea Jenkins, Azure DevOps o cualquier otro) ejecuta las pruebas unitarias. A partir de ahí, el código se firma utilizando el cliente Keyfactor Signum y luego se almacena en el repositorio.

A partir de ahora, cada vez que alguien extraiga algo del repositorio, ese código se verificará. Herramientas como SignTool, jarsigner y Cosign tienen un componente de verificación integrado para comprobar que el código está firmado por un certificado verificado basado en la raíz de confianza correcta. Esto significa que incluso si alguien creara su propio certificado de firma, estaría fuera de la raíz de confianza designada, por lo que cualquier código firmado con ese certificado fallaría en la etapa de verificación.

Una vez que el código pasa la etapa de verificación, pueden comenzar las pruebas de integración y carga y, en última instancia, ese código puede pasar a producción. El componente clave de todo esto es que, independientemente de cuándo se extraiga el código del repositorio, siempre hay un paso de verificación antes de que ocurra cualquier otra cosa.

¿Y ahora qué? Vea Keyfactor Signum en acción

¿Está preparado para obtener más información sobre la integración de la firma segura de código en su proceso CI/CD y sobre cómo Keyfactor Signum puede ayudarle? Haga clic aquí para ver el seminario web completoque incluye una demostración en directo de Keyfactor Signum .